騰訊屠榜MTEB,嵌入模型告別BERT,擁抱LLM
- 訓練一個好的向量模型的重點在于最大限度地利用了更多、更高質量的負樣本,來訓練模型。
- 騰訊提出的Conan-embedding,采用了動態硬負樣本挖掘方法,以便在整個訓練過程中向模型展示更多具有挑戰性的負樣本。
- 最近發布Conan-embedding-V2版本,在MTEB榜單上已經超越了BGE等一眾傳統豪強。
- 支持中、英雙語
一、Conan-embedding-V2
- V1版本主要基于通用預訓練的雙向Bert模型進行Embedding任務的訓練。
- V2版本從頭訓練了原創詞表和模型結構的大模型基座——Conan-1.4B,在此基礎上進行了中、英、多語言的Embedding任務的訓練。
- 上下文長度從v1版本的512,提升到了32k。
訓練的4個階段
- 第1和第2階段,大語言模型(LLM)訓練階段
加入嵌入數據,以更好地使LLM與嵌入任務對齊
設計了Conan-1.4B,包含8層Attention Layers,Hidden Size為3584,最長上下文32k。
參數量是1.4B,能夠在較少的參數下提供更大的Embedding維度。
從基礎的字母、符號上,在約40萬條多語言語料上訓練了Conan的BBPE分詞器,目標詞表大小15萬,完成了詞表訓練。
- 第3階段,弱監督訓練階段
使用與LLM監督微調(SFT)相同的配對數據,并應用軟掩碼來彌合LLM與嵌入模型之間的差距。
使用gte-Qwen2-7B-instruct模型進行評分,并丟棄得分低于0.4的數據
訓練中采用了InfoNCE損失函數,并結合In-Batch Negative采樣
- 第4階段,監督訓練階段
引入了跨語言檢索數據集和動態硬負例挖掘方法,以提高數據的多樣性和價值
針對不同的下游任務進行任務特定的微調。
將任務分為四類:檢索、跨語言檢索、分類和語義文本相似度(STS)。
前三類任務:包括一個查詢、一個正例文本和一些負例文本,使用經典的InfoNCE損失函數。
STS任務涉及區分兩個文本之間的相似度,采用CoSENT損失來優化。
為了更好的對比Conan-embedding提升了哪些內容,下面也簡單介紹一下Conan-embeddingV1,尤其注意一下難例數據挖掘的方法,v2版本也是用同樣的方法
二、Conan-embeddingV1
總共分為:預訓練和微調兩個階段
2.1 預訓練階段
- 篩選數據:bge-large-zh-v1.5模型評分,丟棄所有得分低于 0.4 的數據。
- 使用帶批內負樣本的 InfoNCE 損失進行訓練,它利用小批量內的其他樣本作為負樣本優化模型。
- 即,在每個小批量中,除了目標樣本的正樣本對之外的所有樣本都被視為負樣本。
- 通過最大化正樣本對的相似性并最小化負樣本對的相似性,批內負樣本 InfoNCE 損失可以有效地提高模型的判別能力和表示學習性能。
- 此方法通過充分利用小批量內的樣本,提高了訓練效率,減少了生成額外負樣本的需求。
2.2 監督微調
監督微調時對不同的下游任務執行特定的微調任務。將任務分為兩類:
- 檢索任務:
包括查詢、正文本和負文本,經典的損失函數是 InfoNCE 損失。
- STS 任務:
涉及區分兩個文本之間的相似性,經典的損失函數是交叉熵損失。
CoSENT 損失略優于交叉熵損失,因此采用 CoSENT 損失來優化 STS 任務。
三、難例數據挖掘
一種動態難樣本挖掘方法介紹:
- 對于每個數據點,記錄當前相對于查詢的難樣本的平均分數。
- 每 100 次迭代,如果分數乘以 1.15 小于初始分數,并且分數的絕對值小于 0.8,將認為負樣本不再困難,并進行新一輪的難樣本挖掘。
- 在每次動態困難負例挖掘過程中,如果需要替換困難負例,使用 (i-1)\times n + 10到i\times n +10 的案例作為負例,其中 i表示第 i次替換,而 n表示每次使用的困難負例數量。
- 上圖展示了動態困難負例挖掘與標準困難負例挖掘中正例和負例的得分-步數曲線
- 隨著步驟的增加,標準困難負例挖掘中負例的得分停止下降并開始振蕩,表明模型已經完成了從該批負例中學習。
- 相反,動態困難負例挖掘一旦檢測到負例不再對模型構成挑戰,就會替換這些困難負例。
??https://arxiv.org/pdf/2408.15710??
本文轉載自??CourseAI??,作者:CourseAI
