◆胡春濤 秦錦康 陳靜梅 張 亮
(1.江蘇警官學(xué)院 江蘇 210031;2.中國(guó)人民公安大學(xué) 北京 100038)
谷歌團(tuán)隊(duì)于2018年底發(fā)布了基于雙向Transformer大規(guī)模預(yù)訓(xùn)練語(yǔ)言模型(Bidirectional Encoder Representation from Transformers,BERT),并憑借基于預(yù)訓(xùn)練的fine-turning模型刷新了11項(xiàng) NLP任務(wù)的當(dāng)前最優(yōu)性能記錄。隨后,谷歌團(tuán)隊(duì)公開了該模型的官方代碼和預(yù)訓(xùn)練模型。目前,筆者通過查閱大量資料發(fā)現(xiàn)國(guó)內(nèi)對(duì)于BERT模型應(yīng)用于中文自然語(yǔ)言處理的研究還處于初步階段,而輿情數(shù)據(jù)的分類更是該領(lǐng)域的研究熱點(diǎn),引起了國(guó)內(nèi)研究熱潮。在研究早期,朱等[1]提出采用向量空間模型,王等[2]提出了基于詞向量的文本字典分類模型,張等[3]提出使用計(jì)算文本相似度的方法進(jìn)行文本分離。上述方法多基于統(tǒng)計(jì)規(guī)律,不能根據(jù)特定數(shù)據(jù)集進(jìn)行個(gè)性化的調(diào)整,不能滿足當(dāng)前對(duì)輿情文本分類準(zhǔn)確率的要求。隨著神經(jīng)網(wǎng)絡(luò)的興起,涌現(xiàn)出一批利用神經(jīng)網(wǎng)絡(luò)處理文本分類任務(wù)的研究。Kim等[4]將預(yù)訓(xùn)練的詞向量作為輸入,利用卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)實(shí)現(xiàn)了文本情感分類。Kalchbrenner等[5]提出一種動(dòng)態(tài)卷積神經(jīng)網(wǎng)絡(luò)(Dynamic Convolution Neural Network,DCNN)模型用于句子特征學(xué)習(xí),并取得了較好的效果。孫[6]在門限循環(huán)單元(Gated Recurrent Unit,GRU)的基礎(chǔ)上連接Attention注意力層,設(shè)計(jì)了GRU-Attention分類模型,并證明了其分類性能相比支持向量機(jī)(Support Vector Machine,SVM)和單獨(dú)的GRU網(wǎng)絡(luò)有了一定提升。但此類神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)簡(jiǎn)單、特征信息的提取和編碼能力弱,在輿情信息這類語(yǔ)意復(fù)雜,包含上下文語(yǔ)境的文本分類任務(wù)中難以取得理想的效果。隨著研究的加深,出現(xiàn)了更多更復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)。劉月等[7]提出利用CNN提取短語(yǔ)序列的特征表示,利用N-LSTM(NestedLong Short-Term Memory)學(xué)習(xí)文本的特征表示,引入注意力機(jī)制,突出關(guān)鍵短語(yǔ)以優(yōu)化特征提取,使模型不但能捕捉句子局部特征及上下文語(yǔ)義信息,還能突出輸入文本各部分對(duì)文本類別的影響程度,在3個(gè)公開數(shù)據(jù)集上性能比基線模型有了明顯提高。劉心惠[8]等提出使用多頭注意力機(jī)制(Multi-head Attention),結(jié)合膠囊網(wǎng)絡(luò)(CapsuleNet)與雙向長(zhǎng)短期記憶網(wǎng)絡(luò)(BiLSTM)方法,在Reuters-21578和AAPD兩個(gè)數(shù)據(jù)集上F1值分別達(dá)到了89.82%和67.48%。
縱觀當(dāng)前文本分類任務(wù)的研究,尚處于為某些特定的任務(wù)單獨(dú)設(shè)計(jì)模型的階段。筆者考慮,如果能使用出一種較為科學(xué)、完善的模型,當(dāng)面臨某項(xiàng)任務(wù)時(shí)能夠?qū)ΜF(xiàn)有模型進(jìn)行微調(diào),在不影響模型性能的前提下,快速適應(yīng)任務(wù)的需要,便可節(jié)省大量的研究資源,減少重復(fù)勞動(dòng)。因此本文選擇對(duì)BERT模型進(jìn)行應(yīng)用方向的研究,分析其設(shè)計(jì)原理,并通過對(duì)比實(shí)驗(yàn)探究其應(yīng)用于輿情文本分類任務(wù)上的訓(xùn)練效率和分類性能。
本文模型在預(yù)訓(xùn)練的BERT模型基礎(chǔ)上進(jìn)行了結(jié)構(gòu)的微調(diào),使其能更好應(yīng)用于文本分類任務(wù)。因此首先要對(duì)BERT的結(jié)構(gòu)和特點(diǎn)有一個(gè)較為全面的了解。從技術(shù)發(fā)展的角度來看,該模型并未使用某種全新的深度網(wǎng)絡(luò)或提出某種全新的算法,而是將近年來各種深度學(xué)習(xí)、自然語(yǔ)言處理技術(shù)進(jìn)行完善和集成。下面將對(duì)BERT的整體結(jié)構(gòu)及各個(gè)模塊分別進(jìn)行介紹。
圖1顯示,Devlin J等[9]設(shè)計(jì)的BERT模型主要分為兩大部分,主要分為輸入層和雙向Transformer編碼層。下面首先介紹模型主要部分——Transformer編碼器。

圖1 BERT模型基本結(jié)構(gòu)示意圖
在自然語(yǔ)言處理中,詞嵌入幾乎是所有研究的基礎(chǔ)。以2013年 Tomá? Mikolov 等[10]提出的 Word2vec(Word to Vector)為例,主要通過連續(xù)詞袋模型(Continuous Bag-Of-Words Model,CBOW)和連續(xù)Skip-gram模型(Continuous Skip-gram Model,Skip-gram)進(jìn)行訓(xùn)練。以CBOW算法為例,核心思想是從一個(gè)句子里把一個(gè)詞掩蓋,訓(xùn)練神經(jīng)網(wǎng)絡(luò)去預(yù)測(cè)被掩蓋的詞。當(dāng)神經(jīng)網(wǎng)絡(luò)訓(xùn)練達(dá)到設(shè)定的輪數(shù)或能夠在大量語(yǔ)料的訓(xùn)練后成功預(yù)測(cè),就能通過神經(jīng)網(wǎng)絡(luò)計(jì)算出該詞的詞向量表征。原理類似于人們閱讀文本時(shí)發(fā)現(xiàn)文章某個(gè)詞不認(rèn)識(shí),但可以通過上下文的語(yǔ)境含義推測(cè)出該詞的大致意思。隨著自然語(yǔ)言處理任務(wù)的復(fù)雜,研究者發(fā)現(xiàn),Word2vec不能區(qū)別不同語(yǔ)境中同一個(gè)詞語(yǔ)的不同語(yǔ)義。例如多義字“還”,它既有“歸還”、“回報(bào)”的意思,也有表示“仍舊”等等多個(gè)意思,而Word2vec只能返回它混合了多種語(yǔ)義的一個(gè)詞向量。因此研究者提出了新的表示詞嵌入方法——來自語(yǔ)言模型的詞嵌入(Embedding from Language Models,ELMO)[11]。如圖2所示,該模型的創(chuàng)新在于,在利用預(yù)訓(xùn)練的詞嵌入模型的基礎(chǔ)上,利用雙向長(zhǎng)短期記憶網(wǎng)絡(luò)(Long Short-Term Memory,LSTM)編碼單詞的上下文,調(diào)整后單詞的Embedding表示動(dòng)態(tài)的具備了上下文的語(yǔ)義。
圖2中,句子中每個(gè)單詞經(jīng)過三層編碼:嵌入層為單詞原始的詞向量表示,之后是第一層正向LSTM中對(duì)應(yīng)的詞匯編碼,這層主要蘊(yùn)含句法信息;最后是第二層反向LSTM中對(duì)應(yīng)詞匯編碼,這層主要蘊(yùn)含語(yǔ)義信息。之后給予這三層各一個(gè)權(quán)重,將編碼結(jié)果乘以各自權(quán)重累加求和,便得到ELMO的輸出。
BERT緊隨ELMO推出,圖1顯示,該模型在總體結(jié)構(gòu)上和ELMO并無二致。根本的改變?cè)谟贐ERT使用Transformer編碼器代替了原先的LSTM。如圖3所示為Ashish Vaswani等[12]設(shè)計(jì)的Transformer外部結(jié)構(gòu)。它由6個(gè)編碼器(Encoder)和6個(gè)解碼器(Decoder)堆疊而成。它接收序列數(shù)據(jù),同樣輸出處理后的序列數(shù)據(jù)。經(jīng)過6個(gè)編碼器處理后的數(shù)據(jù)會(huì)分別輸入6個(gè)解碼器進(jìn)行解碼。

圖2 ELMO模型基本結(jié)構(gòu)示意圖

圖3 Transformer的總體結(jié)構(gòu)
每個(gè)Encoder的內(nèi)部構(gòu)造完全相同,但參數(shù)不會(huì)共享。主要由兩部分組成:自注意力層(Self-attention)和前饋神經(jīng)網(wǎng)絡(luò)層(Feed Forward Neural Network)。
同樣,每個(gè)Decoder也具有類似的內(nèi)部結(jié)構(gòu),比Encoder多一個(gè)“編碼—解碼注意力層”,目的是幫助Decoder重點(diǎn)關(guān)注句子中某個(gè)關(guān)鍵詞語(yǔ),而忽略其他相關(guān)程度較低的詞。它們的內(nèi)部結(jié)構(gòu)如圖4所示。

圖4 Encoder-Decoder內(nèi)部結(jié)構(gòu)
下面介紹Transformer的運(yùn)行流程。輸入句為“這家餐廳我們經(jīng)常來,它的牛肉面、小籠包和肥牛都特別好吃”。原句經(jīng)過前期的處理,輸入的是句子中的單個(gè)字符,但如何讓模型知道句中的“它”是指代的“店”而不是句中的其他字符呢?
當(dāng)模型在處理詞語(yǔ)時(shí),Self-attention層會(huì)逐一計(jì)算該詞與句中其他詞的關(guān)照程度,再將結(jié)果通過softmax函數(shù)進(jìn)行歸一化,得到相關(guān)性的概率分布。為了清楚解釋該過程,需引入相關(guān)公式加以說明。假設(shè)模型的輸入為X:

模型的輸出為:

對(duì)每一個(gè)輸入x做線性映射,乘以WQ權(quán)重矩陣得到每個(gè)輸入x的Query向量,同樣分別乘以WK,WV得到每個(gè)輸入x的Key向量和Value向量,這些向量用于之后計(jì)算句中詞語(yǔ)之間的相互關(guān)聯(lián)程度。

例句中字符“它”、“的”經(jīng)過詞嵌入得到向量x1,x2,將輸入X乘以對(duì)應(yīng)的權(quán)重矩陣WQ、WK、WV得到Q、K、V向量。將其中q1和k1、k2、……、kT對(duì)應(yīng)相乘得到字符關(guān)照程度的得分Score,將Score除以8(即Key向量維度的開方,目的是保證訓(xùn)練過程中具有更穩(wěn)定的梯度)得到新的關(guān)照度表示,再對(duì)結(jié)果使用softmax進(jìn)行歸一化運(yùn)算,目的是保證對(duì)重要字符關(guān)照度不變的情況下降低對(duì)不重要字符的關(guān)注。再將softmax產(chǎn)生的計(jì)算結(jié)果乘以Value向量,將關(guān)照度和語(yǔ)義信息結(jié)合,得出“它”和句中其他字符關(guān)照程度向量z1。計(jì)算過程如圖5所示。

圖5 Self-Attention機(jī)制運(yùn)行流程
上述過程可以用公式6統(tǒng)一表示:

其中,dk表示Key向量維度。根據(jù)例句得到的“它”字符在全句中的注意力關(guān)注程度如圖6所示。
而BERT模型采用了多頭注意力機(jī)制(Multi-headed Attention),相較于Self-attention,它為attention層提供了多個(gè)表示子空間(Representation Subspaces),拓展了模型關(guān)注不同位置的能力。每個(gè)注意力頭(header)都分配一個(gè)Query、Key和Value權(quán)重矩陣(Transformer使用8個(gè)注意力頭)。這些權(quán)重矩陣在訓(xùn)練開始時(shí)隨機(jī)生成,通過訓(xùn)練將來自較低層的Encoder/Decoder的矢量投影到不同的表示子空間。
對(duì)于每個(gè)注意力頭,通過公式6,計(jì)算得到相應(yīng)的關(guān)照程度向量z0,z1……z7,將8個(gè)向量拼接之后乘以矩陣W0得到最終的注意力矩陣Z。對(duì)于字符“它”,圖7顯示了完整的計(jì)算過程。

圖6 字符“它”在句中的注意力關(guān)注度

圖7 Multi-headedAttention計(jì)算過程示意圖
該計(jì)算過程可以用公式7表示:

BERT所用的Transformer基于傳統(tǒng)模型進(jìn)行了改進(jìn),即添加了殘差連接。它將每個(gè)Encoder/Decoder的輸入同多頭注意力結(jié)果或前饋神經(jīng)網(wǎng)絡(luò)運(yùn)算結(jié)果進(jìn)行拼接,目的是為了解決隨著網(wǎng)絡(luò)的加深而產(chǎn)生的梯度消散問題。之后,對(duì)拼接結(jié)果使用歸一化函數(shù),對(duì)Z進(jìn)行更新,目的是將注意力層的輸出結(jié)果限制在一定范圍內(nèi)。該計(jì)算過程可用公式8表示:

之后將歸一化結(jié)果輸入前饋神經(jīng)網(wǎng)絡(luò),使用修正線性單元(Rectified linear unit,ReLU)作為激活函數(shù)。運(yùn)算過程如公式9所示:

其中x表示網(wǎng)絡(luò)的輸入,W1,b1,W2,b2均為網(wǎng)絡(luò)待訓(xùn)練參數(shù)。圖8為BERT的Encoder內(nèi)部結(jié)構(gòu)圖。
在Transformer之前,每個(gè)字符需經(jīng)詞嵌入層的處理,編碼成提供給Encoder的詞向量。Encoder中只用了多頭注意力機(jī)制和前饋神經(jīng)網(wǎng)絡(luò),不同于循環(huán)神經(jīng)網(wǎng)絡(luò)能夠?qū)W習(xí)到字符的位置信息。因此,除了傳統(tǒng)通過詞向量編碼之外,還需編碼字符的位置信息。圖9中,Encoder的輸入為字符的原始詞向量和位置編碼向量信息(Positional Encoding)的拼接結(jié)果。
Positional Encoding使用正弦函數(shù)和余弦函數(shù)來構(gòu)造每個(gè)位置的值,計(jì)算方法如下所示:


圖8 BERT所用Encoder內(nèi)部結(jié)構(gòu)圖

圖9 BERT編碼層示意圖
本文在BERT輸出結(jié)果上添加了全連接網(wǎng)絡(luò)并使用softmax作為分類器。訓(xùn)練數(shù)據(jù)為微博輿情數(shù)據(jù),數(shù)據(jù)集總共分為14大類,包括民生、文化、娛樂、體育、財(cái)經(jīng)、房產(chǎn)、汽車、教育、科技、軍事、旅游、國(guó)際、農(nóng)業(yè)、電競(jìng)。各類別的數(shù)據(jù)分布如表1所示。

表1 各類別樣本數(shù)據(jù)統(tǒng)計(jì)情況
模型的Fine-turning在Tesla K80 GPU進(jìn)行訓(xùn)練,訓(xùn)練一輪時(shí)間約為7分鐘。表2為模型訓(xùn)練記錄。

表2 BERT的Fine-turning訓(xùn)練記錄
同時(shí),筆者還將該BERT與楊等[13]提出的文本分類模型做對(duì)比,使用雙向LSTM連接CNN,設(shè)置CNN的一維卷積核長(zhǎng)度為3,卷積核個(gè)數(shù)為64,用最大值池化層連接softmax歸一化函數(shù)作為分類器。模型訓(xùn)練記錄如表3所示。

表3 雙向LSTM 連接CNN的模型訓(xùn)練記錄
對(duì)比顯示,使用BERT的模型在精確率和召回率兩方面均優(yōu)于使用雙向LSTM連接CNN的模型,筆者分析有以下兩點(diǎn)主要原因。
(1)由于Transformer引入了多頭注意力機(jī)制,對(duì)于某一個(gè)詞,能從不同角度關(guān)注到句中相對(duì)應(yīng)的詞,因此它對(duì)于句子長(zhǎng)距離特征捕獲能力要略微優(yōu)于循環(huán)神經(jīng)網(wǎng)絡(luò)。
(2)在LSTM連接CNN模型中,RNN主要用于編碼字詞和上下文關(guān)系,CNN主要用于語(yǔ)言特征的抽取,受CNN卷積核長(zhǎng)度及卷積核個(gè)數(shù)的限制,對(duì)語(yǔ)意特征的提取能力不如Transformer的多頭注意力機(jī)制豐富和完整。另外,由于CNN最初用于圖像特征的提取,圖像是像素點(diǎn)的排列,CNN只需檢測(cè)出多個(gè)像素點(diǎn)具有的某種整體結(jié)構(gòu)特征,池化操作并不會(huì)根本改變對(duì)圖像內(nèi)容的理解。而對(duì)于文本,一個(gè)細(xì)節(jié)的差別可能導(dǎo)致整個(gè)句意的改變。因此Transformer的Encoder-Decoder結(jié)構(gòu)捕捉到語(yǔ)言特征會(huì)相對(duì)完整和多樣。
本文通過介紹詞嵌入技術(shù)的發(fā)展歷史,從而較為全面地介紹了BERT模型的整體結(jié)構(gòu)和運(yùn)行流程。最后將其與傳統(tǒng)模型做對(duì)比,進(jìn)而分析它在性能上優(yōu)于傳統(tǒng)分類模型的原因。同時(shí),筆者發(fā)現(xiàn),在輿情文本分類任務(wù)上,由于本文使用中文語(yǔ)料,BERT只接受以字作為embedding的輸入,相較于以詞語(yǔ)作為embedding丟失了較多語(yǔ)義信息。因此后續(xù)將嘗試借鑒BERT的Transformer構(gòu)造思想,訓(xùn)練出能夠?qū)υ~語(yǔ)進(jìn)行動(dòng)態(tài)編碼的模型,以求獲得更好的語(yǔ)義表達(dá)和特征抽取能力。