RAG(五)BGE-M3,最流行的開源text embedding模型

項目地址:https://huggingface.co/BAAI/bge-m3

首先說明下為什么需要text embedding?
Text Embedding 是一種將文本數據映射到高維向量空間的技術,這些向量能夠捕捉文本的語義信息。通過將文本嵌入到向量空間中,我們可以利用向量之間的距離或相似性來衡量文本之間的語義相關性。
在信息檢索領域,Text Embedding 的重要性尤為突出。傳統的基于關鍵詞匹配的檢索方法往往無法準確理解用戶的真實意圖,也無法處理語義相似但用詞不同的查詢。而通過 Text Embedding,我們可以將查詢和文檔都嵌入到同一個語義空間中,從而能夠更準確地檢索出與用戶查詢語義相關的文檔,而不僅僅是包含相同關鍵詞的文檔。
此外,隨著多語言內容的不斷增加,跨語言檢索的需求也日益增長。Text Embedding 能夠將不同語言的文本映射到一個統一的語義空間中,使得跨語言檢索成為可能。
智源發布的BGE-M3在多語言、多功能和多粒度方面展現出前所未有的通用性,能夠支持超過100種語言的語義檢索,并且可以處理從句子到長文檔的各種輸入。下面來詳細看下:
1、方法介紹
M3-Embedding 實現了三方面的多功能性,支持多種語言,并能夠處理不同粒度的輸入數據。此外,它還統一了文本嵌入的常見檢索功能。形式上,給定任意語言 x 中的查詢 q,它能夠從語料庫
中檢索出語言 y 中的文檔
。
數據整理
BGE-M3-Embedding 需要一個大規模且多樣化的多語言數據集。為了構建這樣的數據集,從三個來源進行了全面的數據收集:
- 無監督數據:來源包括 Wikipedia、S2ORC、xP3、mC4、CC-News 和 MTP 等多語言語料庫。從這些語料庫中提取豐富的語義結構,例如標題-正文、標題-摘要、指令-輸出等。為了學習跨語言語義匹配的統一嵌入空間,引入了平行句子數據,來自 NLLB 和 CCMatrix 兩個翻譯數據集。總共整理出1.2 億個文本對,涵蓋 194 種語言和 2655 種跨語言對應關系。
- 微調數據:
英語:整合了 8 個數據集,包括 HotpotQA、TriviaQA、NQ、MS MARCO、COLIEE、PubMedQA、SQuAD 和 SimCSE 的 NLI 數據。
中文:整合了 7 個數據集,包括 DuReader、mMARCO-ZH、
、LawGPT、CMedQAv2、
和 LeCaRDv2。
其他語言:利用 Mr. TyDi 和 MIRACL 的訓練數據。 - 合成數據:為緩解長文檔檢索任務的短缺,生成了額外的多語言微調數據(稱為 MultiLongDoc)。從 Wikipedia、Wudao 和 mC4 數據集中抽取長篇文章,并從中隨機選擇段落。使用 GPT-3.5 根據這些段落生成問題,生成的問題和抽取的文章構成新的文本對。
混合檢索
BGE-M3-Embedding 統一密集檢索、詞匯(稀疏)檢索和多向量檢索的具體實現如下:
- 密集檢索:輸入查詢q通過文本編碼器轉換為隱藏狀態
,使用特殊標記 "[CLS]" 的歸一化隱藏狀態表示查詢:
。同樣,段落p的嵌入為
。查詢和段落之間的相關性得分通過內積計算:
。 - 詞匯檢索:輸出嵌入用于估計每個詞項的重要性,以促進詞匯檢索。對于查詢中的每個詞項t,詞項權重計算為
,其中
是將隱藏狀態映射到浮點數的矩陣。如果詞項t在查詢中出現多次,只保留其最大權重。查詢和段落之間的相關性得分通過查詢和段落中共存詞項的聯合重要性計算:
。 - 多向量檢索:作為密集檢索的擴展,多向量方法利用整個輸出嵌入來表示查詢和段落:
,其中
是可學習的投影矩陣。使用延遲交互計算細粒度的相關性得分:
,其中N和M分別是查詢和段落的長度。
自知識蒸餾

嵌入模型被訓練為將正樣本與負樣本區分開,對于每種檢索方法,期望為查詢的正樣本分配比負樣本更高的得分。訓練過程旨在最小化 InfoNCE 損失,其一般形式為:

其中,
和
分別表示查詢q的正樣本和負樣本;s(?)是
中的任意一個函數。
不同檢索方法的訓練目標可能會相互沖突。為了促進多種檢索功能的優化,在訓練Bge-M3時,提出在自知識蒸餾的基礎上統一訓練過程。具體步驟如下:
1. 集成預測得分:將不同檢索方法的預測得分整合為更準確的相關性得分:

2. 計算損失函數:計算
的加權和作為沒有自知識蒸餾的損失:

3. 修改損失函數:使用集成得分
作為教師,修改每個檢索方法的損失函數:

其中,p(?)是 softmax 激活函數;
是
中的任意一個成員。
4. 最終損失函數:
- 進一步整合并歸一化修改后的損失函數:

- 最終損失函數為:

訓練過程分為兩個階段:
- 預訓練階段:使用大規模無監督數據對文本編碼器(XLM-RoBERTa 模型,通過 RetroMAE 方法調整)進行預訓練,僅以對比學習的基本形式訓練密集檢索。
- 微調階段:應用自知識蒸餾,對嵌入模型進行微調,以建立三種檢索功能。在此階段使用標注數據和合成數據,并引入硬負樣本。
高效批處理
嵌入模型需要從多樣化和大規模的多語言數據中學習,以充分捕捉不同語言的通用語義。為了確保文本嵌入的區分性,模型需要盡可能保持大批量(引入大量批內負樣本)。然而,由于 GPU 內存和計算能力的限制,傳統的做法是將輸入數據截斷為短序列,以實現高訓練吞吐量和大批量。這種方法雖然有效,但對于BGE-M3-Embedding 來說并不適用,因為它需要同時處理短序列和長序列數據,以有效支持不同粒度的輸入。
為了克服上述挑戰,本文提出了一種高效的批處理策略,具體包括以下幾個關鍵步驟:
- 按序列長度分組:訓練數據按序列長度分組,生成小批量時從同一組中采樣,顯著減少序列填充,提高了 GPU 的利用效率。
- 固定隨機種子:在為不同 GPU 采樣訓練數據時,固定隨機種子,確保負載平衡并減少每個訓練步驟的等待時間。
- 子批量處理:在處理長序列訓練數據時,將小批量進一步劃分為子批量,然后使用梯度檢查點(gradient checkpointing)技術,迭代編碼每個子批量,顯著減少內存占用的同時顯著增加了批量大小。
- 跨 GPU 廣播:在分布式訓練環境中,將來自不同 GPU 的嵌入結果進行廣播,使每個 GPU 都可以獲取所有嵌入結果。通過廣播,每個 GPU 上的模型可以訪問更多的負樣本,從而顯著擴大了批內負樣本的規模,有助于提高嵌入的區分性,進一步提升模型的性能。

2、實驗結果
多語言檢索
使用 MIRACL,包含 18 種語言的臨時檢索任務,每個任務由同一語言的查詢和段落組成。
- Dense 方法:M3-Embedding 在密集檢索上表現出色,平均性能優于所有基線方法。例如,在英語上與 E5mistral-7b 相比,M3-Embedding 在其他語言上表現更好。
- Sparse 方法:M3-Embedding 的稀疏檢索功能優于傳統的 BM25 方法。
- Multi-vec 方法:多向量檢索進一步提升了性能,通過細粒度的交互計算相關性得分。
- 混合方法:Dense+Sparse 和 All 方法通過結合不同方法的優勢,進一步提升了檢索性能,其中 All 方法表現最佳。

跨語言檢索
使用 MKQA,包含 25 種非英語語言的查詢,目標是從英文維基百科中檢索包含答案的段落。
M3-Embedding 在跨語言檢索任務中表現出色,尤其是在密集檢索和多向量檢索方面。結合不同方法的混合檢索進一步提升了性能。此外,M3-Embedding 在低資源語言上的表現相對穩定。

多語言長文檔檢索
BGE-M3可以支持長達8192的輸入文檔,同時長文檔檢索的效果要顯著優于此前的基線模型。非常有意思的是,從實驗結果可以觀察到,稀疏檢索(Sparse)的效果要顯著高于稠密檢索(Dense),這說明關鍵詞信息對于長文檔檢索極為重要。

消融實驗
自知識蒸餾和多階段訓練對 M3-Embedding 的性能提升起到了關鍵作用。通過這些技術,M3-Embedding 在多語言檢索、跨語言檢索和長文檔檢索任務中均表現出色。

3、總結
BGE-M3-Embedding模型的目的是構建一個多功能、多語言、多粒度的文本嵌入模型,能夠高效地支持各種信息檢索和自然語言處理任務。它的意義在于:
- 多功能性:統一了多種檢索功能,適應不同的檢索需求。
- 多語言支持:支持超過100種語言,適用于全球化的信息檢索和多語言對話系統。
- 多粒度處理:能夠處理從短句子到長文檔的不同粒度的輸入,適應各種文本長度的需求。
- 實際應用:在搜索引擎、問答系統、推薦系統、文檔分析和多語言對話系統等領域具有廣泛的應用前景。
從評測結果來看,BGE-M3全面應用于檢索任務,包括訓練數據也全是檢索的相關任務,非常適合檢索增強任務。
在實際應用中,BGE-M3也是text-embedding模型中下載量最高的模型,是目前最適合檢索增強任務的開源文本嵌入模型之一。




























