Agent 系統發展得這么快那么檢索模型還重要嗎?RAG 本身都已經衍生出 Agentic RAG和 Self-RAG(這些更復雜的變體了。
答案是肯定的,無論 Agent 方法在效率和推理上做了多少改進,底層還是離不開檢索。檢索模型越準,需要的迭代調用就越少,時間和成本都能省下來,所以訓練好的檢索模型依然關鍵。討論 RAG 怎么用的文章鋪天蓋地,但真正比較檢索模型學習方式的內容卻不多見。
檢索系統包含多個組件:檢索嵌入模型、索引算法(HNSW 之類)、向量搜索機制(余弦相似度等)以及重排序模型。這篇文章只聚焦檢索嵌入模型的學習方式。
本文將介紹我實驗過的三種方法:Pairwise cosine embedding loss(成對余弦嵌入損失)、Triplet margin loss(三元組邊距損失)、InfoNCE loss。
成對余弦嵌入損失
![]()
正樣本對示例
![]()
負樣本對示例
輸入是一對文本加一個標簽,標簽標明這對文本是正匹配還是負匹配。和 MNLI 數據集里的蘊含、矛盾關系類似。
![]()
損失函數用的是余弦嵌入損失,x 和 y 分別是文本對的嵌入向量。
三元組邊距損失
![]()
輸入變成三個文本:一個錨文本、一個正匹配、一個負匹配。
![]()
損失函數是 Triplet Margin Loss。公式里 a 代表錨文本嵌入,p 代表正樣本嵌入,n 代表負樣本嵌入。
InfoNCE 損失
![]()
輸入包括一個查詢、一個正匹配、一組負樣本列表。
![]()
損失函數采用 InfoNCE,靈感來自 M3-Embedding 論文(arxiv:2402.03216)。公式中 p* 是正樣本嵌入,P' 是負樣本嵌入列表,q 是查詢嵌入,s(.) 表示相似度函數,比如余弦相似度。
比較
![]()
哪種方法最好?要看具體場景、數據量和算力。從我的實驗來看,InfoNCE 覆蓋面最廣。但只要實驗做得夠充分、訓練數據比例調得夠細,余弦嵌入損失也能達到差不多的效果。三元組邊距損失我沒有深入探索,不過它可能是介于另外兩者之間的一個折中選項。
https://avoid.overfit.cn/post/7958652dd31e4cf5ace899b97e0eac27
作者:Jerald Teo
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.