自然语言处理中的语言模型预训练方法
最近,在自然語言處理(NLP)領(lǐng)域中,使用語言模型預(yù)訓(xùn)練方法在多項 NLP 任務(wù)上都獲得了不錯的提升,廣泛受到了各界的關(guān)注。就此,我將最近看的一些相關(guān)論文進(jìn)行總結(jié),選取了幾個代表性模型(包括 ELMo [1],OpenAI GPT [2] 和 BERT [3])和大家一起學(xué)習(xí)分享。
作者丨羅凌
學(xué)校丨大連理工大學(xué)信息檢索研究室
研究方向丨深度學(xué)習(xí),文本分類,實(shí)體識別
引言
在介紹論文之前,我將先簡單介紹一些相關(guān)背景知識。首先是語言模型(Language Model),語言模型簡單來說就是一串詞序列的概率分布。具體來說,語言模型的作用是為一個長度為 m 的文本確定一個概率分布 P,表示這段文本存在的可能性。
在實(shí)踐中,如果文本的長度較長,P(wi | w1, w2, . . . , wi?1) 的估算會非常困難。因此,研究者們提出使用一個簡化模型:n 元模型(n-gram model)。在 n 元模型中估算條件概率時,只需要對當(dāng)前詞的前 n 個詞進(jìn)行計算。在 n 元模型中,傳統(tǒng)的方法一般采用頻率計數(shù)的比例來估算 n 元條件概率。當(dāng) n 較大時,機(jī)會存在數(shù)據(jù)稀疏問題,導(dǎo)致估算結(jié)果不準(zhǔn)確。因此,一般在百萬詞級別的語料中,一般也就用到三元模型。
為了緩解 n 元模型估算概率時遇到的數(shù)據(jù)稀疏問題,研究者們提出了神經(jīng)網(wǎng)絡(luò)語言模型。代表性工作是 Bengio 等人在 2003 年提出的神經(jīng)網(wǎng)絡(luò)語言模型,該語言模型使用了一個三層前饋神經(jīng)網(wǎng)絡(luò)來進(jìn)行建模。其中有趣的發(fā)現(xiàn)了第一層參數(shù),用做詞表示不僅低維緊密,而且能夠蘊(yùn)涵語義,也就為現(xiàn)在大家都用的詞向量(例如 word2vec)打下了基礎(chǔ)。
其實(shí),語言模型就是根據(jù)上下文去預(yù)測下一個詞是什么,這不需要人工標(biāo)注語料,所以語言模型能夠從無限制的大規(guī)模單語語料中,學(xué)習(xí)到豐富的語義知識。
接下來再簡單介紹一下預(yù)訓(xùn)練的思想。我們知道目前神經(jīng)網(wǎng)絡(luò)在進(jìn)行訓(xùn)練的時候基本都是基于后向傳播(BP)算法,通過對網(wǎng)絡(luò)模型參數(shù)進(jìn)行隨機(jī)初始化,然后通過 BP 算法利用例如 SGD 這樣的優(yōu)化算法去優(yōu)化模型參數(shù)。
那么預(yù)訓(xùn)練的思想就是,該模型的參數(shù)不再是隨機(jī)初始化,而是先有一個任務(wù)進(jìn)行訓(xùn)練得到一套模型參數(shù),然后用這套參數(shù)對模型進(jìn)行初始化,再進(jìn)行訓(xùn)練。
其實(shí)早期的使用自編碼器棧式搭建深度神經(jīng)網(wǎng)絡(luò)就是這個思想。還有詞向量也可以看成是第一層 word embedding 進(jìn)行了預(yù)訓(xùn)練,此外在基于神經(jīng)網(wǎng)絡(luò)的遷移學(xué)習(xí)中也大量用到了這個思想。
接下來,我們就具體看一下這幾篇用語言模型進(jìn)行預(yù)訓(xùn)練的工作。
ELMo
引言
Deep Contextualized Word Representations?[1] 這篇論文來自華盛頓大學(xué)的工作,最后是發(fā)表在今年的 NAACL 會議上,并獲得了最佳論文。
其實(shí)這個工作的前身來自同一團(tuán)隊在 ACL 2017 發(fā)表的 Semi-supervised sequence tagging with bidirectional language models [4],只是在這篇論文里,他們把模型更加通用化了。
首先我們來看看他們工作的動機(jī),他們認(rèn)為一個預(yù)訓(xùn)練的詞表示應(yīng)該能夠包含豐富的句法和語義信息,并且能夠?qū)Χ嗔x詞進(jìn)行建模。而傳統(tǒng)的詞向量(例如 word2vec)是上下文無關(guān)的。例如下面"apple"的例子,這兩個"apple"根據(jù)上下文意思是不同的,但是在 word2vec 中,只有 apple 一個詞向量,無法對一詞多義進(jìn)行建模。
所以他們利用語言模型來獲得一個上下文相關(guān)的預(yù)訓(xùn)練表示,稱為 ELMo,并在 6 個 NLP 任務(wù)上獲得了提升。
方法
在 EMLo 中,他們使用的是一個雙向的 LSTM 語言模型,由一個前向和一個后向語言模型構(gòu)成,目標(biāo)函數(shù)就是取這兩個方向語言模型的最大似然。
在預(yù)訓(xùn)練好這個語言模型之后,ELMo 就是根據(jù)下面的公式來用作詞表示,其實(shí)就是把這個雙向語言模型的每一中間層進(jìn)行一個求和。最簡單的也可以使用最高層的表示來作為 ELMo。
然后在進(jìn)行有監(jiān)督的 NLP 任務(wù)時,可以將 ELMo 直接當(dāng)做特征拼接到具體任務(wù)模型的詞向量輸入或者是模型的最高層表示上。
總結(jié)一下,不像傳統(tǒng)的詞向量,每一個詞只對應(yīng)一個詞向量,ELMo 利用預(yù)訓(xùn)練好的雙向語言模型,然后根據(jù)具體輸入從該語言模型中可以得到上下文依賴的當(dāng)前詞表示(對于不同上下文的同一個詞的表示是不一樣的),再當(dāng)成特征加入到具體的 NLP 有監(jiān)督模型里。?
實(shí)驗(yàn)?
這里我們簡單看一下主要的實(shí)驗(yàn),具體實(shí)驗(yàn)還需閱讀論文。首先是整個模型效果的實(shí)驗(yàn)。他們在 6 個 NLP 任務(wù)上進(jìn)行了實(shí)驗(yàn),首先根據(jù)目前每個任務(wù)搭建了不同的模型作為 baseline,然后加入 ELMo,可以看到加入 ELMo 后 6 個任務(wù)都有所提升,平均大約能夠提升 2 個多百分點(diǎn),并且最后的結(jié)果都超過了之前的先進(jìn)結(jié)果(SOTA)。
在下面的分析實(shí)驗(yàn)中,我們可以看到使用所有層的效果要比只使用最后一層作為 ELMo 的效果要好。在輸入還是輸出上面加 EMLo 效果好的問題上,并沒有定論,不同的任務(wù)可能效果不一樣。
OpenAI GPT
引言?
我們來看看第二篇論文 Improving Language Understanding by Generative Pre-Training [2],這是 OpenAI 團(tuán)隊前一段時間放出來的預(yù)印版論文。他們的目標(biāo)是學(xué)習(xí)一個通用的表示,能夠在大量任務(wù)上進(jìn)行應(yīng)用。
這篇論文的亮點(diǎn)主要在于,他們利用了Transformer網(wǎng)絡(luò)代替了LSTM作為語言模型來更好的捕獲長距離語言結(jié)構(gòu)。然后在進(jìn)行具體任務(wù)有監(jiān)督微調(diào)時使用了語言模型作為附屬任務(wù)訓(xùn)練目標(biāo)。最后在 12 個 NLP 任務(wù)上進(jìn)行了實(shí)驗(yàn),9 個任務(wù)獲得了 SOTA。
方法?
首先我們來看一下他們無監(jiān)督預(yù)訓(xùn)練時的語言模型。他們?nèi)匀皇褂玫氖菢?biāo)準(zhǔn)的語言模型目標(biāo)函數(shù),即通過前 k 個詞預(yù)測當(dāng)前詞,但是在語言模型網(wǎng)絡(luò)上,他們使用了 Google 團(tuán)隊在 Attention is all your need 論文中提出的 Transformer 解碼器作為語言模型。
Transformer 模型主要是利用自注意力(self-attention)機(jī)制的模型,這里我就不多進(jìn)行介紹,大家可以看論文或者參考我之前的文章自然語言處理中的自注意力機(jī)制(Self-Attention Mechanism)。
然后在具體 NLP 任務(wù)有監(jiān)督微調(diào)時,與 ELMo 當(dāng)成特征的做法不同,OpenAI GPT 不需要再重新對任務(wù)構(gòu)建新的模型結(jié)構(gòu),而是直接在 Transformer 這個語言模型上的最后一層接上 softmax 作為任務(wù)輸出層,然后再對這整個模型進(jìn)行微調(diào)。他們還發(fā)現(xiàn),如果使用語言模型作為輔助任務(wù),能夠提升有監(jiān)督模型的泛化能力,并且能夠加速收斂。
由于不同 NLP 任務(wù)的輸入有所不同,在 Transformer 模型的輸入上針對不同 NLP 任務(wù)也有所不同。
具體如下圖,對于分類任務(wù)直接講文本輸入即可;對于文本蘊(yùn)涵任務(wù),需要將前提和假設(shè)用一個 Delim 分割向量拼接后進(jìn)行輸入;對于文本相似度任務(wù),在兩個方向上都使用 Delim 拼接后,進(jìn)行輸入;對于像問答多選擇的任務(wù),就是將每個答案和上下文進(jìn)行拼接進(jìn)行輸入。
實(shí)驗(yàn)
下面我簡單的列舉了一下不同 NLP 任務(wù)上的實(shí)驗(yàn)結(jié)果。
語言推理任務(wù):
問答和常識推理任務(wù):
語義相似度和分類任務(wù):
可以看到在多項任務(wù)上,OpenAI GPT 的效果要比 ELMo 的效果更好。從下面的消除實(shí)驗(yàn)來看,在去掉預(yù)訓(xùn)練部分后,所有任務(wù)都大幅下降,平均下降了 14.8%,說明預(yù)訓(xùn)練很有效;在大數(shù)據(jù)集上使用語言模型作為附加任務(wù)的效果更好,小數(shù)據(jù)集不然;利用 LSTM 代替 Transformer 后,結(jié)果平均下降了 5.6%,也體現(xiàn)了 Transformer 的性能。
BERT
引言?
上周 Google 放出了他們的語言模型預(yù)訓(xùn)練方法,瞬時受到了各界廣泛關(guān)注,不少媒體公眾號也進(jìn)行了相應(yīng)報道,那我們來看看這篇論文 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding [3]。
這篇論文把預(yù)訓(xùn)練語言表示方法分為了基于特征的方法(代表 ELMo)和基于微調(diào)的方法(代表 OpenAI GPT)。而目前這兩種方法在預(yù)訓(xùn)練時都是使用單向的語言模型來學(xué)習(xí)語言表示。
這篇論文中,作者們證明了使用雙向的預(yù)訓(xùn)練效果更好。其實(shí)這篇論文方法的整體框架和 GPT 類似,是進(jìn)一步的發(fā)展。具體的,BERT 是使用 Transformer 的編碼器來作為語言模型,在語言模型預(yù)訓(xùn)練的時候,提出了兩個新的目標(biāo)任務(wù)(即遮擋語言模型 MLM 和預(yù)測下一個句子的任務(wù)),最后在 11 個 NLP 任務(wù)上取得了 SOTA。
方法
在語言模型上,BERT 使用的是 Transformer 編碼器,并且設(shè)計了一個小一點(diǎn)的 base 結(jié)構(gòu)和一個更大的網(wǎng)絡(luò)結(jié)構(gòu)。
對比一下三種語言模型結(jié)構(gòu),BERT 使用的是 Transformer 編碼器,由于 self-attention 機(jī)制,所以模型上下層直接全部互相連接的。而 OpenAI GPT 使用的是 Transformer 編碼器,它是一個需要從左到右的受限制的 Transformer,而 ELMo 使用的是雙向 LSTM,雖然是雙向的,但是也只是在兩個單向的 LSTM 的最高層進(jìn)行簡單的拼接。所以只有 BERT 是真正在模型所有層中是雙向的。
而在模型的輸入方面,BERT 做了更多的細(xì)節(jié),如下圖。他們使用了 WordPiece embedding 作為詞向量,并加入了位置向量和句子切分向量。此外,作者還在每一個文本輸入前加入了一個 CLS 向量,后面會有這個向量作為具體的分類向量。
在語言模型預(yù)訓(xùn)練上,他們不再使用標(biāo)準(zhǔn)的從左到右預(yù)測下一個詞作為目標(biāo)任務(wù),而是提出了兩個新的任務(wù)。第一個任務(wù)他們稱為 MLM,即在輸入的詞序列中,隨機(jī)的擋上 15% 的詞,然后任務(wù)就是去預(yù)測擋上的這些詞,可以看到相比傳統(tǒng)的語言模型預(yù)測目標(biāo)函數(shù),MLM 可以從任何方向去預(yù)測這些擋上的詞,而不僅僅是單向的。
但是這樣做會帶來兩個缺點(diǎn):
1. 預(yù)訓(xùn)練用 [MASK] 提出擋住的詞后,在微調(diào)階段是沒有 [MASK] 這個詞的,所以會出現(xiàn)不匹配;
2. 預(yù)測 15% 的詞而不是預(yù)測整個句子,使得預(yù)訓(xùn)練的收斂更慢。但是對于第二點(diǎn),作者們覺得雖然是慢了,但是效果提升比較明顯可以彌補(bǔ)。
對于第一點(diǎn)他們采用了下面的技巧來緩解,即不是總是用 [MASK] 去替換擋住的詞,在 10% 的時間用一個隨機(jī)詞取替換,10% 的時間就用這個詞本身。
而對于傳統(tǒng)語言模型,并沒有對句子之間的關(guān)系進(jìn)行考慮。為了讓模型能夠?qū)W習(xí)到句子之間的關(guān)系,作者們提出了第二個目標(biāo)任務(wù)就是預(yù)測下一個句子。其實(shí)就是一個二元分類問題,50% 的時間,輸入一個句子和下一個句子的拼接,分類標(biāo)簽是正例,而另 50% 是輸入一個句子和非下一個隨機(jī)句子的拼接,標(biāo)簽為負(fù)例。最后整個預(yù)訓(xùn)練的目標(biāo)函數(shù)就是這兩個任務(wù)的取和求似然。
在微調(diào)階段,不同任務(wù)的模型如下圖,只是在輸入層和輸出層有所區(qū)別,然后整個模型所有參數(shù)進(jìn)行微調(diào)。
實(shí)驗(yàn)
下面我們列出一下不同 NLP 上 BERT 的效果。
GLUE結(jié)果:
QA結(jié)果:
實(shí)體識別結(jié)果:
SWAG結(jié)果:
可以看到在這些所有 NLP 任務(wù)上,BERT 都取得了 SOTA,而且相比 EMLo 和 GPT 的效果提升還是比較大的。
在預(yù)訓(xùn)練實(shí)驗(yàn)分析上,可以看到本文提出的兩個目標(biāo)任務(wù)的作用還是很有效的,特別是在 MLM 這個目標(biāo)任務(wù)上。
作者也做了模型規(guī)模的實(shí)驗(yàn),大規(guī)模的模型效果更好,即使在小數(shù)據(jù)集上。
此外,作者也做了像 ELMo 當(dāng)成特征加入的實(shí)驗(yàn),從下圖可以看到,當(dāng)成特征加入最好效果能達(dá)到 96.1% 和微調(diào)的 96.4% 差不多,說明 BERT 對于基于特征和基于微調(diào)這兩種方法都是有效的。
總結(jié)
最后進(jìn)行簡單的總結(jié),和傳統(tǒng)的詞向量相比,使用語言模型預(yù)訓(xùn)練其實(shí)可以看成是一個句子級別的上下文的詞表示,它可以充分利用大規(guī)模的單語語料,并且可以對一詞多義進(jìn)行建模。
而且從后面兩篇論文可以看到,通過大規(guī)模語料預(yù)訓(xùn)練后,使用統(tǒng)一的模型或者是當(dāng)成特征直接加到一些簡單模型上,對各種 NLP 任務(wù)都能取得不錯的效果,說明很大程度上緩解了具體任務(wù)對模型結(jié)構(gòu)的依賴。在目前很多評測上也都取得了 SOTA,ELMo 也提供了官網(wǎng)供大家使用。
但是這些方法在空間和時間復(fù)雜度上都比較高,特別是 BERT,在論文中他們訓(xùn)練 base 版本需要在 16 個 TGPU 上,large 版本需要在 64 個 TPU 上訓(xùn)練 4 天。對于一般條件,一個 GPU 訓(xùn)練的話,得用上 1年。還有就是可以看出這些方法里面都存在很多工程細(xì)節(jié),一些細(xì)節(jié)做得不好的話,效果也會大大折扣。
參考文獻(xiàn)
[1] Peters, M. E. et al. Deep contextualized word representations. naacl (2018).?
[2] Radford, A. & Salimans, T. Improving Language Understanding by Generative Pre-Training. (2018).?
[3] Devlin, J., Chang, M.-W., Lee, K. & Toutanova, K. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. (2018).?
[4] Peters, M. E., Ammar, W., Bhagavatula, C. & Power, R. Semi-supervised sequence tagging with bidirectional language models. Acl (2017).
點(diǎn)擊以下標(biāo)題查看更多論文解讀:?
在全景視頻中預(yù)測頭部運(yùn)動:一種深度強(qiáng)化學(xué)習(xí)方法
網(wǎng)絡(luò)表示學(xué)習(xí)綜述:一文理解Network Embedding
神經(jīng)網(wǎng)絡(luò)架構(gòu)搜索(NAS)綜述
從傅里葉分析角度解讀深度學(xué)習(xí)的泛化能力
深度解讀DeepMind新作:史上最強(qiáng)GAN圖像生成器
ACL2018高分論文:混合高斯隱向量文法
ECCV 2018 | 騰訊AI Lab提出視頻再定位任務(wù)
KDD 18 | 斯坦福大學(xué)提出全新網(wǎng)絡(luò)嵌入方法
#投 稿 通 道#
?讓你的論文被更多人看到?
如何才能讓更多的優(yōu)質(zhì)內(nèi)容以更短路徑到達(dá)讀者群體,縮短讀者尋找優(yōu)質(zhì)內(nèi)容的成本呢? 答案就是:你不認(rèn)識的人。
總有一些你不認(rèn)識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學(xué)者和學(xué)術(shù)靈感相互碰撞,迸發(fā)出更多的可能性。?
PaperWeekly 鼓勵高校實(shí)驗(yàn)室或個人,在我們的平臺上分享各類優(yōu)質(zhì)內(nèi)容,可以是最新論文解讀,也可以是學(xué)習(xí)心得或技術(shù)干貨。我們的目的只有一個,讓知識真正流動起來。
??來稿標(biāo)準(zhǔn):
? 稿件確系個人原創(chuàng)作品,來稿需注明作者個人信息(姓名+學(xué)校/工作單位+學(xué)歷/職位+研究方向)?
? 如果文章并非首發(fā),請在投稿時提醒并附上所有已發(fā)布鏈接?
? PaperWeekly 默認(rèn)每篇文章都是首發(fā),均會添加“原創(chuàng)”標(biāo)志
? 投稿郵箱:
? 投稿郵箱:hr@paperweekly.site?
? 所有文章配圖,請單獨(dú)在附件中發(fā)送?
? 請留下即時聯(lián)系方式(微信或手機(jī)),以便我們在編輯發(fā)布時和作者溝通
?
現(xiàn)在,在「知乎」也能找到我們了
進(jìn)入知乎首頁搜索「PaperWeekly」
點(diǎn)擊「關(guān)注」訂閱我們的專欄吧
關(guān)于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學(xué)術(shù)平臺。如果你研究或從事 AI 領(lǐng)域,歡迎在公眾號后臺點(diǎn)擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
▽ 點(diǎn)擊 |?閱讀原文?| 查看作者博客
總結(jié)
以上是生活随笔為你收集整理的自然语言处理中的语言模型预训练方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 双十一刷名企项目?学霸果然不一样
- 下一篇: 线下讲座 | 机器翻译大牛Kevin K