從稀疏表徵出發、召回方向的前沿探索

作者 | lhy12138
導讀
目前百度大搜主要有基於稀疏表徵的倒排檢索和稠密表徵的語義檢索雙路召回。隨著深度學習技術的發展,語義檢索的召回效果得到了顯著提高;與此同時,因為稀疏表徵有著精確匹配、索引效率和可解釋的優勢,最近學術界重新將目光放回稀疏表徵架構,研究稀疏表徵如何從大規模語言模型中獲益。本文將介紹學術界在倒排召回和語義召回的最新進展。
全文6386字,預計閱讀時間16分鐘。
一、搜尋中的召回
召回一般會從海量候選庫中選擇與query相關的文件送給上層排序模組,因為效率原因,往往無法執行query-url細粒度互動。目前召回主要有基於term的傳統倒排召回和基於向量表徵的語義召回。本文將介紹兩個方向在學術屆的一些最新進展。
二、如何看待語義召回和傳統倒排召回的關係?
隨著預訓練模型和樣本技術的更新,語義召回表現了強大的檢索效果,而傳統倒排技術因為成本、效率問題並沒有獲得效果的顯著提高。倒排召回基於term歸併,因此具有較強的可解釋性;而語義召回在向量空間搜尋與query語義最相似的文件,對語義的表達能力更強。應該如何看待兩者在召回鏈路上的關係呢?
Are We There Yet? A Decision Framework for Replacing Term Based Retrieval with Dense Retrieval Systems
這篇論文提出了一套框架,包括一組指標(不僅從效果出發),徹底比較兩個檢索系統。
主要標準
(效果/成本) 以及
次要標準
(robustness):
次要標準:子問題集合的效果(如長度在某個範圍的q、頻率在某個範圍的q、lexical匹配的能力、模型的泛化能力、決策顯著差異比例、甚至是系統可維護性、未來迭代空間、成本)
最終論文在一個檢索評估集上給出了相應的結論:即在向量化成本可接受的前提下,語義召回系統可以替代倒排召回系統。而在實際工業界對應的問題往往更為複雜,但論文提出的分析框架正是我們需要重新審視和思考的內容。
BEIR: A heterogenous benchmark for zero-shot evaluation of information retrieval models
這篇論文對學術界現有檢索相關資料集進行彙總,從各個領域彙總了不同下游任務中對檢索能力的需求,以全面地評估現有召回模型的效果。


從表格可以看到一些有意思的結論:在zero-shot的場景下,BM25是一個非常健壯的檢索系統。基於term細粒度語義互動的兩種方法(colbert/BM25+CE)仍然表現了一致的優越性。但稀疏表徵和稠密表徵的雙塔模型似乎表現不佳。同時觀察到doc2query是一個穩定的提升,因為它只會擴充套件詞,更像是對BM25的合理性改動,檢索方式和打分邏輯與BM25一致。
同時作者也提到,資料集存在詞彙偏差問題:標註候選來自於BM25檢索,因此可能對不依賴詞彙匹配的模型存在好結果的漏標註問題,對新召回結果標註後:

其中語義召回模型(如ANCE)指標顯著提高。
通過以上兩篇論文發現,不管是倒排召回還是語義召回在不同場景下有著自己獨立的優勢,因此我們在後文會針對兩個方向分別介紹相關進展。
三、倒排召回新發展
如果想通過現有技術促進倒排發展,我們有哪些可以嘗試的方案?
最新進展:
可學習的稀疏表徵(將query分析、doc理解以及檢索匹配融合成端到端任務,但以稀疏向量分別表示query和doc),仍然依託倒排的檢索方式,因此保留倒排的優勢(可解釋、term匹配能力強),同時進一步提升語義泛化能力。
SPLADE: Sparse lexical and expansion model for first stage ranking
稀疏表徵:用整個詞表重新描述doc,同時實現對term weight和term expansion。

可以看到,最終每個文件被描述為term和score的形式,同時會刪除文件已有冗餘詞和增加相應擴充套件詞。
稀疏表徵和預訓練任務中mask language model任務很像,將每個token經過transformer表示後最終還原到詞表資訊中,因此稀疏表徵複用了mlm任務的head。

通過彙總(pooling)原始query/doc中的所有稀疏表示,將query/doc表示成一個詞表維度的稀疏向量,並且引入flops正則來控制擴充套件term的數量。同時在稀疏表徵的基礎上通過點積的形式計算q-u匹配得分。


最終loss表示為常見的in-batch CE loss和相應flops正則loss。

From Distillation to Hard Negative Sampling: Making Sparse Neural IR Models More Effective
本文是驗證在稠密表徵(對應上文提到的語義召回模型)下提出的各種優化思路是否可以遷移到稀疏表徵中:
包括:蒸餾技術(margin-mse)、難樣本挖掘技術(單塔挖掘hard-neg)和預訓練技術(cocondenser強化cls能力)。

最終通過實驗證明了,多種方法均可遷移到稀疏表徵場景下。
SpaDE: Improving Sparse Representations using a Dual Document Encoder for First-stage Retrieval
出發點:相比統一建模term weight和term expansion,採用雙編碼器獨立建模,同時提出聯合訓練策略來彼此促進。

將整個模型結構拆分三部分:
query端:為了提高query端inference效率問題,只採用了分詞器,即僅有one-hot資訊。
doc端term weight模組:預測term的權重。

doc端term expansion模組:預測top-k擴充套件詞及權重。



最終彙總doc端的整體稀疏表徵:

同時提出了協同訓練策略:
作者觀察到聯合訓練(先獲得最終merge的表徵vd後直接進行訓練)幾乎沒能帶來效果的增益。
因此模型採用協同訓練方式:

熱啟階段
:使用不同的目標函式獨立訓練兩個doc端編碼器。
term weight
:正常的in-batch loss來刻畫query和doc的相關性分數。

term expansion:因為query沒有進行擴充套件,因此如果doc未能擴展出query詞則對應query
詞不會獲得相關性分數,因此期望擴充套件詞儘可能擴充套件到query且儘量不要擴充套件非query詞。
因此增加了單獨的約束項,在標準召回loss的基礎上,強化了query稀疏表徵和doc稀疏表徵在詞命中上的能力,儘可能的要求doc能擴展出query所需的擴充套件詞。

finetune階段
:每個編碼器為對方提供topr%的大損失樣本,強化互補性。(權重模型的大損失樣本可能是詞彙不匹配,而擴充套件模型的大損失樣本可能是當前模型對weight刻畫較差)

LexMAE: Lexicon-Bottlenecked Pretraining for Large-Scale Retrieval.
出發點:認為MLM並不適合做稀疏表示,mlm傾向於為低熵的單詞分配高分,而稀疏表示能希望關注對語義重要的高熵詞。(mlm 的loss更極端一些,只去預測原詞,且更容易mask到低熵詞,而稀疏表徵則希望這個預測的值更soft以體現term重要性+擴充套件詞能力)
因此提出了以下框架,包括三個元件:
-
Encoder(BERT)
-
詞典瓶頸模組
-
弱mask解碼器

Encoder:輸入文字經過一定比例mask後,在MLM-head的輸出即為稀疏表徵。

詞典瓶頸模組:利用doc的稀疏表徵a來獲得句子稠密表徵b。


其中W是原始BERTword embedding表示。
弱mask解碼器:利用稠密表徵b來還原mask資訊,用b替換CLS,通過兩層decoder還原被mask的詞。(希望稀疏表徵承擔CLS相應的資訊能力,在預訓練階段強化稀疏表徵的表達能力。)


四、語義召回新發展
語義召回雖然具有強大的語義能力,但在實踐中仍然存在以下幾類問題(包括但不限於):
1. 單表徵資訊表達能力弱。
2. 無法對精確匹配進行建模。
3. 多表徵如何保證表徵的有效性
單表徵資訊壓縮問題:
Simlm: Pre-training with representation bottleneck for dense passage retrieval.
出發點:
減少預訓練和finetune的不一致,提高樣本效率,希望cls儘可能編碼doc中的資訊。
做法:
1.隨機mask兩遍原始序列,利用生成器還原兩個新的序列。

2.對於enc序列,利用多層transformer編碼,獲得句子級別CLS表示,其中loss約束為當前詞是否發生過替換。

3.對於dec序列,使用2層transformer編碼編碼整個序列及enc序列的句子表示,同樣loss約束為當前詞是否發生過替換。

由於dec序列僅使用2層transformer,因此迫使句子級別cls訊號需要捕捉原始enc序列更多的語義資訊。

精確匹配問題:
Salient Phrase Aware Dense Retrieval: Can a Dense Retriever Imitate a Sparse One?
出發點:dense retrieval在詞語匹配和低頻實體不如稀疏方法,希望能具有稀疏模型的詞彙匹配能力,模擬稀疏retrieval。
思想:利用稀疏teacher蒸餾到dense retrieval(模仿模型),再和正常的dense retrieval concat。

實踐經驗:
-
稀疏teacher蒸餾到模仿模型時,mse和kl loss未能起作用。最終使用稀疏teacher來生成pos和neg,使用常規對比損失來做樣本級蒸餾而非soft-label蒸餾效果更佳。
-
同時嘗試將模仿作為dense的熱啟模型,但效果一般,因此選擇兩個表示聯合訓練,嘗試了求和/concat以及freeze模仿模型只更新dense模型和加權係數的方案。

同時作者驗證了模仿器是否真的學到了詞彙匹配的能力,發現模型器與BM25排序一致性有大幅度提高。

LED: Lexicon-Enlightened Dense Retriever for Large-Scale Retrieval
出發點:缺少term匹配和實體提及的區域性建模
思路:
1. 增加lexical的難負樣本同時更新lexical模型和dense模型。(lexical模型為上文講過的SPLADE模型)
2. 相比KL損失loss,只要求弱監督保證rank一致性。
(思路和上篇論文比較一致,想用一個更好的詞彙模型來把知識整合到dense模型上)


多表徵建模問題:
Improving document representations by generating pseudo query embeddings for dense retrieval
出發點:單表徵需要壓縮文件的全部資訊,可能是次優的
(背景前提:部分評估集doc會根據內容提取多個問題,先天有多query需求)
解決思路:拿到所有token的最終表徵,執行k-means聚類,然後從每個doc中提取多個表徵。
K-means演算法:找到doc全部token的聚類中心(初始化:隨機選擇token表示或對doc切割按等間距選擇)
最終收斂多個step後,所剩的聚類中心認為反應了”潛在的”query查詢。
訓練階段:k-means獲得多個聚類中心,query對doc的多個聚類中心做attention,再點積算分數。



推理階段:先單獨執行一次ann查詢,找到top-k個候選,再利用對應doc的全部表徵計算attention表示及重排序分數。

Multi-View Document Representation Learning for Open-Domain Dense Retrieval
出發點:doc需要多表徵,希望doc中的某一個表徵和query實現對齊以及發現MEBERT中多個表徵會退化到[CLS]。
思路:用多個[viewer]替換掉[cls],用作文件多表徵,同時提出區域性均勻損失+退火策略匹配不同的潛在查詢。


退火策略:
一開始溫度係數較大,softmax後分布均勻,每個viewer向量都能獲得梯度,每個epoch後調整溫度係數以突出真正匹配的檢視。


Learning Diverse Document Representations with Deep Query Interactions for Dense Retrieval
出發點:多文件可能被多個潛在query查詢,直接doc2query能否模擬潛在互動。
思路:使用生成的查詢來學習文件表示,T5 finetune doc2query,並decode10個query。



只對所有正樣本執行doc2query,並將生成的query作為難負樣本的query訊號
Hard neg:
正樣本:(q+ d+)負樣本(q+ d-)防止模型靠query端走捷徑,強調doc資訊
In-batch neg:
正樣本:(q+ d+) 負樣本(其他q+ d-)學習topic訊號
推理:生成多個query來表示doc的多表徵,與doc拼接送入doc端雙塔模型。


除了上文提到的三個問題,語義模型還存在以下問題(包括但不限於),但受限於篇幅未能在這次分享中介紹:
-
語義模型蒸餾技術
-
基於實體的(多)表徵技術
-
語義模型建模多目標場景
五、總結
以上,我們總結了近期學術界在倒排和語義召回兩路的最新進展,可以看到隨著大規模預訓練模型的發展,不管是倒排還是語義召回的能力均可以從中獲益。
——END——
「其他文章」
- 精準水位在流批一體資料倉庫的探索和實踐
- 視訊編輯場景下的文字模版技術方案
- 淺談活動場景下的圖演算法在反作弊應用
- 百度工程師帶你玩轉正則
- Serverless:基於個性化服務畫像的彈性伸縮實踐
- 百度APP iOS端記憶體優化-原理篇
- 從稀疏表徵出發、召回方向的前沿探索
- 效能平臺數據提速之路
- 採編式AIGC視訊生產流程編排實踐
- 百度工程師漫談視訊理解
- PGLBox 超大規模 GPU 端對端圖學習訓練框架正式釋出
- 百度工程師淺談分散式日誌
- 百度工程師帶你瞭解Module Federation
- 巧用Golang泛型,簡化程式碼編寫
- Go語言DDD實戰初級篇
- 百度工程師帶你玩轉正則
- Diffie-Hellman金鑰協商演算法探究
- 貼吧低程式碼高效能規則引擎設計
- 淺談許可權系統在多利熊業務應用
- 分散式系統關鍵路徑延遲分析實踐