遲來!解讀Qwen開源的Embedding模型中的細節(jié)!附實測結果!
上周五,Qwen團隊又開源了Embedding模型,真是人民需要什么,它開源什么呀!
現在好了,文本、多模態(tài)、embedding都齊了,別人沒得玩了!
上周朋友就問,作為Qwen課代表的我,咋沒分享Qwen3-Embedding,哈哈哈哈!
這不就來了嘛,主要是前兩天我還在測試。
Embedding模型的測試,并不像LLM那樣直觀,給了問題之后直接看答案就可以分辨出好壞,Embedding模型還是要測試在某個數據集下整體得召回率。
雖然這次Qwen開源了3個尺寸的模型,0.6B、4B和8B,但對于我個人來說,0.6B尺寸還可以,4B、8B為向量還是有點重的,工業(yè)使用上對召回速度要求還是比較高的。
PS:不知道大家真實使用時是不是,開源的Embedding,雖然很多榜單效果很猛,但是還在用之前的BGE-M3模型,哈哈哈。
所以我這兩天也是在自己內部數據集上實測了一把,確實有提高,但沒有那么多,top30的召回率高了1%左右,但是top5沒什么明顯提高。
但是Embedding模型需要調一下Instruct,這個很重要,敲重點!
因為這個內部數據沒法給大家看,我又找了個比較新的領域數據,測了一下,主要是bge-m3和Qwen3-Embedding0.6B,尺寸差不多。
模型結構
Qwen3 Embedding系列模型有兩種,Embedding模型和Reranking模型,模型尺寸均涉及0.6B、4B、8B三種,是由Qwen3基模(不確定是Base還是Instruct)初始化而來。
Embedding模型接受單文本輸入,將最后一層的[EOS] Token 的隱藏狀態(tài)向量,作為文本的語義向量,支持MRL動態(tài)維度,但最小為32維;也支持根據不同任務定制輸入指令。 Reranking模型接受文本對輸入,經過chat template拼接后,輸入到模型中,預測下一個Token是“是”或“否”的概率,來判斷兩個文本的相關性。
模型訓練
Embedding模型由3階段組成,
- 第一階段,利用150M 個弱監(jiān)督合成Pair對數據,對比學習預訓練;
- 第二階段,從150M 個弱監(jiān)督數據中篩選12M 個高質量Pair對數據,再加上7M榜單數據,進行二次訓練;
- 第三階段,模型融合,將第二階段的多個checkpoint進行參數融合(之前比賽的策略,現在已經成為了常用手段)。
訓練方法就是InfoNCE,就是硬負例和batch內負例,模型訓練用的LoRA 微調,就不多說了。
這里想說的一點是,Qwen-Embedding模型與常規(guī)的方法不一樣,它的數據全部都是LLM合成數據。
這里沒想通的是為啥不利用開源數據,一般之前的做法,都是開源數據+合成數據。難道是開源數據的質量不行,不好過濾?由于沒有相關的對比實驗,所有這個部分暫不清楚。
不過合成數據這個部分,Qwen應該是下來大功夫的,我之前做,就是寫幾個不同的模板,直接利用開源文本數據合成一些query,構成pair對。
Qwen3-Embedding的數據合成,有個角色庫,每次從角色庫中利用模型找到最相關的5個角色,再利用不同角色生成數據,還融合了Query類型(例如關鍵詞、事實、摘要、判斷)、長度、難度、語言等信息。有點意思的,相比我10個固定的prompt,這種數據合成的方法,多樣性、質量要好的多。
模板選擇
問題生成
第二階段高質量Pair對,是通過余弦相似度過濾過的,保留相似度大于0.7的數據。
Embedding模型效果如下,Qwen3-Embedding-0.6B多語言僅次于Gemini-Embedding,在單獨的英文、中文、Code上,跟開源Top gte-Qwen2-7B-instruct也有一拼;Qwen3-Embedding-4B、8B 模型優(yōu)于其他模型。
Reranker就不說了,直接看測試結構吧,不過訓練只有2、3兩個階段。
領域數據評測
因為內部數據沒法公開,為了快速實驗,隨便找了一個中文農林牧漁領域數據集,做個簡單測試,涵蓋農業(yè)、林業(yè)、畜牧業(yè)、漁業(yè),數據量 900K+。
HF:Mxode/Chinese-QA-Agriculture_Forestry_Animal_Husbandry_Fishery
將回答作為文檔,去重后800K+,random了1k個問題,沒測全。
只是簡單測試,不同領域數據不同,使用時還需自己實測!
寫在最后
2023年的時候,就一直在優(yōu)化embedding模型,因為你會發(fā)現rag落地過程當中,有很多時候,不是LLM不行,是根本沒有檢索到合適的文檔、或沒檢索全所有的文檔內容。
當然不止RAG,需要進行過濾的模塊,都會有Embedding模型,比如Agent里,100個工具,全放到提示詞中也不是不可以,但考慮成本和模型本身能力,是不是通過檢索過濾掉一些無用的會更好呢?
Embedding模型現在算法上已經沒有什么好的優(yōu)化手段了,基本上全靠基模,和構造的數據了。
本文轉載自???NLP工作站???,作者:NLP工作站
