卷友們好,我是rumor。
NLP最賺錢的落地莫屬搜索、廣告、推薦三大場景了,今天我們就向錢看,來了解下作為NLP算法工程師,怎樣在互聯網最主要的三個場景里發光發熱,同時蹭得一份業績。
搜廣推這三個場景的架構都差不多,主要就是通過對內容/商品的召回和排序,來優化Query-Doc的匹配結果。可以將這個過程分為三部分:
-
Doc的理解:現在的候選Doc/Item是各種模態的,比如視頻、商品、圖片、文本,但不管哪種形式,文本都是其中的重要一種,可以利用閱讀理解、信息抽取、文本匹配打標簽等技術加深對內容的理解
-
Query的理解:在搜索、廣告中輸入都是真實的Query,可以基於NLP進行意圖、分詞、NER等各種解析,而推薦中則是把User當作Query,這時可以把用戶歷史消費的內容作為用戶興趣,這件又回歸到了Doc理解
-
Query-Doc相關性:通過用戶行為、用戶信息、時空信息、上述的Query和Doc理解等海量特征來找出符合用戶需求的結果。搜索和廣告是命題作文,其中文本層面的Query-Doc很重要,而推薦中內容信息則可以解決用戶、物品冷啟動問題,也起着不可或缺的作用
本文主要聚焦於Query-Doc文本相關性的應用調研,該相關性分數作為特征,對召回以及排序結果都有很大影響。(不是不想講別的,光文本相關性我就刷了十幾篇業界干貨,肝要爆掉了,別的就下次一定吧hhh)
另外,我們還建立了自然語言處理、推薦搜索、智能對話、知識圖譜等方向的討論組,歡迎大家加入討論(人數達到上限,添加下方好友手動邀請),注意一定備注喔!
業界方案大賞
之前寫過一篇文本匹配的綜述,但當真正涉及到應用時跟業務的階段、流量、資源都有很大關系,簡單的字面匹配其實就能滿足不少需求。
蘑菇街
蘑菇街在最初的迭代時,通過頻率、tfidf、BM25、布爾模型、空間向量模型、語言模型等統計方式抽取了文本的稠密特征,輸入到樹模型進行相關性打分就能得到不錯的效果。同時他們也加入了Q-D的交互特征,也就是對Query、Doc進行同義詞擴展后,計算重合ngram term占Query term和Doc term的比例。但字面匹配的可擴展性較差,需要好的同義詞表提升泛化性能,因此下一個階段就是引入詞向量。蘑菇街在19年也嘗試了用tfidf篩選出核心詞,並對Query、Doc的核心詞進行Self-Attention計算再融合,得到更好的文本相關性結果,將佣金收入提升了5.56%。
接下來到了深度學習時代,各廠門都開始不滿足字面匹配的相關性,因為這個方案需要大量的人工特征工程以及同義詞、停用詞的挖掘,這時便出現了著名的DSSM模型。
小米移動搜索
小米采用的方案是在人工GBDT的方案基礎上融合C-DSSM的結果,利用大規模用戶行為數據進行訓練,提升了長尾Query的查詢效果。
阿里媽媽
阿里媽媽也采用了DSSM進行廣告語義匹配,但他們在應用中發現pairwise loss會導致Q-D預測結果偏向正太分布:
這就導致閾值對召回結果有很大影響,不同天的Query召回集合變動很大,給廣告效果帶來了不確定性。因此他們改為擬合伯努利分布,使預測結果成啞鈴的形狀,降低閾值對截斷的影響。同時為了彌補DSSM缺少交互的缺點,他們在中間加入了Q-D的attention交互計算,最終新的方案在各個指標上都超越了DSSM。
京東電商搜索
當然,文本相關性也可以不單獨作為一個特征,而是直接融合到召回中。京東電商搜索則是分別給Query和商品建立了一個encoder,在輸入Query文本、商品名稱的同時融合其他特征進行計算,比如用戶基礎信息、歷史行為、商品品牌、品類等:
值得注意的是,左側的Query編碼器采用了multi-head機制,用於捕獲不同的語義,比如品牌屬性、商品屬性等,豐富Query的表示。
阿里飛豬
阿里飛豬和京東采取的融合方案相似,不同的是他們更關注Doc的理解,提前對商品的目的地和類目id進行了編碼,作為Doc側的輸入:
當然,講NLP肯定少不了BERT。
知乎搜索
作為重內容的社區,知乎在他們的搜索召回和排序中都有用到BERT,在召回中會分別對Query和Doc編碼,通過向量檢索的方式召回候選,同時在二輪精排也會用交互式的小BERT進行相關性計算:
數據才是天花板
上面介紹了字面匹配和語義匹配各階段的模型,但在應用場景中,數據才是真正的天花板,模型只是在不斷擬合上線而已。訓練數據的構造在文本相關性任務中是十分重要的。
把用戶點擊的數據當作正例是無可后非的,但一個很常見的錯誤就是把召回結果中未點擊的內容作為負例。騰訊全民K歌的分享中指出,在召回和排序這兩個步驟中我們的視角是不一樣的,召回階段的視角是內容全集,同時未點擊也不意味着就不是好結果,所以更好的做法是在全局范圍內進行隨機負采樣,實踐的效果也證明這樣會更好。
但單純的隨機負例也有問題,就是可能會把相關商品變成負例,降低結果與Query的相關性。京東電商搜索采用的方案是按一定比例將隨機負例與batch negatives相融合,因為batch內的doc都有對應的batch query作為正例,打散的話更大概率與當前正例不相關,之后再通過控制參數來平衡召回結果的多樣性與相關性。
知乎搜索還提出了一種hard負例的挖掘方法,就是將query和doc映射到一個空間中,再對doc進行聚類,這樣就可以找到與query相近的類別,從其中采樣一些較難的負例。或者也可以參考阿里飛豬的做法,在一個類目或者目的地下隨機選擇負例,提升訓練數據的難度。
當然有資源的話最好還是進行人工標注,而搜廣推數據量那么大,都標注肯定是不可能的,需要更高效的問題樣本發現機制。阿里文娛基於Q-Learning的思想,對於線上預測較差的樣本,再用一層模型進行挖掘,把低置信度的樣本、或者高置信度但和線上預測不一致的樣本拿去給人工標注,這樣就可以快速迭代出問題集並有針對性地優化:
線上怎么用呢
上文終於費勁吧啦地把模型訓出來了,然而怎么用還是問題,之所以不是所有廠都用BERT,主要還是因為代價太大。雖然Doc的表示都可以離線預測好存起來,但Query來了真心受不了。
第一種解決方案就是把模型做小。
上文中介紹的知乎搜索直接把BERT用到了二輪精排中,因此他們的做法是基於Roberta-large進行蒸餾,采用Patient-KD方式,將12層蒸餾到了6層。同時他們也對BERT表示模型進行了維度壓縮,在不影響線上效果的情況下,將768維壓縮到了64維,減少了存儲空間占用。
阿里文娛只用到基於表示的方案,因此他們蒸餾了一個非對稱的雙塔模型,並且在doc端采用multi-head方式來減少指標衰減。
第二種解決方案就是把數據盡可能存起來。
360搜索廣告在訓練階段用了16層transformer,因此在應用到線上時選擇了離線的方式,先從日志中挖出一部分Q-D對,進行相關性預測,再通過CTR預測進行過濾,把最終結果存儲到線上KV系統。
不過這種方案只限於數據量可以承受的場景,也可以把兩種方式進行融合,將一些高頻Query提前存好,剩下的長尾Query用小模型預測。
我們的業務不一樣
上述的介紹主要還是集中在搜索、廣告場景下,因為推薦場景沒有query,花樣會更多一些,也會利用其他很多特征,基本上都是把文本作為一個維度來訓練相關性模型。下面再介紹兩個我在業界分享中看到的相關性改進方法,一起開開眼。
百度鳳巢
對於搜索廣告這種命題作文來說,召回階段最重要的目標就是Q-D相關性,但這個優化目標其實跟最終的ctr是有gap的,尤其是在廣告場景中,最終影響收益的指標和ctr有很強的關系。所以百度鳳巢團隊提出了MOBIUS系統,將ctr預估引入到搜索召回階段:
最單純的想法是直接在召回階段以ctr為目標進行訓練,但由於ctr目標本身的問題,很可能將相關性不高的廣告預測為正例。MOBIUS提出了一個數據增強模塊,先從日志里撈一批Q-D對,再用相關性模型進行打分,找出相關性低的pair作為badcase,讓最終的模型預測。這樣模型從二分類變成了三分類,就具備了過濾不相關case的能力,將相關性預測與ctr預測較好地融合在了一起。
陌陌
陌陌有個場景是根據用戶發布的動態推薦相似的內容,這個動態不僅有文本,也有圖像,我覺得可借鑒的點是他們利用用戶提供的文本和圖像內容訓練了兩個編碼器,很好地把文本和圖像映射到了一個空間內。
具體的做法是,利用用戶發表的圖文動態,訓練一個雙塔模型:
模型兩個塔分別對文本和圖像編碼,有三個loss:
-
圖文匹配
-
文本語言模型
-
圖片內容一致性:有的動態包含多張圖片,我們認為多張圖片在表達一個意思
基於這個雙塔模型的內容召回起到了很好的線上效果:
總結
在社會上混得越久,越覺得技術只是工具,自己在工作中總拿着模型找問題,卻不思考問題本身對於業務的重要程度。今年也開始反思,在鞏固好個人能力的同時轉變思維,由技術驅動轉為問題驅動,真正去深入到具體場景、解決重要的實際問題。
最近刷業界分享其實覺得蠻有意思的,可以發現在電商、本地生活、社交、內容領域都有不同的業務特點,也發現很多idea可以借鑒到自己的項目中。后續會繼續學習NLP在實際場景的落地,參考文獻中列了不少干貨,祝大家學習愉快。
參考資料
-
文本相關性在蘑菇街搜索推薦排序系統中的應用
原文出處:https://mp.weixin.qq.com/s/yUQy1MYg2d_wSWjhovBRAA