从字到词,大词典中文BERT模型的探索之旅
導語: BERT模型自誕生以來統治了各項NLP任務的榜單,谷歌也針對中文給出了基于字的模型。然而我們知道詞是語言最重要的組成部分,因此,一個自然的想法就是做基于詞的BERT模型。但是受限于顯存,谷歌原生的BERT模型可以使用的詞典比較小,只能覆蓋一小部分的漢語的詞。在本文中,我們提出了對BERT的一些改進,將中文BERT詞模型的詞典大小進行了大幅擴充,并在多個下游任務上測試了大詞典BERT的表現。此外,我們嘗試了一種針對上下文相關詞向量的最近鄰檢索方法,基于BERT的詞向量做以詞搜詞任務,相對于上下文無關詞向量在效果上有著明顯的提升。
1. 做大詞典BERT詞模型的意義
詞是語言最重要的組成部分。谷歌發布基于字的BERT[1]模型之后,一個很自然的想法就是將詞的信息引入到模型之中。詞在漢語中扮演了非常重要的詞是語言最重要的組成部分。谷歌發布基于字的BERT[1]模型之后,一個很自然的想法就是將詞的信息引入到模型之中。詞在漢語中扮演了非常重要的角色。很多詞所表達的含義與其包括的字的含義沒有直接聯系,比如音譯詞“巧克力”、“圣代”。
最近有一些工作嘗試將詞的信息引入到BERT中去。百度的ERNIE通過遮罩策略將詞的信息引入到模型之中,但是其本質仍然是基于字的模型[2]。另外一種方式是對語料進行分詞,直接訓練基于詞的中文BERT模型。不過由于中文詞典很大,在谷歌BERT上使用大詞典會導致顯存溢出。使用小詞典的話會導致大量的OOV。為了減緩OOV的影響,我們需要擴大詞典。
因此本文引入了一些語言模型訓練的技術,提出了訓練大詞典BERT模型的方法。大詞典能提升詞語的覆蓋度,減緩未登錄詞(OOV)問題[3]。不過雖然大詞典能夠減緩OOV,但是相比于字模型,仍然存在一定比例的OOV,會受到OOV的影響。此外,訓練基于詞的BERT模型能夠得到高質量的上下文相關詞向量。這些向量可以用于各種應用和下游任務之中。
在谷歌原來的BERT模型中,embedding 層和softmax 層的參數數量隨著詞典大小呈線性變化。如果在BERT-base模型上使用50萬大小的詞典,那么embedding層和softmax層會包含500000*768+768*500000=7.68億個參數。要知道BERT-base的編碼器層(12層transformer)也僅僅包含8500萬個參數。因此,直接在BERT上使用大詞典會造成顯存溢出。實際上,對于BERT-base模型(在P40型號的GPU上,batch size為32),當句子長度為128的時候,最多支持16萬的詞典大小,當句子長度為192的時候,只能支持8萬的詞典大小。
在下面的章節中,我們針對embedding 層和softmax 層進行優化。對softmax層優化后詞典可以達到五十萬大小,對softmax層和embedding層同時優化可以把詞典擴大到100萬大小。
3. Adaptive Softmax
對softmax層的優化一直是自然語言處理領域研究的重點。這個方向的研究很多,常用的技術包括基于采樣的方法[4],基于樹的方法[5]等等。這里我們使用facebook提出的adaptive softmax[6]進行優化。之所以選擇adaptive softmax,一方面是因為其是針對GPU進行的優化。我們在多機多GPU上進行預訓練,使用adaptive softmax能幫助我們在效率上得到顯著的提升。另一方面,adaptive softmax可以節約顯存,這是我們引入大詞典的關鍵。下面簡要介紹adaptive softmax的原理。
如上圖所示,如果我們將詞典分成三個部分,那么adaptivesoftmax則由三個前向神經網絡構成,我們分別稱之為head、tail1、tail2。第一個詞典會鏈到第二和第三個詞典。我們根據詞頻對詞語進行排序,令head前向神經網絡去預測高頻詞語;tail1去預測中間頻率的詞語;tail2去預測低頻詞語。
因為高頻詞占據了語料中絕大部分的頻數(Zipf’s Law),所以在大多數情況下,我們只需要用head這個規模較小的前向神經網絡去做預測,這很大程度上減少了計算量。當遇到低頻詞的時候(比如上圖中的“二氧化碳”),模型先使用head去預測,發現“tail2”的概率值最大,這表明需要繼續使用tail2前向神經網絡去預測。然后我們得到tail2前向神經網絡對于“二氧化碳”的預測值之后,讓其與head的“tail2”位置的概率值相乘,就能得到“二氧化碳”這個詞的預測概率。在具體實現中,tail1和tail2一般是兩層的前向神經網絡,中間隱層維度設為一個較小的值,從而實減少模型的參數。下圖是PyTorch實現的一個adaptive softmax的示例。詞典大小為50萬。
可以看到,中間頻率的詞語的向量維度是192;低頻詞語的向量維度是48。相對于原來的參數量,adaptive softmax參數減少了500000*768-37502*768-62500*192-400000*48-768*768-192*768-48*768 = 323224320個,相當于原來參數量的84.2%。在使用adaptive softmax之后,詞典的規模可以從8萬擴展到50萬。50萬詞典已經可以覆蓋絕大部分常見詞,能有效的減少OOV的情況。
4. Adaptive Input
Softmax層一定程度上可以看作embedding層的鏡像。因此可以把softmax上的優化操作搬到embedding層。在今年的ICLR上facebook提出了adaptive input方法[7]。下面簡要介紹adaptive input的原理。
如上圖所示,adaptive input對高頻詞使用較大的維度,對低頻詞使用較小的維度。更具體的,上圖把50萬詞語按照詞頻排好序,并分成三個部分:第一部分包括37500個高頻詞語,詞向量維度為768;第二部分包括62500個中間頻率的詞語,詞向量維度為192;第三部分包括40萬個低頻詞語,詞向量維度為48。為了使維度可以統一到隱層維度,這里引入了三個不同的前向神經網絡,把不同維度的詞向量映射到相同的維度。經過計算,我們可以得到adaptive input 減少的參數量是500000*768-37500*768-62500*192-400000*48-768*768-192*768-48*768= 323225856,相當于原來的參數量的84.2%。當模型同時引入adaptive softmax和adaptive input的時候,詞典可以進一步擴展到100萬。
5. 動態詞典
谷歌BERT模型使用固定的詞典,即對不同的語料和下游任務,均只使用一個詞典。這對基于字的模型是合理的。因為中文字的數量有限,使用谷歌提供的大小為21128的詞典不會有OOV的問題。但是對于基于詞的BERT模型,使用固定詞典則會有嚴重的問題。下表展示了使用中文維基百科作為預訓練語料,在多個下游任務上的OOV詞語數量以及OOV詞語數量占總詞典大小的百分比。其中第一列展示了不同下游任務數據集的名稱以及對應的詞典大小,第二、三、四列展示了不同大小的維基百科詞典與下游任務數據詞典相比較時的OOV在下游任務數據集的占比。可以看到,大詞典有效的緩解了OOV的問題。但是即使詞典擴大到100萬,仍然有很多未登錄詞
因此,對于基于詞的BERT模型,無論是用新的語料進行疊加預訓練,還是針對下游任務進行微調,我們都需要生成新的詞典(動態詞典),并根據新的詞典去對預訓練模型的embedding層和softmax層進行調整。調整的方式如下圖所示(藍色表示根據預訓練模型的參數初始化,紅色表示隨機初始化)。如果使用固定詞表,那么詞語“人工智能”會被映射到UNK,這個詞語無法在下游任務上進行訓練。對于加入adaptive機制的模型,調整的過程會增加一些步驟。后面實驗中基于詞的BERT模型均默認使用動態詞典。動態詞典相對于固定詞典在效果上有著顯著的提升。
6. 基于BERT的以詞搜詞
本文的另一項工作是嘗試了一種上下文相關詞向量的最近鄰檢索方法。在傳統的詞向量工作中,每個詞對應一個固定的向量,我們稱其為上下文無關詞向量。對這類詞向量進行最近鄰檢索只需要計算詞向量之間的cos值,并根據cos值進行排序。對于上下文相關詞向量,詞向量不僅和詞語本身有關,還和詞語周圍的上下文有關。也就是語料中的每一個token(詞語的一次出現),都有一個獨有的向量。ELMO[8]為每個token計算一個向量,并利用token向量去尋找其它的token向量。ELMO是基于整個語料尋找token向量的最近鄰。這里我們嘗試一種基于詞典的上下文相關詞向量檢索方法,具體步驟如下:假如我們需要查找在句子“吉利汽車是中國汽車品牌”中詞語“吉利”的最近鄰(如下圖),我們首先把這句話輸入到BERT編碼器中,取最上層的詞語對應的隱層向量作為詞向量。然后我們把詞典中的所有詞語依次替換到“吉利”的位置,這樣就得到每個詞語在特定上下文中的向量。我們計算這些向量之間的cos值,即可得到詞語的最近鄰。
我們還嘗試使用基于字的BERT模型進行以詞搜詞作為基于詞的模型的對比。具體步驟和基于詞的模型相似,只是在基于字的模型中,每一個字對應一個向量,因此一個詞會對應多個向量。我們對BERT編碼器最上層的字的隱層向量取平均,從而得到每個詞語在特定上下文中的向量。
使用上面介紹的方式進行以詞搜詞,相對于傳統的上下文無關詞向量,在多義詞的檢索效果上有著明顯的提升。下面給出幾個以詞搜詞的示例。給定一句話以及這句話中要檢索的詞語,返回這個詞語的最近鄰詞語以及相似度。
候選詞語:“吉利”
候選句子:2010年 6 月 2 日 福特汽車公司 宣布 出售 旗下 高端 汽車 沃爾沃 予 中國 浙江省 的?吉利?汽車 , 同時將 于 2010 年 第四季 停止 旗下 中階 房車 品牌 所有 業務 , 并 將 其 資源 全數 轉移 至 高級車 品牌 林肯 , 2011 年 1 月 4 日 , 福特 汽車 正式 裁徹 品牌 。
在這個例子中,“吉利”指一種汽車品牌。可以看到基于詞的模型的檢索效果不錯。其中“沃爾沃”、“金牛座”是汽車的品牌。“永利”、“天安”、“仁和”、“新光”均是公司名稱,并且這些公司均以一個比較吉利的詞語作為公司的名字。基于字的模型效果也不錯,會傾向于返回包含“吉”、“利”這兩個字的詞語。
候選詞語:“吉利”
候選句子:主要演員 有 扎克· 布拉 夫 、 薩拉 · 朝克 、 唐納德 · 費森 、 尼爾 · 弗林 、 肯 · 詹金斯 、 約翰 · 麥 吉利 、 朱迪 · 雷耶斯 、 邁克爾 · 莫斯利 等 。
在這個例子中,“吉利”指一個人名。可以看到基于字和基于詞的模型均通過上下文捕捉到了這里的“吉利”是人名的信息。基于字的模型返回的人名均包含“利”和“吉”。基于詞的模型返回的單詞則更加的多樣。
候選詞語:“吉利”
候選句子:他 出生 時 身上附有 胎膜 , 其母 認為 這是 一個?吉利?的 征兆 。
在這個例子中,“吉利”指這個單詞的本義。可以看到基于字和基于詞的模型均表現不錯。基于字的模型返回的單詞大多包含“吉”、“利”兩字。基于詞的模型除了會返回和“吉利”意思相近的詞,比如“仁德”、“光彩”、“愉快”,還會返回“食用油”、“玉”這樣的名詞。這些名字放在原句中比較合適。
候選詞語:“蘋果”
候選句子:?另外 , 劉德華亦 堅持 每天 喝 一點 混合 果汁 , 比如?蘋果?加 紅蘿卜 一起 榨 的 汁 , 以 保持 自身 的 健康 。
在這個例子中,“蘋果”指水果。兩種模型效果均不錯。基于字的模型傾向返回包含“果”的詞。
候選詞語:“蘋果”
候選句子:蘋果?削減 了 臺式 Mac 產品線 上 的 眾多 產品
在這個例子中,“蘋果”指科技公司。基于詞的模型效果不錯。但是基于字的模型效果一般,雖然也在topn列表中返回了“谷歌”、“微軟”,但是前面幾個單詞均是包含“果”的詞語。
候選詞語:“騰訊”
候選句子:馬化騰于 1984 年 隨 家人 從 海南 移居 深圳 , 14 年后 的 1998 年 11 月 , 他 和 其他 四位 聯合創始人一起 創立 騰訊 。
在這個例子中,我們可以看到基于詞的模型返回的均是互聯網公司或者相關的內容。基于字的模型也會返回和互聯網公司相關的單詞,比如“微信”、“百度”,但是也會返回一些包含“騰”的詞語。這些詞語和互聯網公司關系較弱。
通過上面的定性分析,我們可以看到使用基于字的BERT模型做詞的檢索有一定的局限性。基于字的模型的詞向量會受到字向量的影響,傾向于返回包含相同字的詞語。基于詞的模型效果較好,能對多義詞進行高質量的檢索。
上面使用的檢索方法效率較低。假如詞典大小為2萬,那么進行一次檢索,需要通過BERT編碼器2萬次。如果不加以優化,檢索一次的時間需要十幾秒以上。目前我們正在進行優化。我們發現合理的減少編碼器的層數和attention head的個數,可以在大幅度提升效率的同時,對檢索結果質量產生較小的影響。目前,我們對2萬詞語進行檢索,時間可以控制在3秒以內,并能得到較高質量的檢索結果。在這個方向上還有很多的優化點,后續我們會進一步探索如何提升檢索效率。
7. 實驗
和Google BERT一樣,我們使用中文維基百科作為語料進行預訓練。對于語料中的中文,我們使用jieba默認模式進行分詞;對于語料中的英文等其它語言,我們使用和Google相同的分詞策略。所有的模型均訓練50萬步;學習率是1e-4(warmuplinear策略,warmup設為0.01);優化器為BERT默認的AdamW;batchsize為256;序列長度為192。我們使用一個百科詞條作為一個文檔。文檔中根據“。”、“!”、“?”進行分句。目前我們有8萬詞典和50萬詞典的模型,100萬詞典的模型正在訓練當中。我們和Google BERT預訓練使用的策略基本一樣。只是受限于資源,我們的seq_length和訓練步數小于Google的預訓練模型。
7.1 詞模型在下游任務的表現
我們用5個公開的中文下游任務數據集來對基于詞的BERT模型進行評估。LCQMC是哈工大發布的問題匹配數據集[10];Book review是北師大發布的書評情感分類數據集[11]。Chnsenticorp是百度給出的評論情感分析數據集[2];Shopping是評論數據集;XNLI 是句子關系推理數據集[12]。
下表展示了基于詞的BERT模型在5個公開數據集上的表現。評價指標是不同任務上的分類的準確率(驗證集/測試集)。可以看到,詞模型在Chnsenticorp以及Shopping數據集上與字模型表現相當,在其他數據集上與字模型相比還有差距。?
另外,我們還對基于8萬詞典和50萬詞典的BERT模型進行了對比。大詞典較大幅度的降低了OOV的情況,50萬詞典的詞模型在四個數據集上的表現都顯著優于8萬詞典的詞模型。
7.2 詞模型在內部情感分類數據集上的表現
下表展示的是在內部情感分類數據集的結果,與上面測試集不同之處在于,這個測試集以及預訓練的詞模型的數據集都是同源的,另外由于大詞表的情感分類詞模型還沒有訓練出來,這個詞模型是一個小詞典的詞模型,可以看出,詞模型的表現比字模型的表現略好一些。
7.3 動態詞表的有效性
下表展示了使用固定詞典和動態詞典的模型在書評分類數據集上的效果。不管是使用隨機初始化還是預訓練模型初始化,動態詞典的效果都要顯著的好于固定詞典。說明動態詞表對于詞模型去初始化下游任務模型確實非常有用。
7.4 對于實驗結果的分析
詞模型在公開數據集的表現遜于字模型,我們是不是可以得到詞模型一定差于字模型的結論?我們認為答案是否定的。根據內部情感分類詞模型的分類結果就可以看出來,詞模型還是表現不錯。
在公開數據集表現不好,我們認為如下幾方面原因,第一是由于OOV的問題,根據上面對于OOV的統計結果,即使詞典擴展至100萬,也在下游的數據上存在較多OOV的情況,后面雖然加了動態詞典,但是這部分新加入的詞語向量沒有經過預訓練。如果預訓練語料和下游任務數據集有相似的來源,會一定程度上減緩這個問題。第二是因為詞相對于字更加的稀疏(有些詞的頻率很低),我們使用的預訓練語料(中文維基百科)規模較小,這導致對一些詞的訓練并不充分。在更大規模,更多樣的語料上進行預訓練有機會帶來更好的效果[9]。
此外,詞模型在一些數據集表現比較差還有一些其他原因,比如在書評數據集上,測試集包含25988個詞語,其中9525個詞語不在訓練集中。我們認為這是導致在書評數據集上基于詞的模型不如基于字的模型的重要的因素,更合適的分詞策略(例如細粒度分詞)會一定程度上減緩這個問題。
在本文中我們介紹了如何通過改進BERT的softmax層和embedding層來擴充中文詞模型的詞典規模,從而減緩未登錄詞的問題。此外,在訓練好的基于詞的BERT模型的基礎上,我們給出了一種針對上下文相關詞向量進行檢索的方法, 展示了使用BERT詞向量進行以詞搜詞的效果。
參考資料:
Devlin J, Chang M W, Lee ? ? K, et al. Bert: Pre-training of deep bidirectional transformers for ? ? language understanding[J]. NAACL 2019.
https://github.com/PaddlePaddle/LARK/tree/develop/ERNIE
Yan Song, Shuming Shi, ? ? Jing Li, and Haisong Zhang. Directional Skip-Gram: Explicitly ? ? Distinguishing Left and Right Context for Word Embeddings. NAACL 2018.
Bengio Y, Ducharme R, ? ? Vincent P, et al. A neural probabilistic language model[J]. JMLR, 2003.
Tomas Mikolov, Ilya ? ? Sutskever, Kai Chen, Gregory S. Corrado, and Jeffrey Dean:Distributed ? ? Representations of Words and Phrases and their Compositionality. NIPS ? ? 2013.
Edouard Grave , Armand ? ? Joulin, Moustapha Cisse, David Grangierd, Herve Jegou et al. Efficient ? ? softmax approximation for GPUs, ICML 2016.
Alexei Baevski , Michael ? ? Auli. Adaptive Input Representations for Neural Language Modeling. ICLR ? ? 2019.
Peters, Matthew E., et ? ? al. Deep contextualized word representations.?NAACL 2018.
https://github.com/dbiir/UER-py
Liu, X., Chen, Q., Deng, ? ? C. , et al. LCQMC: A Large-scale Chinese Question Matching Corpus. COLING ? ? 2018.
Qiu Y, Li H, Li S, et ? ? al. Revisiting Correlations between Intrinsic and Extrinsic Evaluations of ? ? Word Embeddings. CCL & NLP-NABD.
https://github.com/facebookresearch/XNLI
總結
以上是生活随笔為你收集整理的从字到词,大词典中文BERT模型的探索之旅的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 直播预告|中台基石腾讯云TStack的正
- 下一篇: 【报名中】数据库大咖们与你聊聊云上实践的