bert 多义词_自然语言处理:Bert及其他
以下內容主要參考了文末列出的參考文獻,在此表示感謝!
2018年被認為是NLP技術的new era的開始。在這一年,提出了多種有創新性的技術,而且最后的集大成者Bert在NLP的多項任務中屠榜,造成的震撼不比當初神經網絡初次在ImageNet登場時小。
我們首先來看一下BERT的光輝戰績。
NLP一般可分為四大類任務:
- 序列標注:分詞/POS Tag/NER/語義標注
- 分類任務:文本分類/情感計算
- 句子關系判斷:Entailment/QA/自然語言推理
- 生成式任務:機器翻譯/文本摘要....
絕大部分NLP問題可以歸入上圖所示的四類任務中:一類是序列標注,這是最典型的NLP任務,比如中文分詞,詞性標注,命名實體識別,語義角色標注等都可以歸入這一類問題,它的特點是句子中每個單詞要求模型根據上下文都要給出一個分類類別。第二類是分類任務,比如我們常見的文本分類,情感計算等都可以歸入這一類。它的特點是不管文章有多長,總體給出一個分類類別即可。第三類任務是句子關系判斷,比如Entailment,QA,語義改寫,自然語言推理等任務都是這個模式,它的特點是給定兩個句子,模型判斷出兩個句子是否具備某種語義關系;第四類是生成式任務,比如機器翻譯,文本摘要,寫詩造句,看圖說話等都屬于這一類。它的特點是輸入文本內容后,需要自主生成另外一段文字。
在2018年Google的論文中推出了兩種BERT,一個是BERT Base,一種是BERT LARGE。兩者結構相似,主要是層數不同。BERT基本具有與OpenAI GPT完全相同的參數:L = 12,H = 768,A = 12其中L是堆疊的編碼器的數量,H是隱藏大小,A是MultiHead attention中的頭數。 BERT large基本上更大且計算密集度更高:L = 24,H = 1024,A = 16。從論文的結果中可以看出:BERT Base 超過 OpenAI GPT,并且BERT Large超過BERT base。
接下來看一下BERT在各項任務上的成績:
GLUE
一般語言理解評估(GLUE)基準(Wang et al,2018)是各種自然語言理解任務的集合。有8個GLUE分類任務用于評估績效。BERT Base不僅所有任務上超過了OpenAI GPT 達到了SOTA,而且平均將SOTA提高了5%。 對于所有任務,BERT Large 超過 BERT Base。
SQUAD
Standford問題回答數據集(SQuAD)是100k問答對的集合(Rajpurkar等,2016)。 給定一個問題和維基百科中包含答案的段落,任務是預測段落中的答案文本范圍。在SQUAD中,BERT大大提升了性能。 獲得最高分的模型是BERT LARGE模型集成,使用TriviaQA擴充數據集。
命名實體識別
為了評估Tag標記任務的性能,在CoNLL 2003命名實體識別(NER)數據集上微調BERT。 該數據集由200k個訓練單詞組成,這些單詞已注釋為人員、組織、位置、雜項或其他(非命名實體)。在NER中,BERT Large在一定程度上實現了SOTA,但沒有大幅提高。
SWAG
具有對抗性生成的情境(SWAG)數據集包含113k個句子對完成示例,其評估基于常識的推斷(Zellers等,2018)。在這項任務中,BERT以驚人的27.1%大幅改進SOTA,這是超人的表現!
消融研究(Ablation Study)
作者還進行了許多有用的消融研究。 最重要的一點是:
- BERT和OpenAI GPT之間的大多數性能差異可以通過雙向性來解釋。
在BERT中,最主要的創新包括Bi-directional,雙向性以及next sentence prediction,但是從消融研究來看,起到最重要作用的是雙向性。
接下來我們來討論一下2018年的重要工作,ELMo,GPT以及BERT。
前面介紹了BERT的效果,另一方面是Bert具備廣泛的通用性,就是說絕大部分NLP任務都可以采用BERT的兩階段模式直接去提升效果。我們先看一下BERT的兩階段模式。
預訓練過程就是做圖像或者視頻領域的一種比較常規的做法,而且這種做法很有效,能明顯促進應用的效果。
那么圖像領域怎么做預訓練呢,上圖展示了這個過程,我們設計好網絡結構以后,對于圖像來說一般是CNN的多層疊加網絡結構,可以先用某個訓練集合比如訓練集合A或者訓練集合B對這個網絡進行預先訓練,在A任務上或者B任務上學會網絡參數,然后存起來以備后用。假設我們面臨第三個任務C,網絡結構采取相同的網絡結構,在比較淺的幾層CNN結構,網絡參數初始化的時候可以加載A任務或者B任務學習好的參數,其它CNN高層參數仍然隨機初始化。之后我們用C任務的訓練數據來訓練網絡,此時有兩種做法,一種是淺層加載的參數在訓練C任務過程中不動,這種方法被稱為“Frozen”;另外一種是底層網絡參數盡管被初始化了,在C任務訓練過程中仍然隨著訓練的進程不斷改變,這種一般叫“Fine-Tuning”,顧名思義,就是更好地把參數進行調整使得更適應當前的C任務。一般圖像或者視頻領域要做預訓練一般都這么做。
這么做有幾個好處,首先,如果手頭任務C的訓練集合數據量較少的話,現階段的好用的CNN比如Resnet/Densenet/Inception等網絡結構層數很深,幾百萬上千萬參數量算起步價,上億參數的也很常見,訓練數據少很難很好地訓練這么復雜的網絡,但是如果其中大量參數通過大的訓練集合比如ImageNet預先訓練好直接拿來初始化大部分網絡結構參數,然后再用C任務手頭比較可憐的數據量上Fine-tuning過程去調整參數讓它們更適合解決C任務,那事情就好辦多了。這樣原先訓練不了的任務就能解決了,即使手頭任務訓練數據也不少,加個預訓練過程也能極大加快任務訓練的收斂速度,所以這種預訓練方式是老少皆宜的解決方案,另外療效又好,所以在做圖像處理領域很快就流行開來。
為什么這種預訓練模式是可行的呢?
目前我們已經知道,對于層級的CNN結構來說,不同層級的神經元學習到了不同類型的圖像特征,由底向上特征形成層級結構,如上圖所示,如果我們手頭是個人臉識別任務,訓練好網絡后,把每層神經元學習到的特征可視化肉眼看一看每層學到了啥特征,你會看到最底層的神經元學到的是線段等特征,圖示的第二個隱層學到的是人臉五官的輪廓,第三層學到的是人臉的輪廓,通過三步形成了特征的層級結構,越是底層的特征越是所有不論什么領域的圖像都會具備的比如邊角線弧線等底層基礎特征,越往上抽取出的特征越與手頭任務相關。正因為此,所以預訓練好的網絡參數,尤其是底層的網絡參數抽取出特征跟具體任務越無關,越具備任務的通用性,所以這是為何一般用底層預訓練好的參數初始化新任務網絡參數的原因。而高層特征跟任務關聯較大,實際可以不用使用,或者采用Fine-tuning用新數據集合清洗掉高層無關的特征抽取器。
一般用ImageNet來做網絡的預訓練,主要有兩點,一方面ImageNet是圖像領域里有超多事先標注好訓練數據的數據集合,分量足是個很大的優勢,量越大訓練出的參數越靠譜;另外一方面因為ImageNet有1000類,類別多,算是通用的圖像數據,跟領域沒太大關系。
那我們思考一下,在NLP領域的預訓練模型是啥?
NLP領域也有類似的預訓練模型,就是詞向量機制。
譬如這樣經過查表:
然后一句話可以表示為
結合下圖:
如上圖所示,有個NLP的下游任務,QA,就是問答問題。所謂問答問題,指的是給定一個問題X,給定另外一個句子Y,要判斷句子Y是否是問題X的正確答案。使用問答問題假設設計的網絡結構如上圖所示,來演示如何使用訓練好的Word Embedding。句子中每個單詞以Onehot形式作為輸入,然后乘以學好的Word Embedding矩陣Q,就直接取出單詞對應的Word Embedding了。那個Word Embedding矩陣Q其實就是網絡Onehot層到embedding層映射的網絡參數矩陣。所以你看到了,使用Word Embedding等價于什么?等價于把Onehot層到embedding層的網絡用預訓練好的參數矩陣Q初始化了。這跟前面講的圖像領域的低層預訓練過程其實是一樣的,區別無非Word Embedding只能初始化第一層網絡參數,再高層的參數就無能為力了。下游NLP任務在使用Word Embedding的時候也類似圖像有兩種做法,一種是Frozen,就是Word Embedding那層網絡參數固定不動;另外一種是Fine-Tuning,就是Word Embedding這層參數使用新的訓練集合訓練也需要跟著訓練過程更新掉。
我們上星期討論word2vec的時候,把它夸成了一朵花兒。word2vec的好處是它可以捕捉語義信息,而且在CBOW中,它同時使用了上下文信息。使用word2vec對很多NLP任務都有幫助。但是word2vec也有自己的問題。最主要的問題是什么呢?
多義詞是自然語言中經常出現的現象,也是語言靈活性和高效性的一種體現。多義詞對Word Embedding來說有什么負面影響?如上圖所示,比如多義詞Bank,有兩個常用含義,但是Word Embedding在對bank這個單詞進行編碼的時候,是區分不開這兩個含義的,因為它們盡管上下文環境中出現的單詞不同,但是在用語言模型訓練的時候,不論什么上下文的句子經過word2vec,都是預測相同的單詞bank,而同一個單詞占的是同一行的參數空間,這導致兩種不同的上下文信息都會編碼到相同的word embedding空間里去。所以word embedding無法區分多義詞的不同語義,這就是它的一個比較嚴重的問題。
ELMO
ELmo模型是AllenNLP在2018年8月發布的一個上下文無關模型,在BERT沒出來時,也小有名氣。ELMO是“Embedding from Language Models”的簡稱,其實這個名字并沒有反應它的本質思想,提出ELMO的論文題目:“Deep contextualized word representation”更能體現其精髓,而精髓在哪里?在deep contextualized這個短語,一個是deep,一個是context,其中context更關鍵。在此之前的Word Embedding本質上是個靜態的方式,所謂靜態指的是訓練好之后每個單詞的表達就固定住了,以后使用的時候,不論新句子上下文單詞是什么,這個單詞的Word Embedding不會跟著上下文場景的變化而改變,所以對于比如Bank這個詞,它事先學好的Word Embedding中混合了幾種語義 ,在應用中來了個新句子,即使從上下文中(比如句子包含money等詞)明顯可以看出它代表的是“銀行”的含義,但是對應的Word Embedding內容也不會變,它還是混合了多種語義。這是為何說它是靜態的,這也是問題所在。ELMO的本質思想是:我事先用語言模型學好一個單詞的Word Embedding,此時多義詞無法區分,不過這沒關系。在我實際使用Word Embedding的時候,單詞已經具備了特定的上下文了,這個時候我可以根據上下文單詞的語義去調整單詞的Word Embedding表示,這樣經過調整后的Word Embedding更能表達在這個上下文中的具體含義,自然也就解決了多義詞的問題了。所以ELMO本身是個根據當前上下文對Word Embedding動態調整的思路。
上圖展示的是ELMO的預訓練過程,它的網絡結構采用了雙層雙向LSTM,目前語言模型訓練的任務目標是根據單詞
的上下文去正確預測單詞,之前的單詞序列Context-before稱為上文,之后的單詞序列Context-after稱為下文。圖中左端的前向雙層LSTM代表正方向編碼器,輸入的是從左到右順序的除了預測單詞外的上文Context-before;右端的逆向雙層LSTM代表反方向編碼器,輸入的是從右到左的逆序的句子下文Context-after;每個編碼器的深度都是兩層LSTM疊加。這個網絡結構其實在NLP中是很常用的。使用這個網絡結構利用大量語料做語言模型任務就能預先訓練好這個網絡,如果訓練好這個網絡后,輸入一個新句子,句子中每個單詞都能得到對應的三個Embedding:最底層是單詞的Word Embedding,往上走是第一層雙向LSTM中對應單詞位置的Embedding,這層編碼單詞的句法信息更多一些;再往上走是第二層LSTM中對應單詞位置的Embedding,這層編碼單詞的語義信息更多一些。也就是說,ELMO的預訓練過程不僅僅學會單詞的Word Embedding,還學會了一個雙層雙向的LSTM網絡結構,而這兩者后面都有用。通過把正向和反向的隱藏層狀態連接起來:
ELMO采用了典型的兩階段過程,第一個階段是利用語言模型進行預訓練;第二個階段是在做下游任務時,從預訓練網絡中提取對應單詞的網絡各層的Word Embedding作為新特征補充到下游任務中。
上面介紹的是ELMO的第一階段:預訓練階段。那么預訓練好網絡結構后,如何給下游任務使用呢?上圖展示了下游任務的使用過程,比如我們的下游任務仍然是QA問題,此時對于問句X,我們可以先將句子X作為預訓練好的ELMO網絡的輸入,這樣句子X中每個單詞在ELMO網絡中都能獲得對應的三個Embedding。這種三層的結構也類似于圖像處理中的從底層到高層語義逐漸復雜。之后給予這三個Embedding中的每一個Embedding一個權重a,這個權重可以學習得來,根據各自權重累加求和,將三個Embedding整合成一個。然后將整合后的這個Embedding作為X句在自己任務的那個網絡結構中對應單詞的輸入,以此作為補充的新特征給下游任務使用。對于上圖所示下游任務QA中的回答句子Y來說也是如此處理。因為ELMO給下游提供的是每個單詞的特征形式,所以這一類預訓練的方法被稱為“Feature-based Pre-Training”。
使用雙向LSTM,一開始的訓練目標可以表示為:
具體來說是通過雙方向預測單詞,前向過程中,用1~k-1的詞去預測第k個詞,后向過程中,用k+1~N的詞去預測第k個詞。在計算損失函數的時候,也同時考慮了雙向的損失,這樣,使得詞的特征提取具有了雙向性。
ELMO的前輩,TagLM:
ELMo使用雙層BiLSTM來訓練語言模型,創新是線性組合不同層的word vectors, 作為最終的word representation。核心公式:
其中,
是各層表示的權重, 是該次任務的權重。這里可以看到,這兩個參數都是和具體的任務相關的,因此,即使是相同的詞,在不同的上下文中也有不同的詞向量表示。- 第一層是普通的word embedding 可以用wrod2vec或者glove來得到,或者使用character level得到token embedding》 這部分是general embedding,上下文無關。文中使用的character level的CNN+Highway.
- 后面連接兩個biLSTM 去encode 輸入(同時也有殘差連接), 每一層LSTM得到的輸出(隱狀態) 作為每個詞的上下文相關的word vectors.
- 這樣每個詞就會有(L+1)個詞向量,L為biLSTM的層數.
- 詞向量的線性組合,針對不同的任務,不同層的向量做不同的權重加和。 其中權重s是一個維度為L的vector,參與訓練。
因此ELMo的基本輸入單元為句子,每個詞沒有固定的詞向量,是根據詞的上下文環境來動態產生當前詞的詞向量,常見的場景可以較好解決一詞多義的問題,這一點跟word2vec與glove等通用詞向量模型是不同的。
另外比較有趣的一點是,ELMO和BERT是動畫片《芝麻街》中的兩個人物。
ELMO可以較好地解決多義詞的問題。
在各項任務中也有不錯的表現:
那么ELMO的缺點是什么呢?
首先,“不完全雙向”。是指模型的前向和后向LSTM兩個模型是分別訓練的,從圖中也可以看出,對于一個序列,前向遍歷一遍獲得左邊的LSTM,后向遍歷一遍獲得右邊的LSTM,最后得到的隱層向量直接拼接得到結果向量(前向的hidden state1 + 后向的hidden state2 = 總的hidden state,+是concat),并且在最后的Loss function中也是前向和后向的loss function直接相加,并非完全同時的雙向計算。
另外,“自己看見自己”。是指要預測的下一個詞在給定的序列中已經出現的情況。傳統語言模型的數學原理決定了它的單向性。從公式
可以看出,傳統語言模型的目標是獲得在給定序列從頭到尾條件概率相乘后概率最大的下一詞,而雙向模型會導致預測的下一詞已經在給定序列中出現了的問題,這就是“自己看見自己”。如下圖所示(圖片從下往上看),最下行是訓練數據A B C D,經過兩個bi-lstm操作,需要預測某個詞位置的內容。比如第二行第二列A|CD這個結果是第一層bi-lstm在B位置輸出內容,包括正向A和反向CD,直接拼接成A|CD。比如第三行第二例ABCD這個結果是前向BCD和反向AB|D拼接結果,而當前位置需要預測的是B,已經在ABCD中出現了,這就會有問題。因而對于Bi-LSTM,只要層數增加,就是會存在“自己看見自己”的問題。
另一方面,在ELMO提出的時候,TRANSFORMER已經提出了,而TF是比LSTM更適合用于提取遠距離詞間關系特征的架構。
GPT
GPT是2018年OpenAI的論文《Improving Language Understandingby Generative Pre-Training》中提出的模型,是“Generative Pre-Training”的簡稱,從名字看其含義是指的生成式的預訓練。GPT也采用兩階段過程,第一個階段是利用語言模型進行預訓練,第二階段通過Fine-tuning的模式解決下游任務。下圖展示了GPT的預訓練過程,其實和ELMO是類似的,主要不同在于兩點:首先,特征抽取器不是用的RNN,而是用的Transformer,上面提到過它的特征抽取能力要強于RNN,這個選擇很明顯是很明智的。
大家可以快速回顧一下什么是Transformer?multi-head, self-attention。補上位置編碼的公式:
所以,結合一個例子來看:
其次,GPT的預訓練雖然仍然是以語言模型作為目標任務,但是采用的是單向的語言模型,所謂“單向”的含義是指:語言模型訓練的任務目標是根據
單詞的上下文去正確預測單詞,之前的單詞序列Context-before稱為上文,之后的單詞序列Context-after稱為下文。ELMO在做語言模型預訓練的時候,預測單詞同時使用了上文和下文,而GPT則只采用Context-before這個單詞的上文來進行預測,而拋開了下文。這個選擇現在看不是個太好的選擇,原因很簡單,它沒有把單詞的下文融合進來,這限制了其在更多應用場景的效果,比如閱讀理解這種任務,在做任務的時候是可以允許同時看到上文和下文一起做決策的。如果預訓練時候不把單詞的下文嵌入到Word Embedding中,是很吃虧的,白白丟掉了很多信息。GPT中也提出了fine-tuning的方法,這里就非常類似圖像處理中的預處理了。但是使用預訓練好的參數,需要對任務的模型進行了改造。把任務的網絡結構改造成和GPT的網絡結構是一樣的。然后,在做下游任務的時候,利用第一步預訓練好的參數初始化GPT的網絡結構,這樣通過預訓練學到的語言學知識就被引入到你手頭的任務里來了,這是個非常好的事情。再次,你可以用手頭的任務去訓練這個網絡,對網絡參數進行Fine-tuning,使得這個網絡更適合解決手頭的問題。
GPT論文給了一個改造施工圖如上,其實也很簡單:對于分類問題,不用怎么動,加上一個起始和終結符號即可;對于句子關系判斷問題,比如Entailment,兩個句子中間再加個分隔符即可;對文本相似性判斷問題,把兩個句子順序顛倒下做出兩個輸入即可,這是為了告訴模型句子順序不重要;對于多項選擇問題,則多路輸入,每一路把文章和答案選項拼接作為輸入即可。從上圖可看出,這種改造還是很方便的,不同任務只需要在輸入部分施工即可。
GPT的效果也是很好的(在BERT出來之前):
以上只是部分截圖,GPT在12個任務中有9個達到最好。
GPT的有效因子分析:
那么GPT有什么缺點呢?
事后看起來,主要就是沒有采用雙向模型。
BERT
BERT是谷歌在2018年的論文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》中提出來的模型。Bert采用和GPT完全相同的兩階段模型,首先是語言模型預訓練;其次是使用Fine-Tuning模式解決下游任務。和GPT的最主要不同在于在預訓練階段采用了類似ELMO的雙向語言模型,當然另外一點是語言模型的數據規模要比GPT大。
將三個模型并在一起看很有意思:
從上圖可見,Bert其實和ELMO及GPT存在千絲萬縷的關系,比如如果我們把GPT預訓練階段換成雙向語言模型,那么就得到了Bert;而如果我們把ELMO的特征抽取器換成Transformer,那么我們也會得到Bert。所以你可以看出:Bert最關鍵兩點,一點是特征抽取器采用Transformer;第二點是預訓練的時候采用雙向語言模型。
以下是BERT論文的思路:
假如給一個句子 “能實現語言表征[mask]的模型”,遮蓋住其中“目標”一詞。從前往后預測[mask],也就是用“能/實現/語言/表征”,來預測[mask];或者,從后往前預測[mask],也就是用“模型/的”,來預測[mask],稱之為單向預測 unidirectional。單向預測,不能完整地理解整個語句的語義。于是研究者們嘗試雙向預測。把從前往后,與從后往前的兩個預測,拼接在一起 [mask1/mask2],這就是雙向預測 bi-directional。BERT 的作者認為,bi-directional 仍然不能完整地理解整個語句的語義,更好的辦法是用上下文全向來預測[mask],也就是用 “能/實現/語言/表征/../的/模型”,來預測[mask]。BERT 作者把上下文全向的預測方法,稱之為 deep bi-directional。如何來實現上下文全向預測呢?BERT 的作者建議使用 Transformer 模型。
這個模型的核心是聚焦機制,對于一個語句,可以同時啟用多個聚焦點,而不必局限于從前往后的,或者從后往前的,序列串行處理。不僅要正確地選擇模型的結構,而且還要正確地訓練模型的參數,這樣才能保障模型能夠準確地理解語句的語義。BERT 用了兩個步驟,試圖去正確地訓練模型的參數。第一個步驟是把一篇文章中,15% 的詞匯遮蓋,讓模型根據上下文全向地預測被遮蓋的詞。假如有 1 萬篇文章,每篇文章平均有 100 個詞匯,隨機遮蓋 15% 的詞匯,模型的任務是正確地預測這 15 萬個被遮蓋的詞匯。通過全向預測被遮蓋住的詞匯,來初步訓練 Transformer 模型的參數。
然后,用第二個步驟繼續訓練模型的參數。譬如從上述 1 萬篇文章中,挑選 20 萬對語句,總共 40 萬條語句。挑選語句對的時候,其中 210 萬對語句,是連續的兩條上下文語句,另外 210 萬對語句,不是連續的語句。然后讓 Transformer 模型來識別這 20 萬對語句,哪些是連續的,哪些不連續。
BERT的關鍵創新如下:
1: Masked LM
從直覺上看,研究團隊有理由相信,深度雙向模型比left-to-right 模型或left-to-right and right-to-left模型的淺層連接更強大。遺憾的是,標準條件語言模型只能從左到右或從右到左進行訓練,因為雙向條件作用將允許每個單詞在多層上下文中間接地“see itself”。
為了訓練一個深度雙向表示(deep bidirectional representation),研究團隊采用了一種簡單的方法,即隨機屏蔽(masking)部分輸入token,然后只預測那些被屏蔽的token。論文將這個過程稱為“masked LM”(MLM),盡管在文獻中它經常被稱為Cloze任務(Taylor, 1953)。
在這個例子中,與masked token對應的最終隱藏向量被輸入到詞匯表上的輸出softmax中,就像在標準LM中一樣。在團隊所有實驗中,隨機地屏蔽了每個序列中15%的WordPiece token。
雖然這確實能讓團隊獲得雙向預訓練模型,但這種方法有兩個缺點。首先,預訓練和fine-tuning之間不匹配,因為在fine-tuning期間從未看到[MASK]token。為了解決這個問題,團隊并不總是用實際的[MASK]token替換被“masked”的詞匯。相反,訓練數據生成器隨機選擇15%的token。例如在這個句子“my dog is hairy”中,它選擇的token是“hairy”。然后,執行以下過程:
數據生成器將執行以下操作,而不是始終用[MASK]替換所選單詞:
80%的時間:用[MASK]標記替換單詞,例如,my dog is hairy → my dog is [MASK]
10%的時間:用一個隨機的單詞替換該單詞,例如,my dog is hairy → my dog is apple
10%的時間:保持單詞不變,例如,my dog is hairy → my dog is hairy. 這樣做的目的是將表示偏向于實際觀察到的單詞。
Transformer encoder不知道它將被要求預測哪些單詞或哪些單詞已被隨機單詞替換,因此它被迫保持每個輸入token的分布式上下文表示。此外,因為隨機替換只發生在所有token的1.5%(即15%的10%),這似乎不會損害模型的語言理解能力。
使用MLM的第二個缺點是每個batch只預測了15%的token,這表明模型可能需要更多的預訓練步驟才能收斂。團隊證明MLM的收斂速度略慢于 left-to-right的模型(預測每個token),但MLM模型在實驗上獲得的提升遠遠超過增加的訓練成本。
(FFNN feedforward neural network)
2:下一句預測
許多重要的下游任務,如問答(QA)和自然語言推理(NLI)都是基于理解兩個句子之間的關系,這并沒有通過語言建模直接獲得。
在為了訓練一個理解句子的模型關系,預先訓練一個二進制化的下一句測任務,這一任務可以從任何單語語料庫中生成。具體地說,當選擇句子A和B作為預訓練樣本時,B有50%的可能是A的下一個句子,也有50%的可能是來自語料庫的隨機句子。例如:
Input = [CLS] the man went to [MASK] store [SEP]
he bought a gallon [MASK] milk [SEP]
Label = IsNext
Input = [CLS] the man [MASK] to the store [SEP]
penguin [MASK] are flight ##less birds [SEP]
Label = NotNext
團隊完全隨機地選擇了NotNext語句,最終的預訓練模型在此任務上實現了97%-98%的準確率。對BERT模型的觀點
XLNet概述
XLNet是一個語言模型。和ELMO,GPT,BERT一脈相承,同時借鑒了Transformer-XL,故稱XLNet(XL含義源于衣服尺碼,意思是模型橫向更寬);并提出一些新方法改善了Bert存在的問題,目前取得了全面超越Bert的成果。和Bert一樣,XLNet也分為Pre-train和Fine-turn兩階段;并且參數規模比Bert更大。
參考:
總結
以上是生活随笔為你收集整理的bert 多义词_自然语言处理:Bert及其他的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 十年轩逸悬挂如何维护
- 下一篇: 剪映电脑版_七款手机剪辑app,效果堪比