系統學習NLP(三十二)--BERT、XLNet、RoBERTa、ALBERT

參考:https://zhuanlan.zhihu.com/p/84559048

一.BERT

BERT是一種基於Transformer Encoder來構建的一種模型,它整個的架構其實是基於DAE(Denoising Autoencoder)的,這部分在BERT文章裏叫作Masked Lanauge Model(MLM)。MLM並不是嚴格意義上的語言模型,因爲整個訓練過程並不是利用語言模型方式來訓練的。BERT隨機把一些單詞通過MASK標籤來代替,並接着去預測被MASK的這個單詞,過程其實就是DAE的過程。BERT有兩種主要訓練好的模型,分別是BERT-Small和BERT-Large, 其中BERT-Large使用了12層的Encoder結構。 整個的模型具有非常多的參數。

BERT在2018年提出,當時引起了爆炸式的反應,因爲從效果上來講刷新了非常多的記錄,之後基本上開啓了這個領域的飛速的發展。

二.XLNet

BERT之後的一個爆發節點發生在XLNet發佈的時候,因爲它刷新了BERT保留的很多記錄。除了效果之外,那爲什麼要提出XLNet呢?這就需要從BERT的缺點說起。

雖然BERT有很好的表現,但本身也有一些問題。總結起來有以下幾點:

1.訓練數據和測試數據之間的不一致性,這也叫作Discrephancy。當我們訓練BERT的時候,會隨機的Mask掉一些單詞的,但實際上在使用的過程當中,我們卻沒有MASK這類的標籤,所以這個問題就導致訓練的過程和使用(測試)的過程其實不太一樣,這是一個主要的問題。

2. 並不能用來生成數據。由於BERT本身是依賴於DAE的結構來訓練的,所以不像那些基於語言模型訓練出來的模型具備很好地生成能力。之前的方法比如NNLM[12],ELMo是基於語言模型生成的,所以用訓練好的模型可以生成出一些句子、文本等。但基於這類生成模型的方法論本身也存在一些問題,因爲理解一個單詞在上下文裏的意思的時候,語言模型只考慮了它的上文,而沒有考慮下文!

基於這些BERT的缺點,學者們提出了XLNet, 而且也借鑑了語言模型,還有BERT的優缺點。最後設計出來的模型既可以很好地用來執行生成工作,也可以學習出上下文的向量表示。那如何做的呢?

首先,生成模型是單向的,即便我們使用Bidirectional LSTM類模型,其實本質是使用了兩套單向的模型。那又如何去解決呢?答案是他們使用了permutation language model, 也就是把所有可能的permutation全部考慮進來。這個想法源自於hugo之前的工作叫作NADE,感興趣的讀者可以去看一下。

另外,爲了迎合這種改變,他們在原來的Transformer Encoder架構上做了改進,這部分叫作Two-stream attention, 而且爲了更好地處理較長的文本,進而使用的是Transformer-XL。 這就是XLNet的幾大核心!關於Transformer-XL 看這裏 https://zhuanlan.zhihu.com/p/70745925

核心:

Transformer編碼固定長度的上下文,即將一個長的文本序列截斷爲幾百個字符的固定長度片段(segment),然後分別編碼每個片段[1],片段之間沒有任何的信息交互。比如BERT,序列長度的極限一般在512。動機總結如下:

  • Transformer無法建模超過固定長度的依賴關係,對長文本編碼效果差。
  • Transformer把要處理的文本分割成等長的片段,通常不考慮句子(語義)邊界,導致上下文碎片化(context fragmentation)。通俗來講,一個完整的句子在分割後,一半在前面的片段,一半在後面的片段。

文章圍繞如何建模長距離依賴,提出Transformer-XL【XL是extra long的意思】:

  • 提出片段級遞歸機制(segment-level recurrence mechanism),引入一個記憶(memory)模塊(類似於cache或cell),循環用來建模片段之間的聯繫。
    • 使得長距離依賴的建模成爲可能;
    • 使得片段之間產生交互,解決上下文碎片化問題。
  • 提出相對位置編碼機制(relative position embedding scheme),代替絕對位置編碼。
    • 在memory的循環計算過程中,避免時序混淆【見model部分】,位置編碼可重用。

小結一下,片段級遞歸機制爲了解決編碼長距離依賴和上下文碎片化,相對位置編碼機制爲了實現片段級遞歸機制而提出,解決可能出現的時序混淆問題。

三.RoBERTa

RoBERTa 模型更多的是基於 BERT 的一種改進版本。是 BERT 在多個層面上的重大改進。

RoBERTa 在模型規模、算力和數據上,主要比 BERT 提升了以下幾點:

  • 更大的模型參數量(從 RoBERTa 論文提供的訓練時間來看,模型使用 1024 塊 V 100 GPU 訓練了 1 天的時間)

  • 更多的訓練數據(包括:CC-NEWS 等在內的 160GB 純文本)

此外如下所示,RoBERTa 還有很多訓練方法上的改進。

1. 動態掩碼

BERT 依賴隨機掩碼和預測 token。原版的 BERT 實現在數據預處理期間執行一次掩碼,得到一個靜態掩碼。而 RoBERTa 使用了動態掩碼:每次向模型輸入一個序列時都會生成新的掩碼模式。這樣,在大量數據不斷輸入的過程中,模型會逐漸適應不同的掩碼策略,學習不同的語言表徵。

2. 更大批次

RoBERTa 在訓練過程中使用了更大的批數量。研究人員嘗試過從 256 到 8000 不等的批數量。

3. 文本編碼

Byte-Pair Encoding(BPE)是字符級和詞級別表徵的混合,支持處理自然語言語料庫中的衆多常見詞彙。

原版的 BERT 實現使用字符級別的 BPE 詞彙,大小爲 30K,是在利用啓發式分詞規則對輸入進行預處理之後學得的。Facebook 研究者沒有采用這種方式,而是考慮用更大的 byte 級別 BPE 詞彙表來訓練 BERT,這一詞彙表包含 50K 的 subword 單元,且沒有對輸入作任何額外的預處理或分詞。

四.ALBERT

ALBERT試圖解決上述的問題: 1. 讓模型的參數更少 2. 使用更少的內存 3. 提升模型的效果。

文章裏提出一個有趣的現象:當我們讓一個模型的參數變多的時候,一開始模型效果是提高的趨勢,但一旦複雜到了一定的程度,接着再去增加參數反而會讓效果降低,這個現象叫作“model degratation"。

基於上面所講到的目的,ALBERT提出了三種優化策略,做到了比BERT模型小很多的模型,但效果反而超越了BERT, XLNet。

Factorized Embedding Parameterization. 他們做的第一個改進是針對於Vocabulary Embedding。在BERT、XLNet中,詞表的embedding size(E)和transformer層的hidden size(H)是等同的,所以E=H。但實際上詞庫的大小一般都很大,這就導致模型參數個數就會變得很大。爲了解決這些問題他們提出了一個基於factorization的方法。

他們沒有直接把one-hot映射到hidden layer, 而是先把one-hot映射到低維空間之後,再映射到hidden layer。這其實類似於做了矩陣的分解。

Cross-layer parameter sharing. Zhenzhong博士提出每一層的layer可以共享參數,這樣一來參數的個數不會以層數的增加而增加。所以最後得出來的模型相比BERT-large小18倍以上。

Inter-sentence coherence loss. 在BERT的訓練中提出了next sentence prediction loss, 也就是給定兩個sentence segments, 然後讓BERT去預測它倆之間的先後順序,但在ALBERT文章裏提出這種是有問題的,其實也說明這種訓練方式用處不是很大。 所以他們做出了改進,他們使用的是setence-order prediction loss (SOP),其實是基於主題的關聯去預測是否兩個句子調換了順序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章