本文首先介紹BERT模型要做什么,即:模型的輸入、輸出分別是什么,以及模型的預訓練任務是什么;然后,分析模型的內部結構,圖解如何將模型的輸入一步步地轉化為模型輸出;最后,我們在多個中/英文、不同規模的數據集上比較了BERT模型與現有方法的文本分類效果。
1. 模型的輸入/輸出
BERT模型的全稱是:BidirectionalEncoder Representations from Transformer。從名字中可以看出,BERT模型的目標是利用大規模無標注語料訓練、獲得文本的包含豐富語義信息的Representation,即:文本的語義表示,然后將文本的語義表示在特定NLP任務中作微調,最終應用于該NLP任務。煮個栗子,BERT模型訓練文本語義表示的過程就好比我們在高中階段學習語數英、物化生等各門基礎學科,夯實基礎知識;而模型在特定NLP任務中的參數微調就相當于我們在大學期間基于已有基礎知識、針對所選專業作進一步強化,從而獲得能夠應用于實際場景的專業技能。
在基于深度神經網絡的NLP方法中,文本中的字/詞通常都用一維向量來表示(一般稱之為“詞向量”);在此基礎上,神經網絡會將文本中各個字或詞的一維詞向量作為輸入,經過一系列復雜的轉換后,輸出一個一維詞向量作為文本的語義表示。特別地,我們通常希望語義相近的字/詞在特征向量空間上的距離也比較接近,如此一來,由字/詞向量轉換而來的文本向量也能夠包含更為準確的語義信息。因此,BERT模型的主要輸入是文本中各個字/詞的原始詞向量,該向量既可以隨機初始化,也可以利用Word2Vector等算法進行預訓練以作為初始值;輸出是文本中各個字/詞融合了全文語義信息后的向量表示,如下圖所示(為方便描述且與BERT模型的當前中文版本保持一致,本文統一以字向量作為輸入):
從上圖中可以看出,BERT模型通過查詢字向量表將文本中的每個字轉換為一維向量,作為模型輸入;模型輸出則是輸入各字對應的融合全文語義信息后的向量表示。此外,模型輸入除了字向量,還包含另外兩個部分:
1. 文本向量:該向量的取值在模型訓練過程中自動學習,用于刻畫文本的全局語義信息,并與單字/詞的語義信息相融合
2. 位置向量:由于出現在文本不同位置的字/詞所攜帶的語義信息存在差異(比如:“我愛你”和“你愛我”),因此,BERT模型對不同位置的字/詞分別附加一個不同的向量以作區分
最后,BERT模型將字向量、文本向量和位置向量的加和作為模型輸入。特別地,在目前的BERT模型中,文章作者還將英文詞匯作進一步切割,劃分為更細粒度的語義單位(WordPiece),例如:將playing分割為play和##ing;此外,對于中文,目前作者尚未對輸入文本進行分詞,而是直接將單字作為構成文本的基本單位。
對于不同的NLP任務,模型輸入會有微調,對模型輸出的利用也有差異,例如:
單文本分類任務:對于文本分類任務,BERT模型在文本前插入一個[CLS]符號,并將該符號對應的輸出向量作為整篇文本的語義表示,用于文本分類,如下圖所示。可以理解為:與文本中已有的其它字/詞相比,這個無明顯語義信息的符號會更“公平”地融合文本中各個字/詞的語義信息。
語句對分類任務:該任務的實際應用場景包括:問答(判斷一個問題與一個答案是否匹配)、語句匹配(兩句話是否表達同一個意思)等。對于該任務,BERT模型除了添加[CLS]符號并將對應的輸出作為文本的語義表示,還對輸入的兩句話用一個[SEP]符號作分割,并分別對兩句話附加兩個不同的文本向量以作區分,如下圖所示。
序列標注任務:該任務的實際應用場景包括:中文分詞&新詞發現(標注每個字是詞的首字、中間字或末字)、答案抽取(答案的起止位置)等。對于該任務,BERT模型利用文本中每個字對應的輸出向量對該字進行標注(分類),如下圖所示(B、I、E分別表示一個詞的第一個字、中間字和最后一個字)。
……
根據具體任務的不同,在實際應用中我們可以腦洞大開,通過調整模型的輸入、輸出將模型適配到真實業務場景中。
2. 模型的預訓練任務
BERT實際上是一個語言模型。語言模型通常采用大規模、與特定NLP任務無關的文本語料進行訓練,其目標是學習語言本身應該是什么樣的,這就好比我們學習語文、英語等語言課程時,都需要學習如何選擇并組合我們已經掌握的詞匯來生成一篇通順的文本。回到BERT模型上,其預訓練過程就是逐漸調整模型參數,使得模型輸出的文本語義表示能夠刻畫語言的本質,便于后續針對具體NLP任務作微調。為了達到這個目的,BERT文章作者提出了兩個預訓練任務:Masked LM和Next Sentence Prediction。
2.1 Masked LM
Masked LM的任務描述為:給定一句話,隨機抹去這句話中的一個或幾個詞,要求根據剩余詞匯預測被抹去的幾個詞分別是什么,如下圖所示。
這不就是我們高中英語常做的完形填空么!所以說,BERT模型的預訓練過程其實就是在模仿我們學語言的過程。具體來說,文章作者在一句話中隨機選擇15%的詞匯用于預測。對于在原句中被抹去的詞匯,80%情況下采用一個特殊符號[MASK]替換,10%情況下采用一個任意詞替換,剩余10%情況下保持原詞匯不變。這么做的主要原因是:在后續微調任務中語句中并不會出現[MASK]標記,而且這么做的另一個好處是:預測一個詞匯時,模型并不知道輸入對應位置的詞匯是否為正確的詞匯(10%概率),這就迫使模型更多地依賴于上下文信息去預測詞匯,并且賦予了模型一定的糾錯能力。
2.2 NextSentence Prediction
Next Sentence Prediction的任務描述為:給定一篇文章中的兩句話,判斷第二句話在文本中是否緊跟在第一句話之后,如下圖所示。
當年大學考英語四六級的時候,大家應該都做過段落重排序,即:將一篇文章的各段打亂,讓我們通過重新排序把原文還原出來,這其實需要我們對全文大意有充分、準確的理解。Next Sentence Prediction任務實際上就是段落重排序的簡化版:只考慮兩句話,判斷是否是一篇文章中的前后句。在實際預訓練過程中,文章作者從文本語料庫中隨機選擇50%正確語句對和50%錯誤語句對進行訓練,與Masked LM任務相結合,讓模型能夠更準確地刻畫語句乃至篇章層面的語義信息。
BERT模型通過對Masked LM任務和Next Sentence Prediction任務進行聯合訓練,使模型輸出的每個字/詞的向量表示都能盡可能全面、準確地刻畫輸入文本(單句或語句對)的整體信息,為后續的微調任務提供更好的模型參數初始值。
3. 模型結構
了解了BERT模型的輸入/輸出和預訓練過程之后,我們來看一下BERT模型的內部結構。前面提到過,BERT模型的全稱是:BidirectionalEncoder Representations from Transformer,也就是說,Transformer是組成BERT的核心模塊,而Attention機制又是Transformer中最關鍵的部分,因此,下面我們從Attention機制開始,介紹如何利用Attention機制構建Transformer模塊,在此基礎上,用多層Transformer組裝BERT模型。
3.1 Attention機制
Attention: Attention機制的中文名叫“注意力機制”,顧名思義,它的主要作用是讓神經網絡把“注意力”放在一部分輸入上,即:區分輸入的不同部分對輸出的影響。這里,我們從增強字/詞的語義表示這一角度來理解一下Attention機制。
我們知道,一個字/詞在一篇文本中表達的意思通常與它的上下文有關。比如:光看“鵠”字,我們可能會覺得很陌生(甚至連讀音是什么都不記得吧),而看到它的上下文“鴻鵠之志”后,就對它立馬熟悉了起來。因此,字/詞的上下文信息有助于增強其語義表示。同時,上下文中的不同字/詞對增強語義表示所起的作用往往不同。比如在上面這個例子中,“鴻”字對理解“鵠”字的作用最大,而“之”字的作用則相對較小。為了有區分地利用上下文字信息增強目標字的語義表示,就可以用到Attention機制。
Attention機制主要涉及到三個概念:Query、Key和Value。在上面增強字的語義表示這個應用場景中,目標字及其上下文的字都有各自的原始Value,Attention機制將目標字作為Query、其上下文的各個字作為Key,并將Query與各個Key的相似性作為權重,把上下文各個字的Value融入目標字的原始Value中。如下圖所示,Attention機制將目標字和上下文各個字的語義向量表示作為輸入,首先通過線性變換獲得目標字的Query向量表示、上下文各個字的Key向量表示以及目標字與上下文各個字的原始Value表示,然后計算Query向量與各個Key向量的相似度作為權重,加權融合目標字的Value向量和各個上下文字的Value向量,作為Attention的輸出,即:目標字的增強語義向量表示。
Self-Attention:對于輸入文本,我們需要對其中的每個字分別增強語義向量表示,因此,我們分別將每個字作為Query,加權融合文本中所有字的語義信息,得到各個字的增強語義向量,如下圖所示。在這種情況下,Query、Key和Value的向量表示均來自于同一輸入文本,因此,該Attention機制也叫Self-Attention。
Multi-head Self-Attention:為了增強Attention的多樣性,文章作者進一步利用不同的Self-Attention模塊獲得文本中每個字在不同語義空間下的增強語義向量,并將每個字的多個增強語義向量進行線性組合,從而獲得一個最終的與原始字向量長度相同的增強語義向量,如下圖所示。
這里,我們再給出一個例子來幫助理解Multi-head Self-Attention(注:這個例子僅用于幫助理解,并非嚴格正確)。看下面這句話:“南京市長江大橋”,在不同語義場景下對這句話可以有不同的理解:“南京市/長江大橋”,或“南京市長/江大橋”。對于這句話中的“長”字,在前一種語義場景下需要和“江”字組合才能形成一個正確的語義單元;而在后一種語義場景下,它則需要和“市”字組合才能形成一個正確的語義單元。我們前面提到,Self-Attention旨在用文本中的其它字來增強目標字的語義表示。在不同的語義場景下,Attention所重點關注的字應有所不同。因此,Multi-head Self-Attention可以理解為考慮多種語義場景下目標字與文本中其它字的語義向量的不同融合方式。可以看到,Multi-head Self-Attention的輸入和輸出在形式上完全相同,輸入為文本中各個字的原始向量表示,輸出為各個字融合了全文語義信息后的增強向量表示。因此,Multi-head Self-Attention可以看作是對文本中每個字分別增強其語義向量表示的黑盒。
3.2 Transformer Encoder
在Multi-headSelf-Attention的基礎上再添加一些“佐料”,就構成了大名鼎鼎的Transformer Encoder。實際上,Transformer模型還包含一個Decoder模塊用于生成文本,但由于BERT模型中并未使用到Decoder模塊,因此這里對其不作詳述。下圖展示了Transformer Encoder的內部結構,可以看到,Transformer Encoder在Multi-head Self-Attention之上又添加了三種關鍵操作:
殘差連接(ResidualConnection):將模塊的輸入與輸出直接相加,作為最后的輸出。這種操作背后的一個基本考慮是:修改輸入比重構整個輸出更容易(“錦上添花”比“雪中送炭”容易多了!)。這樣一來,可以使網絡更容易訓練。
Layer Normalization:對某一層神經網絡節點作0均值1方差的標準化。
線性轉換:對每個字的增強語義向量再做兩次線性變換,以增強整個模型的表達能力。這里,變換后的向量與原向量保持長度相同。
可以看到,Transformer Encoder的輸入和輸出在形式上還是完全相同,因此,Transformer Encoder同樣可以表示為將輸入文本中各個字的語義向量轉換為相同長度的增強語義向量的一個黑盒。
3.3 BERT model
組裝好TransformerEncoder之后,再把多個Transformer Encoder一層一層地堆疊起來,BERT模型就大功告成了!
在論文中,作者分別用12層和24層Transformer Encoder組裝了兩套BERT模型,兩套模型的參數總數分別為110M和340M。
4. BERT模型的文本分類效果
在本文中,我們聚焦文本分類任務,對比分析BERT模型在中/英文、不同規模數據集上的文本分類效果。我們基于Google預訓練好的BERT模型(中文采用chinese_L-12_H-768_A-12模型,下載鏈接:https://storage.googleapis.com/bert_models/2018_11_03/chinese_L-12_H-768_A-12.zip;英文采用uncased_L-12_H-768_A-12模型,下載鏈接:https://storage.googleapis.com/bert_models/2018_10_18/uncased_L-12_H-768_A-12.zip)。我們一共選擇了6個數據集進行實驗,各數據集的訓練集/測試集大小、分類任務、類別數和語言類型如下表所示。
數據集 | 訓練集大小 | 測試集大小 | 分類任務 | 類別數 | 語言類型 |
商品評論情感分析 | 9653 | 1145 | 情感極性分類 | 3 | 中文 |
Sentiment_XS | 29613 | 11562 | 情感極性分類 | 2 | 中文 |
立場分析 | 2914 | 1249 | 立場分類 | 3 | 英文 |
AG’s News | 120000 | 7600 | 新聞分類 | 4 | 英文 |
Yelp Review Full | 650000 | 50000 | 情感分類 | 5 | 英文 |
Yahoo! Answers | 1400000 | 60000 | 問答系統 | 10 | 英文 |
4.1 商品評論情感分析
該數據集旨在分析微博中表達的對特定商品的情感傾向:正面、負面或中立。我們選擇了三種方法與BERT模型進行對比:
XGBoost:NGram特征+XGBoost分類器
Char-level CNN:將未分詞的文本直接輸入卷積神經網絡(已對比發現Word-level CNN效果略差)
Attention-based RNN:將分詞后的文本輸入循環神經網絡(已對比發現Char-level RNN效果略差),并且在最終分類前采用Attention機制融合輸入各個詞對應的hidden states
BERT模型與三種對比方法的正面、負面、中立情感分類F1值如下:
方法 | 正面F1值 | 負面F1值 | 中立F1值 |
XGBoost | 67% | 60% | 91% |
Char-level CNN | 69% | 74% | 92% |
Attention-based RNN | 66% | 71% | 91% |
BERT | 71% | 76% | 92% |
從上表中可以看到,BERT模型在正、負、中立F1值上均碾壓了所有對比方法!
4.2 Sentiment_XS
該數據集來自于論文“SentimentClassification with Convolutional Neural Networks: an Experimental Study on aLarge-scale Chinese Conversation Corpus” (DOI:10.1109/CIS.2016.0046),旨在對短文本進行正/負面情感極性分類。我們選擇論文中的部分代表性對比方法與BERT模型進行對比,包括:支持向量機分類器(SVC)、邏輯回歸(LR)、Naive Bayes SVM(NBSVM)和卷積神經網絡(CNN),分類準確率如下表所示(對比方法的實驗數據來自于論文)。
方法 | 分類準確率 |
SVC | 81.89% |
LR | 81.84% |
NBSVM | 81.18% |
CNN | 87.12% |
BERT | 90.01% |
可以看到,BERT模型在Sentiment_XS數據集上的分類準確率再次碾壓了所有對比方法!
4.3 立場分析
該數據集來自于國外文本分析評測比賽SemEval-2016的任務6A:有監督立場分類,旨在分析文本中對5個話題的支持、反對或中立態度,包括:有神論、氣候變化、女權運動、Hillary Clinton和墮胎合法化。因此,該數據集實際上對應5個話題子集。分類效果的官方評估指標為支持類別F1值和反對類別F1值的宏平均。我們選擇了當前立場分析領域的四個最優方法與BERT模型進行對比,包括:
SVM:NGram特征+支持向量機分類器,該方法取得了當時參加評測的所有方法的最優分類效果
MITRE:基于循環神經網絡(LSTM)的方法,在參加評測的神經網絡方法中取得最優效果
pkudblab:基于卷積神經網絡的方法,在參加評測的神經網絡方法中效果僅次于MITRE
TGMN-CR:結合動態記憶模塊與循環神經網絡的方法,近期提出的最新方法
上述方法與BERT模型在5個數據子集上的分類效果如下表所示(對比方法的數據來自于論文:A Target-GuidedNeural Memory Model for Stance Detection in Twitter,DOI:10.1109/IJCNN.2018.8489665)。
方法 | 有神論 | 氣候變化 | 女權運動 | Hillary Clinton | 墮胎合法化 |
SVM | 65.19% | 42.35% | 57.46% | 58.63% | 66.42% |
MITRE | 61.47% | 41.63% | 62.09% | 57.67% | 57.28% |
pkudblab | 63.34% | 52.69% | 51.33% | 64.41% | 61.09% |
TGMN-CR | 64.6% | 43.02% | 59.35% | 66.21% | 66.21% |
BERT | 75.51% | 46.04% | 55.35% | 67.54% | 62.5% |
從上表中可以看到,BERT模型在2個數據子集中都取得了最優效果,尤其是“有神論”數據集,F1值超過當前最優算法約10%!不過,在其余三個數據子集中,BERT模型的表現比較一般。
4.4 AG’s News& Yelp Review Full & Yahoo! Answers
這三個數據集算是文本分類領域的經典數據集了,分別對應新聞分類、情感分類和問答系統任務。這里,我們選擇了4種在這三個數據集上進行過實驗驗證的方法與BERT模型進行對比,包括:
char-CNN:將未分詞的文本直接輸入卷積神經網絡
FastText:一種用于文本分類的快速神經網絡方法
VDCNN:Very Deep CNN,顧名思義,非常非常深的卷積神經網絡Region embedding:利用局部文本語義信息增強文本中每個詞的語義向量表示,輸入到一個簡單神經網絡中進行分類
DPCNN:Deep Pyramid CNN,同樣是非常深的神經網絡,通過池化操作使網絡的每層神經元個數不斷減半,因此,整個神經網絡看起來像是一個金字塔結構
上述對比方法與BERT模型在三個數據集上的分類準確率如下表所示(對比方法的數據來自于論文:A New method ofRegion Embedding for Text Classification和Deep PyramidConvolutional Neural Networks for Text Categorization)。
方法 | AG’s News | Yelp Review Full | Yahoo! Answers |
char-CNN | 87.2% | 62% | 71.2% |
FastText | 92.5% | 63.9% | 72.3% |
VDCNN | 91.3% | 64.7% | 73.4% |
Region embedding | 92.8% | 64.9% | 73.7% |
DPCNN | 93.1% | 69.4% | 76.1% |
BERT | 94.6% | 66.0% | 74.2% |
上表表明,BERT模型在AG’s News數據集上取得了最高的分類準確率,在Yelp Review Full和Yahoo! Answers數據集上也都取得了次高的分類準確率。需要注意的是,我們目前僅使用12層Transformer Encoder結構的BERT模型進行實驗,后續會進一步檢驗24層TransformerEncoder結構的BERT模型的分類效果,可以期待,BERT模型的分類效果應該會隨著網絡結構的加深而進一步有所提高。
5. 結語
本文分析了BERT模型的內部結構與原理,并在文本分類任務上檢驗了模型效果。從實驗結果中可以看出,BERT模型的文本分類效果在許多中/英文數據集上都超過了現有方法,體現出了很強的泛用性。后續我們將繼續檢驗BERT模型在其它NLP任務中的效果,并研究提升模型訓練效率的方法,歡迎大家批評與指正!
Citations
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.
Vaswani A, Shazeer N, Parmar N, et al.Attention is all you need[C]//Advances in Neural Information ProcessingSystems. 2017: 5998-6008.
Zhang L, Chen C. Sentimentclassification with convolutional neural networks: an experimental study on alarge-scale Chinese conversation corpus[C]//Computational Intelligence andSecurity (CIS), 2016 12th International Conference on. IEEE, 2016: 165-169.
Mohammad S, Kiritchenko S, Sobhani P, etal. Semeval-2016 task 6: Detecting stance in tweets[C]//Proceedings of the 10thInternational Workshop on Semantic Evaluation (SemEval-2016). 2016: 31-41.
Zarrella G, Marsh A. MITRE atsemeval-2016 task 6: Transfer learning for stance detection[J]. arXiv preprintarXiv:1606.03784, 2016.
Wei W, Zhang X, Liu X, et al. pkudblabat semeval-2016 task 6: A specific convolutional neural network system foreffective stance detection[C]//Proceedings of the 10th International Workshopon Semantic Evaluation (SemEval-2016). 2016: 384-388.
Wei P, Mao W, Zeng D. A Target-GuidedNeural Memory Model for Stance Detection in Twitter[C]//2018 InternationalJoint Conference on Neural Networks (IJCNN). IEEE, 2018: 1-8.
Joulin A, Grave E, Bojanowski P, et al.Bag of tricks for efficient text classification[J]. arXiv preprintarXiv:1607.01759, 2016.
Conneau A, Schwenk H, Barrault L, et al.Very deep convolutional networks for natural language processing[J]. arXivpreprint, 2016.
Johnson R, Zhang T. Deep pyramidconvolutional neural networks for text categorization[C]//Proceedings of the55th Annual Meeting of the Association for Computational Linguistics (Volume 1:Long Papers). 2017, 1: 562-570.