bert 多义词_广告行业中那些趣事系列15:超实用的基于BERT美团搜索实践
摘要:本篇主要學習和分析BERT在美團搜索排序中的項目實踐。首先介紹了業務背景,主要對比了美團搜索業務場景和我們的應用場景;然后講了下計算query和doc相關性的方法,主要包括計算字面相關性和計算語義相關性,重點介紹了基于BERT的語義相關性內容;最后也是本篇的重點,分析了美團搜索排序項目實踐以及對我們業務的思考,其中包括數據樣本增強、BERT領域適配、模型輕量化、聯合訓練和排序服務架構優化等一系列眼花繚亂但是又極具工程價值的優化操作,對于我們有極大的工程借鑒價值。
鄭重聲明,這篇文章主要是學習美團技術團隊發表的《BERT在美團搜索核心排序的探索和實踐》這篇文章。總體看了不下五遍,屬于精讀的文章。小伙伴們可以直接去拜讀原文,非常精彩。這里更多的是根據自己的思考和理解將原文整理成更容易理解的方式進行表達(至少對于我是更容易理解的方式),類似一種學習筆記的表現形式。很多小伙伴看到干貨文章更多的是收藏+關注,然后就不了了之,成為“收藏黨”。而我更推薦精讀N遍,同時進行延伸查閱更多知識,最后以一種便于理解的方式整理出來,形成文章將知識固化。如果再能將固化的知識通過PPT等形式分享出來,那么理解的就更加深刻。
下面主要按照如下思維導圖進行學習分享:
01 背景介紹
最近在和搜索團隊合作一些NLP相關的需求,總體來說主要分成以下兩類任務:
query-tag:給用戶搜索詞打上標簽,這里其實就是文本分類任務;
query-doc:給用戶搜索詞返回對應的搜索結果,這里其實是句子對關系任務。
本篇重點分析的就是query-doc類型的句子對關系任務。下面分別從美團搜索和我們實際的業務場景進行對比:先說說美團搜索場景。假如我們想在美團app上購買小吃,當我搜索“廟東排骨”時,我希望返回的搜索結果是和廟東排骨相關的商戶。下圖分別是美團app搜索場景和我們終端搜索場景:
圖1 美團app搜索場景和我們終端搜索場景
對于用戶來說,我希望搜索的結果是和廟東排骨相關的。要完成這件事,需要兩個核心步驟:第一個是理解用戶搜索query,第二個就是把用戶最感興趣的搜索結果排在前面。理解用戶搜索query就是弄明白用戶想要啥,因為用戶表達需求主要通過文本數據,我們需要理解的對象是文本,所以屬于自然語言處理范疇;把用戶最感興趣的搜索結果排在前面涉及召回和精排,屬于推薦系統范疇。
了解了美團搜索的業務場景,下面看看我們業務搜索的場景。當用戶使用手機終端的瀏覽器進行搜索,我們需要返回對應的結果。假如用戶搜索oppo,我們希望返回和oppo相關的搜索結果。所以整體來看和美團搜索的場景非常類似,本質都是屬于query-doc類的句子對關系任務。
02 計算query和doc相關性的方法
為了理解用戶搜索query,需要計算用戶搜索query和doc的相關性。根據計算方法的不同主要分成計算字面相關性和計算語義相關性兩種。
1. 計算字面相關性
計算字面相關性主要是根據文本的匹配度,這里包括匹配的字數、匹配的比例等。這種方法可以從字面理解用戶搜索query,但是存在以下兩個缺點:
詞義局限:沒有辦法解決同義詞和多義詞的問題。比如“賓館”和“旅店”這種同義詞,雖然字面不同,但是都屬于住宿相關;還有“蘋果”這種多義詞,既可以表示一種水果,還可以表示一個品牌;
結構局限:同樣兩個詞可以組成不同的組合詞,但是表達的重點可能完全不同。比如“奶油蛋糕”和“蛋糕奶油”雖然詞完全重合,但是前者重點在于蛋糕,后者則在于奶油,表達的意圖完全不同。
2. 計算語義相關性
因為計算字面相關性存在語義局限和結構局限的問題,究其原因在于沒有理解語義,所以業界提出了計算語義相關性,語義相關性模型主要包括傳統的語義匹配模型和深度語義匹配模型。
2.1 傳統的語義匹配模型
傳統的語義匹配模型主要指隱式模型(典型代表是LDA主題模型)和翻譯模型等,這里不是重點一筆帶過。
2.2 深度語義匹配模型
與傳統的語義匹配模型相對應的則是深度語義匹配模型。隨著深度學習不斷發展,業界興起了基于深度學習的語義匹配模型,這也是本篇的重點。深度語義匹配模型主要分成基于表示的匹配方法和基于交互的匹配方法兩種。
[1] 基于表示的匹配方法
基于表示的匹配方法主要使用深度學習模型來表示query和doc的embedding向量,通過計算向量相似度來表示語義相似度。最有代表性的就是微軟提出的DSSM雙塔模型。關于雙塔模型之前出過一篇文章,有興趣的小伙伴可以查看。對應于搜索推薦場景就是一方面獲得代表query塔的embedding向量,另一方面獲得代表doc塔的embedding向量。
基于表示的匹配方法優點在于方便模型線上化。搜索場景下我們可以提前獲得doc的embedding并且存儲到內存數據庫中。線上只需要實時計算query的embedding向量,然后計算query和doc的embedding計算相似度即可。對于一些頭部的query我們還可以提前將embedding向量存儲在內存數據庫中直接計算相似度。
基于表示的匹配方法缺點是query和doc兩者沒有任何交互,無法應用一些業務場景下的匹配信號。比如一對query和doc可能在語義方面并沒有什么關聯,那么在基于表示的匹配方法下它們是不相似的。但是它們可能存在業務的聯系,那么就可以通過業務數據構建他們的聯系,這種關聯則可以通過下面的基于交互的匹配方法獲得。
[2] 基于交互的匹配方法
基于交互的匹配方法不會直接學習query和doc的embedding向量,而是在構建神經網絡時讓query和doc進行交互,這樣可以獲得更好的文本表示,最后通過一個MLP網絡獲得語義匹配的得分。這種方法一般是監督學習的方式,在訓練時能夠進行充分的交互匹配,并且通過構建訓練樣本可以增加業務場景的關聯,最終也能得到更好的文本表示。但是缺點是不容易線上部署。
3. 計算基于BERT的語義相關性
BERT是近幾年NLP領域的里程碑之作,具備效果好和應用范圍廣的優點,廣泛應用在學術界和工業界。BERT是典型的預訓練和下游任務改造兩階段模型。預訓練通過無監督的方式學習海量文本從而獲取豐富的語言學知識;得到預訓練網絡后可以方便的應用到下游的實際任務中。基于BERT的語義匹配模型屬于深度語義匹配模型,主要分成以下兩種方式:
feature-based:這種方法對應于基于表示的匹配方法。將BERT作為編碼器分別獲得query和doc的embedding向量表示,然后將它們作為特征提供給下游推薦系統;
finetune-based:這種方式對應于基于交互的匹配方法,將query-doc轉化為句子對關系任務進行訓練。
美團搜索推薦項目主要使用BERT基于finetune-based的方法計算query和doc的相關性。
03 美團項目實踐及思考
美團認為feature-based這種基于表示的匹配方法得到的query-doc是固定的,很難適配不同業務場景,同時海量的doc存儲成本過高,最終選擇了finetune-based這種基于交互的匹配方法。這里我認為feature-based得到的query和doc向量可以作為公共特征提供給下游不同的應用場景。這種DSSM雙塔思想的方法從工程角度來看比較容易實現,對于一些業務比較緊急或者實力有限的公司使用這種feature-based方法是可行并且有效的。
美團搜索排序技術架構主要分成數據樣本增強、BERT領域適配和核心排序模型優化三部分,具體架構圖如下所示:
圖2 美團搜索排序技術架構圖
1. 數據樣本增強
1.1 正負樣本的劃分
因為基于BERT的句子對關系任務屬于有監督學習任務,所以需要一定的訓練語料。美團搜索場景下的query和doc覆蓋多個業務領域,如果每個領域都需要標注一批訓練樣本,那么需要消耗很多標注人力和時間。這里的解決辦法是根據用戶搜索并且對應的瀏覽、點擊和下單數據作為弱監督數據進行模型訓練。這里其實就是根據業務場景獲取query和doc的關聯,然后將這種關聯在模型訓練時進行充分的交互匹配,從而獲得更好的文本表示。美團構造樣本時采取業界常用的做法,對每個query抽取一個正樣本和四個負樣本。
1.2 樣本去噪
上面講到會將用戶搜索并且對應的瀏覽、點擊和下單數據作為弱監督數據進行模型訓練。為什么說是弱監督數據呢?因為這種基于業務場景劃分正負樣本很容易產生噪聲。比如很容易出現用戶搜索query和doc本身是存在語義關聯的,但是因為沒有點擊或者下單就作為負樣本處理。針對容易產生噪聲的情況,美團經過大量分析總結出以下幾種方法進行樣本去噪:
[1] 構造基準測試集
為了評測模型的離線效果,美團從構造樣本中隨機采樣9K數據進行人工標注作為基準測試集。因為基準測試集是經過人工標注的,所以準確率較高,可以很好的評估模型的離線效果。
[2] 下單作為正樣本
因為下單對于業務來說是用戶行為中最具有價值的行為,可以強烈的表示用戶的意圖,所以直接將下單作為正樣本。
[3] 將用戶點擊結果前的商家作為負樣本
這里將用戶點擊前的商家作為負樣本。舉例說明,用戶搜索完之后會返回N條商家信息,當用戶瀏覽到第三條商戶進行點擊時則將第一和第二條作為負樣本,這樣可以有效剔除負樣本的噪音。文章中稱為基于Skip-Above的采樣方式。
[4] 其他一些樣本剔除規則
規則1:單字過濾。對于query來說,字數較少的query不僅無法表示用戶的搜索意圖,而且還會干擾模型,所以針對單字query直接進行過濾;
規則2:正樣本中剔除query只出現在分店名中的樣本。對于這種樣本數據,雖然用戶搜索query的意圖是大潤發,但是返回的結果主要是小龍坎火鍋,所以需要剔除;
規則3:負樣本中剔除帶分店的商戶。下單數據中存在商戶和query語義相似,但因為不是距離用戶最近商戶所以沒有被點擊的負樣本,比如。這一類樣本需要從負樣本中剔除;
上述這些過濾規則是在實際業務中不斷進行分析歸納總結的。數據分析對于機器學習模型具有很重要的指導意義這一點深有感觸。在實際的NLP項目中當模型確定后,會花很多時間在樣本工程上,這就類似傳統機器學習項目中會花費很多時間在特征工程上。
1.3 品牌樣本優化
關于品牌樣本優化是極具美團特色的業務場景,因為在美團的商家中,存在很多一個品牌有多個商家的連鎖店場景,這種情況下主要以品牌和地點組合來區分商戶。對于用戶搜索的品牌通過以下兩種方式進行處理:
如果用戶只搜索了品牌名,那么表示用戶真正有興趣的是品牌,所以應該返回該品牌的商戶。這里會將當前品牌下的不同分店統一映射為品牌進行召回,并且將其他品牌都作為負樣本處理。這里實際業務場景應該會獲取用戶當前的定位,然后同時返回距離最近的該品牌分店。舉例來說,如果用戶搜索了“香格里拉酒店”,那么會將“香格里拉大酒店”、“北京香格里拉飯店”等都先映射為品牌名“香格里拉酒店”進行返回,同時其他品牌比如“希爾頓花園酒店”、“桔子酒店”等均作為負樣本返回;
如果用戶同時搜索了品牌名和地點,那么表示用戶有明確的目標,這里會將該品牌以及地點的商戶返回。比如用戶搜索了“香格里拉酒店北京”,那么正樣本是“北京香格里拉飯店”,需要返回更精確的品牌分店了。
上述兩種場景下對于用戶搜索品牌的處理如下圖所示:
圖3 用戶搜索品牌的處理策略
2. BERT領域適配
因為美團搜索推薦系統主要使用BERT模型,所以需要對BERT進行一系列的適配操作,主要分成預訓練、微調以及模型輕量化三部分。
2.1 引入品類信息的預訓練
Google開源的BERT預訓練網絡使用的是比較通用的文本數據,具有一定的普適性。但是通用性較強從另一方面來說就是缺乏一定的針對性。針對實際的業務場景,美團加入更多自己的數據去訓練BERT模型,構建有自己業務特色的MT-BERT。雖然這種操作會讓模型失去一定的通用性,但是也讓模型更加適配美團的業務場景。美團基于自己的業務數據構建了餐飲娛樂領域的知識圖譜“美團大腦”。將知識圖譜中得到的地址、品類等屬性數據用于預訓練。這里舉例說明引入品類信息的好處。假如現在有一條樣本,單純從語義來說兩者毫無關聯,但是根據知識圖譜可以知道紅蝶教育的三級品類信息是“教育-升學輔導-考研”,當模型訓練時將紅蝶教育的品類信息作為樣本增強去幫助模型構建語義關聯。這里的品類信息對應我們廣告的類目體系。
這里主要將BERT模型適配為句子對關系任務。將句子對拼接成【cls考研班sep紅蝶教育sep教育升學輔導考研sep】這樣的格式作為模型文本輸入。BERT原始的句子對任務只會有【cls語句1sep語句2sep】,這里將三級品類信息隔斷又拼接在后面主要原因是防止額外增加的信息對query和doc產生交叉干擾。說到這里想起之前有一個項目實踐是做汽車分類器,主要識別query是否屬于汽車標簽,任務類型屬于文本分類。后來將任務改造成句子對關系任務,輸入是【cls用戶搜索sep汽車sep】,相當于去判斷用戶搜索query和語句”汽車”的相似關系,發現模型在測試集和線上真實數據集都有很大提升。這里僅把標簽描述作為其中一個關鍵詞,后續還可以挖掘汽車標簽更多的關鍵詞作為語句2,對于汽車的分類器識別效果會有更大的提升。
言歸正傳,下圖是美團的MT-BERT模型對于文本輸入的改造:
圖4 MT-BERT模型改造文本輸入
2.2 引入實體成分識別的多任務微調
美團在BERT微調階段不僅考慮query-doc相似性任務,而且還引入了命名體識別任務。因為用戶搜索query和商戶doc中會出現很多實體成分,這些實體對于query-doc的相關性判斷非常重要。比如用戶搜索query“Helens海倫司小酒館”和doc“Helens小酒館(東鼎購物中心店)”,兩者文本語義不完全匹配,但是實體成分相似。這種引入實體成分識別的多任務微調模型結構如下圖所示:
圖5 引入實體成分識別的多任務微調模型結構圖
這種語句相似關系任務和命名體識別任務相結合的思路可以很好的借鑒到我們當前的業務場景。因為我們目前主要是對用戶搜索query進行分類,用戶搜索詞一般較短,屬于短文本識別,通過識別實體可以很好的輔助模型。多任務學習模型的損失函數分成相關性判斷損失函數rele_loss和命名體識別損失函數ner_loss,兩者相加即為最終需要優化的損失函數。
2.3 基于Pairwise的微調
要說基于Pairwise的微調,首先需要了解下Pointwise和Pairwise的關系。基于BERT的句子對關系任務是二分類任務,屬于Pointwise。對應咱們的搜索推薦場景下訓練樣本是(query,doc,label),這里的label取值0或1。如果query-doc兩者相關則為1,否則為0。基于Pointwise的微調方法優勢在于可以很好的學習到全局相關性,但是缺點在于忽略了不同樣本間的偏序關系。對于同一個query,存在兩個不同的docA和docB。Pointwise模型可以判斷出query和docA、docB都相關,但是沒有辦法識別出docA和docB哪個更相關,也就是將哪個doc排在更前面。對于這個問題我以前以為通過對比query-docA和query-docB的得分高低來區分,但是實際情況是不一定得分高的就更適合排在前面。為了讓相關性特征對于排序結果更有區分度,參考了排序模型的Pairwise訓練方式來優化BERT的微調任務。
Pairwise的微調任務輸入為(query,doc+,doc-),其中doc+代表和query相關的商戶,doc-則代表和query不相關的商戶。通過這種三元組作為輸入樣本,可以產出更具對比性的query-doc相關性特征。下面是基于Pairwise的微調模型結構圖:
圖6 基于Pairwise的微調模型結構圖
3. 模型輕量化
原生BERT模型包含12層Transformer,網絡結構復雜,參數量巨大,對于模型線上推理很不友好。這種情況下要想實現線上實時推理需要進行模型輕量化。通常情況下模型輕量化方法主要有以下三種:
?知識蒸餾:模型蒸餾主要是滿足一定的精度前提下,將大模型學習到的知識遷移到輕量級的模型上,降低計算量的同時保證一定的預測效果。知識蒸餾可以理解成損失一定的精度從而提升模型的性能,綜合權衡精度和性能的結果。關于BERT知識蒸餾的成果主要由HuggingFace提出的DistilBert和華為提出的TinyBert都有不錯的效果。后續我們如果要做線上推理則可以使用知識蒸餾的方式;
模型裁剪:模型裁剪則通過剪枝的方式減少參數的規模;
低精度量化:低精度量化主要指在模型訓練和推理中使用低精度代替原有精度,一般使用fp16、int8來替代fp32等。這種低精度量化更多的使用在移動終端上。
美團對比了原生模型和知識蒸餾、模型裁剪兩種方法在準確率和AUC指標上的變化。原生BERT模型使用12層Transformer,輕量化之后變成了兩層Transformer,通過對比發現知識蒸餾效果較好。為了解決線上實時推理問題,美團最終使用知識蒸餾對BERT進行壓縮。實驗對比數據如下表所示:
表1 實驗對比知識蒸餾和剪枝的效果
4. 聯合訓練
基于BERT的搜索推薦主要分成兩塊,第一塊是訓練BERT相關性模型,也就是計算query和doc的相似性;第二塊是訓練排序模型,也就是將用戶真正感興趣的商戶排在前面。為了在排序模型訓練中引入更多相關性信息,美團將原本兩階段的BERT相關性微調任務和排序任務進行了端到端的聯合訓練。不僅如此,美團還將聯合訓練得到的embedding作為“共享特征”,提供給下游不同場景業務使用。這種基于Partition-model的BERT相關性任務和排序任務的聯合訓練模型可以說是有美團特色的預訓練模型,利用所有數據進行訓練,將模型訓練得到的embedding作為特征再提供給下游業務使用,做到了“一次訓練,多次使用”的效果。下面是聯合訓練的模型結構圖:
圖7 聯合訓練模型結構圖
輸入層:最底層是輸入層,主要由文本特征向量、用戶行為序列特征向量和其他特征向量三部分組成。(1)文本特征向量:文本特征向量主要由BERT模型進行抽取,包括商戶、品牌等信息。將文本數據提供給MT-BERT,得到CLS向量作為文本的語義特征向量;(2)用戶行為序列特征向量:用戶行為序列特征向量主要由Transformer進行抽取;(3)其他特征向量:其他特征向量主要包括統計類特征、文本特征、傳統的文本相關性特征等。統計類特征是query、doc等維度的特征以及交叉特征,主要作用是豐富query和doc的表示,輔助模型訓練;這里的文本特征更多的是將文本數據分詞后得到的word embedding;傳統的文本相關性特征則代表基于Term匹配得到的文本向量,包括匹配字數、比例等等,更多的是字面程度的信息輔助模型訓練;
共享層:將所有數據得到的特征向量作為“共享特征”提供給下游不同的業務方使用;
場景層:這里主要是根據不同的業務場景構建自己特有的網絡,具有定制化作用;
損失函數:最后采用優化NDCG的LambdaLoss的損失函數,將用戶感興趣的搜索結果排在前面,提升用戶的體驗。
這里需要注意的是將所有數據經過加工得到的共享特征可以有效提升數據的利用率,為其他業務團隊提供可靠的特征。
5. 排序服務架構優化
為了適應模型線上推理,美團對排序服務架構進行優化,搜索線上排序服務框架如下圖所示:
圖8 搜索線上排序服務框架圖
整個線上排序服務框架分成三大塊:
模型在線預估框架(Augur):這是美團開發的在線預估框架,主要支持語言化定義特征,配置化加載和卸載模型和特征,支持主流線性模型和TF模型的在線預估。為了方便BERT特征用于排序模型,美團開發了Model Stacking功能,很好的支持了BERT as Feature;
搜索模型實驗平臺(Poker):這是美團開發的模型實驗平臺,主要支持大規模數據提取和模型離線特征抽取、模型訓練。訓練好的模型可以實現一鍵上線,有效的提升了模型的實驗效率;
TF-Serving在線模型服務:這里主要使用TF-Serving的方式部署BERT線上推理模型、排序模型等,支持Faster Transformer加速BERT推理,提升線上預測速度。
通過模型在線預估框架、搜索模型實驗平臺和TF-Serving在線模型服務很好的實現了排序服務架構優化。整個架構非常具有參考價值,也可以看出美團深厚的技術底蘊,這里不得不服。
6. 各種優化策略對比
整體來看,美團主要通過樣本去噪、品牌信息、品類知識、Pairwise等優化策略對搜索排序模型進行優化。對照組是當前未做任何優化的排序模型,各優化策略帶來的效果提升如下表所示:
表2 各優化策略帶來的效果提升
從表中可以看出上述優化策略都一定程度上提升了搜索排序模型的效果。對于我們實際業務場景也極具借鑒價值:其中基于知識圖譜技術的品牌信息和品類知識給模型帶來的提升效果最明顯,這也說明了搜索場景下尤其短文本場景中加入輔助知識可以大幅度提升模型的線上效果;樣本去噪帶來的模型提升也很大,進一步說明了底層數據的清洗、加工和分析對于模型線上效果的重要作用;基于Pairwise的微調方法對于模型AUC提升很大,這種策略主要對排序模型效果顯著,后續可以進行嘗試。
總結
本篇主要分析BERT在美團搜索排序中的項目實踐。首先介紹了業務背景,主要對比了美團搜索業務場景和我們的應用場景;然后講了計算query和doc相關性的方法,主要包括計算字面相關性和計算語義相關性,同時重點講了計算基于BERT的語義相關性內容;最后也是本篇的重點,分析了美團搜索排序項目實踐以及對我們業務的思考,其中包括數據樣本增強、BERT領域適配、模型輕量化、聯合訓練和排序服務架構優化等一系列眼花繚亂但是又極具工程價值的優化操作,對于我們有極大的工程借鑒價值。不得不說美團深厚的技術底蘊,也推薦小伙伴們關注美團技術團隊的文章,干貨不斷。
參考資料
[1] BERT在美團搜索核心排序的探索和實踐
[2] 美團餐飲娛樂知識圖譜——美團大腦揭秘
[3] 大眾點評搜索基于知識圖譜的深度學習排序實踐.
最新最全的文章請關注我的微信公眾號:數據拾光者。
總結
以上是生活随笔為你收集整理的bert 多义词_广告行业中那些趣事系列15:超实用的基于BERT美团搜索实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IOC操作Bean管理XML方式(注入空
- 下一篇: macos系统自动安装mysql_mac