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