背景
京東零售是全球最大零售商之一,涵蓋線上、線下的實體、虛擬等多元化交易場景。目前每日有效商品數量約30億,產生相關日誌和內容已經達到PB級。在這些海量資料中,有諸多涉及自然語言處理和計算機視覺的應用場合,透過演算法和資料的驅動,給多場景的使用者體驗和交易提升帶來巨大改善,由於BERT在文字處理任務上的優異表現,我們也將BERT模型在電商文字分類、商品標題的序列標註等任務進行探索,並將相關實踐經驗進行總結。
BERT模型簡介
BERT[1] (Bidirectional Encoder Representation from Transformers) 是Google在2018年10月底公佈的基於變換器(Transformer)[2]的深度雙向編碼文字表示模型,透過模型預訓練+任務微調整的方式,在11項NLP基礎任務中展現出了卓越的效能,故成為NLP領域大火、整個ML界略有耳聞的模型。BERT的出現,徹底改變了預訓練詞向量模型框架和下游具體NLP任務的關係,將下游NLP任務重心轉移到上游的文字動態表示,透過進一步增加詞向量模型泛化能力和動態表達能力,以達到充分描述字元級、詞級、句子級甚至句間關係特徵的目的。
BERT的整體框架如圖1所示:模型架構基於多層雙向變換器編碼而非Bi-LSTM ,這樣可使得模型擁有更深的層數、具有更好並行性。在預訓練方法上,選擇了Masked LM和Next Sentence Prediction兩種損失函式分別捕捉詞語和句子級別的語義和句法等特徵。
BERT的輸入部分是一個線性序列(如圖2所示),兩個句子之間透過分隔符(SEP)分割,最前面和最後增加兩個識別符號(CLS)。每個詞語有三個Embedding:
① 詞語Embedding:詞語本身的Embedding;
② 句子Embedding: 由於訓練資料都是由句子構成的,那麼每個句子對應的句子Embedding給到該句中每個詞;
③ 位置Embedding:每個詞在該篇語料中對應的位置資訊。
將語料中對應的上述三種Embedding疊加,即形成了BERT的輸入。
圖 2 BERT的輸入序列
BERT相較於之前相關模型,其創新之處在於採取了新的預訓練的目標函式和增加句子級別的任務。前者中,利用隨機遮蔽輸入中的一些tokens,然後在預訓練中透過對它們進行預測,可以讓模型融合前後兩個方向上的上下文來輸出特徵,在ELMO[3]的基礎上,解決了由於模型層數的加深帶來的“目標洩露”,或者叫 “自己預測自己”(“see itself”)的問題;後者中,由於句子與句子之間本不是孤立存在的,以及現存QA和NLI任務都需要對兩個句子之間關係進行理解,這種理解方式超越了傳統的語言模型。為了理解句子關係,透過預訓練了一個“下一句預測”(“Next Sentence Prediction”)任務,也即隨機替換一些句子,然後利用上一句進行IsNext/NotNext的預測以達到提取該類句子關係特徵。