搜尋意圖: 如果你在找「句子嵌入 是什麼」或「句子嵌入 和相近概念差在哪」,先看這頁的短定義、完整說明與延伸比較。
TL;DR: 將整個句子編碼為固定維度的向量,使語義相似的句子在向量空間中距離較近。
實用情境: 適合用在閱讀 AI 文章、產品文件或和同事討論時,先用一頁快速對齊概念。
下一步: 先讀完定義,再往下看延伸比較與對應工具,把概念轉成實際應用。
將整個句子編碼為固定維度的向量,使語義相似的句子在向量空間中距離較近。
句子嵌入(Sentence Embedding)是從單詞到文件級表示的承接環節,在現代 NLP 系統中扮演關鍵角色。不同於詞向量的相對成熟,句子表示仍是活躍的研究領域,因為它涉及更複雜的組合語義問題。
核心挑戰與問題設置
句子嵌入面臨一個根本挑戰:如何將任意長度的詞序列映射到固定維度的向量,同時保留語義信息?這涉及「組合語義」(Compositional Semantics)問題:句子的意思不只是詞義的簡單相加,還取決於詞序、句法結構、語境等多個因素。例如:
- 「貓追老鼠」與「老鼠追貓」詞彙相同但語義完全不同。
- 「非常好」不能簡單理解為「非常」+ 「好」的向量和。
- 轉喻、比喻等修辭手法要求深層理解。
簡單聚合方法
最直白的方法是對句子中所有詞向量進行簡單聚合:
平均池化(Mean Pooling)
句向量 = (1/n) Σ 詞向量_i
優點:簡單快速,對某些任務(如文本分類)意外有效。缺點:完全忽視詞序,「貓追老鼠」和「老鼠追貓」的向量相同。儘管這個缺點嚴重,平均池化因其簡潔性在工業界仍廣泛使用。
TF-IDF 加權平均
句向量 = Σ (TF-IDF_i × 詞向量_i) / Σ TF-IDF_i
賦予罕見詞更高權重,常見詞(如「的」、「是」)權重低。效果略優於簡單平均,但仍然無視詞序。
遞迴神經網路方法
樹結構 LSTM(Tree-LSTM)
Socher 等提出用語法樹驅動 LSTM,節點表示由其子節點的 LSTM 隱狀態組成。例如在句子「非常好」中,構建樹:
好
/ \
非常 [詞本身]
樹 LSTM 首先處理葉節點(詞),再遞迴向上,最終根節點的隱狀態就是句向量。這個方法優美地將句法結構與神經網路相結合,性能優於簡單序列模型。缺點是依賴準確的句法樹,且計算略複雜。
序列模型:BiLSTM 與 CNN
雙向 LSTM(BiLSTM)
正向 LSTM 從左到右掃描,反向 LSTM 從右到左掃描,兩者的最後隱狀態拼接或平均作為句向量。BiLSTM 能捕捉詞序,對某些任務有帶改進。
卷積神經網路(CNN)
Kim 提出用 CNN 進行句子分類:對詞向量序列應用多個寬度的滑動窗口(如寬度 3、4、5),每個窗口位置產生一個特徵,然後對所有位置的特徵進行最大池化,得到固定維度的句表示。CNN 的優勢是計算快、能捕捉 n-gram 特徵,但無法直接捕捉遠距離依賴。
注意機制與自注意
注意池化(Attention Pooling)
不同詞對句義的貢獻程度不同。動詞、形容詞、重要名詞通常更重要,虛詞(「的」、「和」)貢獻小。注意機制學習每個詞的權重:
句向量 = Σ (α_i × 詞向量_i)
其中 α_i 是詞 i 的注意權重,由詞本身或詞與某個查詢向量的相似度決定。
自注意(Self-Attention)與 Transformer
Transformer 引入「自注意」,讓每個詞位置學習與序列中其他位置的相關性。多層自注意堆疊,使高層節點能看到全局信息。Transformer 的最後一層輸出通過池化(如取 [CLS] token 或對所有位置平均)得到句向量。
大型語言模型預訓練
BERT 與上下文化句向量
BERT 對句子進行編碼,産生每個詞的上下文化向量。常見的做法是取 [CLS] token 的最後層隱狀態作為句向量,或對所有詞向量進行平均。BERT 的句向量質量遠優於之前方法,因為預訓練讓 BERT 學到豐富的語言知識。
句子-BERT(Sentence-BERT / SBERT)
2019 年,Reimers 和 Gurevych 提出 Sentence-BERT,直接針對句相似度任務微調 BERT。關鍵創新是:
- 用孿生神經網路(Siamese Network)架構。
- 對每個句子用 BERT 編碼。
- 用池化層(通常取 [CLS])得到句向量。
- 用對比損失(如 CosineSimilarityLoss)訓練,使相似句子距離近、不同句子距離遠。
Sentence-BERT 的性能比純 BERT 的句向量高 3–5%,成為目前最廣泛使用的句嵌入方法。
句向量的性質與應用
語義相似度與轉移性
高質量的句向量應滿足:
- 相似句子(如同義表達)向量距離近。
- 不同句子向量距離遠。
- 語義轉移性:向量空間保留邏輯推理(如 A 蘊含 B,vec(A) 應更接近 vec(B))。
Sentence-BERT 在公開基準(STS Benchmark,語義文本相似度)上達到 0.86–0.89 的相關係數,接近人工評估的上界(0.90)。
應用場景
- 語義搜尋:給定查詢句子,在文件庫中找最相似的句子(快速、準確)。
- 聚類:對句子進行向量化後用 K-means 等算法聚類,發現語義相近的句子組。
- 重複檢測:發現重複或高度相似的句子(如去重、檢測抄襲)。
- 推薦系統:基於用戶查詢或歷史句子,推薦相似內容。
- 信息檢索:構建密集檢索(Dense Retrieval)系統,相比稀疏向量(TF-IDF)更精準。
- 檢測相似問題:在FAQ系統中,判斷用戶新問題是否與既有問題相似。
挑戰與限制
句長變化影響
現有方法對各長度句子的向量規範化不一致:長句子往往對句向量主導,短句子被邊際化。
跨語言句嵌入
不同語言句子的向量空間往往不對齐,需要跨語言預訓練(如多語言 BERT)來同步不同語言的語義空間。
低資源語言與域特異
Sentence-BERT 預訓練數據主要是英文通用文本,遷移到低資源語言或專業域時性能下降。解決方案包括輕量微調或在域內數據上重新訓練。
可解釋性缺失
Transformer 的句向量是高度非線性的組合,難以直觀解釋每個維度代表什麼語義。
常見問題
為什麼簡單的詞向量平均不能捕捉詞序?如何改進?
簡單平均對詞順序不敏感:"貓追老鼠"和"老鼠追貓"包含相同詞彙,平均後向量相同,但語義完全相反。改進方法:第一,使用序列模型(LSTM、CNN)保存詞順序信息。第二,利用句法樹(Tree-LSTM),讓語言結構引導聚合。第三,採用自注意機制(Transformer),讓不同位置相互交互,學習更複雜的詞序關係。第四,使用預訓練的 Transformer 模型(BERT、Sentence-BERT),它們在大規模語料上學到了豐富的詞序與語境知識。
Sentence-BERT 和 BERT 的句向量有什麼不同?
BERT 本身不是為句相似度任務優化的。若直接取 BERT 的 [CLS] token 或平均詞向量作為句向量,性能往往不佳(相似度任務相關性 0.5–0.6)。Sentence-BERT 的創新是:用孿生網路和對比損失(Contrastive Loss)在相似句子對上微調 BERT,直接優化句相似度目標。微調後的句向量在語義相似度任務上相關性達 0.87–0.89,遠優於原始 BERT 的 0.50–0.60。簡單說,BERT 是通用的編碼器,Sentence-BERT 是為句相似度任務特化的編碼器。
句向量能用於什麼實際應用?
句向量的應用包括:第一,語義搜尋:用戶輸入查詢句子,系統用向量找最相似的句子(比關鍵詞搜尋更精準,對同義表達也敏感)。第二,推薦:基於用戶的歷史句子,推薦相似的文章或回答。第三,重複檢測:發現重複或高相似度的帖子、問題(用於 QA 去重、抄襲檢測)。第四,聚類:對句子集合進行無監督聚類,發現話題簇。第五,檢索增強生成(RAG):大型語言模型回答問題時,先用句向量檢索相關背景知識,再生成答案。第六,信息檢索:構建密集檢索系統(Dense Retrieval),遠快於傳統稀疏檢索(BM25)。