BERT(二) BERT解讀及應(yīng)用

前面已經(jīng)說了transformer(BERT(一) Transformer原理理解)的模型以及具體結(jié)構(gòu)中每一個(gè)component的作用己肮,那么今天這一篇我將會(huì)總結(jié)BERT(Bidirectional Encoder Representations from Transformers)是如何利用transformer的結(jié)構(gòu)進(jìn)行自然語言處理的拓哟。關(guān)于BERT與transformer的關(guān)系大家要能理解.\color{red}{其實(shí)BERT就tramsformer中decoder的部分, 簡單的理解就是輸入一句話,該模型吐出字的embedding挎挖, 其目的也是如何訓(xùn)練得到embedding}章喉, 這里的embedding其實(shí)就是我們encoder輸出的隱藏層刨裆,其shape是[batch_size, length, embedding_size], 后面的自然語言處理任務(wù)則是根據(jù)這個(gè)embedding的特征編碼進(jìn)行任務(wù)處理聂示,如回歸分類等。

\color{red}{我們?cè)谟?xùn)練BERT的過程的過程也是一個(gè)無監(jiān)督的模型}棺弊,但是我們可以利用BERT可以做很多自然語言處理的很多事情晶密。這里我將會(huì)通過兩個(gè)方向來解釋BERT,分別是:
【1】 如何訓(xùn)練我們的BERT模型
【2】如何利用我們的BERT模型進(jìn)行自然語言處理任務(wù)

一模她、 訓(xùn)練BERT模型

1稻艰、 訓(xùn)練方法一: 使用MLM(Masked Language Model)方法


比如上面的一句話 今天 [mask] 玩 DOTA,我們不知道這里的 [mask]究竟指代的是什么侈净,有可能指代的是咱們尊勿,有可能是你們,我們希望我們的模型去預(yù)測這里的mask畜侦, 從圖中可以很明顯的看出我們?cè)谳敵鰁mbedding乘上[embedding_size, 單詞數(shù)量]的矩陣元扔,再經(jīng)過一個(gè)softmax就可以預(yù)測出該字是什么。

如果還是有點(diǎn)迷惑旋膳,那我們繼續(xù)往下面去看澎语。

就是隨機(jī)遮蓋或替換一句話里面任意字或詞, 然后讓模型通過上下文的理解預(yù)測那一個(gè)被遮蓋或替換的部分, 之后Loss的時(shí)候只計(jì)算被遮蓋部分的Loss** , 其實(shí)是一個(gè)很容易理解的任務(wù)。

論文中是這樣說的我們?cè)谳斎脒@句話的時(shí)候需要將一句話中15%的 單詞進(jìn)行mask验懊,也就是說不僅僅是這一個(gè) mask擅羞,當(dāng)然在這15%的mask中對(duì)于mask的編碼有三種方式:
【1】 80%直接將mask統(tǒng)一編碼成unknow的編碼形式作為模型輸入,然后去預(yù)測該輸出emdedding的單詞
【2】10%直接將mask替換成其他的單詞編碼輸入义图,比如說"小狗"减俏,讓模型預(yù)測其對(duì)應(yīng)的embedding的輸出
【3】10%保持不變的方式直接輸入到模型中去
這里摘用論文的demo

Masked LM and the Masking Procedure Assuming the unlabeled sentence is my dog is
hairy, and during the random masking procedure
we chose the 4-th token (which corresponding to
hairy), our masking procedure can be further illustrated by

? 80% of the time: Replace the word with the [MASK] token, e.g., my dog is hairy → my dog is [MASK]

? 10% of the time: Replace the word with a random word, e.g., my dog is hairy → my dog is apple

? 10% of the time: Keep the word unchanged, e.g., my dog is hairy → my dog is hairy. The purpose of this is to bias the representation towards the actual observed word.

這里我簡要說明一下具體矩陣是怎么計(jì)算的。首先在我們進(jìn)行mask機(jī)制之后碱工,讓模型預(yù)測和還原唄遮蓋或替換掉的部分娃承,模型最終輸出的隱藏層的計(jì)算結(jié)果的維度是:
\color{red}{X_{hidden}: [batch_size, sequence_len, embedding_dim]}
我們初始化一個(gè)映射層的權(quán)重W_{vocab}奏夫,
\color{red}{W_{vocab}:[embedding_{dim}, vocab_{size}]}
這里的vocab就是字典中字的數(shù)量,簡單理解就是字典one-hot編碼草慧。我們?cè)谟?img class="math-inline" src="https://math.jianshu.com/math?formula=W_%7Bvocab%7D" alt="W_{vocab}" mathimg="1">完成隱藏維度到子向量數(shù)量的映射桶蛔,只要求X_{hidden}W_{vocab}的矩陣進(jìn)行矩陣乘法(點(diǎn)積)匙头。這樣我們就進(jìn)行如下計(jì)算
\color{red}{X_{hidden}W_{vocab}:[batch_{size}, seq_{len}, vocab_{size}]}
之后把上面的計(jì)算結(jié)果在vocab_{size}(最后一個(gè)維度)做softmax漫谷,是每個(gè)字對(duì)應(yīng)的vocab_size的和為1, 我們就可以通過vocab_{size}里概率最大的字來得到模型的預(yù)測結(jié)果蹂析,就可以和我們準(zhǔn)備好的Label做損失并反傳梯度舔示。注意在損失的時(shí)候,值計(jì)算句子中隨機(jī)遮蓋或替換的部分电抚,其余部分不做損失惕稻,對(duì)于其他部分,模型輸出什么東西蝙叛,我們并不在意俺祠。

這里這么用的好處總結(jié)如下:
1、首先, 如果所有參與訓(xùn)練的token被100%的[MASK], 那么在fine-tunning的時(shí)候所有單詞都是已知的, 不存在[MASK], 那么模型就只能根據(jù)其他token的信息和語序結(jié)構(gòu)來預(yù)測當(dāng)前詞, 而無法利用到這個(gè)詞本身的信息, 因?yàn)樗鼈儚奈闯霈F(xiàn)在訓(xùn)練過程中, 等于模型從未接觸到它們的信息, 等于整個(gè)語義空間損失了部分信息. 采用80%的概率下應(yīng)用[MASK], 既可以讓模型去學(xué)著預(yù)測這些單詞, 又以20%的概率保留了語義信息展示給模型借帘。

2蜘渣、保留下來的信息如果全部使用原始token, 那么模型在預(yù)訓(xùn)練的時(shí)候可能會(huì)偷懶, 直接照抄當(dāng)前token信息. 采用10%概率下random token來隨機(jī)替換當(dāng)前token, 會(huì)讓模型不能去死記硬背當(dāng)前的token, 而去盡力學(xué)習(xí)單詞周邊的語義表達(dá)和遠(yuǎn)距離的信息依賴, 嘗試建模完整的語言信息.

3、最后再以10%的概率保留原始的token, 意義就是保留語言本來的面貌, 讓信息不至于完全被遮掩, 使得模型可以"看清"真實(shí)的語言面貌肺然。

2蔫缸、 訓(xùn)練方法二: NSP(Next Sentence Prediction)方法

首先我們拿到屬于上下文的一對(duì)句子, 也就是兩個(gè)句子, 之后我們要在這兩段連續(xù)的句子里面加token
\color{red}{[cls]上一話[sep]下一句話[sep]},也就是在句子開頭加一個(gè)[cls], 在兩句話這之中和句子的末尾加[sep], 具體如下圖所示际起。

  1. 我們看到上圖中兩句話是[cls] my dog is cute [sep] he likes playing [sep], [cls]我的狗很可愛[sep]他喜歡玩耍[sep], 除此之外, 我們還要準(zhǔn)備同樣格式的兩句話, 但他們不屬于上下文關(guān)系的情況;
    [cls]我的狗很可愛[sep]企鵝不擅長飛行[sep], 可見這屬于上下句不屬于上下文關(guān)系的情況; 在實(shí)際的訓(xùn)練中, 我們讓上面兩種情況出現(xiàn)的比例為1:1, 也就是一半的時(shí)間輸出的文本屬于上下文關(guān)系, 一半時(shí)間不是.
  2. 我們進(jìn)行完上述步驟之后, 還要隨機(jī)初始化一個(gè)可訓(xùn)練的segment \ embeddings, 見上圖中, 作用就是用embeddings的信息讓模型分開上下句, 我們一把給上句全0token, 下句啊全1token, 讓模型得以判斷上下句的起止位置, 例如:
    [cls]我的狗很可愛[sep]企鵝不擅長飛行[sep]
    0 \quad \ 0 \ \ 0 \ \ 0 \ \ 0 \ \ 0 \ \ 0 \ \ 0 \ \ \ 1 \ \ 1 \ \ 1 \ \ 1 \ \ 1 \ \ 1 \ \ 1 \ \ 1
    上面01就是segment \ embeddings.
  3. 還記得我們上節(jié)課說過的, 注意力機(jī)制就是, 讓每句話中的每一個(gè)字對(duì)應(yīng)的那一條向量里, 都融入這句話所有字的信息, 那么我們?cè)谧罱K隱藏層的計(jì)算結(jié)果里, 只要取出[cls]token所對(duì)應(yīng)的一條向量, 里面就含有整個(gè)句子的信息, 因?yàn)槲覀兤谕@個(gè)句子里面所有信息都會(huì)往[cls]token所對(duì)應(yīng)的一條向量里匯總:
    模型最終輸出的隱藏層的計(jì)算結(jié)果的維度是:
    我們X_{hidden}: [batch\_size, \ seq\_len, \ embedding\_dim]
    我們要取出[cls]token所對(duì)應(yīng)的一條向量, [cls]對(duì)應(yīng)著\ seq\_len維度的第0條:
    cls\_vector = X_{hidden}[:, \ 0, \ :]
    cls\_vector \in \mathbb{R}^{batch\_size, \ embedding\_dim}
    之后我們?cè)俪跏蓟粋€(gè)權(quán)重, 完成從embedding\_dim維度到1的映射, 也就是邏輯回歸, 之后用sigmoid函數(shù)激活, 就得到了而分類問題的推斷拾碌。

二、 如何使用BERT模型

1. 實(shí)例1

Case1

預(yù)測出輸出的分類街望,輸出句子分類校翔,比如在情感分類我們就可以使用這種BERT模型案例。Linear Classifier是隨機(jī)初始化的灾前,但是在訓(xùn)練的時(shí)候可以讓Linear Classifier調(diào)節(jié)防症, BERT進(jìn)行微調(diào)就好。

2. 實(shí)例2

Case2

這里就需要去得到每個(gè)詞匯是什么詞類型豫柬,只要我們得出詞的embedding, 然后在接上分類網(wǎng)絡(luò)告希,我們就可以得出每個(gè)詞的詞類型。

3. 實(shí)例3

Case3

這里我們輸入兩個(gè)句子輸出是表示根據(jù)第一句的假設(shè)烧给,第二個(gè)是進(jìn)行表示是否第二個(gè)句子可以根據(jù)第二個(gè)句子可以判斷燕偶。如果可以就是True, 不可以就是False, 不知道就是Unknow础嫡。也就是我們之前說的 NSP(Next Sentence Prediction)類型很相似指么,預(yù)測兩個(gè)句子的關(guān)聯(lián)程度酝惧。

4. 實(shí)例4

Case4

第四個(gè)案例其實(shí)就是為了解決QA 問題,但是此QA問題中的answer的前提條件就是能在文章中找到伯诬。如圖中的橘色的weight就是預(yù)測出answer start position晚唇, 而圖中藍(lán)色的weight就是為了預(yù)測出answer的end position,后面可以接一個(gè)softmax進(jìn)行分類盗似,這樣我們可以得到概率醉大的位置索引哩陕。我們就可以根據(jù)start position 以及end position的索引得到文章中的索引,但是如果start position小于end position我們可以理解中文章沒有結(jié)果赫舒。

三悍及、 額外補(bǔ)充

3.1 ERNIE

ERNIE

ERNIE模型是專門針對(duì)中文的進(jìn)行的語言模型,考慮的維度不僅僅是字的維度而是單詞的維度接癌。

3.2 BERT不同層所表示的意義


通過上圖我們可以看到隨著NLP任務(wù)難度的加深心赶,BERT越深層的權(quán)重越高(重要性),越簡單的任務(wù)缺猛,BERT越淺層的權(quán)重越小缨叫。(淺層和文本有關(guān),深層和語義有關(guān))

哈哈~ 終于說完了BERT荔燎,這里我會(huì)提供一個(gè)基于BERT進(jìn)行情感分類的代碼耻姥,這里的代碼有很多注釋,可以方便去學(xué)習(xí)湖雹。
code 地址:Semantic Analysis(Pytorch)

參考

  1. 唐宇迪 Bert教程
  2. 李宏毅 Bert教程
  3. 漢語自然語言處理-BERT的解讀語言模型預(yù)訓(xùn)練
  4. The Illustrated Transformer【譯】
  5. 【NLP】Transformer模型原理詳解
  6. BERT的MLM任務(wù)中為什么采用了80%, 10%, 10%的策略?
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末咏闪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子摔吏,更是在濱河造成了極大的恐慌鸽嫂,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件征讲,死亡現(xiàn)場離奇詭異据某,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)诗箍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門癣籽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人滤祖,你說我怎么就攤上這事筷狼。” “怎么了匠童?”我有些...
    開封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵埂材,是天一觀的道長。 經(jīng)常有香客問我汤求,道長俏险,這世上最難降的妖魔是什么严拒? 我笑而不...
    開封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮竖独,結(jié)果婚禮上裤唠,老公的妹妹穿的比我還像新娘。我一直安慰自己莹痢,他們只是感情好种蘸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著格二,像睡著了一般劈彪。 火紅的嫁衣襯著肌膚如雪竣蹦。 梳的紋絲不亂的頭發(fā)上顶猜,一...
    開封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音痘括,去河邊找鬼长窄。 笑死,一個(gè)胖子當(dāng)著我的面吹牛纲菌,可吹牛的內(nèi)容都是我干的挠日。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼翰舌,長吁一口氣:“原來是場噩夢啊……” “哼嚣潜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起椅贱,我...
    開封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤懂算,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后庇麦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體计技,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年山橄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了垮媒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡航棱,死狀恐怖睡雇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情饮醇,我是刑警寧澤它抱,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站驳阎,受9級(jí)特大地震影響抗愁,放射性物質(zhì)發(fā)生泄漏馁蒂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一蜘腌、第九天 我趴在偏房一處隱蔽的房頂上張望沫屡。 院中可真熱鬧,春花似錦撮珠、人聲如沸沮脖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勺届。三九已至,卻和暖如春娶耍,著一層夾襖步出監(jiān)牢的瞬間免姿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來泰國打工榕酒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胚膊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓想鹰,卻偏偏與公主長得像紊婉,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子辑舷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容