萬字長文 | 關(guān)于BERT,面試官們都怎么問
作者?|?Adherer? 整理?|?NewBeeNLP
1.BERT 的基本原理是什么?
BERT 來自 Google 的論文Pre-training of Deep Bidirectional Transformers for Language Understanding[1],BERT 是“Bidirectional Encoder Representations from Transformers”的首字母縮寫,整體是一個自編碼語言模型(Autoencoder LM),并且其設(shè)計了兩個任務(wù)來預(yù)訓(xùn)練該模型。
第一個任務(wù)是采用 MaskLM 的方式來訓(xùn)練語言模型,通俗地說就是在輸入一句話的時候,隨機地選一些要預(yù)測的詞,然后用一個特殊的符號[MASK]來代替它們,之后讓模型根據(jù)所給的標(biāo)簽去學(xué)習(xí)這些地方該填的詞。 第二個任務(wù)在雙向語言模型的基礎(chǔ)上額外增加了一個句子級別的連續(xù)性預(yù)測任務(wù),即預(yù)測輸入 BERT 的兩段文本是否為連續(xù)的文本,引入這個任務(wù)可以更好地讓模型學(xué)到連續(xù)的文本片段之間的關(guān)系。
最后的實驗表明 BERT 模型的有效性,并在 11 項 NLP 任務(wù)中奪得 SOTA 結(jié)果。
BERT 相較于原來的 RNN、LSTM 可以做到并發(fā)執(zhí)行,同時提取詞在句子中的關(guān)系特征,并且能在多個不同層次提取關(guān)系特征,進而更全面反映句子語義。相較于 word2vec,其又能根據(jù)句子上下文獲取詞義,從而避免歧義出現(xiàn)。同時缺點也是顯而易見的,模型參數(shù)太多,而且模型太大,少量數(shù)據(jù)訓(xùn)練時,容易過擬合。
2.BERT 是怎么用 Transformer 的?
BERT 只使用了 Transformer 的 Encoder 模塊,原論文中,作者分別用 12 層和 24 層 Transformer Encoder 組裝了兩套 BERT 模型,分別是:
其中層的數(shù)量(即,Transformer Encoder 塊的數(shù)量)為?,隱藏層的維度為?,自注意頭的個數(shù)為?。在所有例子中,我們將前饋/過濾器(Transformer Encoder 端的 feed-forward 層)的維度設(shè)置為?,即當(dāng)? 時是?;當(dāng)? 是?。
圖示如下:

「需要注意的是,與 Transformer 本身的 Encoder 端相比,BERT 的 Transformer Encoder 端輸入的向量表示,多了 Segment Embeddings?!?/strong>
3.BERT 的訓(xùn)練過程是怎么樣的?
在論文原文中,作者提出了兩個預(yù)訓(xùn)練任務(wù):Masked LM 和 Next Sentence Prediction。
3.1 「Masked LM」
Masked LM 的任務(wù)描述為:給定一句話,隨機抹去這句話中的一個或幾個詞,要求根據(jù)剩余詞匯預(yù)測被抹去的幾個詞分別是什么,如下圖所示。

BERT 模型的這個預(yù)訓(xùn)練過程其實就是在模仿我們學(xué)語言的過程,思想來源于「完形填空」的任務(wù)。具體來說,文章作者在一句話中隨機選擇 15% 的詞匯用于預(yù)測。對于在原句中被抹去的詞匯, 80% 情況下采用一個特殊符號 [MASK] 替換, 10% 情況下采用一個任意詞替換,剩余 10% 情況下保持原詞匯不變。
這么做的主要原因是:在后續(xù)微調(diào)任務(wù)中語句中并不會出現(xiàn) [MASK] 標(biāo)記,而且這么做的另一個好處是:預(yù)測一個詞匯時,模型并不知道輸入對應(yīng)位置的詞匯是否為正確的詞匯( 10% 概率),這就迫使模型更多地依賴于上下文信息去預(yù)測詞匯,并且賦予了模型一定的糾錯能力。上述提到了這樣做的一個缺點,其實這樣做還有另外一個缺點,就是每批次數(shù)據(jù)中只有 15% 的標(biāo)記被預(yù)測,這意味著模型可能需要更多的預(yù)訓(xùn)練步驟來收斂。
3.2 Next Sentence Prediction
Next Sentence Prediction 的任務(wù)描述為:給定一篇文章中的兩句話,判斷第二句話在文本中是否緊跟在第一句話之后,如下圖所示。

這個類似于「段落重排序」的任務(wù),即:將一篇文章的各段打亂,讓我們通過重新排序把原文還原出來,這其實需要我們對全文大意有充分、準(zhǔn)確的理解。
Next Sentence Prediction 任務(wù)實際上就是段落重排序的簡化版:只考慮兩句話,判斷是否是一篇文章中的前后句。在實際預(yù)訓(xùn)練過程中,文章作者從文本語料庫中隨機選擇 50% 正確語句對和 50% 錯誤語句對進行訓(xùn)練,與 Masked LM 任務(wù)相結(jié)合,讓模型能夠更準(zhǔn)確地刻畫語句乃至篇章層面的語義信息。
BERT 模型通過對 Masked LM 任務(wù)和 Next Sentence Prediction 任務(wù)進行聯(lián)合訓(xùn)練,使模型輸出的每個字 / 詞的向量表示都能盡可能全面、準(zhǔn)確地刻畫輸入文本(單句或語句對)的整體信息,為后續(xù)的微調(diào)任務(wù)提供更好的模型參數(shù)初始值。
4.為什么 BERT 比 ELMo 效果好?ELMo 和 BERT 的區(qū)別是什么?
4.1 為什么 BERT 比 ELMo 效果好?
從網(wǎng)絡(luò)結(jié)構(gòu)以及最后的實驗效果來看,BERT 比 ELMo 效果好主要集中在以下幾點原因:
LSTM 抽取特征的能力遠弱于 Transformer 拼接方式雙向融合的特征融合能力偏弱(沒有具體實驗驗證,只是推測) 其實還有一點,BERT 的訓(xùn)練數(shù)據(jù)以及模型參數(shù)均多余 ELMo,這也是比較重要的一點
4.2 ELMo 和 BERT 的區(qū)別是什么?
ELMo 模型是通過語言模型任務(wù)得到句子中單詞的 embedding 表示,以此作為補充的新特征給下游任務(wù)使用。因為 ELMO 給下游提供的是每個單詞的特征形式,所以這一類預(yù)訓(xùn)練的方法被稱為“Feature-based Pre-Training”。而 BERT 模型是“基于 Fine-tuning 的模式”,這種做法和圖像領(lǐng)域基于 Fine-tuning 的方式基本一致,下游任務(wù)需要將模型改造成 BERT 模型,才可利用 BERT 模型預(yù)訓(xùn)練好的參數(shù)。
5.BERT 有什么局限性?
從 XLNet 論文中,提到了 BERT 的兩個缺點,分別如下:
BERT 在第一個預(yù)訓(xùn)練階段,假設(shè)句子中多個單詞被 Mask 掉,這些被 Mask 掉的單詞之間沒有任何關(guān)系,是條件獨立的,然而有時候這些單詞之間是有關(guān)系的,比如”New York is a city”,假設(shè)我們 Mask 住”New”和”York”兩個詞,那么給定”is a city”的條件下”New”和”York”并不獨立,因為”New York”是一個實體,看到”New”則后面出現(xiàn)”York”的概率要比看到”O(jiān)ld”后面出現(xiàn)”York”概率要大得多。 但是需要注意的是,這個問題并不是什么大問題,甚至可以說對最后的結(jié)果并沒有多大的影響,因為本身 BERT 預(yù)訓(xùn)練的語料就是海量的(動輒幾十個 G),所以如果訓(xùn)練數(shù)據(jù)足夠大,其實不靠當(dāng)前這個例子,靠其它例子,也能彌補被 Mask 單詞直接的相互關(guān)系問題,因為總有其它例子能夠?qū)W會這些單詞的相互依賴關(guān)系。 BERT 的在預(yù)訓(xùn)練時會出現(xiàn)特殊的[MASK],但是它在下游的 fine-tune 中不會出現(xiàn),這就出現(xiàn)了預(yù)訓(xùn)練階段和 fine-tune 階段不一致的問題。其實這個問題對最后結(jié)果產(chǎn)生多大的影響也是不夠明確的,因為后續(xù)有許多 BERT 相關(guān)的預(yù)訓(xùn)練模型仍然保持了[MASK]標(biāo)記,也取得了很大的結(jié)果,而且很多數(shù)據(jù)集上的結(jié)果也比 BERT 要好。但是確確實實引入[MASK]標(biāo)記,也是為了構(gòu)造自編碼語言模型而采用的一種折中方式。
另外還有一個缺點,是 BERT 在分詞后做[MASK]會產(chǎn)生的一個問題,為了解決 OOV 的問題,我們通常會把一個詞切分成更細粒度的 WordPiece。BERT 在 Pretraining 的時候是隨機 Mask 這些 WordPiece 的,這就可能出現(xiàn)只 Mask 一個詞的一部分的情況,例如:

probability 這個詞被切分成”pro”、”#babi”和”#lity”3 個 WordPiece。有可能出現(xiàn)的一種隨機 Mask 是把”#babi” Mask 住,但是”pro”和”#lity”沒有被 Mask。這樣的預(yù)測任務(wù)就變得容易了,因為在”pro”和”#lity”之間基本上只能是”#babi”了。這樣它只需要記住一些詞(WordPiece 的序列)就可以完成這個任務(wù),而不是根據(jù)上下文的語義關(guān)系來預(yù)測出來的。類似的中文的詞”模型”也可能被 Mask 部分(其實用”琵琶”的例子可能更好,因為這兩個字只能一起出現(xiàn)而不能單獨出現(xiàn)),這也會讓預(yù)測變得容易。
為了解決這個問題,很自然的想法就是詞作為一個整體要么都 Mask 要么都不 Mask,這就是所謂的 Whole Word Masking。這是一個很簡單的想法,對于 BERT 的代碼修改也非常少,只是修改一些 Mask 的那段代碼。
「TODO:另外還有別的缺點及其改進,看到相關(guān)論文再補充?!?/strong>
6.BERT 的輸入和輸出分別是什么?
BERT 模型的主要輸入是文本中各個字/詞(或者稱為 token)的原始詞向量,該向量既可以隨機初始化,也可以利用 Word2Vector 等算法進行預(yù)訓(xùn)練以作為初始值;輸出是文本中各個字/詞融合了全文語義信息后的向量表示,如下圖所示(為方便描述且與 BERT 模型的當(dāng)前中文版本保持一致,統(tǒng)一以「字向量」作為輸入):

從上圖中可以看出,**BERT 模型通過查詢字向量表將文本中的每個字轉(zhuǎn)換為一維向量,作為模型輸入;模型輸出則是輸入各字對應(yīng)的融合全文語義信息后的向量表示。**此外,模型輸入除了字向量(英文中對應(yīng)的是 Token Embeddings),還包含另外兩個部分:
文本向量(英文中對應(yīng)的是 Segment Embeddings):該向量的取值在模型訓(xùn)練過程中自動學(xué)習(xí),用于刻畫文本的全局語義信息,并與單字/詞的語義信息相融合
位置向量(英文中對應(yīng)的是 Position Embeddings):由于出現(xiàn)在文本不同位置的字/詞所攜帶的語義信息存在差異(比如:“我愛你”和“你愛我”),因此,BERT 模型對不同位置的字/詞分別附加一個不同的向量以作區(qū)分
最后,BERT 模型將字向量、文本向量和位置向量的加和作為模型輸入。特別地,在目前的 BERT 模型中,文章作者還將英文詞匯作進一步切割,劃分為更細粒度的語義單位(WordPiece),例如:將 playing 分割為 play 和##ing;此外,對于中文,目前作者未對輸入文本進行分詞,而是直接將單字作為構(gòu)成文本的基本單位。
需要注意的是,上圖中只是簡單介紹了單個句子輸入 BERT 模型中的表示,實際上,在做 Next Sentence Prediction 任務(wù)時,在第一個句子的首部會加上一個[CLS] token,在兩個句子中間以及最后一個句子的尾部會加上一個[SEP] token。
7.針對句子語義相似度/多標(biāo)簽分類/機器翻譯翻譯/文本生成的任務(wù),利用 BERT 結(jié)構(gòu)怎么做 fine-tuning?
7.1 針對句子語義相似度的任務(wù)

實際操作時,上述最后一句話之后還會加一個[SEP] token,語義相似度任務(wù)將兩個句子按照上述方式輸入即可,之后與論文中的分類任務(wù)一樣,將[CLS] token 位置對應(yīng)的輸出,接上 softmax 做分類即可(實際上 GLUE 任務(wù)中就有很多語義相似度的數(shù)據(jù)集)。
7.2 針對多標(biāo)簽分類的任務(wù)
多標(biāo)簽分類任務(wù),即 MultiLabel,指的是一個樣本可能同時屬于多個類,即有多個標(biāo)簽。以商品為例,一件 L 尺寸的棉服,則該樣本就有至少兩個標(biāo)簽——型號:L,類型:冬裝。
對于多標(biāo)簽分類任務(wù),顯而易見的樸素做法就是不管樣本屬于幾個類,就給它訓(xùn)練幾個分類模型即可,然后再一一判斷在該類別中,其屬于那個子類別,但是這樣做未免太暴力了,而多標(biāo)簽分類任務(wù),其實是可以「只用一個模型」來解決的。
利用 BERT 模型解決多標(biāo)簽分類問題時,其輸入與普通單標(biāo)簽分類問題一致,得到其 embedding 表示之后(也就是 BERT 輸出層的 embedding),有幾個 label 就連接到幾個全連接層(也可以稱為 projection layer),然后再分別接上 softmax 分類層,這樣的話會得到?,最后再將所有的 loss 相加起來即可。這種做法就相當(dāng)于將 n 個分類模型的特征提取層參數(shù)共享,得到一個共享的表示(其維度可以視任務(wù)而定,由于是多標(biāo)簽分類任務(wù),因此其維度可以適當(dāng)增大一些),最后再做多標(biāo)簽分類任務(wù)。
7.3 針對翻譯的任務(wù)
針對翻譯的任務(wù),我自己想到一種做法,因為 BERT 本身會產(chǎn)生 embedding 這樣的“副產(chǎn)品”,因此可以直接利用 BERT 輸出層得到的 embedding,然后在做機器翻譯任務(wù)時,將其作為輸入/輸出的 embedding 表示,這樣做的話,可能會遇到 UNK 的問題,為了解決 UNK 的問題,可以將得到的詞向量 embedding 拼接字向量的 embedding 得到輸入/輸出的表示(對應(yīng)到英文就是 token embedding 拼接經(jīng)過 charcnn 的 embedding 的表示)。
7.4 針對文本生成的任務(wù)
關(guān)于生成任務(wù),搜到以下幾篇論文:
BERT has a Mouth, and It Must Speak: BERT as a Markov Random Field Language Model[2]
MASS: Masked Sequence to Sequence Pre-training for Language Generation[3]
Unified Language Model Pre-training for Natural Language Understanding and Generation[4]
8.BERT 應(yīng)用于有空格丟失或者單詞拼寫錯誤等數(shù)據(jù)是否還是有效?有什么改進的方法?
8.1 BERT 應(yīng)用于有空格丟失的數(shù)據(jù)是否還是有效?
按照常理推斷可能會無效了,因為空格都沒有的話,那么便成為了一長段文本,但是具體還是有待驗證。而對于有空格丟失的數(shù)據(jù)要如何處理呢?一種方式是利用 Bi-LSTM + CRF 做分詞處理,待其處理成正常文本之后,再將其輸入 BERT 做下游任務(wù)。
8.2 BERT 應(yīng)用于單詞拼寫錯誤的數(shù)據(jù)是否還是有效?
如果有少量的單詞拼寫錯誤,那么造成的影響應(yīng)該不會太大,因為 BERT 預(yù)訓(xùn)練的語料非常豐富,而且很多語料也不夠干凈,其中肯定也還是會含有不少單詞拼寫錯誤這樣的情況。但是如果單詞拼寫錯誤的比例比較大,比如達到了 30%、50%這種比例,那么需要通過人工特征工程的方式,以中文中的同義詞替換為例,將不同的錯字/別字都替換成同樣的詞語,這樣減少錯別字帶來的影響。例如花被、花珼、花唄、花唄、花鋇均替換成花唄。
9.BERT 的 embedding 向量如何得來的?
以中文為例,「BERT 模型通過查詢字向量表將文本中的每個字轉(zhuǎn)換為一維向量,作為模型輸入(還有 position embedding 和 segment embedding);模型輸出則是輸入各字對應(yīng)的融合全文語義信息后的向量表示。」
而對于輸入的 token embedding、segment embedding、position embedding 都是隨機生成的,需要注意的是在 Transformer 論文中的 position embedding 由 sin/cos 函數(shù)生成的固定的值,而在這里代碼實現(xiàn)中是跟普通 word embedding 一樣隨機生成的,可以訓(xùn)練的。作者這里這樣選擇的原因可能是 BERT 訓(xùn)練的數(shù)據(jù)比 Transformer 那篇大很多,完全可以讓模型自己去學(xué)習(xí)。
10.BERT 模型為什么要用 mask?它是如何做 mask 的?其 mask 相對于 CBOW 有什么異同點?
10.1 BERT 模型為什么要用 mask?
BERT 通過在輸入 X 中隨機 Mask 掉一部分單詞,然后預(yù)訓(xùn)練過程的主要任務(wù)之一是根據(jù)上下文單詞來預(yù)測這些被 Mask 掉的單詞。其實這個就是典型的 Denosing Autoencoder 的思路,那些被 Mask 掉的單詞就是**在輸入側(cè)加入的所謂噪音。**類似 BERT 這種預(yù)訓(xùn)練模式,被稱為 DAE LM。因此總結(jié)來說 BERT 模型 [Mask] 標(biāo)記就是引入噪音的手段。
關(guān)于 DAE LM 預(yù)訓(xùn)練模式,優(yōu)點是它能比較自然地融入雙向語言模型,同時看到被預(yù)測單詞的上文和下文,然而缺點也很明顯,主要在輸入側(cè)引入[Mask]標(biāo)記,導(dǎo)致預(yù)訓(xùn)練階段和 Fine-tuning 階段不一致的問題。
10.2 它是如何做 mask 的?
給定一個句子,會隨機 Mask 15%的詞,然后讓 BERT 來預(yù)測這些 Mask 的詞,如同上述 10.1 所述,在輸入側(cè)引入[Mask]標(biāo)記,會導(dǎo)致預(yù)訓(xùn)練階段和 Fine-tuning 階段不一致的問題,因此在論文中為了緩解這一問題,采取了如下措施:
如果某個 Token 在被選中的 15%個 Token 里,則按照下面的方式隨機的執(zhí)行:
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
這樣做的好處是,BERT 并不知道[MASK]替換的是這 15%個 Token 中的哪一個詞(「注意:這里意思是輸入的時候不知道[MASK]替換的是哪一個詞,但是輸出還是知道要預(yù)測哪個詞的」),而且任何一個詞都有可能是被替換掉的,比如它看到的 apple 可能是被替換的詞。這樣強迫模型在編碼當(dāng)前時刻的時候不能太依賴于當(dāng)前的詞,而要考慮它的上下文,甚至對其上下文進行”糾錯”。比如上面的例子模型在編碼 apple 是根據(jù)上下文 my dog is 應(yīng)該把 apple(部分)編碼成 hairy 的語義而不是 apple 的語義。
10.3 其 mask 相對于 CBOW 有什么異同點?
「相同點」:CBOW 的核心思想是:給定上下文,根據(jù)它的上文 Context-Before 和下文 Context-after 去預(yù)測 input word。而 BERT 本質(zhì)上也是這么做的,但是 BERT 的做法是給定一個句子,會隨機 Mask 15%的詞,然后讓 BERT 來預(yù)測這些 Mask 的詞。
「不同點」:首先,在 CBOW 中,每個單詞都會成為 input word,而 BERT 不是這么做的,原因是這樣做的話,訓(xùn)練數(shù)據(jù)就太大了,而且訓(xùn)練時間也會非常長。
其次,對于輸入數(shù)據(jù)部分,CBOW 中的輸入數(shù)據(jù)只有待預(yù)測單詞的上下文,而 BERT 的輸入是帶有[MASK] token 的“完整”句子,也就是說 BERT 在輸入端將待預(yù)測的 input word 用[MASK] token 代替了。
另外,通過 CBOW 模型訓(xùn)練后,每個單詞的 word embedding 是唯一的,因此并不能很好的處理一詞多義的問題,而 BERT 模型得到的 word embedding(token embedding)融合了上下文的信息,就算是同一個單詞,在不同的上下文環(huán)境下,得到的 word embedding 是不一樣的。
其實自己在整理這個問題時,萌生了新的問題,具體描述如下:
「為什么 BERT 中輸入數(shù)據(jù)的[mask]標(biāo)記為什么不能直接留空或者直接輸入原始數(shù)據(jù),在 self-attention 的 Q K V 計算中,不與待預(yù)測的單詞做 Q K V 交互計算?」
這個問題還要補充一點細節(jié),就是數(shù)據(jù)可以像 CBOW 那樣,每一條數(shù)據(jù)只留一個“空”,這樣的話,之后在預(yù)測的時候,就可以將待預(yù)測單詞之外的所有單詞的表示融合起來(均值融合或者最大值融合等方式),然后再接上 softmax 做分類。
乍一看,感覺這個 idea 確實有可能可行,而且也沒有看到什么不合理之處,但是需要注意的是,這樣做的話,需要每預(yù)測一個單詞,就要計算一套 Q、K、V。就算不每次都計算,那么保存每次得到的 Q、K、V 也需要耗費大量的空間。總而言之,這種做法確實可能也是可行,但是實際操作難度卻很大,從計算量來說,就是預(yù)訓(xùn)練 BERT 模型的好幾倍(至少),而且要保存中間狀態(tài)也并非易事。其實還有挺重要的一點,如果像 CBOW 那樣做,那么文章的“創(chuàng)新”在哪呢~
11.BERT 的兩個預(yù)訓(xùn)練任務(wù)對應(yīng)的損失函數(shù)是什么(用公式形式展示)?
BERT 的損失函數(shù)由兩部分組成,第一部分是來自 Mask-LM 的「單詞級別分類任務(wù)」,另一部分是「句子級別的分類任務(wù)」。通過這兩個任務(wù)的聯(lián)合學(xué)習(xí),可以使得 BERT 學(xué)習(xí)到的表征既有 token 級別信息,同時也包含了句子級別的語義信息。具體損失函數(shù)如下:
其中? 是 BERT 中 Encoder 部分的參數(shù), 是 Mask-LM 任務(wù)中在 Encoder 上所接的輸出層中的參數(shù), 則是句子預(yù)測任務(wù)中在 Encoder 接上的分類器參數(shù)。因此,在第一部分的損失函數(shù)中,如果被 mask 的詞集合為 M,因為它是一個詞典大小 |V| 上的多分類問題,那么具體說來有:
在句子預(yù)測任務(wù)中,也是一個分類問題的損失函數(shù):
因此,兩個任務(wù)聯(lián)合學(xué)習(xí)的損失函數(shù)是:
具體的預(yù)訓(xùn)練工程實現(xiàn)細節(jié)方面,BERT 還利用了一系列策略,使得模型更易于訓(xùn)練,比如對于學(xué)習(xí)率的 warm-up 策略,使用的激活函數(shù)不再是普通的 ReLu,而是 GeLu,也使用了 dropout 等常見的訓(xùn)練技巧。
12.詞袋模型到 word2vec 改進了什么?word2vec 到 BERT 又改進了什么?
12.1 詞袋模型到 word2vec 改進了什么?
詞袋模型(Bag-of-words model)是將一段文本(比如一個句子或是一個文檔)用一個“裝著這些詞的袋子”來表示,這種表示方式不考慮文法以及詞的順序。「而在用詞袋模型時,文檔的向量表示直接將各詞的詞頻向量表示加和」。通過上述描述,可以得出詞袋模型的兩個缺點:
詞向量化后,詞與詞之間是有權(quán)重大小關(guān)系的,不一定詞出現(xiàn)的越多,權(quán)重越大。 詞與詞之間是沒有順序關(guān)系的。
而 word2vec 是考慮詞語位置關(guān)系的一種模型。通過大量語料的訓(xùn)練,將每一個詞語映射成一個低維稠密向量,通過求余弦的方式,可以判斷兩個詞語之間的關(guān)系,word2vec 其底層主要采用基于 CBOW 和 Skip-Gram 算法的神經(jīng)網(wǎng)絡(luò)模型。
因此,綜上所述,詞袋模型到 word2vec 的改進主要集中于以下兩點:
考慮了詞與詞之間的順序,引入了上下文的信息 得到了詞更加準(zhǔn)確的表示,其表達的信息更為豐富
12.2 word2vec 到 BERT 又改進了什么?
word2vec 到 BERT 的改進之處其實沒有很明確的答案,如同上面的問題所述,BERT 的思想其實很大程度上來源于 CBOW 模型,如果從準(zhǔn)確率上說改進的話,BERT 利用更深的模型,以及海量的語料,得到的 embedding 表示,來做下游任務(wù)時的準(zhǔn)確率是要比 word2vec 高不少的。實際上,這也離不開模型的“加碼”以及數(shù)據(jù)的“巨大加碼”。再從方法的意義角度來說,BERT 的重要意義在于給大量的 NLP 任務(wù)提供了一個泛化能力很強的預(yù)訓(xùn)練模型,而僅僅使用 word2vec 產(chǎn)生的詞向量表示,不僅能夠完成的任務(wù)比 BERT 少了很多,而且很多時候直接利用 word2vec 產(chǎn)生的詞向量表示給下游任務(wù)提供信息,下游任務(wù)的表現(xiàn)不一定會很好,甚至?xí)容^差。[5][6][7][8][9][10]
本文參考資料
Pre-training of Deep Bidirectional Transformers for Language Understanding: https://arxiv.org/abs/1810.04805
[2]BERT has a Mouth, and It Must Speak: BERT as a Markov Random Field Language Model: https://arxiv.org/abs/1902.04094
[3]MASS: Masked Sequence to Sequence Pre-training for Language Generation: https://arxiv.org/abs/1905.02450
[4]Unified Language Model Pre-training for Natural Language Understanding and Generation: https://arxiv.org/abs/1905.03197
[5]BERT 模型詳解: http://fancyerii.github.io/2019/03/09/bert-theory/
[6]XLNet 原理: http://fancyerii.github.io/2019/06/30/xlnet-theory/
[7]圖解 BERT 模型:從零開始構(gòu)建 BERT: http://url.cn/5vprrTM
[8]XLNet:運行機制及和 Bert 的異同比較: https://zhuanlan.zhihu.com/p/70257427
[9]如何評價 BERT 模型?: https://www.zhihu.com/question/298203515
[10]【NLP】Google BERT 詳解: https://zhuanlan.zhihu.com/p/46652512
-?END?-

