BERT (2)

BERT -- Bidirectional Encoder Representations from Transformers

 

使用 LSTM,數據只能在一個方向以順序方式讀取。雖然雙向 LSTM 通過向前和向後讀取數據解決了這個問題,但文本仍然是順序處理而不是並行處理。這就是Transformer模型發揮作用的地方。
Transformer 模型依靠注意力機制 並行處理整個文本文檔。
在注意力機制中,不是按順序處理文本,而是並行處理文本,這允許注意力系統以並行方式爲文本的重要部分分配權重。

 

 

爲什麼要使用 BERT?


BERT 模型能夠生成捕獲本地上下文的單詞表示。例如,對於詞嵌入,即使我們談論“apple Iphone”或將 apple 作爲水果,“apple”一詞的表示也是相同的。使用 BERT,將生成不同的單詞表示。此外,BERT 模型將單詞分爲詞幹和葉片段。例如,“Judgmental”一詞被視爲兩個獨立的標記 “Judgement”和“al”,這使得詞的表示更加靈活。

 

 

BERT 文本分類步驟
通常,BERT 模型用於生成文本表示,然後可以將其與 LSTM 或 CNN 網絡一起使用來構建文本分類或任何其他類型的模型。但是,BERT 還包含序列分類模型,也可用於對文本進行分類。
使用BERT序列模型 進行文本分類涉及的步驟如下:
•  第一步,必鬚生成 BERT tokens。爲此,可以使用 BERT Tokenizer。
•  第二步, 將數據轉換成BERT模型可以使用的格式,並使用BERT進行詞嵌入。
•  爲BERT創建一個序列分類模型 。
•  訓練序列分類模型。
•  在測試集上評估模型。

 

 

預訓練

先在某個任務(訓練集A或者B)進行預先訓練,即先在這個任務(訓練集A或者B)學習網絡參數,然後存起來以備後用。當我們在面臨第三個任務時,網絡可以採取相同的結構,在較淺的幾層,網絡參數可以直接加載訓練集A或者B訓練好的參數,其他高層仍然隨機初始化底層參數有兩種方式:frozen,即預訓練的參數固定不變,fine-tuning,即根據現在的任務調整預訓練的參數

優勢:
1、當前任務數據量少,難以訓練更多的網絡參數,可以加載預訓練的模型,然後根據當前的任務對參數進行fine-tuning,以適合當前的任務。
2、即使當前任務的數據量不少,使用預訓練模型可以加快模型的收斂。
原理:
1、在底層抽出來的特徵與任務無關,越具備任務的通用型,所以可以使用底層預訓練好的參數初始化新的任務。
2、高層任務與具體的任務關聯性較大,所以在高層不使用預訓練參數或者採用fine-tuning方式在當前數據集上清洗掉高層無關的特徵提取器。

Word2vec

word2vec就是nlp中預訓練的一種方式。但是word2vec有一個缺點就是無法解決多義詞,因爲每一個詞只有用一個向量表示。

ELMO

ELMO是“Embedding from Language Models"簡稱。在此之前word embedding本質是個靜態方式,靜態的意思就是說單詞訓練好之後就固定了,在以後使用時,單詞不會跟着上下文場景變化而變化。
ELMO的本質思想是:事先用一個語言模型去學習單詞的word embedding, 當我在使用時,單詞已經具備了特定的上下文,這時候可以根據上下文的語義去調整單詞的word embedding, 這樣經過調整的word embedding更能表達這個上下文中具體的含義,也就解決了一詞多義問題,故ELMO本質就是根據當前上下文對Word Embedding進行動態調整的過程。

Elmo採用典型的兩階段過程:第一階段使用預訓練語言模型進行訓練,第二階段當做具體的下游任務時,從預訓練的網絡中提取對應的詞的Word Embedding作爲特徵補充到下游任務中。
第一階段,預訓練:採用雙層雙向LSTM對上下文進行編碼,上下文使用靜態的word embedding, 對每層LSTM,將上文向量與下文向量進行拼接作爲當前向量,利用大量的預料訓練這個網絡。對於一個新的句子,可以有三種表示,最底層的word embedding, 第一層的雙向LSTM層的輸出,這一層能學習到更多句法特徵,第二層的雙向LSTM的輸出,這一層能學習到更多詞義特徵。經過elmo訓練,不僅能夠得到word embedding, 又能學習到一個雙層雙向的神經網絡。
第二階段,下游任務使用:將一個新的句子作爲elmo預訓練網絡的輸入,這樣該句子在elmo網絡中能獲得三個embedding, 可以將三個embedding加權作爲word embedding, 並將此作爲下游任務的輸入,這被稱爲“Feature-based Pre-Training"。

GPT

GPT是Generative Pre-Training的簡稱。與ELMO相似,採用兩階段的模式:利用語言模型進行預訓練,通過fine-tuning模式應用到下游任務
利用語言模型進行預訓練:與elmo不同的是,GPT使用transformer進行提取特徵,並且是單向的transformer,只是根據上文來預測某個詞。
fine-tuning: 想GPT網絡看起,根據GPT網絡來更改自己任務結構。這樣就可以使用手頭數據對當前任務進行fine-tunining.

BERT

BERT是“Bidirectional Encoder Representations from Transformers"的簡稱。
同GPT採用兩階段模式:利用雙向語言模型進行預訓練,通過fine-tuning模式解決下游任務。
BERT創新: Masked語言模型Next Sentence Prediction
Masked語言模型, 即隨機選擇一部分單詞進行mask,然後預測這些單詞,其方式和CBOW類似,爲了解決fine-tuning階段不需要mask,所以bert中只選擇15%作爲mask的候選,在這15%中80%不做處理,10%進行mask,10%進行替換【不太理解爲什麼成立】
next sentence prediction:之所以這麼做,是考慮到很多NLP任務是句子關係判斷任務,單詞預測粒度的訓練到不了句子關係這個層級,增加這個任務有助於下游句子關係判斷任務。
BERT的輸入: 輸入的部分是個線性序列,兩個句子之間使用sep進行分割,在開頭和結尾分別加一個特殊字符。對於每一個字符都是由三種embedding組成,位置信息embedding, 單詞embedding和句子embdding,三種embedding疊加便是bert的輸入。

總結

word2vec: 

      nlp中最早的預訓練模型,

      缺點:無法解決一詞多義問題.
ELMO:
       優點: 根據上下文動態調整word embedding,因爲可以解決一詞多義問題;
      缺點:1、使用雙向LSTM特徵抽取方式而不是transformer,2、使用向量拼接方式融合上下文特徵融合能力較弱。
GPT:.
      優點:使用transformer提取特徵。
      缺點:使用單項的語言模型,即單向transformer
BERT: 

      優點:使用雙向語言模型,即使用雙向transformer;使用預測目標詞和下一句這種多任務學習方式進行訓練。

參考:
[1] 從Word Embedding到Bert模型—自然語言處理中的預訓練技術發展史

https://www.cnblogs.com/zhaopAC/p/11219600.html

 

 

 

BERT, RoBERTa, DistilBERT, XLNet 到底哪家強?

BERT 以及後續模型
谷歌基於 transformer 的 BERT 系列一經問世就在 NLP 領域掀起了一場風暴,在幾項任務中的表現可謂勢頭強勁,已經超越了先前沿用的最先進的技術。最近,谷歌對 BERT 進行了改版,我將對比改版前後主要的相似點和不同點,以便你可以選擇在研究或應用中使用哪一種。

BERT

是一個雙向 transformer,用於對大量未標記的文本數據進行預訓練,以學習一種語言表示形式,這種語言表示形式可用於對特定機器學習任務進行微調。雖然 BERT 在幾項任務中的表現都優於 NLP 領域沿用過的最先進的技術,但其性能的提高主要還是歸功於雙向 transformer掩蔽語言模型對任務的訓練以及結構預測功能,還包括大量的數據和谷歌的計算能力

最近,又提出了幾種方法改進 BERT 的預測指標或計算速度,但是始終達不到兩者兼顧。XLNet 和 RoBERTa 改善了性能,而 DistilBERT 提高了推理速度。下表對它們進行了比較:


圖 1:比較 BERT 和最近的一些改進情況

GPU 計算時間是估算的(使用 4 個 TPU Pod 進行爲時 4 天的原始訓練)
使用大量的小批次數據,根據掩蔽程序的差異進行學習速度和延長時間的訓練
數據來源是原始論文

XLNet

是一種大型雙向 transformer,它使用的是改進過的訓練方法,這種訓練方法擁有更大的數據集和更強的計算能力,在 20 個語言任務中 XLNet 比 BERT 的預測指標要更好。

爲了改進訓練方法,XLNet 引入了置換語言建模,其中所有標記都是按隨機順序預測的。 這與 BERT 的掩蔽語言模型形成對比,後者只預測了掩蔽(15%)標記。 這也顛覆了傳統的語言模型,在傳統語言模型中,所有的標記都是按順序而不是按隨機順序預測的。 這有助於模型學習雙向關係,從而更好地處理單詞之間的關係和銜接。此外使用 Transformer XL 做基礎架構,即使在不統一排序訓練的情況下也能表現出良好的性能。

XLNet 使用了超過 130 GB 的文本數據和 512 TPU 芯片進行訓練,運行時間爲 2.5 天,XLNet 用於訓練的資料庫要比 BERT 大得多

RoBERTa

在 Facebook 上推出的 Robustly 是 BERT 的優化方案,RoBERTa 在 BERT 的基礎上進行再訓練,改進了訓練方法,還增加了 1000%的數據,強化了計算能力。

爲了優化訓練程序,RoBERTa 從 BERT 的預訓練程序中刪除了結構預測(NSP)任務引入了動態掩蔽,以便在訓練期間使掩蔽的標記發生變化。在這過程中也證實了大批次的訓練規模在訓練過程中的確更有用。

重要的是,RoBERTa 使用 160 GB 的文本進行預訓練,其中包含了 16GB 的文本語料庫和 BERT 使用的英文 Wikipedia。其他數據包括 CommonCrawl News 數據集(6300 萬篇文章,76 GB),Web 文本語料庫(38GB)和普通爬蟲的故事(31 GB)。 再加上 1024 個 V100 的 Tesla GPU 每天都在運行,這使得 RoBERTa 具備了進行預訓練的基礎。

因此,RoBERTa 在 GLUE 基準測試結果上優於 BERT 和 XLNet:

  圖 2:RoBERTa 的性能比較。 作者:AI科技評論 https://www.bilibili.com/read/cv3608516/ 


另一方面,爲了減少 BERT 或相關模型的計算(訓練,預測)時間,理應選擇使用較小的網絡以達到相似的性能。其實有許多方法可以做到這一點,包括剪枝,蒸餾和量化,然而,所有這些都會導致預測指標更低

DistilBERT

學習了 BERT 的蒸餾(近似)版本保留了 95%的性能,但只使用了一半的參數。 具體來說,它沒有標記類型和池化層的嵌入,只保留了谷歌 BERT 中一半的層。 DistilBERT 使用了一種叫做蒸餾的技術,它與谷歌的 BERT(也就是由較小的神經網絡構成大型神經網絡)相似。 這個原理是,一旦要訓練一個大型神經網絡,就可以使用較小的網絡來預估其完整的輸出分佈。這在某種意義上類似於後驗近似。 在貝葉斯統計中用於後驗近似的關鍵優化函數之一是 Kulback Leiber 散度,自然在這裏也被用到了。
提示:在貝葉斯統計中,我們接近真實的後驗值(來自數據),而對於蒸餾,我們只能做到接近在較大網絡中學習到的後驗值。

如何使用
如果你真的需要推理速度快一點,可以接受代價是預測精度稍微下降那麼一些的話,那麼 DistilBERT 會是一個合適的選擇,但是,如果你還在尋找最佳的預測性能,你最好使用 Facebook 的 RoBERTa。
從理論上講,基於 XLNet 置換的訓練應該能處理好依賴關係,並且可能在長期運行中能表現出更好的性能。
但是,Google 的 BERT 確實提供了良好的基線,如果你沒有上述任何關鍵需求,就可以使用 BERT 維持系統的正常運行。

總結
大多數性能的改善(包括 BERT 本身)都是由於增加了數據量計算能力或訓練過程。 雖然它們確實具有自己的價值,但它們往往傾向於在計算和預測指標之間進行權衡。當前真正需要的是在使用更少的數據和計算資源的同時還可以使性能得到基本的改進

原文作者:SuleimanKhan

原文鏈接:https://towardsdatascience.com/bert-roberta-distilbert-xlnet-which-one-to-use-3d5ab82ba5f8

作者:AI科技評論 https://www.bilibili.com/read/cv3608516/ 出處:bilibili

 

https://www.zhihu.com/question/476969690

 

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