閒魚深度語義相關性計算:融合檢索和生成任務
引言
深度語義匹配在閒魚搜尋相關性計算中扮演重要角色,相關工作在文章[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,如有侵權,請聯絡管理員刪除。
相關文章
- 【任務】資訊檢索.MOOC學習
- NLP需要回歸語言本質,走向語義和計算的融合
- 計算兩列的相關性
- PAIRDISTILL: 用於密集檢索的成對相關性蒸餾方法AI
- 商品賣不動?閒魚Tellus任務系統來幫你
- 25 個值得關注的檢索增強生成 (RAG) 模型和框架模型框架
- RDSforMySQL全文檢索相關問題的處理ORMMySql
- spring定時任務相關Spring
- 深度揭秘阿里雲函式計算非同步任務能力阿里函式非同步
- 語義搜尋相關配置
- OpenSearch向量檢索和大模型方案深度解讀大模型
- 任務運維和資料指標相關知多少?運維指標
- 全面瞭解Vue3的 ref 和相關函式和計算屬性Vue函式
- 初學者 | NLP相關任務簡介
- 目標、計劃、任務、日誌、績效的定義和相互關係
- 以WBS模板和PBS自動生成WBS計劃任務
- FreeRTOS-01-任務相關函式函式
- 閒魚APP關聯同款寶貝怎麼設定?閒魚關聯同款寶貝的設定方法APP
- 閒聊雲服務計算技術–OpenStack
- 閒聊雲服務計算技術--OpenStack
- 安全性配置-定義任務流節點
- 深度學習在計算機視覺各項任務中的應用深度學習計算機視覺
- 周博磊:深度生成模型中的隱藏語義模型
- 偏相關係數計算
- 關鍵詞感知檢索
- FreeRTOS-03-其它任務相關函式函式
- 任務2-web 相關知識瞭解Web
- gradle自定義任務和外掛Gradle
- AI與雲端計算的深度融合會帶來什麼?AI
- win10任務檢視怎麼關閉歷史記錄 關閉任務檢視的具體方法Win10
- linux後臺執行和關閉、檢視後臺任務Linux
- 【java規則引擎】基本語法和相關屬性介紹Java
- 語義分析發現:靈玖大資料檢索與分詞大資料分詞
- MySQL 5.5建立和檢視資料庫計劃任務(event)MySql資料庫
- 目標檢測和影像分類及其相關計算機視覺的影像分佈計算機視覺
- 基於資訊檢索和深度學習結合的單元測試用例斷言自動生成深度學習
- windows計劃任務的“等待空閒時間”已棄用Windows
- 閒聊oracle SQL*Net相關的空閒等待事件OracleSQL事件