NLP領域預訓練模型的現狀及分析
作者 | 王澤洋 單位 | 小牛翻譯 王澤洋 東北大學自然語言處理實驗室研究生,研究方向為機器翻譯。 小牛翻譯,核心成員來自東北大學自然語言處理實驗室,由姚天順教授建立於1980年,現由朱靖波教授、肖桐博士領導,長期從事計算語言學的相關研究工作,主要包括機器翻譯、語言分析、文字挖掘等。團隊研發的支援140種語言互譯的小牛翻譯系統已經得到廣泛應用,並研發了小牛翻譯雲()讓機器翻譯技術賦能全球企業。 |
預訓練的方法最初是在影像領域提出的,達到了良好的效果,後來被應用到自然語言處理。預訓練一般分為兩步,首先用某個較大的資料集訓練好模型(這種模型往往比較大,訓練需要大量的記憶體資源),使模型訓練到一個良好的狀態,然後下一步根據不同的任務,改造預訓練模型,用這個任務的資料集在預訓練模型上進行微調。
這種做法的好處是訓練代價很小,預訓練的模型引數可以讓新的模型達到更快的收斂速度,並且能夠有效地提高模型效能,尤其是對一些訓練資料比較稀缺的任務,在神經網路引數十分龐大的情況下,僅僅依靠任務自身的訓練資料可能無法訓練充分,預訓練方法可以認為是讓模型基於一個更好的初始狀態進行學習,從而能夠達到更好的效能。
一、預訓練方法發展
基於詞嵌入的預訓練方法
2003年,Bengio等人提出了神經語言模型(Neural Network Language Model)[1]神經語言模型在訓練過程中,不僅學習到預測下一個詞的機率分佈,同時也得到了一個副產品:詞嵌入表示。相比隨機初始化的詞嵌入,模型訓練完成後的詞嵌入已經包含了詞彙之間的資訊。2013年,Mikolov等人提出了word2vec工具,其中包含了CBOW(Continue Bag of Words)模型和Skip-gram模型[2-3],該工具僅僅利用海量的單語資料,透過無監督的方法訓練得到詞嵌入。
基於語言模型的預訓練方法
詞嵌入本身具有侷限性,最主要的缺點是無法解決一詞多義問題,不同的詞在不同的上下文中會有不同的意思,而詞嵌入對模型中的每個詞都分配了一個固定的表示。針對上述問題,Peters等人提出了ELMo(Embedding from Language Model)[4],即使用語言模型來獲取深層的上下文表示。ELMo的具體做法是,基於每個詞所在的上下文,利用雙向LSTM的語言模型來獲取這個詞的表示。ELMo的方法能夠提取豐富的特徵給下游任務使用,但是ELMo僅僅進行特徵提取而沒有預訓練整個網路,遠遠沒有發揮預訓練的潛力,另外一個不足之處是,自注意力機制的Transformer模型結構,相比LSTM能夠更有效地捕獲長距離依賴,對句子中資訊進行更充分的建模。
針對上述兩個問題,Radford等人提出了 GPT Generative Pre-Training)[5],即生成式的預訓練。GPT將LSTM換成了Transformer,獲得了更高的成績,但是由於使用的是單向模型,只能透過前面詞預測後面的詞,可能會遺漏資訊。Devlin等人提出了BERT(Bidirectional Encoder Representations from Transformers)[6],即基於Transformer的雙向編碼器表示。BERT和GPT的結構和方法十分相似,最主要的不同之處在於GPT模型使用的是單向語言模型,可以認為是基於Transformer的解碼器表示,而BERT使用的基於Transformer的編碼器能夠對來自過去和未來的資訊進行建模,能夠提取更豐富的資訊。三個預訓練模型的圖如下所示:
BERT提出後大火,也許是因為BERT的效果太好。目前絕大多數的預訓練模型都是在BERT上改造而來。清華大學的王曉智和張正彥同學給出了目前的預訓練模型關係圖,這裡引用一下,如下圖所示:
下面主要介紹幾個BERT變種模型。
二、Cross-lingual Language Model Pretraining(XLM)[7]
在這項工作中,作者將預訓練方法擴充套件到多種語言並展示跨語言預訓練的有效性。筆者認為,這篇工作的創新點有兩個:設計了一個用於多語言分類的跨語種的語言模型訓練任務;將BERT作為模型初始化用到無監督機器翻譯上。
1、多語言分類任務
雖然BERT也經過了100多種語言的訓練,但並未針對跨語言任務進行最佳化,因此共享的知識有限。為了克服這個問題,XLM透過以下方式改造了BERT:
在BERT中,每個樣本是用一種語言構建的。XLM對它的改進是每個訓練樣本都包含兩種語言的相同文字。與BERT一樣,該模型的目標是預測被遮蔽的詞,但採用新的體系結構,該模型可以使用一種語言的上下文來預測另一種語言的詞。因為不同語種的被遮蔽詞是不同的(隨機)。改造後的BERT表示為翻TLM(Translation Language Model),而帶有BPE輸入的“原始” BERT表示為MLM(Masked Language Model)。透過訓練MLM和TLM並在它們之間交替進行訓練來訓練完整的模型。
XLM說明訓練一種跨語言的語言模型對於資源匱乏的語言可能非常有好處,因為它們可以利用來自其他語言的資料,尤其是由於BPE預處理而產生的相似語言。
2、無監督機器翻譯
XLM做的另一個工作是,利用BERT初始化無監督模型的Encoder和Decoder。具體做法是在Transformer的Encoder端和Decoder端,進行隨機初始化、MLM初始化或者CLM初始化(具體如圖),共得到9種不同的結構。
三、Masked Sequence to Sequence pre-training(MASS) [8]
BERT的預訓練是在Transformer的Encoder上進行預訓練,所以BERT天然比較親和自然語言理解的任務,而很難應用於像機器翻譯這樣的語言生成類任務。
微軟的工作者認為BERT單純預訓練了Transformer的Encoder部分,但是對於端到端的任務,Encoder-Decoder是有關聯的,如果用BERT初始化Encoder端和Decoder端,兩端只是分別訓練好的沒有什麼聯絡。於是為了解決這個問題,微軟的工作中提出了MASS(Masked Sequence to Sequence pre-training)。
MASS是在Encoder端和Decoder端透過語言模型預訓練。與BERT不同的是mask掉的詞是k個(這k個詞是連續的),Decoder中只輸入前k-1個被mask掉的詞,預測被mask掉的k個詞。MASS的優勢有:
-
Encoder被強制去抽取未被遮蔽掉詞的語義,以提升Encoder理解源序列文字的能力。
-
Encoder端其它詞(在Encoder端未被遮蔽掉的詞)都被遮蔽掉,可以讓Decoder從Encoder端提取資訊來幫助連續片段的預測。
-
Encoder預測連續的序列片段可以提升Encoder的語言建模能力。
MASS只需要無監督的單語資料進行預訓練。MASS支援跨語言的序列到序列生成(比如機器翻譯),也支援單語言的序列到序列生成(比如文字摘要生成、對話生成)。比如用MASS做英法的機器翻譯時,在一個模型裡同時進行英語到英語以及法語到法語的預訓練(單獨給每個語言加上相應的語言嵌入向量,用來區分不同的語言)。
至於效果,在WMT19中,MASS幫助微軟獲得了多項翻譯的冠軍,具體可以檢視WMT19的榜單。
四、XLNet: Generalized Autoregressive Pretraining for Language Understanding
自迴歸語言模型是單向的但是天然匹配自然語言生成任務,自編碼(BERT)可以融合雙向資訊但是引入MASK導致預訓練和Fine-tuning階段的不一致。XLNET融合了自迴歸語言模型和自編碼語言模型的優點。XLNET在模型方面的貢獻在於,隨然看上去仍然是從左向右的輸入和預測模式,但是其實內部已經引入了當前單詞的下文資訊。
在預訓練階段,引入Permutation Language Model的訓練目標。簡單點來說就是固定當前要預測的詞,透過調換其餘詞的位置,將預測詞後邊的詞換到當先此的前邊,在隨機排列組合後的各種可能裡,再選擇一部分作為模型預訓練的輸入。這樣當前詞就能看到上下文的內容了,但是形式上看上去仍然是從左到右在預測後一個單詞。具體的實現可以看XLNET的論文。
除此之外,引入了Transformer-XL的主要思路:相對位置編碼以及分段RNN機制。實踐已經證明這兩點對於長文件任務是很有幫助的;在預訓練階段極大擴充了資料規模,並對質量進行了篩選過濾。
相對於BERT模型,XLNET對於長文件的應用有明顯的提升,因為Transformer天然對長文件任務處理有弱點。上文提過,對於生成類的NLP任務,BERT仍然不能很好地處理。而XLNET的預訓練模式天然符合下游任務序列生成結果。但是目前還沒有實驗證明。
五、結論
從BERT的各類變種就可以看出BERT和Transformer的火爆程度,筆者認為目前預訓練+下游任務微調有一統自然語言領域的趨勢。預訓練不僅在低資源任務上有很高的提升作用,甚至在豐富資源的任務上對模型效能也有顯著的提高。如果沒有超越Transformer的特徵提取模型提出的話,相信在BERT上各類的改造會層出不窮,以適應不同型別的下游任務。還有的預訓練模型在BERT基礎上引入知識圖譜等,讓BERT變得更加“有知識”,如清華大學的ERNIE[10]。
既然各類不同的任務對預訓練模型進行不同的改造,那能不能有一種預訓練模型,可以適應全部的NLP任務呢,近期谷歌剛剛釋出了超大規模的T5(NLP Text-to-Text)[11]預訓練模型。它給整個 NLP 預訓練模型領域提供了一個通用框架,把所有任務都轉化成一種形式,無論什麼任務,直接拿來一個超大預訓練模型,然後主要工作就變成了怎麼把任務轉換成合適的文字輸入輸出,,比如德英翻譯,只需將訓練資料集的輸入部分前加上“translate German to English”。
另外的思路是,不是改造預訓練的模型,而是將龐大的預訓練模型進行壓縮,比如近期的alBERT,透過共享引數、引入單獨的詞嵌入層維度來減少BERT的引數。最終效能也登上GLUE第一(剛剛被T5超過)。還有透過知識蒸餾技術,訓練出的tinyBERT等,都是對BERT模型進行的模型壓縮。
參考文獻
[1] Bengio Y, Ducharme R, Vincent P, et al. A neural probabilistic language model.
[2] Mikolov T, Chen K, Corrado G S, et al. Efficient Estimation of Word Representations in Vector Space.
[3] Mikolov T, Sutskever I, Chen K, et al. Distributed Representations of Words and Phrases and their Compositionality.
[4] Matthew Peters, Mark Neumann, Mohit Iyyer, Matt Gardner, Christopher Clark, Kenton Lee, and Luke Zettlemoyer. 2018. Deep Contextualized Word Representations.
[5] Alec Radford, Karthik Narasimhan, Tim Salimans, and Ilya Sutskever. 2018. Improving Language Understanding by Generative Pre-Training.
[6] Jacob Devlin, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. 2018. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding.
[7] Guillaume Lample and Alexis Conneau. 2019. Cross-lingual Language Model Pretraining.
[8] Kaitao Song, Xu Tan, Tao Qin, Jianfeng Lu, and Tie-Yan Liu. 2019. MASS: Masked Sequence to Sequence Pre-training for Language Generation.
[9] Zhilin Yang, Zihang Dai, Yiming Yang, Jaime Carbonell, Ruslan Salakhutdinov, and Quoc V. Le. 2019. XLNet: Generalized Autoregressive Pretraining for Language Understanding.
[10] Zhengyan Zhang, Xu Han, Zhiyuan Liu1, Xin Jiang, Maosong Sun1, Qun Liu. ERNIE: Enhanced Language Representation with Informative Entities.
[11] Colin Raffel, Noam Shazeer, Adam Roberts, Katherine Lee,et al. Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2662685/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- NLP與深度學習(五)BERT預訓練模型深度學習模型
- 「NLP」GPT:第一個引入Transformer的預訓練模型GPTORM模型
- 通過NMT訓練出通用的語境詞向量:NLP中的預訓練模型?模型
- 透過NMT訓練出通用的語境詞向量:NLP中的預訓練模型?模型
- 領域知識增強的預訓練語言模型在藥電商搜尋領域的實踐模型
- 區塊鏈發展現狀及觸及領域分析區塊鏈
- 【EMNLP 2023】面向垂直領域的知識預訓練語言模型模型
- 多項NLP任務新SOTA,Facebook提出預訓練模型BART模型
- 完勝 BERT,谷歌最佳 NLP 預訓練模型開源,單卡訓練僅需 4 天谷歌模型
- 最強NLP預訓練模型!谷歌BERT橫掃11項NLP任務記錄模型谷歌
- NLP生成任務超越BERT、GPT!微軟提出通用預訓練模型MASSGPT微軟模型
- 自訓練 + 預訓練 = 更好的自然語言理解模型模型
- 蘋果在AR VR領域的現狀與預測蘋果VR
- 中文預訓練模型ZEN開源,效果領域內最佳,創新工場港科大出品模型
- PyTorch預訓練Bert模型PyTorch模型
- TensorFlow 呼叫預訓練好的模型—— Python 實現模型Python
- 【預訓練語言模型】 使用Transformers庫進行BERT預訓練模型ORM
- 文件智慧:通用文件預訓練模型與資料集,推動NLP落地升級模型
- 中文任務全面超越 BERT:百度正式釋出NLP預訓練模型ERNIE模型
- 【AI】Pytorch_預訓練模型AIPyTorch模型
- 預訓練模型 & Fine-tuning模型
- 蘋果在AR VR領域的現狀與預測再談蘋果VR
- NLP教程(2) | GloVe及詞向量的訓練與評估
- PaddlePaddle分散式訓練及CTR預估模型應用分散式模型
- 加入Transformer-XL,這個PyTorch包能呼叫各種NLP預訓練模型ORMPyTorch模型
- CV之後,純MLP架構又來搞NLP了,效能媲美預訓練大模型架構大模型
- 【預訓練語言模型】使用Transformers庫進行GPT2預訓練模型ORMGPT
- MxNet預訓練模型到Pytorch模型的轉換模型PyTorch
- 知識增強的預訓練語言模型系列之ERNIE:如何為預訓練語言模型注入知識模型
- 「四大模型」革新NLP技術應用,揭秘百度文心ERNIE最新開源預訓練模型大模型
- 瀏覽器中的機器學習:使用預訓練模型瀏覽器機器學習模型
- 模型訓練:資料預處理和預載入模型
- YOLOv5模型訓練及檢測YOLO模型
- TorchVision 預訓練模型進行推斷模型
- 常見預訓練語言模型簡述模型
- keras中VGG19預訓練模型的使用Keras模型
- 通用模型、全新框架,WavLM語音預訓練模型全解模型框架
- NLP領域的ImageNet時代:詞嵌入已死,語言模型當立模型