寫在前面

在前一篇站在BERT肩膀上的NLP新秀們(PART I)介紹了兩個都叫ERNIE的模型,非常有趣思路也挺相似的,都是給bert模型增加外部知識信息,使其能更好地「感知「真實世界。再補一個THU的ERNIE報告PPT(提取碼:35fv):

ERNIE from THU?

pan.baidu.com

今天我們來看看另外幾個有意思的BERT新秀:

XLMs from Facebook

LASER from Facebook

MASS from Microsoft

UNILM from Microsoft

1、Cross-lingual Language Model Pretraining(Facebook/2019)

對於BERT的改進可以大體分為兩個方向:第一個是縱向,即去研究bert模型結構或者演算法優化等方面的問題,致力於提出一種比bert效果更好更輕量級的模型;第二個方向是橫向,即在bert的基礎上稍作修改去探索那些vanilla bert還沒有觸及的領域。直觀上來看第二個方向明顯會比第一個方向簡單,關鍵是出效果更快。本文就屬於第二類。

突然想起來有一次面試,面試官問完bert的原理之後又接著問了bert的缺點在哪,當時也沒有看到這些改進bert的論文,傻乎乎地不知道回答什麼,大概這就是井底之蛙吧哈哈。

我們知道,bert預訓練的語料全是單語言的,所以可想而知最終的模型所適用的範圍基本也是屬於單語範圍的NLP任務,涉及到跨語言的任務可能表現就不那麼好。基於此,作者們提出了一種有效的跨語言預訓練模型,Cross-lingual Language Model Pretraining(XLMs)。 XLMs可以認為是跨語言版的BERT,使用了兩種預訓練方式

  • 基於單語種語料的無監督學習
  • 基於跨語言的平行語料的有監督學習

其在幾個多語任務上比如XNLI和機器翻譯都拉高了SOTA。那麼我們就來看看具體的模型,整體框架和BERT是非常類似,修改了幾個預訓練目標。

Shared sub-word vocabulary

目前的詞向量基本都是在單語言語料集中訓練得到的,所以其embedding不能涵蓋跨語言的語義信息。為了更好地將多語言的信息融合在一個共享的詞表中,作者在文本預處理上使用了位元組對編碼演算法(Byte Pair Encoding (BPE)),大致思想就是利用單個未使用的符號迭代地替換給定數據集中最頻繁的符號對(原始位元組)。這樣處理後的詞表就對語言的種類不敏感了,更多關注的是語言的組織結構。

關於BEP的具體栗子可以參考:

Byte Pair Encoding example?

gist.github.com

Causal Language Modeling (CLM)

這裡的CLM就是一個傳統的語言模型訓練過程,使用的是目前效果最好的Transformer模型。對於使用LSTM 的語言模型,通過向 LSTM 提供上一個迭代的最後隱狀態來執行時間反向傳播 (backpropagation through time, BPTT)。而對於 Transformer,可以將之前的隱狀態傳遞給當前的 batch,為 batch 中的第一個單詞提供上下文。但是,這種技術不能擴展到跨語言設置,因此在這裡作者們進行了簡化,只保留每個 batch 中的第一個單詞,而不考慮上下文。

Masked Language Modeling (MLM)

這一個預訓練目標同BERT的MLM思想相同,唯一不同的就是在於模型輸入。BERT的輸入是句子對,而XLM使用的是隨機句子組成的連續文本流。此外,為了避免採樣不均,對相對頻繁的輸出採用與頻率倒數的平方根成正比的權重從多項式分佈中進行子採樣。

Translation Language Modeling (TLM)

這一部分應該是對跨語言任務取得提升的最大原因。不同於以上兩個預訓練模型(單語言語料訓練 + 無監督訓練),翻譯語言模型使用的是有監督的跨語言並行數據。如下圖所示輸入為兩種並行語言的拼接,同時還將BERT的原始embedding種類改進為代表語言ID的Laguage embedding和使用絕對位置的Position embedding。這些新的元數據能夠幫助模型更好地學習不同語言相關聯Token之間的關係信息。

TLM訓練時將隨機掩蓋源語言和目標語言的token,除了可以使用一種語言的上下文來預測該Token之外(同BERT),XLM還可以使用另一種語言的上下文以及Token對應的翻譯來預測。這樣不僅可以提升語言模型的效果還可以學習到source和target的對齊表示。

reference

XLM – Enhancing BERT for Cross-lingual Language Model | Lyrn.AI?

www.lyrn.ai圖標新智元:跨語言模型預訓練,三大任務刷新最高性能 | Facebook?

zhuanlan.zhihu.com
圖標
機器之心:跨語言版BERT:Facebook提出跨語言預訓練模型XLM?

zhuanlan.zhihu.com
圖標
官方源碼?

github.com


2、Massively Multilingual Sentence Embeddings for Zero-Shot Cross-Lingual Transfer and Beyond(Facebook/2018)

XLM的主要思想還是來自於這片文章,借用了BERT的框架最後成了XLM。在本文中,作者們認為大多是涉及多語言的NLP研究都關注於高資源語種,比如英文、漢語等,因此訓練出來的模型對low-resource語種適用性較差。另外,對於不同語言需要訓練不同的模型實在是不夠智能。基於此,本文提出了一種可以用單個模型解決多種語言的工具: LASER(Language-Agnostic SEntence Representations)

如上圖所示,LASER的 主要思想是將所有語種的訓練語料通過一個encoder(包含多個Bi-LSTM + max-pooling)來得到句子表示,然後用這個上下文表示去decode。

注意,為了更好地使得模型對語種不敏感且儘可能多的利用不同語種之間的關係信息,文中採用了BPE演算法訓練所有語種訓練集拼接的語料,得到Encoder的輸入 BPE embedding。Decoder的輸入由三部分組成:【encoder的輸出,預測出的前一個token的BPE, 語種ID】。另外encoder和decoder沒有其他鏈接,因為作者希望通過句子嵌入捕獲輸入序列的所有相關信息。

在訓練方式上採用的是翻譯的形式,將輸入分詞後翻譯成2中語言(文中選擇的是英文和西班牙語),試驗發現翻譯成一個語種的效果不好,需要翻譯成2個目標語種,也不一定所有的都需要翻譯成2個,大部分翻譯就行。模型訓練完成之後,decoder就沒啥作用了,在下游任務中將encoder拿來使用。

文章的想法是挺贊的,但是在實現的時候有些不足之處。比如需要分詞,使用的是雙向LSTM而不是效果更好的Transformer。

reference

Zero-shot transfer across 93 languages: Open-sourcing enhanced LASER library?

code.fb.com

官方開源庫?

github.com


3、MASS: Masked Sequence to Sequence Pre-training for Language Generation(Microsoft/2019)

我們知道,bert只使用了Transformer的encoder部分,其下游任務也主要是適用於自然語言理解(NLU),對於類似文本摘要、機器翻譯、對話應答生成等自然語言生成(NLG)任務顯然是不太合適的。

BERT的大火,也帶動了NLP屆的pre-training大火,受到bert的啟發,作者們提出聯合訓練encoder和decoder的模型:Masked Sequence to Sequence Pre-training for Language Generation(MASS),框架如下:

訓練步驟主要分為兩步:

  1. Encoder: 輸入為被隨機mask掉連續部分token的句子,使用Transformer對其進行編碼;這樣處理的目的是可以使得encoder可以更好地捕獲沒有被mask掉詞語信息用於後續decoder的預測;
  2. Decoder: 輸入為與encoder同樣的句子,但是mask掉的正好和encoder相反,和翻譯一樣,使用attention機制去訓練,但只預測encoder端被mask掉的詞。該操作可以迫使decoder預測的時候更依賴於source端的輸入而不是前面預測出的token,防止誤差傳遞。

MASS預訓練輸入為 m 個token的句子 x=left(x_{1}, x_{2}, ldots, x_{m}
ight) ,將位置 uv 之間的mask掉之後的輸入為 x^{ ackslash u : v} ,其中 x^{u : v} 表示被mask掉的片段。MASS預訓練目的預測輸入中被mask掉的 x^{u : v}

egin{aligned} L(	heta ; mathcal{X}) &=frac{1}{|mathcal{X}|} Sigma_{x in mathcal{X}} log Pleft(x^{u : v} | x^{ackslash u : v} ; 	heta
ight) \ &=frac{1}{|mathcal{X}|} sum_{x in mathcal{X}} log prod_{t=u}^{v} Pleft(x_{t}^{u : v} | x_{<t}^{u : v}, x^{ackslash u : v} ; 	heta
ight) end{aligned}

此外,作者們還提出了一個對於mask長度的超參數 k ,並指出當k=1時,即encoder屏蔽一個token,decoder沒有輸入,該形式與BERT的MLM訓練模型一致。(但是BERT不是隨機離散mask的嘛,好像還不太一樣)

當k=m時,即encoder完全mask掉,decoder輸入為完整句子,該形式與OPENAI的GPT模型一致

由於K值為超參數,屬於人為設定,作者們又在文章末尾對其進行了分析,通過多個試驗表明,當k為句子長度的50%~70%時模型效果最好。

reference

微軟亞洲研究院:ICML 2019|序列到序列自然語言生成任務超越BERT、GPT!微軟提出通用預訓練模型MASS?

zhuanlan.zhihu.com圖標如何看待 MSRA 在 ICML19 上的工作 MASS??

www.zhihu.com
圖標


4、Unified Language Model Pre-training for Natural Language Understanding and Generation(Microsoft/2019)

這個就更炸了,也是微軟的最近才放出的工作,直接預訓練了一個微調後可以同時用於自然語言理解和自然語言生成下游任務的模型:UNIfied pre-trained Language Model (UNILM)

看完論文之後會發現非常自然,使用的核心框架還是Transformer,不同的是預訓練的目標函數結合了以下三個:

  • 單向語言模型(同ELMO/GPT)
  • 雙向語言模型(同BERT)
  • seq2seq語言模型(同上一篇)

注意哦,這裡的Transformer是同一個,即三個LM目標參數共享,有點multi-task learning的感覺,可以學習到更general的文本表示。

okay,來看模型

Input Representation

模型的輸入是一個序列,對於單向LM是一個文本片段,對於雙向LM和seq2seq LM是兩段文本。embedding模式使用的是跟BERT一樣的三類:

  • token embedding:使用subword unit
  • position embedding:使用絕對位置
  • segment embedding:區分第一段和第二段

另外,[SOS]為輸入序列起始標誌; [EOS]為在NLU任務中為兩個segment的分界標誌,在NLG任務中為解碼結束標誌。

Backbone Network: Transformer

文中使用的是多層堆疊的Transformer(24層,與 BERT_{large} 相同),輸入表示為 mathbf{H}^{0}=left[mathbf{x}_{1}, cdots, mathbf{x}_{|x|}
ight] ,第K層的輸出可以表示為:

mathbf{H}^{k}=	ext { Transformer }_{k}left(mathbf{H}^{k-1}
ight)

其中 mathbf{H}^{k}=left[mathbf{h}_{1}^{k}, cdots, mathbf{h}_{ | x ]}^{k}
ight]h_{i}^{k} 表示輸入 x_{i} 在經過K層transformer之後的上下文表示。

重點來了。上面說將三個語言模型統一到了一起,那麼是如何實現的呢? 作者們這裡使用的是Self-attention Masks,即對不同的語言模型,設置不同的mask策略進行學習。在《Attention is all you need》一文中也有類似mask說明。

mathbf{Q}=mathbf{H}^{l-1} mathbf{W}_{l}^{Q}, quad mathbf{K}=mathbf{H}^{l-1} mathbf{W}_{l}^{K}

mathbf{M}_{i j}=left{egin{array}{ll}{0,} & {	ext { allow to attend }} \ {-infty,} & {	ext { prevent from attending }}end{array}
ight.

mathbf{A}_{l}=operatorname{softmax}left(frac{mathbf{Q} mathbf{K}^{	op}}{sqrt{d_{k}}}+mathbf{M}
ight)left(mathbf{H}^{l-1} mathbf{V}_{l}
ight)

下面具體介紹各個模型的Mask策略。

Unidirectional LM

對於單向LM(left-to-right or right-to-left),我們在做attention的時候對每一個詞只能attend其一個方向的上下文。如對left-to-right LM, 我們就只能attend該詞左邊的信息,需要將右側的詞給mask掉;對於right-to-left LM也是同理。這樣我們得到的Mask矩陣就是一個上三角或者下三角。

Bidirectional LM

和BERT一樣,雙向LM在訓練時可以看到左邊和右邊的信息,所以這裡的Mask矩陣全是0,表示全局信息可以attend到該token上

Sequence-to-Sequence LM

對於seq2seq LM,情況稍微複雜一點點,有點像上述兩個Mask矩陣的結合版本。該模型輸入為兩個segment S1S2 ,表示為「[SOS] t1 t2 [EOS] t3 t4 t5 [EOS]」,encoder是雙向的即有四個token可以attend到t1t2上;decoder是單向的,僅僅能attend到一個方向的token以及encoder的token,以t4為例,它只能有6個token可以attend。

在訓練時會隨機mask掉兩個segment中的token,然後讓模型去預測被mask掉的詞。

Next Sentence Prediction

對於雙向LM,作者也設置了NSP預訓練任務,除了特殊TOKEN不一樣,其他跟bert是一樣的。

試驗部分我也不多做分析了哈~

reference

BERT時代與後時代的NLP?

mp.weixin.qq.com圖標

小結

對於以上四篇論文做個小的個人評價:

  • 大而美。模型和數據都很大,但是最終出來的效果是美的,爭取往小而美的方向發展;
  • 相比於BERT僅僅關注在encoder上,LASER的工作則是考慮了encoder-decoder的聯合訓練。從LASER模型框架上也可以看出其無法提取word級別的特徵,擅長於跨語言任務;
  • 對於XLM和MASS都是涉及跨語言模型,補充了BERT在NLG任務上的不足。模型層面而言XLM沒有使用傳統的encoder-decoder框架,屬於比較討巧的方式;
  • UNILM可以同時處理NLU和NLG任務,在GLUE上首次不加外部數據打贏了BERT。後續的改進可以考慮加入跨語言任務的預訓練,比如XLM和MASS做的工作。

最後,如若文章理解或措辭有誤,還請大家務必海涵指正!



以上~

推薦閱讀:

相關文章