閒魚深度語義相關性計算:融合檢索和生成任務

danny_2018發表於2023-03-21

引言

深度語義匹配在閒魚搜尋相關性計算中扮演重要角色,相關工作在文章[1]《閒魚搜尋相關性——體驗與效率平衡的背後》中有簡單的介紹。如題,本文介紹前段時間在深度匹配任務上的另一種嘗試,透過檢索和生成任務聯合訓練的方法提升相關性匹配的效果。

融合生成任務提示匹配主任務的思路並不新穎,而在BERT流行的今天,本文則參考[2]《魚與熊掌兼得:融合檢索和生成的SimBERT模型》,稍加改動,使用BERT為Backbone來重新實現類似的思路,模型暫且仍叫SimBert。

現狀

閒魚搜尋的深度語義匹配前期做過多種嘗試,但最終全量策略有兩種:

1. 基於雙塔語義匹配:以BERT為基模型的雙塔模型,使用對比學習loss和難樣本負取樣的模型訓練。預測階段Query和Item的向量離線計算,線上計算二者的餘弦距離作為相關性分。

2. 基於Later-Fusion的深度語義匹配:在雙塔模型的基礎上,增加多層全連線的後融合模組,全連線網路的輸入為雙塔模型的輸出向量,最後使用人工標註資料訓練分類任務(相關或不相關)。此外透過非雙塔結構的互動式BERT匹配模型作為Teacher模型進行模型蒸餾。線上雙塔模型仍為離線向量計算,多層全連線部署實時預測服務,預測Query和商品的相關性分。

圖1 雙塔和後融合模式的深度語義匹配

前者離線和線上分離,線上執行效率高,但模型匹配能力不足,缺少底層細粒度資訊的對齊資訊(Alignment);後者在雙塔基礎上將內積替換成全連線網路,並使用人工標註資料訓練分類模型,雖然一定程度上強化了Query和Item資訊的互動,但更多的還是基於上層抽象語義的特徵融合,對於底層更基礎資訊的特徵對齊仍然不足。

回頭簡單看,非雙塔結構的BERT做語義匹配之所以強,是因為Query和Item在最底層的特徵就開始進行Self-Attention互動,模型既可以考慮Token粒度的特徵匹配,又能學習上層更加抽象的語義特徵。但互動型BERT匹配模型雖然效果好,直接部署線上卻比較困難,解決效率問題的方案很多,如蒸餾、量化等。而本文則考慮在匹配主任務基礎上加入Item Title生成相關Query的輔助任務,透過生成任務中的Attention機制,來增加底層基礎特徵之間的Alignment資訊。在預測階段只使用主任務模組進行預測,實現效果和效率的平衡。

實現細節

方案的實現描述可以從模型、訓練和目標函式以及訓練資料的構造幾個方面進行介紹。

模型

SimBert承接Later-Fusion的模型結構,底部為BERT雙塔模型,分別提取Query和Item Title向量([CLS] Token的輸出),而後透過多層全連線網路融合並進行相關性分類任務。不同的是在此基礎上,SimBert在Item塔部分增加了生成Query的輔助任務,如圖所示。

圖2 融合匹配和生成任務的SimBert模型

生成任務部分的要點有兩個:(1)Item塔的[CLS]需要遮住待生成Query部分的資訊,避免對於匹配任務的特徵穿越;(2)待生成Query的每個Token只能看到當前位置之前的資訊,不能看到“未來”部分的資訊,模擬自迴歸過程。

實現這兩個目標只要對原BERT的Attention Mask矩陣進行變形即可,如對於正樣本對<Query:手機,Title:出華為手機>的生成任務,Item塔的輸入和對應的Attention Mask矩陣如下:

圖3 生成任務特徵輸入和Attention Mask示意圖

簡單來說,Attention Mask矩陣中,白色的方塊位置為0,灰色的位置為1,實現各個token位置的視野範圍。如[CLS]所在的位置看不到生成域中的“手機”,因此提取出的向量仍只是表徵Item部分資訊。這部分更加詳細的介紹可以參考論文UniLM[3],可以算是最早的在BERT結構中引入生成任務的工作之一。

訓練和目標函式

模型的訓練分為兩個階段,預訓練和微調。預訓練階段同樣是採用多工,主任務是雙塔向量匹配任務(剔除Later-Fusion全連線),目標是使用大規模質量相對低的資料先訓練一個比較魯棒的Bert Encoder,Loss函式則是對比學習中常用的InfoNCE。輔助任務為上述的生成任務,二者線性融合後作為預訓練任務的Loss函式:

微調階段,使用人工標註的高質量資料,同時加入Later-Fusion全連線,對應任務變為二分類任務,判別輸入的Query和Item是否相關,融合生成任務後即為微調Loss函式:

其中為超引數,可根據實驗效果調整。

資料

與訓練過程對應,訓練資料的構造同樣包括兩部分。在預訓練階段,對於匹配任務我們以點選日誌為主,有點選行為的Query-Title對為正樣本,取Batch內的隨機樣本為負樣本。同時為了增加任務難度,對於Batch的構造進行了一定的設計:

(1)30%的Batch為隨機樣本;

(2)70%的Batch內為難負樣本集合,如要求一個Batch內的資料為同父類目組成等。

由於訓練資料的輸入形式為正樣本對集合,因此對於生成任務,可以和匹配任務共享資料,使用正樣本對中的Title生成對應Query。

在微調階段,我們使用歷史積累的人工標註資料來進一步提升模型的準確率。資料的形式變為<Query, Title,Label(相關/不相關)>,適用於分類目標任務。對於生成任務,不相關的樣本對則透過Loss Mask的方式不進行反向傳播,做到只對正樣本對進行Title到Query的生成。

離線與AB效果

本次實驗對離線指標和線上指標都進行了對比,同樣的訓練方式,引入生成任務在最終的相關性任務準確率相對提升+3.6%;新模型上線同樣取得不錯的效果,人工Side by Side評測top query的badcase率-3.88%,隨機query的badcase率-6.15%。

思考與最佳化方向

本文介紹了在閒魚場景下實踐使用BERT融合檢索和生成任務的方案,當前實踐過程相對粗糙,還沒做細緻的調參和策略調整,後續可以從以下三個方面做進一步最佳化:

(1)一方面補充更多的資料並進行資料增強嘗試,另一方面透過主動學習的方法,並對人工標註資料做進一步清洗。資料清洗的原因是從模型預測來看,不少FN(False Negtive)樣本,實際上是資料Label有誤,FP同樣有類似情況;

(2)引入知識和關鍵詞資訊,Case分析發現,即使是增加生成輔助任務或全互動的BERT匹配模型,仍還有一些核心屬性匹配能力不足的情況,這部分計劃嘗試增加知識和關鍵詞的監督訊號,來強化核心詞的匹配。

(3)引入更多維度的資訊,一方面當前商品資訊的輸入單純為Title,然而部分Case會有title資訊量不足的情況,在閒魚場景下更是如此,因此後續需要嘗試增加更多域的資訊,如描述關鍵詞、結構化資訊、多模態資訊等;另一方面,Query側也可以透過相似Query的挖掘進行相應關鍵詞的補充。

來自 “ 閒魚技術 ”, 原文作者:滌生;原文連結:https://mp.weixin.qq.com/s/8ngAEYNXSjKtKI64A7yJ8A,如有侵權,請聯絡管理員刪除。

相關文章