一文看懂Transformer到BERT模型
目錄:
ELMo與Transformer的簡(jiǎn)單回顧
DAE與Masked Language Model
BERT模型詳解
BERT模型的不同訓(xùn)練方法
如何把BERT模型應(yīng)用在實(shí)際項(xiàng)目中
如何對(duì)BERT減肥
BERT存在的問(wèn)題
1. ELMo與Transformer的簡(jiǎn)單回顧
1.1 一詞多義
1.2 ELMo
ELMo是一個(gè)語(yǔ)言模型,主要是做給定文本的Context,預(yù)測(cè)下一個(gè)詞。ELMo最重要的一個(gè)特點(diǎn)是部分解決了一詞多義的情況,沒(méi)有完全解決喲!它為解決一詞多義提供了一個(gè)很好的解決方案。像word2vec、glove提供的embedding是靜態(tài)的,一旦訓(xùn)練完成embedding是不變的。而ELMo其實(shí)考慮更多的是Context的信息,對(duì)每一個(gè)詞會(huì)給出3個(gè)embedding,這3個(gè)embedding可以看作是一個(gè)詞的3個(gè)embedding特征,對(duì)3個(gè)embedding特征會(huì)添加三個(gè)位置,對(duì)于不同的任務(wù)會(huì)賦予不同的權(quán)重,最后根據(jù)權(quán)重把這三個(gè)embedding結(jié)合起來(lái)做向量平均,把合并后的embedding作為最后詞的embedding。
ELMo用的是long contexts信息,而不是其他模型用到的window size contexts信息。ELMo用到的是Bi-LSTM,如果ELMo換成Transformer那就和BERT結(jié)構(gòu)基本一樣了。
1.3 Transformer
LSTM和Transformer的區(qū)別:
基于RNN的LSTM訓(xùn)練是迭代的,當(dāng)前這個(gè)字進(jìn)入完LSTM單元后才能輸入下一個(gè)字,是一個(gè)串行的過(guò)程。
Transformer的訓(xùn)練是并行的,它是所有的字都可以同時(shí)并行訓(xùn)練,大大的加快了計(jì)算效率。而且Transformer加入了位置嵌入,幫助模型理解語(yǔ)言的順序。使用Self-Attention和全連接層來(lái)計(jì)算是Transformer的一個(gè)基本結(jié)構(gòu)。
Transformer中最重要的就是Multi-Head Attention。
Transformer中Encoder的五個(gè)核心部分如下圖:
Skip connections:反向傳播的時(shí)候,防止梯度消失的問(wèn)題。
2. DAE與Masked Language Model
2.1 什么是DAE與Masked Language Model
隨著一些奇怪的高維數(shù)據(jù)出現(xiàn),比如圖像、語(yǔ)音,傳統(tǒng)的統(tǒng)計(jì)學(xué)-機(jī)器學(xué)習(xí)方法遇到了前所未有的挑戰(zhàn)。數(shù)據(jù)維度過(guò)高,數(shù)據(jù)單調(diào),噪聲分布廣,傳統(tǒng)的特征工程很難奏效。
為了解決高維度的問(wèn)題,出現(xiàn)的線性學(xué)習(xí)的PCA降維方法,PCA的數(shù)學(xué)理論確實(shí)無(wú)懈可擊,但是卻只對(duì)線性數(shù)據(jù)效果比較好。于是,尋求簡(jiǎn)單的、自動(dòng)的、智能的特征提取方法仍然是機(jī)器學(xué)習(xí)的研究重點(diǎn)。
于是,CNN另辟蹊徑,利用卷積、降采樣兩大手段從信號(hào)數(shù)據(jù)的特點(diǎn)上很好的提取出了特征。對(duì)于一般非信號(hào)數(shù)據(jù),該怎么辦呢?
研究者提出了自動(dòng)編碼器(AutoEncoder),自動(dòng)編碼器基于這樣一個(gè)事實(shí):原始input(設(shè)為? ?)經(jīng)過(guò)加權(quán)(?、 ?)、映射(Sigmoid)之后得到 ? ,再對(duì)? ?反向加權(quán)映射回來(lái)成為? ?。網(wǎng)絡(luò)結(jié)構(gòu)如下圖:
自動(dòng)編碼器的過(guò)程很有趣,首先,它沒(méi)有使用數(shù)據(jù)標(biāo)簽來(lái)計(jì)算誤差update參數(shù),所以是無(wú)監(jiān)督學(xué)習(xí)。其次,利用類(lèi)似神經(jīng)網(wǎng)絡(luò)的雙隱層的方式,簡(jiǎn)單粗暴地提取了樣本的特征。
為了緩解經(jīng)典AutoEncoder容易過(guò)擬合的問(wèn)題,一個(gè)辦法是在輸入中加入隨機(jī)噪聲,所以Vincent在2008年的論文《Extracting and Composing Robust Features with Denoising Autoencoders》中提出了AutoEncoder的改良版Denoising AutoEncoder(DAE)。
怎么才能使特征很魯棒呢?就是以一定概率分布(通常使用二項(xiàng)分布)去擦除原始input矩陣,即每個(gè)值都隨機(jī)置0, ?這樣看起來(lái)部分?jǐn)?shù)據(jù)的部分特征是丟失了。以這丟失的數(shù)據(jù) ? 去計(jì)算? ?,計(jì)算? ? ,并將? ? 與原始? ?做誤差迭代,這樣,網(wǎng)絡(luò)就學(xué)習(xí)了這個(gè)破損(Corruputed)的數(shù)據(jù)。網(wǎng)絡(luò)結(jié)構(gòu)如下圖:
這個(gè)破損的數(shù)據(jù)是很有用的,原因有二:
通過(guò)與非破損數(shù)據(jù)訓(xùn)練的對(duì)比,破損數(shù)據(jù)訓(xùn)練出來(lái)的Weight噪聲比較小。 降噪因此得名。原因不難理解,因?yàn)椴脸臅r(shí)候不小心把輸入噪聲給擦掉了。
破損數(shù)據(jù)一定程度上減輕了訓(xùn)練數(shù)據(jù)與測(cè)試數(shù)據(jù)的代溝。 由于數(shù)據(jù)的部分被擦掉了,因而這破損數(shù)據(jù)一定程度上比較接近測(cè)試數(shù)據(jù)。(訓(xùn)練、測(cè)試肯定有同有異,當(dāng)然我們要求同舍異)。這樣訓(xùn)練出來(lái)的Weight的魯棒性就提高了。
2.2 BERT與DAE、Masked Language Model的關(guān)系
BERT是一種基于Transformer Encoder來(lái)構(gòu)建的一種模型,它整個(gè)的架構(gòu)其實(shí)是基于DAE(Denoising Autoencoder,去噪自編碼器)的,這部分在BERT文章里叫作Masked Lanauge Model(MLM)。MLM并不是嚴(yán)格意義上的語(yǔ)言模型,因?yàn)檎麄€(gè)訓(xùn)練過(guò)程并不是利用語(yǔ)言模型方式來(lái)訓(xùn)練的。BERT隨機(jī)把一些單詞通過(guò)MASK標(biāo)簽來(lái)代替,并接著去預(yù)測(cè)被MASK的這個(gè)單詞,過(guò)程其實(shí)就是DAE的過(guò)程。 BERT有兩種主要訓(xùn)練好的模型,分別是BERT-Small和BERT-Large, 其中BERT-Large使用了12層的Encoder結(jié)構(gòu)。整個(gè)的模型具有非常多的參數(shù)。
雖然BERT有很好的表現(xiàn),但本身也有一些問(wèn)題。比如,BERT并不能用來(lái)生成數(shù)據(jù)。 由于BERT本身是依賴(lài)于DAE的結(jié)構(gòu)來(lái)訓(xùn)練的,所以不像那些基于語(yǔ)言模型訓(xùn)練出來(lái)的模型具備很好地生成能力。之前的方法比如NNLM、ELMo是基于語(yǔ)言模型生成的,所以用訓(xùn)練好的模型可以生成出一些句子、文本等。但基于這類(lèi)生成模型的方法論本身也存在一些問(wèn)題,因?yàn)槔斫庖粋€(gè)單詞在上下文里的意思的時(shí)候,語(yǔ)言模型只考慮了它的上文,而沒(méi)有考慮下文!
BERT在2018年提出,當(dāng)時(shí)引起了爆炸式的反應(yīng),因?yàn)閺男Ч蟻?lái)講刷新了非常多的記錄,之后基本上開(kāi)啟了這個(gè)領(lǐng)域的飛速的發(fā)展。
3. BERT模型詳解
3.1 BERT簡(jiǎn)介
Bidirection:BERT的整個(gè)模型結(jié)構(gòu)和ELMo類(lèi)似,都是雙向的。
Encoder:是一種編碼器,BERT只是用到了Transformer的Encoder部分。
Representation:做詞的表征。
Transformer:Transformer是BERT的核心內(nèi)部元素。
BERT的基本思想和Word2Vec、CBOW是一樣的,都是給定context,來(lái)預(yù)測(cè)下一個(gè)詞。BERT的結(jié)構(gòu)和ELMo是相似的都是雙向結(jié)構(gòu)。第一個(gè)利用Transformer的并不是BERT,而是GPT。
3.2 BERT的模型結(jié)構(gòu)
BERT的模型結(jié)構(gòu)是Seq2Seq,核心是Transformer encoder,而Transformer encoder里面又包含前面介紹的五個(gè)很重要的部分。
3.3 BERT的輸入
接下來(lái)看一下BERT的輸入,BERT的輸入包含三個(gè)部分:Token Embeddings、Segment Embeddings、Position Embeddings。這三個(gè)部分在整個(gè)過(guò)程中是可以學(xué)習(xí)的。
特殊字符介紹:
CLS,全稱(chēng)是Classification Token(CLS),是用來(lái)做一些分類(lèi)任務(wù)?!癈LS”token為什么會(huì)放在第一位?因?yàn)楸旧鞡ERT是并行結(jié)構(gòu),“CLS”放在尾部也可以,放在中間也可以。放在第一個(gè)應(yīng)該是比較方便。
SEP,全稱(chēng)是Special Token(SEP),是用來(lái)區(qū)分兩個(gè)句子的,因?yàn)橥ǔT趖rain BERT的時(shí)候會(huì)輸入兩個(gè)句子。從下面圖片中,可以看出SEP是區(qū)分兩個(gè)句子的token。
Token Embedding: 就是對(duì)輸入的每次單詞進(jìn)行Embedding。
Segment Embedding: 標(biāo)記輸入的Token是屬于句子A還是句子B。
Position Embedding: 具體標(biāo)記每一個(gè)Token的位置。
最后,把這三個(gè)Embedding的對(duì)應(yīng)位置加起來(lái),作為BERT最后的輸入Embedding。
4. BERT模型的不同訓(xùn)練方法
4.1 BERT的預(yù)訓(xùn)練
BERT是如何做預(yù)訓(xùn)練的?有兩個(gè)任務(wù):一是Masked Language Model(MLM);二是Next Sentence Predicition(NSP)。在訓(xùn)練BERT的時(shí)候,這兩個(gè)任務(wù)是同時(shí)訓(xùn)練的。所以,BERT的損失函數(shù)是把這兩個(gè)任務(wù)的損失函數(shù)加起來(lái)的,是一個(gè)多任務(wù)訓(xùn)練。
BERT官方提供了兩個(gè)版本的BERT模型。一個(gè)是BERT的BASE版,另一個(gè)是BERT的LARGE版。BERT的BASE版有12層的Transformer,隱藏層Embedding的維度是768,head是12個(gè),參數(shù)總數(shù)大概是一億一千萬(wàn)。BERT的LARGE版有24層的Transformer,隱藏層Embedding的維度是1024,head是16個(gè),參數(shù)總數(shù)大概是三億四千萬(wàn)。
4.2 BERT-Masked Language Model
什么是Masked Language Model?它的靈感來(lái)源于完形填空。具體在BERT中,掩蓋了15%的Tokens。這掩蓋了15%的Tokens又分為三種情況:一是,有80%的字符用“MASK”這個(gè)字符替換;二是,有10%的字符用另外的字符替換;三是,有10%的字符是保持不動(dòng)。最后在計(jì)算損失時(shí),只計(jì)算被掩蓋的這些Tokens,也就是掩蓋了15%的Tokens。
4.3 BERT-Next Sentence Prediction
Next Sentence Prediction是更關(guān)注于兩個(gè)句子之間的關(guān)系。與Masked Language Model任務(wù)相比,Next Sentence Prediction更簡(jiǎn)單些。
4.4 BERT-Training Tips
4.5 BERT-What it looks like?
訓(xùn)練好BERT之后,我們來(lái)研究BERT內(nèi)部的機(jī)制。BERT的BASE版本有12個(gè)head,每一個(gè)head是否有相同的功能?如下圖所示,第一個(gè)head的連線非常的密集,它是Attends broadly;對(duì)于第3個(gè)head到第1個(gè)head,更關(guān)注的是下一個(gè)單詞;對(duì)于第8個(gè)head到第7個(gè)head,更關(guān)注的是句子的分割符(SEP);對(duì)于第11個(gè)head到第6個(gè)head,更關(guān)注的是句子的句號(hào)。
所以,對(duì)于每一個(gè)head來(lái)說(shuō),代表的意義是不一樣的,這也是BERT強(qiáng)大的原因。BERT本身的Multi-Headed結(jié)構(gòu)可以抓住不一樣的特征,包括全局的特征、局部的特征等。
BERT的BASE版有12層的Transformer,下圖中的每一個(gè)顏色代表一層的Transformer,相同顏色會(huì)聚集的比較近。相同層的head是非常相近的!
針對(duì)上面兩幅圖進(jìn)行總結(jié),對(duì)于含有12層+12個(gè)Head的BERT模型,對(duì)于每一層來(lái)說(shuō),它的Head的功能是相似的;對(duì)于每一個(gè)Head里面的Attention表現(xiàn)出的功能是完全不一樣的。
4.6 BERT-What it learns?
在論文“ Tenney I, Das D, Pavlick E. Bert rediscovers the classical nlp pipeline[J]. arXiv preprint arXiv:1905.05950, 2019.”中研究了BERT的LARGE版本中每層Transformer在不同NLP任務(wù)中所做的貢獻(xiàn)。
從上圖可知,藍(lán)色部分越長(zhǎng)表示改層Transformer對(duì)該NLP任務(wù)所起的作用更大。在Coref.任務(wù)中,可以看到18、19、20層所起的作用更大。
4.7 BERT-Multilingual Version
相關(guān)的GitHub地址:https://github.com/google-research/bert/blob/master/multilingual.md
5. 如何把BERT模型應(yīng)用在實(shí)際項(xiàng)目中
我們有了BERT模型,也已經(jīng)把BERT模型預(yù)訓(xùn)練好了,那么我們能用BERT模型做哪些NLP的任務(wù)呢?
Classification
Questions & Answering
Named Entity Recognition(NER)
Chat Bot(Intent Classification & Slot Filling)
Reading Comprehension
Sentiment Analysis
Reference Resolution
Fact Checking
etc.
5.1 Classification
BERT論文提到:
【1】Devlin J, Chang M W, Lee K, et al. Bert: Pre-training of deep bidirectional transformers for language understanding[J]. arXiv preprint arXiv:1810.04805, 2018.
5.2 Questions & Answering
BERT論文提到:
【1】Devlin J, Chang M W, Lee K, et al. Bert: Pre-training of deep bidirectional transformers for language understanding[J]. arXiv preprint arXiv:1810.04805, 2018.
我們來(lái)看一下如何在QA系統(tǒng)中應(yīng)該BERT:
具體信息可以參看:Bert時(shí)代的創(chuàng)新(應(yīng)用篇):Bert在NLP各領(lǐng)域的應(yīng)用進(jìn)展 - 張俊林的文章 - 知乎 https://zhuanlan.zhihu.com/p/68446772
5.3 Named Entity Recognition(NER)
BERT論文提到:
【1】Devlin J, Chang M W, Lee K, et al. Bert: Pre-training of deep bidirectional transformers for language understanding[J]. arXiv preprint arXiv:1810.04805, 2018.
5.4 Chat Bot(Intent Classification & Slot Filling)
相關(guān)論文:
【1】Chen Q, Zhuo Z, Wang W. Bert for joint intent classification and slot filling[J]. arXiv preprint arXiv:1902.10909, 2019.
5.5 Reading Comprehension
6. 如何對(duì)BERT減肥
BERT表現(xiàn)的非常好,但是它參數(shù)太多了。我們能不能把BERT模型進(jìn)行壓縮一下,方便我們使用呢?壓縮模型常用方法如下:
Pruning-remove parts from the model
Quantization-covert Double to Int32
Distillation-teach a small model
6.1 知識(shí)蒸餾
7. BERT存在的問(wèn)題
相關(guān)論文:
【1】Niven T, Kao H Y. Probing neural network comprehension of natural language arguments[J]. arXiv preprint arXiv:1907.07355, 2019. 該論文指出,現(xiàn)存的數(shù)據(jù)集不能很好的評(píng)估BERT模型的表現(xiàn)。
【2】Si C, Wang S, Kan M Y, et al. What does BERT Learn from Multiple-Choice Reading Comprehension Datasets?[J]. arXiv preprint arXiv:1910.12391, 2019. 該論文在數(shù)據(jù)集中添加干擾文本,結(jié)果顯示BERT的表現(xiàn)非常差。
8. Reference
【1】本文是Microstrong在觀看葛瀚騁在B站上講解的直播課程《從Transformer到BERT模型》的筆記。直播地址:https://live.bilibili.com/11869202
【2】從BERT, XLNet, RoBERTa到ALBERT - 李文哲的文章 - 知乎 https://zhuanlan.zhihu.com/p/84559048
【3】降噪自動(dòng)編碼器(Denoising Autoencoder),地址:https://www.cnblogs.com/neopenx/p/4370350.html
【4】 【自然語(yǔ)言處理】NLP免費(fèi)直播(貪心學(xué)院),地址:https://www.bilibili.com/video/av89296151?p=3
往期精彩回顧適合初學(xué)者入門(mén)人工智能的路線及資料下載機(jī)器學(xué)習(xí)在線手冊(cè)深度學(xué)習(xí)在線手冊(cè)AI基礎(chǔ)下載(pdf更新到25集)備注:加入本站微信群或者qq群,請(qǐng)回復(fù)“加群”獲取一折本站知識(shí)星球優(yōu)惠券,請(qǐng)回復(fù)“知識(shí)星球”喜歡文章,點(diǎn)個(gè)在看
總結(jié)
以上是生活随笔為你收集整理的一文看懂Transformer到BERT模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 含最新数据! 使用Python检测新冠肺
- 下一篇: 【ICML 2020】REALM: Re