深入解析Transformers、BERT與SBERT:從原理到應用 原創 精華
01、概述
在人工智能領域,尤其是自然語言處理(NLP)中,Transformer、BERT和SBERT已經成為技術發展的基石。然而,很多人對它們的工作原理、優缺點以及實際應用還不夠了解。本篇文章將深入解析這些技術,從基礎概念到最新進展,幫助你掌握背后的關鍵邏輯。
02、Transformers:NLP領域的“革命性武器”
1) 什么是Transformer?

Transformer模型誕生于2017年,最初是為了解決機器翻譯問題。如今,它已經成為幾乎所有大規模語言模型(LLM)的核心。
Transformer模型的架構由兩個主要模塊組成:編碼器(Encoder)和解碼器(Decoder)。
- 編碼器:將輸入轉換為矩陣表示,用于捕捉上下文信息。
- 解碼器:基于編碼器輸出生成最終的結果,如翻譯句子或預測下一步文本。
經典的Transformer模型每個模塊由6層堆疊而成,而這些層都依賴一個核心機制:多頭自注意力機制(Multi-Headed Self-Attention)。
2) Transformer的優勢:捕捉全局上下文
與早期的RNN或LSTM不同,Transformer模型可以捕捉整個輸入序列的全局上下文,而不僅僅是單個詞的局部信息。這種特性讓它在處理長文本時表現出色。
3) Transformer的局限性
盡管Transformer在許多任務中表現出色,但在某些場景下仍存在不足。例如:
- 僅考慮歷史信息:Transformer的注意力層通常只關注“過去的上下文”,對于某些需要前后雙向理解的任務(如問答)表現會受限。
舉個例子:
“John帶著Milo參加了聚會。Milo在聚會上玩得很開心。他是一只白色的貓。”
如果我們問:“Milo是否和John在聚會上喝酒了?”
僅依賴前兩句,模型可能回答“玩得開心可能意味著喝酒了”;但如果能結合第三句——“Milo是一只貓”,答案顯然是“不可能”。
這時,我們需要一個能夠同時理解前后文的模型,這便是BERT。
03、BERT:雙向編碼的“語義大師”
1) 什么是BERT?

BERT(Bidirectional Encoder Representations from Transformers)是基于Transformer編碼器開發的模型,但與Transformer不同的是,BERT采用雙向自注意力機制,能夠同時理解句子前后文的信息。
BERT的設計使其特別適合處理像問答、文本摘要等任務。它通過引入特殊的標記(如[CLS]和[SEP]),讓模型能夠更好地區分問題和答案,進而進行上下文推理。

2) BERT的訓練方法
BERT的強大來源于兩種預訓練任務:
- 掩碼語言模型(Masked Language Model, MLM):隨機遮蓋輸入文本的15%的詞匯,模型需要預測被遮蓋的詞是什么。
- 下一句預測(Next Sentence Prediction, NSP):判斷兩句輸入文本是否是相鄰句。


3) BERT的局限性
盡管BERT在語義理解上表現強大,但它在處理大規模相似性搜索任務時表現欠佳。例如,當需要在10,000條句子中找到與某個句子最相似的一條時,BERT需要對每個句子對進行兩兩比較,計算量巨大。這種二次復雜度使其難以在大規模語義搜索中應用。
于是,SBERT應運而生。
04、SBERT:專注于語義相似度的革新模型
1) 什么是SBERT?

SBERT(Sentence-BERT)通過在BERT的基礎上引入Siamese網絡(孿生網絡),解決了大規模相似性搜索的計算瓶頸。
與BERT不同,SBERT不需要每次都對句子對進行比較,而是先對每個句子生成獨立的固定長度向量(如1×768維度),然后再通過簡單的數學運算(如余弦相似度)來比較句子間的相似性。
2) SBERT的架構與特點
SBERT的架構引入了池化層(Pooling Layer),將BERT的輸出從高維度(如512×768)簡化為低維度(如1×768),大幅降低了計算復雜度。此外,它還支持三種訓練方式:
- 自然語言推理(NLI):基于分類任務(如“推斷”“中性”“矛盾”)進行訓練。
- 句子相似度(Sentence Similarity):直接優化余弦相似度,適合語義相似任務。
- 三元組損失(Triplet Loss):通過比較錨點句、正樣本句和負樣本句的距離,優化語義表示。

3) SBERT的實際應用
SBERT已經成為構建檢索增強生成(RAG)流水線的核心工具。通過開源庫sentence-transformers,你可以輕松生成句子嵌入,并進行語義搜索。以下是簡單的代碼示例:
# 安裝庫
!pip install sentence-transformers
# 加載模型
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('bert-base-nli-mean-tokens')
# 生成句子嵌入
sentences = [
"今天的天氣真好。",
"外面陽光明媚!",
"他開車去了體育場。",
]
embeddings = model.encode(sentences)
# 計算相似度
similarities = model.similarity(embeddings, embeddings)
print(similarities)05、總結:從Transformer到SBERT,探索NLP的未來
從Transformer的全局上下文捕捉,到BERT的雙向語義理解,再到SBERT的大規模相似性搜索優化,這些模型展現了NLP領域的不斷突破。
本文轉載自公眾號Halo咯咯 作者:基咯咯
原文鏈接:??https://mp.weixin.qq.com/s/N1AsVsONulrwicwmWJf9eA??

















