预训练模型:BERT深度解析《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》
目錄
1. 背景
2. 什么是 Bert 及原理?
3. 論文內(nèi)容《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》
3.1 BERT模型輸入
3.2 BERT模型預(yù)訓(xùn)練任務(wù)
3.2.1?Masked LM(MLM):雙向的語言模型任務(wù)
3.2.2 Next Sentence Prediction(NSP):連貫性判斷任務(wù)
3.3 模型比較
4. BERT模型對NLP的影響
5. 其他模型
5.1 ELMo
5.2 ULMFiT
5.3? GPT
5.4? BERT
5.5 ERNIE
6. 總結(jié)
參考文獻(xiàn)
BERT 項(xiàng)目地址:
https://github.com/google-research/bert#fine-tuning-with-bert
BERT 項(xiàng)目論文:
https://arxiv.org/abs/1810.04805
1. 背景
? ? ? ? 早在2015年的時候,微軟研究院的何凱明和他的同事們發(fā)表了殘差網(wǎng)絡(luò)的論文,第一次通過殘差的方式將卷積神經(jīng)網(wǎng)絡(luò)推進(jìn)到了100層以上,并在圖像識別的任務(wù)上刷新了當(dāng)時的最高紀(jì)錄。自那以后起,隨著網(wǎng)絡(luò)不斷地加深,效果也在不斷提升。然而大量的數(shù)據(jù)訓(xùn)練出來的大型網(wǎng)絡(luò)雖然效果更好,但隨著網(wǎng)絡(luò)的加深以及數(shù)據(jù)集的不斷擴(kuò)大,完全重新訓(xùn)練一個模型所需要的成本也在不斷地增加。
? ? ? ? 因此在計(jì)算機(jī)視覺處理中,人們越來越多地采用預(yù)訓(xùn)練好的大型網(wǎng)絡(luò)來提取特征,然后再進(jìn)行后續(xù)任務(wù)。目前這種處理方式已經(jīng)是圖像處理中很常見的做法了。
? ? ? ?相比之下,自然語言處理目前通常會使用預(yù)訓(xùn)練的詞向量來進(jìn)行后續(xù)任務(wù)。但詞向量是通過淺層網(wǎng)絡(luò)進(jìn)行無監(jiān)督訓(xùn)練,雖然在詞的級別上有著不錯的特性,但卻缺少對連續(xù)文本的內(nèi)在聯(lián)系和語言結(jié)構(gòu)的表達(dá)能力。因此大家也希望能像圖像領(lǐng)域那樣,通過大量數(shù)據(jù)來預(yù)訓(xùn)練一個大型的神經(jīng)網(wǎng)絡(luò),然后用它來對文本提取特征去做后續(xù)的任務(wù),以期望能得到更好的效果。這一方向的研究一直在持續(xù),直到AllenAI提出的ELMo,由于其在后續(xù)任務(wù)上的優(yōu)異表現(xiàn)獲得了不小的關(guān)注。
2. 什么是 Bert 及原理?
BERT 是一種對語言表征進(jìn)行預(yù)訓(xùn)練的方法,換句話說,是經(jīng)過大型文本語料庫(如維基百科)訓(xùn)練后獲得的通用「語言理解」模型,該模型可用于我們最在乎的 NLP 下游任務(wù)(如問答)。BERT 之所以表現(xiàn)得比過往的方法要好,是因?yàn)樗鞘讉€用于進(jìn)行 NLP 預(yù)訓(xùn)練的無監(jiān)督、深度雙向系統(tǒng)。
BERT:一個語言表征模型,利用transformer的encoder來進(jìn)行預(yù)訓(xùn)練。BERT模型的全稱是Bidirectional Encoder Representations from Transformers,它是一種新型的語言模型。之所以說是一種新型的語言模型,是因?yàn)樗ㄟ^聯(lián)合調(diào)節(jié)所有層中的雙向Transformer來訓(xùn)練預(yù)訓(xùn)練深度雙向表示。作者通過在33億文本的語料上訓(xùn)練語言模型,再分別在不同的下游任務(wù)上微調(diào),這樣的模型在不同的任務(wù)均得到了目前為止最好的結(jié)果,并且有一些結(jié)果相比此前的最佳成績得到了幅度不小的提升。
? ? ? ? ?預(yù)訓(xùn)練表征可能無上下文語境,也可能有上下文語境,有上下文語境的系統(tǒng)可以進(jìn)一步劃分成單向的或者雙向的。以 word2vec (?https://www.tensorflow.org/tutorials/representation/word2vec? ) 和 GloVe (?https://nlp.stanford.edu/projects/glove/? )為例,無上下文語境的模型為詞匯表中的每個單詞生成單個「詞嵌入」表征,因此「 bank 」在「?bank deposit 」和「 river bank 」中可能存在同樣的表征。反之,有上下文語境的模型會根據(jù)整句話生成詞的表征。
BERT 建立在近期一些上下文預(yù)訓(xùn)練語境表征工作的基礎(chǔ)上,包括半監(jiān)督序列學(xué)習(xí)(?https://arxiv.org/abs/1511.01432? )、預(yù)訓(xùn)練生成模型(?https://blog.openai.com/language-unsupervised/? )、ELMo (?https://allennlp.org/elmo? )以及 ULMFit (?http://nlp.fast.ai/classification/2018/05/15/introducting-ulmfit.html? ),但以上模型要么是單向的,要么是淺層雙向的,這意味著每個單詞只能與其左邊(或右邊)的單詞進(jìn)行語境化結(jié)合。以「? I made a bank deposit?」為例,由于是單向表示,「?bank 」只能基于左邊「? I made a?」而不是與關(guān)聯(lián)性更強(qiáng)的「?deposit?」生成語境。過去有一些工作試圖打造出一個能夠結(jié)合上下文語境的生成模型,然而這些工作目前看來都較「?淺層? 」。BERT 真正做到了結(jié)合上下文語境來生成「? bank?」,兼顧到「? I made a 」和「? deposit?」,從深度神經(jīng)網(wǎng)絡(luò)的最底層開始,擁有深度雙向?qū)傩浴?/p>
? ? ? ? 想深入了解BERT模型,首先應(yīng)該理解語言模型。預(yù)訓(xùn)練的語言模型對于眾多自然語言處理問題起到了重要作用,比如SQuAD問答任務(wù)、命名實(shí)體識別以及情感識別。目前將預(yù)訓(xùn)練的語言模型應(yīng)用到NLP任務(wù)主要有兩種策略,一種是基于特征的語言模型,如ELMo模型;另一種是基于微調(diào)的語言模型,如OpenAI GPT。這兩類語言模型各有其優(yōu)缺點(diǎn),而BERT的出現(xiàn),似乎融合了它們所有的優(yōu)點(diǎn),因此才可以在諸多后續(xù)特定任務(wù)上取得最優(yōu)的效果。
3. 論文內(nèi)容《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》
? ? ? ? ?這個題目有五個關(guān)鍵詞,分別是 Pre-training、Deep、Bidirectional、Transformers、和 Language Understanding。其中 pre-training 的意思是,作者認(rèn)為,確實(shí)存在通用的語言模型,先用文章預(yù)訓(xùn)練通用模型,然后再根據(jù)具體應(yīng)用,用 supervised 訓(xùn)練數(shù)據(jù),精加工(fine tuning)模型,使之適用于具體應(yīng)用。為了區(qū)別于針對語言生成的 Language Model,作者給通用的語言模型,取了一個名字,叫語言表征模型 Language Representation Model。
? ? ? ? ? 語言表征模型 Language Representation Model:能實(shí)現(xiàn)語言表征目標(biāo)的模型,作者提議,用 Deep Bidirectional Transformers 模型。
3.1 BERT模型輸入
? ? ? ? 輸入表示可以在一個詞序列中表示單個文本句或一對文本(例如,[問題,答案])。對于給定的詞,其輸入表示是可以通過三部分Embedding求和組成。Embedding的可視化表示如下圖所示:
- token Embeddings:表示的是詞向量,第一個單詞是CLS標(biāo)志,可以用于之后的分類任務(wù),對于非分類任務(wù),可以忽略詞向量;
- Segment Embeddings:句子向量,用來區(qū)別兩種句子,因?yàn)轭A(yù)訓(xùn)練不只做語言模型還要做以兩個句子為輸入的分類任務(wù);
- Position Embeddings:位置向量,是通過模型學(xué)習(xí)得到的。
3.2 BERT模型預(yù)訓(xùn)練任務(wù)
? ? ? ? 預(yù)訓(xùn)練 pre-training,訓(xùn)練結(jié)束后的 Transformer 模型,包括它的參數(shù),是作者期待的通用的語言表征模型。BERT模型使用2個新的無監(jiān)督預(yù)測任務(wù)對BERT進(jìn)行預(yù)訓(xùn)練,分別是Masked LM和Next Sentence Prediction:
3.2.1?Masked LM(MLM):雙向的語言模型任務(wù)
解決單向的LM的問題,進(jìn)行雙向的信息編碼。
為了訓(xùn)練深度雙向Transformer表示,采用了一種簡單的方法:隨機(jī)掩蓋部分輸入詞,然后對那些被掩蓋的詞進(jìn)行預(yù)測,此方法被稱為“Masked LM”(MLM)。預(yù)訓(xùn)練的目標(biāo)是構(gòu)建語言模型,BERT模型采用的是bidirectional Transformer。那么為什么采用“bidirectional”的方式呢?因?yàn)樵陬A(yù)訓(xùn)練語言模型來處理下游任務(wù)時,我們需要的不僅僅是某個詞左側(cè)的語言信息,還需要右側(cè)的語言信息。
? ? ? ? 在訓(xùn)練的過程中,隨機(jī)地掩蓋每個序列中15%的token,并不是像word2vec中的cbow那樣去對每一個詞都進(jìn)行預(yù)測。MLM從輸入中隨機(jī)地掩蓋一些詞,其目標(biāo)是基于其上下文來預(yù)測被掩蓋單詞的原始詞匯。與從左到右的語言模型預(yù)訓(xùn)練不同,MLM目標(biāo)允許表示融合左右兩側(cè)的上下文,這使得可以預(yù)訓(xùn)練深度雙向Transformer。Transformer編碼器不知道它將被要求預(yù)測哪些單詞,或者哪些已經(jīng)被隨機(jī)單詞替換,因此它必須對每個輸入詞保持分布式的上下文表示。此外,由于隨機(jī)替換在所有詞中只發(fā)生1.5%(15%*10%),所以并不會影響模型對于語言的理解。
? ? ? ? ?把一篇文章中,15% 的詞匯遮蓋,讓模型根據(jù)上下文全向地預(yù)測被遮蓋的詞。假如有 1 萬篇文章,每篇文章平均有 100 個詞匯,隨機(jī)遮蓋 15% 的詞匯,模型的任務(wù)是正確地預(yù)測這 15 萬個被遮蓋的詞匯。通過全向預(yù)測被遮蓋住的詞匯,來初步訓(xùn)練 Transformer 模型的參數(shù)。
BERT 的方法很簡單:一開始先屏蔽掉輸入詞匯的 15%,然后通過深度雙向的 Transformer 編碼器運(yùn)行整個序列,最后預(yù)測屏蔽的單詞。舉個例子:
Input: the man went to the [MASK1] . he bought a [MASK2] of milk.
Labels: [MASK1] = store; [MASK2] = gallon
BERT有哪些“反直覺”的設(shè)置?
? ? ? ? (1) 用比語言模型更簡單的任務(wù)來做預(yù)訓(xùn)練。直覺上,要做更深的模型,需要設(shè)置一個比語言模型更難的任務(wù),而BERT則選擇了兩個看起來更簡單的任務(wù):完形填空和句對預(yù)測。
? ? ? ? (2) 完形填空任務(wù)在直觀上很難作為其它任務(wù)的預(yù)訓(xùn)練任務(wù)。在完形填空任務(wù)中,需要mask掉一些詞,這樣預(yù)訓(xùn)練出來的模型是有缺陷的,因?yàn)樵谄渌蝿?wù)中不能mask掉這些詞。而BERT通過隨機(jī)的方式來解決了這個缺陷:80%加Mask,10%用其它詞隨機(jī)替換,10%保留原詞。這樣模型就具備了遷移能力。
? ? ? ? 數(shù)據(jù)生成器將執(zhí)行以下操作,而不是始終用[MASK]替換所選單詞:
? ? ? ? ? ? ? ?80%的時間:用[MASK]標(biāo)記替換單詞,例如,my dog is hairy → my dog is [MASK]
? ? ? ? ? ? ? 10%的時間:用一個隨機(jī)的單詞替換該單詞,例如,my dog is hairy → my dog is apple
? ? ? ? ? ? ? 10%的時間:保持單詞不變,例如,my dog is hairy → my dog is hairy. 這樣做的目的是將表示偏向于實(shí)際觀察到的單詞。
3.2.2 Next Sentence Prediction(NSP):連貫性判斷任務(wù)
? ? ? ?連貫性判斷任務(wù),即句子級別的連續(xù)性預(yù)測任務(wù),預(yù)測輸入BERT的兩段文本是否為連續(xù)的文本。
? ? ? ?很多句子級別的任務(wù)如自動問答(QA)和自然語言推理(NLI)都需要理解兩個句子之間的關(guān)系,譬如上述MLM任務(wù)中,經(jīng)過第一步的處理,15%的詞匯被遮蓋。那么在這一任務(wù)中我們需要隨機(jī)將數(shù)據(jù)劃分為等大小的兩部分,一部分?jǐn)?shù)據(jù)中的兩個語句對是上下文連續(xù)的,另一部分?jǐn)?shù)據(jù)中的兩個語句對是上下文不連續(xù)的。然后讓Transformer模型來識別這些語句對中,哪些語句對是連續(xù)的,哪些語句對不連續(xù)。
? ? ? ? 然后,用第二個步驟繼續(xù)訓(xùn)練模型的參數(shù)。譬如從上述 1 萬篇文章中,挑選 20 萬對語句,總共 40 萬條語句。挑選語句對的時候,其中 2*10 萬對語句是連續(xù)的兩條上下文語句,另外 2*10 萬對語句不是連續(xù)的語句。然后讓 Transformer 模型來識別這 20 萬對語句,哪些是連續(xù)的,哪些不連續(xù)。
為了讓模型學(xué)習(xí)到句子之間的關(guān)系,我們特意將模型放在可以從任意單語語料庫里生成的簡單任務(wù)中進(jìn)行訓(xùn)練:給出兩個句子 A 和 B,句子 B 究竟是句子 A 的下一個銜接句,亦或只是語料庫中隨機(jī)生成的句子?
Sentence A: the man went to the store .
Sentence B: he bought a gallon of milk .
Label: IsNextSentence
Sentence A: the man went to the store .
Sentence B: penguins are flightless .
Label: NotNextSentence
除了模型結(jié)構(gòu),模型大小和數(shù)據(jù)量也很重要
? ? ? ? 以上的描述涵蓋了BERT在模型結(jié)構(gòu)和訓(xùn)練目標(biāo)上的主要創(chuàng)新點(diǎn),而BERT的成功還有一個很大的原因來自于模型的體量以及訓(xùn)練的數(shù)據(jù)量。
? ? ? ? ?BERT訓(xùn)練數(shù)據(jù)采用了英文的開源語料BooksCropus 以及英文維基百科數(shù)據(jù),一共有33億個詞。同時BERT模型的標(biāo)準(zhǔn)版本有1億的參數(shù)量,與GPT持平,而BERT的large版本有3億多參數(shù)量,這應(yīng)該是目前自然語言處理中最大的預(yù)訓(xùn)練模型了。
? ? ? ? 當(dāng)然,這么大的模型和這么多的數(shù)據(jù),訓(xùn)練的代價(jià)也是不菲的。谷歌用了16個自己的TPU集群(一共64塊TPU)來訓(xùn)練large版本的BERT,一共花了4天的時間。對于是否可以復(fù)現(xiàn)預(yù)訓(xùn)練,作者在Reddit上有一個大致的回復(fù),指出OpenAI當(dāng)時訓(xùn)練GPT用了將近1個月的時間,而如果用同等的硬件條件來訓(xùn)練BERT估計(jì)需要1年的時間。不過他們會將已經(jīng)訓(xùn)練好的模型和代碼開源,方便大家訓(xùn)練好的模型上進(jìn)行后續(xù)任務(wù)。
3.3 模型比較
? ? ? ? ELMo、GPT、BERT都是近幾年提出的模型,在各自提出的時候都取得了不錯的成績。并且相互之間也是相輔相成的關(guān)系。
3個模型比較如下:
再往前看,在NLP中有著舉足輕重地位的模型和思想還有Word2vec、LSTM等。
? ? ? ? Word2vec作為里程碑式的進(jìn)步,對NLP的發(fā)展產(chǎn)生了巨大的影響,但Word2vec本身是一種淺層結(jié)構(gòu),而且其訓(xùn)練的詞向量所“學(xué)習(xí)”到的語義信息受制于窗口大小,因此后續(xù)有學(xué)者提出利用可以獲取長距離依賴的LSTM語言模型預(yù)訓(xùn)練詞向量,而此種語言模型也有自身的缺陷,因?yàn)榇朔N模型是根據(jù)句子的上文信息來預(yù)測下文的,或者根據(jù)下文來預(yù)測上文,直觀上來說,我們理解語言都要考慮到左右兩側(cè)的上下文信息,但傳統(tǒng)的LSTM模型只學(xué)習(xí)到了單向的信息。
4. BERT模型對NLP的影響
? ? ? ? BERT,再次驗(yàn)證了預(yù)訓(xùn)練在NLP當(dāng)中是很有用的,其次繼續(xù)驗(yàn)證了Transformer的擬合能力真的很強(qiáng)。
? ? ? ? 總體上,BERT模型的成功還在于是一種表示學(xué)習(xí),即通過一個深層模型來學(xué)習(xí)到一個更好的文本特征。這種非RNN式的模型是非圖靈完備的,無法單獨(dú)完成NLP中推理、決策等計(jì)算問題。當(dāng)然,一個好的表示會使得后續(xù)的任務(wù)更簡單。
? ? ? ? BERT能否像ResNet那樣流行還取決于其使用的便利性,包括模型實(shí)現(xiàn)、訓(xùn)練、可遷移性等,可能有好的模型出現(xiàn),但類似的預(yù)訓(xùn)練模型會成為NLP任務(wù)的標(biāo)配,就像Word2vec,Glove那樣。
? ? ? ? 最后,BERT也打開了一個思路:可以繼續(xù)在無標(biāo)注數(shù)據(jù)上挖潛,而不僅限于語言模型。
5. 其他模型
5.1 ELMo
? ? ??ELMo中是通過雙向的兩層LSTM結(jié)構(gòu)對兩個方向進(jìn)行建模,但兩個方向的loss計(jì)算相互獨(dú)立
5.2 ULMFiT
? ? ? ? 在ELMo獲得成功以后不久FastAI就推出了ULMFiT,其大體思路是在微調(diào)時對每一層設(shè)置不同的學(xué)習(xí)率。此后OpenAI又提出了GPT。追一科技在文本蘊(yùn)含、觀點(diǎn)型閱讀理解等任務(wù)中,就采用了GPT模型作為預(yù)訓(xùn)練方案。預(yù)訓(xùn)練的語言模型是在百度15億詞文本的語料上進(jìn)行的,模型參數(shù)選擇了12層,12 head的Transformer結(jié)構(gòu)。然后采用此模型直接在子任務(wù)上微調(diào)來進(jìn)行后續(xù)任務(wù)。
5.3? GPT
? ? ? ?GPT利用Transformer的decoder的結(jié)構(gòu)來進(jìn)行單向語言模型的訓(xùn)練,所謂的語言模型其實(shí)是自然語言處理中的一種基礎(chǔ)任務(wù),其目標(biāo)是給定一個序列文本,預(yù)測下一個位置上會出現(xiàn)的詞。
? ? ? ? 從論文的結(jié)果以及學(xué)界和工業(yè)界的反饋來看,這種使用大量的語料進(jìn)行預(yù)訓(xùn)練,然后再在預(yù)訓(xùn)練好的模型上進(jìn)行后續(xù)任務(wù)訓(xùn)練,雖然訓(xùn)練方式各有不同,但在后續(xù)任務(wù)都有不同程度的提高。
學(xué)習(xí)資料:https://baijiahao.baidu.com/s?id=1641821820866788182&wfr=spider&for=pc
5.4? BERT
? ? ? ? 利用Transformer的encoder來進(jìn)行預(yù)訓(xùn)練,BERT就是在OpenAI的GPT的基礎(chǔ)上對預(yù)訓(xùn)練的目標(biāo)進(jìn)行了修改,并用更大的模型以及更多的數(shù)據(jù)去進(jìn)行預(yù)訓(xùn)練,從而得到了目前為止最好的效果。
BERT對GPT的第一個改進(jìn)就是引入了雙向的語言模型任務(wù):MLM
? ? ? ? ?此前其實(shí)也有一些研究在語言模型這個任務(wù)上使用了雙向的方法,例如在ELMo中是通過雙向的兩層LSTM結(jié)構(gòu)對兩個方向進(jìn)行建模,但兩個方向的loss計(jì)算相互獨(dú)立。
? ? ? ? ?BERT的作者指出這種兩個方向相互獨(dú)立或只有單層的雙向編碼可能沒有發(fā)揮最好的效果,我們可能不僅需要雙向編碼,還應(yīng)該要加深網(wǎng)絡(luò)的層數(shù)。
? ? ? ? BERT的作者提出了采用MLM的方式來訓(xùn)練語言模型:通俗地說就是在輸入一句話的時候,隨機(jī)地選一些要預(yù)測的詞,然后用一個特殊的符號來代替它們。盡管模型最終還是會看到所有位置上的輸入信息,但由于需要預(yù)測的詞已經(jīng)被特殊符號代替,所以模型無法事先知道這些位置上是什么詞,這樣就可以讓模型根據(jù)所給的標(biāo)簽去學(xué)習(xí)這些地方該填的詞了。
? ? ? ? 然而這里還有一個問題,就是我們在預(yù)訓(xùn)練過程中所使用的這個特殊符號,在后續(xù)的任務(wù)中是不會出現(xiàn)的。因此,為了和后續(xù)任務(wù)保持一致,作者按一定的比例在需要預(yù)測的詞位置上輸入原詞或者輸入某個隨機(jī)的詞。當(dāng)然,由于一次輸入的文本序列中只有部分的詞被用來進(jìn)行訓(xùn)練,因此BERT在效率上會低于普通的語言模型,作者也指出BERT的收斂需要更多的訓(xùn)練步數(shù)。
BERT另外一個創(chuàng)新:NSP
? ? ? ? 是在雙向語言模型的基礎(chǔ)上額外增加了一個句子級別的連續(xù)性預(yù)測任務(wù)。這個任務(wù)的目標(biāo)也很簡單,就是預(yù)測輸入BERT的兩段文本是否為連續(xù)的文本,作者指出引入這個任務(wù)可以更好地讓模型學(xué)到連續(xù)的文本片段之間的關(guān)系。在訓(xùn)練的時候,輸入模型的第二個片段會以50%的概率從全部文本中隨機(jī)選取,剩下50%的概率選取第一個片段的后續(xù)的文本。
5.5 ERNIE
學(xué)習(xí)鏈接:https://blog.csdn.net/PaddlePaddle/article/details/102713947
ERNIE?基本上是 transformer 的encoder 部分,并且encoder 在結(jié)構(gòu)上是全部一樣的,但是并不共享權(quán)重,具體區(qū)別如下:
-
Transformer: 6 encoder layers, 512 hidden units, 8 attention heads
-
ERNIE Base: 12 encoder layers, 768 hidden units, 12 attention heads
-
ERNIE Large: 24 encoder layers,1024 hidden units, 16 attention heads
ERNIE是基于持續(xù)學(xué)習(xí)的語義理解預(yù)訓(xùn)練框架,使?多任務(wù)學(xué)習(xí)增量式構(gòu)建預(yù)訓(xùn)練任務(wù)。新構(gòu)建的預(yù)訓(xùn)練任務(wù)類型可以?縫加?訓(xùn)練框架,持續(xù)進(jìn)?語義理解學(xué)習(xí)。
相比于BERT, ERNIE 1.0 改進(jìn)了兩種 masking 策略,一種是基于phrase (在這里是短語 比如 a series of, written等)的masking策略,另外一種是基于 entity(在這里是人名、位置、組織、產(chǎn)品等名詞,比如Apple, J.K. Rowling)的masking 策略。在ERNIE 中,將由多個字組成的phrase 或者entity 當(dāng)成一個統(tǒng)一單元,相比于bert 基于字的mask,這個單元當(dāng)中的所有字在訓(xùn)練的時候,統(tǒng)一被mask。對比直接將知識類的query 映射成向量然后直接加起來,ERNIE 通過統(tǒng)一mask的方式可以潛在地學(xué)習(xí)到知識的依賴以及更長的語義依賴來讓模型更具泛化性。
ERNIE 2.0 中有一個很重要的概念便是連續(xù)學(xué)習(xí)(Continual Learning),連續(xù)學(xué)習(xí)的目的是在一個模型中順序訓(xùn)練多個不同的任務(wù),以便在學(xué)習(xí)下個任務(wù)當(dāng)中可以記住前一個學(xué)習(xí)任務(wù)學(xué)習(xí)到的結(jié)果。通過使用連續(xù)學(xué)習(xí),可以不斷積累新的知識,模型在新任務(wù)當(dāng)中可以用歷史任務(wù)學(xué)習(xí)到參數(shù)進(jìn)行初始化,一般來說比直接開始新任務(wù)的學(xué)習(xí)會獲得更好的效果。在連續(xù)學(xué)習(xí)的過程中,ERNIE 2.0 框架可以不斷更新并記住以前學(xué)習(xí)到的知識,可以使得模型在新任務(wù)上獲得更好的表現(xiàn)。需要注意的是,在連續(xù)訓(xùn)練之前,首先用一個簡單的任務(wù)來初始化模型,在后面更新模型的時候,用前一個任務(wù)訓(xùn)練好的參數(shù)來作為下一個任務(wù)模型初始化的參數(shù)。這樣不管什么時候,一個新的任務(wù)加進(jìn)來的時候,都用上一個模型的參數(shù)初始化保證了模型不會忘記之前學(xué)習(xí)到的知識
ERNIE 通過對訓(xùn)練數(shù)據(jù)中的詞法結(jié)構(gòu)、語法結(jié)構(gòu)、語義信息進(jìn)行統(tǒng)一建模,極大地增強(qiáng)了通用語義表示能力,在多項(xiàng)任務(wù)中均取得了大幅度超越BERT的效果!!
三個預(yù)訓(xùn)練任務(wù):
(1) 構(gòu)建詞法級別的預(yù)訓(xùn)練任務(wù),來獲取訓(xùn)練數(shù)據(jù)中的詞法信息
- 1: knowledge masking task,即 ERNIE 1.0 中的entity mask 以及 phrase entity mask 來獲取phrase 以及entity的先驗(yàn)知識,相較于 sub-word masking, 該策略可以更好的捕捉輸入樣本局部和全局的語義信息。
- 2: Capitalization Prediction Task,大寫的詞比如Apple相比于其他詞通常在句子當(dāng)中有特定的含義,所以在ERNIE?2.0 加入一個任務(wù)來判斷一個詞是否大寫。
- 3: Token-Document Relation Prediction Task,類似于tf-idf,預(yù)測一個詞在文中的A 段落出現(xiàn),是否會在文中的B 段落出現(xiàn)。如果一個詞在文章當(dāng)中的許多部分出現(xiàn)一般就說明這個詞經(jīng)常被用到或者和這個文章的主題相關(guān)。通過識別這個文中關(guān)鍵的的詞, 這個任務(wù)可以增強(qiáng)模型去獲取文章的關(guān)鍵詞語的能力。
(2)構(gòu)建語法級別的預(yù)訓(xùn)練任務(wù),來獲取訓(xùn)練數(shù)據(jù)中的語法信息
- 1: ?Sentence Reordering Task,在訓(xùn)練當(dāng)中,將paragraph 隨機(jī)分成1 到m 段,將所有的組合隨機(jī)shuffle。我們讓pre-trained 的模型來識別所有的這些segments正確的順序。這便是一個k 分類任務(wù)。通常來說,這些sentence 重排序任務(wù)能夠讓pre-trained 模型學(xué)習(xí)到document 中不同sentence 的關(guān)系。
- 2: Sentence Distance Task,?構(gòu)建一個三分類任務(wù)來判別句子的距離,0表示兩個句子是同一個文章中相鄰的句子,1表示兩個句子是在同一個文章,但是不相鄰,2表示兩個句子是不同的文章。通過構(gòu)建這樣一個三分類任務(wù)去判斷句對 (sentence pairs) 位置關(guān)系 (包含鄰近句子、文檔內(nèi)非鄰近句子、非同文檔內(nèi)句子 3 種類別),更好的建模語義相關(guān)性。
(3)構(gòu)建語義級別的預(yù)訓(xùn)練任務(wù),來獲取訓(xùn)練數(shù)據(jù)中的語義任務(wù)
- 1: Discourse Relation Task,除了上面的distance task,ERNIE通過判斷句對 (sentence pairs) 間的修辭關(guān)系 (semantic & rhetorical relation),更好的學(xué)習(xí)句間語義。
- 2: IR Relevance Task,在這里主要是利用baidu 的日志來獲取這個關(guān)系,將query 作為第一個sentence,title 作為第二個 sentence。0 表示強(qiáng)關(guān)系, 1 表示弱關(guān)系,2表示無關(guān)系,通過類似google-distance 的關(guān)系來衡量 兩個query之間的語義相關(guān)性,更好的建模句對相關(guān)性。
6. 總結(jié)
? ? ? ? ?語言模型的每一次進(jìn)步都推動著NLP的發(fā)展,從Word2vec到ELMo,從OpenAI GPT到BERT。通過這些發(fā)展我們也可以洞悉到,未來表征學(xué)習(xí)(Deep learning is representation learning)將會越來越多的應(yīng)用到NLP相關(guān)任務(wù)中,它們可以充分的利用目前海量的數(shù)據(jù),然后結(jié)合各種任務(wù)場景,去訓(xùn)練出更為先進(jìn)的模型,從而促進(jìn)AI項(xiàng)目的落地。
參考文獻(xiàn)
1.?[NLP自然語言處理]谷歌BERT模型深度解析?https://blog.csdn.net/qq_39521554/article/details/83062188
2.?華爾街見聞:NLP歷史突破?https://wallstreetcn.com/articles/3419427
3.?OPENAI-Improving Language Understanding with Unsupervised Learning:https://blog.openai.com/language-unsupervised/
4.?https://gluebenchmark.com/leaderboard:https://gluebenchmark.com/leaderboard
5. 知乎討論:如何評價(jià) BERT 模型?https://www.zhihu.com/question/298203515
6.??ELMo算法原理解析:https://www.cnblogs.com/huangyc/p/9860430.html
7.?OpenAI GPT算法原理解析:https://www.cnblogs.com/huangyc/p/9860181.html
總結(jié)
以上是生活随笔為你收集整理的预训练模型:BERT深度解析《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Zookeeper集群的搭建及遇到的问题
- 下一篇: Attention的本质:从Encode