BERT在工業(yè)界落地已經(jīng)很普遍了,主要在搜索、推薦和NLP中廣泛應(yīng)用,我將自己運(yùn)用BERT的心得總結(jié)如下:
BERT在工業(yè)界的落地:新數(shù)據(jù)預(yù)訓(xùn)練、多任務(wù)、蒸餾/裁剪、雙塔的在線應(yīng)用;
如何蒸餾模型;
在BERT基礎(chǔ)上有哪些有效的改進(jìn)點(diǎn);
如何融入知識圖譜;
相關(guān)性的框架:考慮到業(yè)務(wù)效果,必要的前置/后置規(guī)則可能有效;兩階段分別解決不相關(guān)、以及區(qū)分強(qiáng)相關(guān)/一般相關(guān);
多業(yè)務(wù)場景;
下面就帶大家一起看看阿里、美團(tuán)和百度等公司是如何將BERT應(yīng)用在業(yè)務(wù)中并提升業(yè)務(wù)指標(biāo)的。

業(yè)界實(shí)踐
論文:ERNIE 2.0: A Continual Pre-Training Framework for Language Understandinggithub:http://github.com/PaddlePaddle/ERNIE
改進(jìn)點(diǎn):引入知識,在BERT基礎(chǔ)上MASK 詞和實(shí)體的方法,學(xué)習(xí)這個詞或者實(shí)體在句子里面 Global 的信號。BERT 提出后,我們發(fā)現(xiàn)一個問題,它學(xué)習(xí)的還是基礎(chǔ)語言單元的 Language Model,并沒有充分利用先驗(yàn)語言知識,這個問題在中文很明顯,它的策略是 MASK 字,沒有 MASK 知識或者是短語。在用 Transformer 預(yù)測每個字的時候,很容易根據(jù)詞包含字的搭配信息預(yù)測出來。比如預(yù)測“雪”字,實(shí)際上不需要用 Global 的信息去預(yù)測,可以通過“冰”字預(yù)測?;谶@個假設(shè),我們做了一個簡單的改進(jìn),把它做成一個 MASK 詞和實(shí)體的方法,學(xué)習(xí)這個詞或者實(shí)體在句子里面 Global 的信號。基于上述思想我們發(fā)布了基于知識增強(qiáng)的語義表示ERNIE(1.0)。英文上驗(yàn)證了推廣性,實(shí)驗(yàn)表明 ERNIE(1.0)在 GLUE 和 SQuAd1.1 上提升也是非常明顯的。為了驗(yàn)證假設(shè),我們做了一些定性的分析,找了完形填空的數(shù)據(jù)集,并通過 ERNIE 和 BERT 去預(yù)測,效果如上圖。我們對比了 ERNIE、BERT、CoVe、GPT、ELMo 模型,結(jié)果如上圖所示。ELMo 是早期做上下文相關(guān)表示模型的工作,但它沒有用 Transformer,用的是 LSTM,通過單向語言模型學(xué)習(xí)。百度的 ERNIE 與 BERT、GPT 一樣,都是做網(wǎng)絡(luò)上的 Transformer,但是 ERNIE 在建模 Task 的時候做了一些改進(jìn),取得了很不錯的效果。在應(yīng)用上,ERNIE 在百度發(fā)布的面向工業(yè)應(yīng)用的中文 NLP 開源工具集進(jìn)行了驗(yàn)證,包括 ERNIE 與 BERT 在詞法分析、情感分類這些百度內(nèi)部的任務(wù)上做了對比分析。同時也有一些產(chǎn)品已經(jīng)落地,在廣告相關(guān)性的計(jì)算、推薦廣告的觸發(fā)、新聞推薦上都有實(shí)際應(yīng)用。后來,百度艾尼 ( ERNIE ) 再升級,發(fā)布了持續(xù)學(xué)習(xí)語義理解框架 ERNIE 2.0,同時借助飛槳 ( PaddlePaddle ) 多機(jī)多卡高效訓(xùn)練優(yōu)勢發(fā)布了基于此框架的 ERNIE 2.0 預(yù)訓(xùn)練模型。該模型在共計(jì) 16 個中英文任務(wù)上超越了 BERT 和 XLNet,取得了 SOTA 效果。論文:Poly-encoders: Transformer Architectures and Pre-training Strategies for Fast and Accurate Multi-sentence Scoring前置的tuner層:主要包含一些黃金的規(guī)則,在訓(xùn)練集上準(zhǔn)確率超過95%的這種規(guī)則策略,當(dāng)滿足這些條件時,不進(jìn)行模型處理,直接通過規(guī)則處理。模型層:當(dāng)黃金規(guī)則處理不了時,利用分檔的模型做兜底。分檔的模型含有兩個子模型為Recall模型和Refine模型,兩個模型的結(jié)構(gòu)一樣,但它們使用的特征以及樣本的選擇是不一樣的。分檔模型的好處在于將整個相關(guān)性分檔的功能進(jìn)行了解耦,一個是用來發(fā)現(xiàn)高相關(guān)性的優(yōu)質(zhì)DOC,另外一個是用來降低相關(guān)性的岔道和進(jìn)行過濾。后置的tuner層:該層對于因?yàn)闃颖緮?shù)據(jù)不均衡、核心特征缺少等原因沒有學(xué)出來的情況,會添加一些人工的兜底規(guī)則進(jìn)行補(bǔ)充。比如說會針對視頻內(nèi)容理解特征做了一些規(guī)則。該層中還全局調(diào)檔的一個Tuner,它的作用是基于全局的DOC匹配再做一些調(diào)整。如果直接從交互性(12層BERT)改成雙塔(2個12層BERT),指標(biāo)下降較多- Doc(離線):為了降低雙塔模型的指標(biāo)衰減,對于Doc側(cè),它其實(shí)保存的并不是一個Embedding,它是M組的Embedding,M組可以理解為從M個側(cè)面刻畫Doc的特征,這樣也是為了最大限度的去保留Doc側(cè)的一些豐富的信息;
- Query(在線):三層BERT,但是也會導(dǎo)致指標(biāo)衰減;
- 對于query,通過對KG進(jìn)行一個查詢找到它的子圖,然后把它子圖的結(jié)構(gòu)化信息編碼成BERT通用的序列化的輸入,然后再在KG層和文本層之間做一些attention的監(jiān)督操作
表示型BERT:用在召回、粗排,采用了 BERT 輸出 token 序列向量的 average 作為句向量的表示召回:語義召回模型整體是 BERT 相關(guān)性任務(wù)中雙塔表示模型的一個應(yīng)用。BERT 做為 encoder 來對 query 和 doc 進(jìn)行向量的表示,基于 faiss 對全量 doc 向量構(gòu)建語義索引,線上實(shí)時的用 query 向量進(jìn)行召回。下面詳細(xì)介紹下知乎的語義召回模型。首先看個例子,對于「瑪莎拉蒂 ghlib」這個 case,用戶真正想搜的是「瑪莎拉蒂 Ghibli」這款車,但用戶一般很難記住完整的名稱,可能會輸錯。在輸錯的情況下,基于傳統(tǒng)的 term 匹配方式(Google 搜索的例子)只能召回“瑪莎拉蒂”相關(guān)的 doc,而無法進(jìn)行這輛車型的召回,這種場景下就需要進(jìn)行語義召回。更通用的來說,語義召回可以理解為增加了字面不匹配但是語義相關(guān)的 doc 的召回。對于BERT 的蒸餾我們做了大量的調(diào)研,并對目前主流的蒸餾方案做了歸納分類?;谌蝿?wù)維度來說,主要對應(yīng)于現(xiàn)在的 pretrain + fine-tune 的兩段式訓(xùn)練。在預(yù)訓(xùn)練階段和下游任務(wù)階段都有不少的方案涉及。技巧層面來分的話,主要包括不同的遷移知識和模型結(jié)構(gòu)的設(shè)計(jì)兩方面。后面我會選兩個典型的模型簡單介紹一下。交互模型的層數(shù)從 12 層壓縮到 6 層,排序相關(guān)性特征 P95 減少為原本的 1/2,整體搜索入口下降 40ms,模型部署所需的 GPU 機(jī)器數(shù)也減少了一半,降低了資源消耗。表示模型語義索引存儲規(guī)模 title 減為 1/4,content 維度從 768 維壓縮至 64 維,雖然維度減少了 12 倍,但增加了倒排索引 doc 的數(shù)量,所以 content 最終減為 1/6,語義索引召回也有比較大的提升,title 減少為 1/3,content 減少為 1/2。精排模塊需要線上實(shí)時查詢離線計(jì)算好的向量,所以查詢服務(wù)也有提升。表示模型語義索引的構(gòu)建時間減少為 1/4,底層知乎自研的 TableStore/TIDB 存儲減為原來的 1/6,LTR 訓(xùn)練數(shù)據(jù)和訓(xùn)練時間都有很大的提升,粗排早期用的是 BM25 等基礎(chǔ)特征,后來引入了 32 維的 BERT 向量,提升了精排精度。
用于核心搜索的“核心排序”中,蒸餾成2層交互BERT,預(yù)測的query-poi相關(guān)性分?jǐn)?shù)作為排序的一個特征使用。- 使用下單數(shù)據(jù)作為正樣本,使用未點(diǎn)擊過的數(shù)據(jù)構(gòu)造負(fù)樣
- Skip-Above采樣:受限于App搜索場景的展示屏效,無法保證召回的POI一次性得到曝光。若直接將未被點(diǎn)擊的POI作為負(fù)例,可能會將未曝光但相關(guān)的POI錯誤地采樣為負(fù)例。為了保證訓(xùn)練數(shù)據(jù)的準(zhǔn)確性,我們采用Skip-Above方法,剔除這些噪音負(fù)例,即從用戶點(diǎn)擊過的POI之上沒有被點(diǎn)擊過的POI中采樣負(fù)例(假設(shè)用戶是從上往下瀏覽的POI)。
- 對于模型輸入部分,我們將Query、Doc標(biāo)題、三級類目信息拼接,并用[SEP]分割,區(qū)分3種不同來源信息。對于段向量,原始的BERT只有兩種片段編碼EA和EB,在引入類目信息的文本信息后,引入額外的片段編碼Ec。引入額外片段編碼的作用是防止額外信息對Query和Doc標(biāo)題產(chǎn)生交叉干擾。由于我們改變了BERT的輸入和輸出結(jié)構(gòu),無法直接基于MT-BERT進(jìn)行相關(guān)性Fine-tuning任務(wù)。我們對MT-BERT的預(yù)訓(xùn)練方式做了相應(yīng)改進(jìn),BERT預(yù)訓(xùn)練的目標(biāo)之一是NSP(Next Sentence Prediction),在搜索場景中沒有上下句的概念,在給定用戶的搜索關(guān)鍵詞和商戶文本信息后,判斷用戶是否點(diǎn)擊來取代NSP任務(wù)。
引入實(shí)體任務(wù)識別,多任務(wù)fine-tuning- loss:除了輸入樣本上的變化,為了考慮搜索場景下不同樣本之間的偏序關(guān)系,我們參考RankNet[34]的方式對訓(xùn)練損失函數(shù)做了優(yōu)化。
Partition-model,多業(yè)務(wù)問題- Partition-model的思想是利用所有數(shù)據(jù)進(jìn)行全場景聯(lián)合訓(xùn)練,同時一定程度上保留每個場景特性,從而解決多業(yè)務(wù)場景的排序問題。
損失函數(shù):選用優(yōu)化NDCG的Lambda Loss特征構(gòu)造
搜索相關(guān)性的特征這里分為三個維度:基礎(chǔ)特征、文本匹配特征以及語義匹配特征。基礎(chǔ)特征主要包括 query 和 item 的統(tǒng)計(jì)特征,以及結(jié)構(gòu)化相關(guān)的匹配特征,如類目是否匹配、關(guān)鍵屬性(品類、品牌、型號等)是否匹配。文本匹配特征主要是字面上的匹配特征,如 term 匹配數(shù)、匹配率、帶同義詞策略的匹配、帶 term weight 的匹配以及最基礎(chǔ)的 BM25 分等。語義匹配特征則主要包括基于點(diǎn)擊行為的表示匹配、文本和多模態(tài)語義匹配。其中基礎(chǔ)特征和文本匹配特征相對常規(guī),不再詳細(xì)展開。下面重點(diǎn)對語義匹配特征做進(jìn)一步的介紹:文本語義匹配
處于性能考慮,文本的語義匹配采用雙塔向量匹配模型結(jié)構(gòu):基礎(chǔ)模型使用開源的 BERT,Query 和 Item 共享相同的參數(shù)權(quán)重。同時為了適應(yīng)下游的相關(guān)性分檔,模型采用 Pointwise 的訓(xùn)練方式。篇幅原因,這里對模型細(xì)節(jié)不作展開。而相比模型結(jié)構(gòu)的設(shè)計(jì),其實(shí)閑魚搜索中更重要的工作在于訓(xùn)練樣本的構(gòu)造。由于現(xiàn)階段缺少人工標(biāo)注數(shù)據(jù)的積累,所以當(dāng)前該部分工作主要解決以下兩個問題:?高置信樣本挖掘,緩解搜索點(diǎn)擊日志“點(diǎn)擊但不相關(guān)”的問題。?定制化的負(fù)樣本構(gòu)造,避免模型收斂過快,只能判斷簡單語義相關(guān)性,而對上文提到的閑魚場景"勉強(qiáng)相關(guān)"的難 case 無法區(qū)分。針對以上問題,參考集團(tuán)相關(guān)經(jīng)驗(yàn)并結(jié)合對閑魚搜索數(shù)據(jù)的觀察分析,做了如下采樣方案:? ? ?充足曝光下高點(diǎn)擊 ctr 樣本(ctr 大于同 query 下商品點(diǎn)擊率平均值)?????高曝光低點(diǎn)擊類目樣本:同一個 query 搜索下,根據(jù)點(diǎn)擊過商品的類目分布,取相對超低頻類目樣本作為負(fù)樣本(如類目分布占比 < 0.05 的商品視為負(fù)樣本)。?????充足曝光情況下,低于相應(yīng) query 平均曝光點(diǎn)擊率 10%以下的樣本做負(fù)樣本。?????基于 query 核心 term 替換構(gòu)造負(fù)樣本:如對于“品牌 A+品類”結(jié)構(gòu)的 Query,使用“品牌 B+品類”結(jié)構(gòu)的 query 做其負(fù)樣本。?????隨機(jī)構(gòu)造負(fù)樣本:為增加隨機(jī)性,該部分實(shí)現(xiàn)在訓(xùn)練時使用同 batch 中其他樣本做負(fù)樣本,同時引入 batch hard sample 機(jī)制。上述方式采樣得到的訓(xùn)練數(shù)據(jù),隨機(jī)抽測準(zhǔn)確率在 90%+,進(jìn)一步采樣后量級在 4kw+。在此基礎(chǔ)上訓(xùn)練雙塔模型,上線方式為離線抽取 Embedding,線上查表并計(jì)算向量相似度。該部分工作獨(dú)立全量上線,抽測 top300 query + 隨機(jī) 200query 搜索滿意度+6.6%;同樣文本語義向量用于 i2i 向量召回,復(fù)用到閑魚求購場景,核心指標(biāo)點(diǎn)擊互動人次相對提升 20.45%。定義搜索 query top10 商品完全相關(guān)/基本相關(guān)占比>80%為滿意,一組 query 評測結(jié)果為滿意的占比為 query 滿意度。
多模態(tài)語義匹配
除了文本語義向量匹配,本次工作也嘗試了多模態(tài)語義向量。模型側(cè)使用預(yù)訓(xùn)練的多模態(tài) BERT,類似工作集團(tuán)已經(jīng)有大量的嘗試,本文主要參考過([1],[2]),并對模型和策略作了一些調(diào)整:? 替換多圖特征抽取為首圖 region 特征抽取做圖像特征序列(resnet pooling 前的特征序列),提升鏈路效率;? 替換 Bert-base 為 Electra-small,減小模型參數(shù)(經(jīng)測試 47M 的模型,下游分類任務(wù)精度損失 2 個點(diǎn)以內(nèi)),方便與 Resnet 聯(lián)合 E2E 訓(xùn)練。下游的匹配任務(wù)仍使用雙塔模型策略,和文本語義模型不同的是,這里直接使用 Triple Loss 的方式,主要考慮加大模型之間的差異性,使后面的模型融合有更大的空間。PS: 該部分工作離線 AUC 為 0.75 相對較高,在下游特征融合 AUC 提升 1 個點(diǎn)以上。但在上線過程中,由于需要圖像處理,增量商品特征更新回流相對其他鏈路延遲較大,容易造成新商品特征缺失,因此還需要進(jìn)一步鏈路優(yōu)化。
點(diǎn)擊圖表示匹配
除了上文提到的通過語義向量引入語義信息,還可以借助搜索日志中的點(diǎn)擊行為表示 query 或 item 構(gòu)造圖結(jié)構(gòu)引入新的語義表示。其中基于圖結(jié)構(gòu)的 match 算法 SWING 算法,在阿里內(nèi)部應(yīng)用廣泛,相關(guān)的文章也有很多,這里不在闡述。針對閑魚場景首先將點(diǎn)擊 pair 對改造為- 點(diǎn)擊 pair 對,這樣直接沿用現(xiàn)有的 swing 工具,可以得到 query2query 的列表。聚合 key query 的所有相似 query,并進(jìn)行分詞,對所有的 term 進(jìn)行加權(quán)求和,歸一化后得到 key query 的表示。
其中的權(quán)重為 swing 算法輸出的 score,key query 的 term 權(quán)重默認(rèn)為 1。而對于行為稀疏的長尾 query 則使用上文語義向量召回最相近的頭部 query,補(bǔ)充其語義表示。最終得到的 query 表示實(shí)例:得到 query 表示后,item 同樣做類似的歸一化表示。上線時使用稀疏存儲的方式,在線計(jì)算匹配 term 的加權(quán)和作為點(diǎn)擊圖表示匹配分。準(zhǔn)備好必要的相關(guān)性特征后,下一步則是對眾多特征的有效融合,本文則采用經(jīng)典的 GBDT 模型完成該步驟。選擇 GBDT 模型的好處一方面在于檢索引擎(Ha3)精排算分插件中有現(xiàn)成的組件可以直接復(fù)用,另一方面也在于相比于更加簡單的 LR 模型可以省去很多特征預(yù)處理步驟,使得線上策略更加簡單。模型的訓(xùn)練使用人工標(biāo)注的訓(xùn)練數(shù)據(jù),標(biāo)注目標(biāo)為四檔(完全相關(guān)、基本相關(guān)、勉強(qiáng)相關(guān)以及完全不相關(guān))。在訓(xùn)練階段,四個檔位被映射到 1、0.75、0.25 和 0 四個分位,GBDT 模型則通過回歸的方式對分位進(jìn)行擬合。由于該部分策略是對子特征的 ensemble,因此并不需要非常多的訓(xùn)練數(shù)據(jù)(這里的量級在萬級別)。最終,經(jīng)過常規(guī)的調(diào)參,GBDT 特征融合模型離線 AUC 可以達(dá)到 0.86,基本符合預(yù)期(最優(yōu)單特征 AUC 為 0.76)。該策略全量上線,在文本語義向量的基礎(chǔ)之上,不影響成交效率的前提下:隨機(jī) query 抽測(top 800w)DCG@10 相對提升 6.51%,query 搜索滿意度+24%;頭部 query 同樣也有相應(yīng)的提升,相應(yīng)地搜索體感也得到有效提升。