摘要:圖解,2018年自然語言處理領(lǐng)域最成功的方向淮腾!
2018年是自然語言處理的轉(zhuǎn)折點糟需,能捕捉潛在意義和關(guān)系的方式表達(dá)單詞和句子的概念性理解正在迅速發(fā)展。此外谷朝,NLP社區(qū)已經(jīng)出現(xiàn)了非常強大的組件洲押,你可以在自己的模型和管道中自由下載和使用(它被稱為NLP的ImageNet時刻)。
在這個時刻中徘禁,最新里程碑是發(fā)布的BERT诅诱,它被描述NLP一個新時代的開始。BERT是一個模型送朱,它打破了前幾個模型處理基于語言的任務(wù)的記錄娘荡。該模型的論文發(fā)布后不久,團隊還開放了該模型的代碼驶沼,并提供了已經(jīng)在大量數(shù)據(jù)集上預(yù)先訓(xùn)練過的模型的下載版本炮沐。這是一個重大的發(fā)展,因為它使任何人都可以構(gòu)建一個涉及語言處理的機器學(xué)習(xí)模型回怜,他們成功的將這個強大的工具變成了一個易于使用的組件大年,從而節(jié)省了訓(xùn)練NLP模型所需的時間,精力和資源玉雾。
兩種不同的BERT翔试。你可以下載在1中預(yù)訓(xùn)練的模型(它是在未注釋的數(shù)據(jù)上進(jìn)行訓(xùn)練),在2中是針對特殊場景對其進(jìn)行微調(diào)复旬。
BERT是建立在最近NLP社區(qū)中涌現(xiàn)的一些聰明的想法之上垦缅,包括但不限于半監(jiān)督序列學(xué)習(xí)(Andrew Dai和Quoc Le)、ELMo(由Matthew Peters和來自AI2的研究人員和UW CSE)驹碍,ULMFiT(由fast.ai創(chuàng)始人Jeremy Howard和Sebastian Ruder提供)和OpenAI轉(zhuǎn)換器(由OpenAI研究人員Radford壁涎,Narasimhan,Salimans和Sutskever提供)和Transformer(Vaswani等人)志秃。
需要注意的一些概念才能完全了解BERT的內(nèi)容怔球。因此,讓我們首先看一下在查看模型本身所涉及的概念之前可以使用BERT的場景浮还。
示例:句子分類
BERT最擅長的是分類單個文本竟坛,這個模型看起來像這樣:
為了訓(xùn)練這樣的模型,你必須訓(xùn)練分類器,在訓(xùn)練階段BERT模型發(fā)生的變化很小流码。該過程稱為微調(diào)又官,并且整個過程是源于半監(jiān)督序列學(xué)習(xí)和ULMFiT。
既然我們在討論分類器漫试,那么我們就處于機器學(xué)習(xí)的監(jiān)督學(xué)習(xí)領(lǐng)域。這意味著我們需要一個標(biāo)記的數(shù)據(jù)集來訓(xùn)練這樣的模型碘赖。以垃圾郵件分類器示例驾荣,標(biāo)記的數(shù)據(jù)集將是電子郵件和標(biāo)簽的列表(“垃圾郵件”或“非垃圾郵件”)。
這種用例的其他示例包括:
1普泡、情緒分析
輸入:電影/產(chǎn)品評論播掷。輸出:評論是正面還是負(fù)面?
示例數(shù)據(jù)集:SST
2撼班、事實查證
輸入:句子歧匈。輸出:“索賠”或“不索賠”
更夸張/前沿的例子:
輸入:是否進(jìn)行索賠。輸出:“真”或“假”
Full Fact是一個為公眾利益建立自動事實檢查工具的組織砰嘁。他們的部分管道其實是一個分類器件炉,它可以讀取新聞文章并檢測聲明(將文本分類為“聲明”或“不聲明”),以此進(jìn)行事實驗證矮湘。
模型架構(gòu)
現(xiàn)在你已經(jīng)了解了如何使用BERT的用例斟冕,接下來讓我們仔細(xì)看看它是如何工作的。
首先介紹BERT的兩種型號:
l? BERT BASE:與OpenAI Transformer的尺寸相當(dāng)缅阳,性價比很高磕蛇;
l? BERT LARGE:一個非常龐大的模型,它的性能最好十办;
BERT基本上是訓(xùn)練有素的轉(zhuǎn)換器(Transformer)編碼器堆椥闫玻。現(xiàn)在是你閱讀The Illustrated Transformer的好時機向族,該文章解釋了Transformer模型-BERT的基本概念以及我們接下來要討論的概念呵燕。
兩種BERT模型都有大量的編碼器層(本文稱之為Transformer Blocks),其中Base版本為12個炸枣,Large版本為24個虏等。它們還具有更大的前饋網(wǎng)絡(luò)(分別為768和1024個隱藏單元)以及比初始論文中的轉(zhuǎn)換器更多attention heads(分別為12和16)(初始論文的轉(zhuǎn)換器中有6個編碼器層,512個隱藏單元适肠,和8個attention heads)霍衫。
模型輸入
第一個接口輸入提供了一個特殊的接口[CLS],原因?qū)⒃诤竺孀兊妹黠@侯养,CLS在這里代表分類敦跌。
就像轉(zhuǎn)換器的香草編碼器一樣,BERT采用一系列字作為輸入。每一層都應(yīng)用自我關(guān)注柠傍,并通過前饋網(wǎng)絡(luò)傳遞其結(jié)果麸俘,然后將其交給下一個編碼器。
在架構(gòu)方面惧笛,到目前為止从媚,這與轉(zhuǎn)換器完全相同。
模型輸出
每個位置輸出大小為hidden_??size的矢量(BERT Base中的768)患整。對于我們上面看過的句子分類示例拜效,我們只關(guān)注第一個位置的輸出(我們將特殊的接口[CLS]標(biāo)記傳遞到)。
該向量現(xiàn)在可以用作我們選擇的分類器的輸入各谚,通過使用單層神經(jīng)網(wǎng)絡(luò)作為分類器紧憾,這樣效果就能達(dá)到我們想要的。
如果你有更多標(biāo)簽(例如昌渤,如果你是使用“垃圾郵件”赴穗,“非垃圾郵件”,“社交”和“促銷”標(biāo)記電子郵件)膀息,你只需調(diào)整分類器網(wǎng)絡(luò)以獲得更多輸出神經(jīng)元即可般眉,然后通過softmax。
卷積網(wǎng)相似操作
對于那些具有計算機視覺背景的人來說履婉,這個矢量切換應(yīng)該讓人聯(lián)想到VGGNet等網(wǎng)絡(luò)的卷積部分與網(wǎng)絡(luò)末端的完全連接的分類部分之間發(fā)生的事情煤篙。
嵌入(Embedding)的新時代
到目前為止,詞嵌入一直是影響NLP模型處理語言的主要力量毁腿。Word2Vec和Glove等方法已被廣泛用于此類任務(wù)辑奈。讓我們回顧一下之前是如何使用它們的。
Word嵌入是個啥已烤?
對于要由機器學(xué)習(xí)模型處理的詞鸠窗,它們需要以某種形式的數(shù)字表示,這樣模型才可以在計算中使用胯究。Word2Vec讓我們可以使用一個向量(一個數(shù)字列表)以一種捕獲語義相關(guān)關(guān)系的方式正確表示單詞(例如稍计,判斷單詞是相似的,判斷還是在它們之間具有的關(guān)系裕循,如“開羅”和“埃及”之間的關(guān)系)以及句法或基于語法的關(guān)系(例如“was”和“is”之間的關(guān)系)臣嚣。
該領(lǐng)域的研究者很快意識到,使用經(jīng)過大量文本數(shù)據(jù)預(yù)訓(xùn)練的嵌入技術(shù)剥哑,而不將模型與經(jīng)常是小型數(shù)據(jù)集的模型一起訓(xùn)練硅则,這是一個好主意。因此株婴,你可以下載Word2Vec或GloVe預(yù)訓(xùn)練生成的單詞列表及其嵌入怎虫。
GloVe詞嵌入中“stick”一詞-是200個浮點數(shù)的向量。
ELMo:語境問題
如果我們使用GloVe,那么“stick”這個詞將由一個向量表示大审,無論上下文是什么蘸际。但是,許多NLP研究人員(Peters等人徒扶,2017年粮彤,McCann等人,2017年及Peters等人姜骡,2018年在ELMo論文中)發(fā)現(xiàn)“stick”有多個含義驾诈,這取決于它的使用位置。為什么不根據(jù)它所使用的上下文給它一個嵌入呢溶浴?這樣既捕獲該上下文中的單詞含義以及其他上下文信息。因此管引,語境化嵌入詞誕生了士败!
語境化詞嵌入可以根據(jù)它們在句子的上下文中攜帶的含義給出單詞不同的嵌入
ELMo不是對每個單詞使用固定嵌入,而是在為其中的每個單詞分配嵌入之前查看整個句子褥伴,它使用在特定任務(wù)上訓(xùn)練的雙向LSTM來創(chuàng)建這些嵌入谅将。
ELMo在NLP背景下向預(yù)訓(xùn)練邁出了重要一步。ELMo LSTM將使用我們數(shù)據(jù)集語言中的大量數(shù)據(jù)集進(jìn)行訓(xùn)練重慢,然后我們可以將其用作需要處理語言的其他模型中的組件饥臂。
ELMo的秘密是什么?
ELMo通過訓(xùn)練來預(yù)測單詞序列中的下一個單詞似踱,這是一項稱為獲得語言理解語言建模的任務(wù)隅熙。這很方便,因為我們擁有大量的文本數(shù)據(jù)核芽,這樣的模型可以在不需要標(biāo)簽的情況下學(xué)習(xí)囚戚。
ELMo預(yù)訓(xùn)練過程中的一個過程:給定輸入,預(yù)測下一個最可能的單詞轧简。在諸如“hang”之類的單詞出現(xiàn)之后驰坊,它將為諸如“out”之類的單詞賦予比“camera”更高的概率。
我們可以看到每個展開的LSTM步驟的隱藏狀態(tài)都是從ELMo的頭部后面突出哮独。在完成預(yù)訓(xùn)練之后拳芙,這些在嵌入式proecss可以派上用場。
ELMo實際上更進(jìn)一步皮璧,因為雙向LSTM舟扎,這意味著它的語言模型不僅具有下一個詞的感覺,而且還有前一個詞恶导。
ELMo通過以某種方式將隱藏狀態(tài)(和初始嵌入)組合在一起來提出情境化嵌入(連接后加權(quán)求和)浆竭。
ULM-FiT:在NLP中使用遷移學(xué)習(xí)
ULM-FiT引入了有效利用模型在預(yù)訓(xùn)練期間學(xué)到的內(nèi)容的方法,這不僅僅是嵌入,而且是上下文嵌入邦泄。ULM-FiT引入了語言模型和流程删窒,從而有效地微調(diào)該語言模型以執(zhí)行各種任務(wù)。
NLP可能與計算機視覺一樣,有了一種方法來進(jìn)行轉(zhuǎn)移學(xué)習(xí)顺囊。
The Transformer:超越LSTMs
Transformer論文和代碼的發(fā)布肌索,以及它在機器翻譯等任務(wù)上取得的成果開始讓一些人認(rèn)為它們是LSTM的替代品。事實上Transformer比LSTM更好地處理長期依賴性特碳。
Transformer的編碼器-解碼器結(jié)構(gòu)使其非常適合機器翻譯诚亚。但是你如何將它用于句子分類?你如何使用它來預(yù)訓(xùn)練可以針對其他任務(wù)進(jìn)行微調(diào)的語言模型(這些任務(wù)就是被該領(lǐng)域稱為使用預(yù)訓(xùn)練模型或組件的監(jiān)督學(xué)習(xí)任務(wù))午乓。
OpenAI Transformer:預(yù)訓(xùn)練用于語言建模的Transformer解碼器
事實證明站宗,我們不需要整個Transformer來為NLP任務(wù)采用轉(zhuǎn)移學(xué)習(xí)和精細(xì)可調(diào)語言模型,我們可以只使用Transformer的解碼器益愈。解碼器是一個很好的選擇梢灭,因為它是語言建模(預(yù)測下一個單詞)的必備選擇,它是為掩蓋未來的接口而構(gòu)建的蒸其。
OpenAI Transformer由Transformer的解碼器堆棧組成
該模型堆疊了十二個解碼器層敏释。由于在該設(shè)置中沒有編碼器,因此這些解碼器層將不具有香草Transformer解碼器層具有的編碼器摸袁。然而钥顽,它仍然會有自我關(guān)注層。
通過這種結(jié)構(gòu)靠汁,我們可以繼續(xù)在同一語言建模任務(wù)上訓(xùn)練模型:使用大量(未標(biāo)記)數(shù)據(jù)集預(yù)測下一個單詞蜂大。只是使用7000本書的文字,讓它學(xué)習(xí)膀曾!書籍非常適合這類任務(wù)县爬,因為它允許模型學(xué)習(xí)關(guān)聯(lián)相關(guān)信息,即使它們被大量文本分開添谊。例如财喳,當(dāng)你使用推文或文章進(jìn)行訓(xùn)練時,你無法獲得這些信息斩狱。
現(xiàn)在耳高,OpenAI Transformer已經(jīng)準(zhǔn)備好接受訓(xùn)練,預(yù)測由7,000本書組成的數(shù)據(jù)集上的下一個單詞所踊。
將學(xué)習(xí)能力轉(zhuǎn)移到下游任務(wù)
既然OpenAI Transformer已經(jīng)過預(yù)先訓(xùn)練泌枪,并且其層也經(jīng)過調(diào)整以合理地處理語言,我們就可以開始將它用于下游任務(wù)秕岛。讓我們首先看一下句子分類(將電子郵件分類為“垃圾郵件”或“非垃圾郵件”):
如何使用預(yù)先訓(xùn)練的OpenAI Transformer進(jìn)行句子分類
OpenAI論文概述了許多輸入轉(zhuǎn)換碌燕,以處理不同類型任務(wù)的輸入误证。下圖顯示了模型的結(jié)構(gòu)和輸入轉(zhuǎn)換,以執(zhí)行不同的任務(wù)修壕。
BERT:從解碼器到編碼器
openAI的Transformer為我們提供了基于Transformer的可調(diào)預(yù)訓(xùn)練模型愈捅。但是從LSTM到Transformer的過渡中缺少了一些東西,因為ELMo的語言模型是雙向的慈鸠,但openAI的Transformer只訓(xùn)練向前語言模型蓝谨。我們能否建立一個基于Transformer的模型,其語言模型同時向前和向后青团?
蒙面語言模型(NLM:Masked Language Model)
“我們將使用Transformer編碼器”譬巫,BERT說。
“這很瘋狂”督笆,Ernie回答說芦昔,“每個人都知道雙向調(diào)節(jié)會讓每個詞在多層次的背景下間接地審視自己⊥拗祝”
“我們將使用蒙面工具”烟零,BERT自信地說。
BERT的語言建模任務(wù)掩蓋了輸入中15%的單詞咸作,并要求模型預(yù)測缺失的單詞。
找到正確的任務(wù)來訓(xùn)練Transformer堆棧的編碼器是一個復(fù)雜的障礙宵睦,BERT通過采用早期文獻(xiàn)中的“蒙面語言模型”概念(稱為完成任務(wù))來解決记罚。
除了掩蓋15%的輸入之外,BERT還混合了一些東西壳嚎,以改善模型后來如何微調(diào)桐智。有時它會隨機用另一個單詞替換一個單詞,并要求模型預(yù)測該位置的正確單詞烟馅。
兩個句子的任務(wù)(Two-sentence Tasks)
如果你回顧一下OpenAI的Transformer處理不同任務(wù)的輸入變換说庭,你會注意到一些任務(wù)要求模型具有說出兩個句子的能力(例如,它們是否只是對方的復(fù)述郑趁?給出一個維基百科條目作為輸入刊驴,以及關(guān)于該條目作為另一個輸入的問題。)寡润。
為了使BERT更好地處理多個句子之間的關(guān)系捆憎,預(yù)訓(xùn)練過程包括一個額外的任務(wù):給定兩個句子(A和B),B可能是跟隨A的句子梭纹,或不是躲惰?
由于BERT實際上使用WordPieces作為接口而不是單詞,因此標(biāo)記化在此圖形中過于簡化了变抽,因此有些單詞被分解為較小的塊础拨。
特定任務(wù)-模型
BERT論文展示了將BERT用于不同任務(wù)的多種方法氮块。
BERT用于特征提取
微調(diào)不是使用BERT的唯一方法。就像ELMo一樣诡宗,你可以使用預(yù)先訓(xùn)練的BERT來創(chuàng)建語境化詞嵌入滔蝉。然后,你可以將這些嵌入提供給現(xiàn)有模型-該過程論文已經(jīng)證實可以產(chǎn)生結(jié)果僚焦,在命名實體識別等任務(wù)上應(yīng)用微調(diào)BERT并不遠(yuǎn)锰提。
哪個向量最適合作為上下文嵌入?我認(rèn)為這取決于任務(wù)芳悲。我們考察了六種選擇(與微調(diào)模型相比立肘,得分為96.4):
BERT延伸
使用BERT的最佳方式是通過BERT FineTuning與Google Colab托管的Cloud TPU筆記本。如果你之前從未使用過云TPU名扛,那么這也是嘗試它們的良好起點谅年,以及BERT代碼也適用于TPU,CPU和GPU肮韧。
下一步是查看BERT倉庫中的代碼:
l? 該模型在modeling.py(class BertModel)中構(gòu)建融蹂,與vanilla Transformer編碼器完全相同。
lrun_classifier.py是微調(diào)過程的一個示例弄企。它還構(gòu)建了監(jiān)督模型的分類層超燃,如果要構(gòu)建自己的分類器,請查看create_model()該文件中的方法拘领。
l? 可以下載幾種預(yù)先訓(xùn)練的模型意乓,它們跨越了BERT Base和BERT Large,以及英語约素,中文等語言届良,以及涵蓋102種語言的多語言模型,這些語言在維基百科上進(jìn)行了訓(xùn)練圣猎。
l? BERT不會將單詞視為標(biāo)記士葫,相反,它注意者WordPieces送悔。tokenization.py是將你的單詞轉(zhuǎn)換為適合BERT的wordPieces的標(biāo)記器慢显。
l? 你還可以查看BERT的PyTorch實現(xiàn)。該AllenNLP庫使用此實現(xiàn)允許使用的嵌入BERT與任何模型欠啤。
本文作者:【方向】
作者:阿里云云棲社區(qū)
鏈接:http://www.reibang.com/p/2045dbe7ff9d
來源:簡書
簡書著作權(quán)歸作者所有鳍怨,任何形式的轉(zhuǎn)載都請聯(lián)系作者獲得授權(quán)并注明出處。