今天分享一個論文UniLM[1],核心點是掌握三種LM任務(wù)形式:單向LM,雙向LM,序列到序列LM;
1. 生成任務(wù)
NLP任務(wù)大致可以分為NLU和NLG兩種;Bert在NLU任務(wù)上效果很好,但是天生不適合處理生成任務(wù)。
原因在于Bert的預(yù)訓(xùn)練過程是使用的MLM,和生成任務(wù)的目標(biāo)并不一致。
生成任務(wù)目標(biāo)是每次蹦出來一個詞,只能看到當(dāng)前位置之前的詞匯。
而Bert采用的是雙向的語言模型,除了mask的單詞,兩個方向的詞匯都可以被看到。
所以對Bert的一個改進思路就是讓它在具有NLU能力的時候,同時兼?zhèn)銷LG能力。
2. 三種LM任務(wù)
UniLM做的就是這樣一個事情。
具體的實現(xiàn)方式是設(shè)計了一系列的完形填空任務(wù),這些完形填空任務(wù)的不同之處在于對上下文的定義。
從左到右的LM:使用mask單詞的左側(cè)單詞來預(yù)測被遮掩的單詞
從右到左的LM:和上面第一個相比就是方向的變化,使用mask單詞的右側(cè)單詞來預(yù)測遮掩的單詞
雙向LM:就是當(dāng)前mask的左右詞匯都可以看到
sequence-to-sequence LM:這個就是UniLM能夠具有生成能力的關(guān)鍵。我們的輸入是source句子和target句子,mask單詞在target上,那么當(dāng)前mask的上下文就是source句子的所有單詞和target句子中mask單詞左側(cè)的詞匯可以被看到
我們把從左到右LM和從右到左LM我們歸為一種任務(wù)叫單向LM;
有個點需要注意,三個任務(wù)是一起優(yōu)化的,具體來講是這樣做的:
在訓(xùn)練的時候,1/3的時候使用雙向LM,1/3的時候使用序列到序列 LM,1/6的時候使用從左到右的LM,1/6的時間使用從右到做的LM。
我們是使用不同的Mask矩陣來對應(yīng)不同任務(wù)輸入數(shù)據(jù)形式。
文中使用的是這樣一張圖來展示:
UniLM不同mask
3. 其他細(xì)枝末節(jié)
Gelu 激勵函數(shù)
24層TRM,最大長度512,1024Hidden Size,16Heads,340M參數(shù)量
初始化使用Bert Large
15%被mask,其中80%真正替換mask,10%隨機替換,10%不動。替換的時候,80% 的時候替換單個token,20%的時候替換bigram 或者 trigram
第四個步驟類似中文實體詞的mask,也算是一點改進。
有個細(xì)節(jié)點需要注意的是,作者強調(diào),不同的segment embedding用來區(qū)分不同LM任務(wù)。
Bert的時候,區(qū)分上下句子,我們使用0和1,在這里,我們使用這個segment embedding用來區(qū)分任務(wù):
比如說,雙向?qū)?yīng)0和1;單向left-right對應(yīng)2;單向right-left對應(yīng)3;序列對應(yīng)4和5;
4. 總結(jié)
掌握以下幾個細(xì)節(jié)點就可以:
聯(lián)合訓(xùn)練三種任務(wù):單向LM,雙向LM,序列LM
使用不同的attention矩陣控制三種任務(wù)形式的參與
segment embedding可以區(qū)分不同的任務(wù)形式
mask的時候15% 的有被替換的概率,其中80% 被真正替換。在這80%真正替換的里面有80%單個token被替換,20%的二元或者三元tokens被替換
[1]
Unified Language Model Pre-training for Natural Language Understanding and Generation: https://arxiv.org/pdf/1905.03197.pdf,
責(zé)任編輯:xj
原文標(biāo)題:如何讓BERT具有文本生成能力
文章出處:【微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
自然語言
+關(guān)注
關(guān)注
1文章
291瀏覽量
13387 -
nlp
+關(guān)注
關(guān)注
1文章
489瀏覽量
22086
原文標(biāo)題:如何讓BERT具有文本生成能力
文章出處:【微信號:zenRRan,微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論