天天看點

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

作者:閑魚技術

引言

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

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

現狀

閑魚搜尋的深度語義比對前期做過多種嘗試,但最終全量政策有兩種:

  1. 1. 基于雙塔語義比對:以BERT為基模型的雙塔模型,使用對比學習loss和難樣本負采樣的模型訓練。預測階段Query和Item的向量離線計算,線上計算二者的餘弦距離作為相關性分。
  2. 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的挖掘進行相應關鍵詞的補充。

參考文獻

1、閑魚搜尋相關性——體驗與效率平衡的背後

2、魚與熊掌兼得:融合檢索和生成的SimBERT模型:https://kexue.fm/archives/7427

3、Unified Language Model Pre-training for Natural Language Understanding and Generation:https://arxiv.org/abs/1905.03197

繼續閱讀