遷移學習NLP:BERT、ELMo等直觀圖解

摘要:圖解,2018年自然語言處理領(lǐng)域最成功的方向!

2018年是自然語言處理的轉(zhuǎn)折點,能捕捉潛在意義和關(guān)系的方式表達單詞和句子的概念性理解正在迅速發(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)建一個涉及語言處理的機器學習模型,他們成功的將這個強大的工具變成了一個易于使用的組件,從而節(jié)省了訓(xùn)練NLP模型所需的時間,精力和資源。

兩種不同的BERT。你可以下載在1中預(yù)訓(xùn)練的模型(它是在未注釋的數(shù)據(jù)上進行訓(xùn)練),在2中是針對特殊場景對其進行微調(diào)。

BERT是建立在最近NLP社區(qū)中涌現(xiàn)的一些聰明的想法之上,包括但不限于半監(jiān)督序列學習Andrew DaiQuoc Le)、ELMo(由Matthew Peters和來自AI2的研究人員和UW CSE),ULMFiT(由fast.ai創(chuàng)始人Jeremy HowardSebastian Ruder提供)和OpenAI轉(zhuǎn)換器(由OpenAI研究人員Radford,Narasimhan,SalimansSutskever提供)和Transformer(Vaswani等人)。

需要注意的一些概念才能完全了解BERT的內(nèi)容。因此,讓我們首先看一下在查看模型本身所涉及的概念之前可以使用BERT的場景。

示例:句子分類

BERT最擅長的是分類單個文本,這個模型看起來像這樣:

為了訓(xùn)練這樣的模型,你必須訓(xùn)練分類器,在訓(xùn)練階段BERT模型發(fā)生的變化很小。該過程稱為微調(diào),并且整個過程是源于半監(jiān)督序列學習和ULMFiT。

既然我們在討論分類器,那么我們就處于機器學習的監(jiān)督學習領(lǐng)域。這意味著我們需要一個標記的數(shù)據(jù)集來訓(xùn)練這樣的模型。以垃圾郵件分類器示例,標記的數(shù)據(jù)集將是電子郵件和標簽的列表(“垃圾郵件”或“非垃圾郵件”)。

這種用例的其他示例包括:

1、情緒分析

輸入:電影/產(chǎn)品評論。輸出:評論是正面還是負面?

示例數(shù)據(jù)集:SST

2、事實查證

輸入:句子。輸出:“索賠”或“不索賠”

更夸張/前沿的例子:

輸入:是否進行索賠。輸出:“真”或“假”

Full Fact是一個為公眾利益建立自動事實檢查工具的組織。他們的部分管道其實是一個分類器,它可以讀取新聞文章并檢測聲明(將文本分類為“聲明”或“不聲明”),以此進行事實驗證。

模型架構(gòu)

現(xiàn)在你已經(jīng)了解了如何使用BERT的用例,接下來讓我們仔細看看它是如何工作的。

首先介紹BERT的兩種型號:

l? BERT BASE:與OpenAI Transformer的尺寸相當,性價比很高;

l? BERT LARGE:一個非常龐大的模型,它的性能最好;

BERT基本上是訓(xùn)練有素的轉(zhuǎn)換器(Transformer)編碼器堆棧?,F(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]標記傳遞到)。

該向量現(xiàn)在可以用作我們選擇的分類器的輸入,通過使用單層神經(jīng)網(wǎng)絡(luò)作為分類器,這樣效果就能達到我們想要的。

如果你有更多標簽(例如,如果你是使用“垃圾郵件”,“非垃圾郵件”,“社交”和“促銷”標記電子郵件),你只需調(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嵌入是個啥?

對于要由機器學習模型處理的詞,它們需要以某種形式的數(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ù)集進行訓(xùn)練,然后我們可以將其用作需要處理語言的其他模型中的組件。

ELMo的秘密是什么?

ELMo通過訓(xùn)練來預(yù)測單詞序列中的下一個單詞,這是一項稱為獲得語言理解語言建模的任務(wù)。這很方便,因為我們擁有大量的文本數(shù)據(jù),這樣的模型可以在不需要標簽的情況下學習。

ELMo預(yù)訓(xùn)練過程中的一個過程:給定輸入,預(yù)測下一個最可能的單詞。在諸如“hang”之類的單詞出現(xiàn)之后,它將為諸如“out”之類的單詞賦予比“camera”更高的概率。

我們可以看到每個展開的LSTM步驟的隱藏狀態(tài)都是從ELMo的頭部后面突出。在完成預(yù)訓(xùn)練之后,這些在嵌入式proecss可以派上用場。

ELMo實際上更進一步,因為雙向LSTM,這意味著它的語言模型不僅具有下一個詞的感覺,而且還有前一個詞。

ELMo通過以某種方式將隱藏狀態(tài)(和初始嵌入)組合在一起來提出情境化嵌入(連接后加權(quán)求和)。

ULM-FiT:在NLP中使用遷移學習

ULM-FiT引入了有效利用模型在預(yù)訓(xùn)練期間學到的內(nèi)容的方法,這不僅僅是嵌入,而且是上下文嵌入。ULM-FiT引入了語言模型和流程,從而有效地微調(diào)該語言模型以執(zhí)行各種任務(wù)。

NLP可能與計算機視覺一樣,有了一種方法來進行轉(zhuǎn)移學習。

The Transformer:超越LSTMs

Transformer論文和代碼的發(fā)布,以及它在機器翻譯等任務(wù)上取得的成果開始讓一些人認為它們是LSTM的替代品。事實上Transformer比LSTM更好地處理長期依賴性。

Transformer的編碼器-解碼器結(jié)構(gòu)使其非常適合機器翻譯。但是你如何將它用于句子分類?你如何使用它來預(yù)訓(xùn)練可以針對其他任務(wù)進行微調(diào)的語言模型(這些任務(wù)就是被該領(lǐng)域稱為使用預(yù)訓(xùn)練模型或組件的監(jiān)督學習任務(wù))。

OpenAI Transformer:預(yù)訓(xùn)練用于語言建模的Transformer解碼器

事實證明,我們不需要整個Transformer來為NLP任務(wù)采用轉(zhuǎn)移學習和精細可調(diào)語言模型,我們可以只使用Transformer的解碼器。解碼器是一個很好的選擇,因為它是語言建模(預(yù)測下一個單詞)的必備選擇,它是為掩蓋未來的接口而構(gòu)建的。

OpenAI Transformer由Transformer的解碼器堆棧組成

該模型堆疊了十二個解碼器層。由于在該設(shè)置中沒有編碼器,因此這些解碼器層將不具有香草Transformer解碼器層具有的編碼器。然而,它仍然會有自我關(guān)注層。

通過這種結(jié)構(gòu),我們可以繼續(xù)在同一語言建模任務(wù)上訓(xùn)練模型:使用大量(未標記)數(shù)據(jù)集預(yù)測下一個單詞。只是使用7000本書的文字,讓它學習!書籍非常適合這類任務(wù),因為它允許模型學習關(guān)聯(lián)相關(guān)信息,即使它們被大量文本分開。例如,當你使用推文或文章進行訓(xùn)練時,你無法獲得這些信息。

現(xiàn)在,OpenAI Transformer已經(jīng)準備好接受訓(xùn)練,預(yù)測由7,000本書組成的數(shù)據(jù)集上的下一個單詞。

將學習能力轉(zhuǎn)移到下游任務(wù)

既然OpenAI Transformer已經(jīng)過預(yù)先訓(xùn)練,并且其層也經(jīng)過調(diào)整以合理地處理語言,我們就可以開始將它用于下游任務(wù)。讓我們首先看一下句子分類(將電子郵件分類為“垃圾郵件”或“非垃圾郵件”):

如何使用預(yù)先訓(xùn)練的OpenAI Transformer進行句子分類

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通過采用早期文獻中的“蒙面語言模型”概念(稱為完成任務(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作為接口而不是單詞,因此標記化在此圖形中過于簡化了,因此有些單詞被分解為較小的塊。

特定任務(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并不遠。

哪個向量最適合作為上下文嵌入?我認為這取決于任務(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種語言的多語言模型,這些語言在維基百科上進行了訓(xùn)練。

l? BERT不會將單詞視為標記,相反,它注意者WordPieces。tokenization.py是將你的單詞轉(zhuǎn)換為適合BERT的wordPieces的標記器。

l? 你還可以查看BERTPyTorch實現(xiàn)。該AllenNLP庫使用此實現(xiàn)允許使用的嵌入BERT與任何模型。

本文作者:【方向】

作者:阿里云云棲社區(qū)

鏈接:http://m.itdecent.cn/p/2045dbe7ff9d

來源:簡書

簡書著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請聯(lián)系作者獲得授權(quán)并注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文上兩篇系列 NLP的巨人肩膀(上) NLP的巨人肩膀(中) 4.6 Bidirectional Encoder...
    weizier閱讀 6,839評論 1 22
  • 時間如歌,歲月蹉跎 我們還在貪戀這潮海的舒服與安逸 誰曾想巨浪重重的將我們拍打在沙灘上 炎熱和酷暑激起了我們求生的...
    兮兮_d6a9閱讀 425評論 1 3
  • 歌 佛說 不可滅 曲調(diào)茵蘿 吾于音中跺 全不顧何衣著 一身帥氣唯獨我 利劍襲之揮以皮革 兼或雪茄暈染一份墨 勿見我...
    植尚淇閱讀 269評論 0 3
  • mariadb的索引 索引:提取索引的創(chuàng)建在的表上字段中的數(shù)據(jù),構(gòu)建出一個獨特的數(shù)據(jù)結(jié)構(gòu); 索引的作用:加速查詢操...
    王王王小白閱讀 577評論 0 0
  • 第一,行動是賺錢的第一步。 第二,有一個產(chǎn)品,一個解決別人問題的產(chǎn)品,才能談得上銷售?如果沒有產(chǎn)品,沒有實物,或者...
    渺塵03閱讀 2,090評論 5 0

友情鏈接更多精彩內(nèi)容