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