徐錚浩
(上海大學(xué) 上海市 200437)
自然語言是人類發(fā)展過程中形成的一種信息交流的方式,包括口語及書面語,反映了人類的思維?,F(xiàn)在世界上所有的語種語言都屬于自然語言, 包括漢語、英語、法語等。 在人工只能領(lǐng)域,對自然語言的處理(NLP)在近年得到了較快的發(fā)展。
目前NLP 主要研究以下幾個領(lǐng)域,文本檢索、機(jī)器翻譯、文本分類/情感分析、信息抽取、序列標(biāo)注、文本摘要、問答系統(tǒng)、對話系統(tǒng)、知識圖譜、文本聚類,所涉及的基本技術(shù)有分詞系統(tǒng)、詞性標(biāo)注、句法分析、詞干提取、文本生成等。NLP 的核心思想,是要提取基本的文本表征轉(zhuǎn)化為數(shù)字形式并加以計算,而模擬的數(shù)字運算都是連續(xù)的,例如(X,Y)∈[0.1],即x 和y 的值可以在這個區(qū)間內(nèi)被找到,但自然語言的分布卻是離散,對于,是無法,到定義在任意兩個詞之間的某個情緒詞,同理,自然語言處理也不能像普通的圖像處理那樣,可以通過調(diào)節(jié)分辨率等數(shù)值來對圖像的顯示做調(diào)整。自然語言的處理,主要通過對轉(zhuǎn)化后的數(shù)字做概率和統(tǒng)計進(jìn)行運算,來預(yù)測或解析使用的詞句。
隨著NLP 的研究發(fā)展,目前已經(jīng)有很多算法來支持文本表征的抽取以及預(yù)測,比如one-hot 將各個詞編碼為一個向量,假設(shè)喜歡(001)、不喜歡(010)、很喜歡(011)等,使用這些向量來作為預(yù)測和訓(xùn)練的語料,運算結(jié)束后再解碼為具體的詞句,缺點由于中文詞庫十分龐大,特征的維度會非常高。tf-idf 是基于詞頻來統(tǒng)計文本表征的算法,可表示為詞頻(TF)表示詞條(關(guān)鍵字)在文本中出現(xiàn)的頻率。特點是字詞的重要性隨著它在文件中出現(xiàn)的次數(shù)成正比增加,但同時會隨著它在語料庫中出現(xiàn)的頻率成反比下降。但該算法往往會升高一些生僻詞的權(quán)值,對一些出現(xiàn)次數(shù)較少的人名、地名提取效果不佳。word2Vec,doc2vec,glove 和facebook 的fastext 通過給與一些任務(wù)構(gòu)建它的損失函數(shù),訓(xùn)練一個深度模型,模型的中間產(chǎn)物來得到文本表征,詞向量,文本向量和句向量。但這些并不符合現(xiàn)在標(biāo)準(zhǔn)的深度模型,屬于比較淺層的網(wǎng)絡(luò)模型。因為詞向量使用的分布式假設(shè)認(rèn)為相同的上下文語境的詞具有相似的含義,那對于“美國總統(tǒng)特朗普決定在墨西哥邊境修建隔離墻”和“聽說美國的那個川普總統(tǒng)要在墨西哥邊上修個墻”2 句話,由于存在很多相同的關(guān)鍵字很容易被判斷為相同語境,則特朗普和川普會被認(rèn)為是同一個人,但這么做的弊端在于,詞向量的每個詞只有一個固定表征,對于“同學(xué)你的川普挺帶感啊(四川普通話)”這類在上下文中含義不同時的處理會出現(xiàn)問題。
本文采取了和word2Vec 等算法不同的途徑,核心思想是通過不同的上下文對詞的共現(xiàn)度不同,可以得到不一樣的文本表征,作為可以結(jié)合上下文的動態(tài)表征,這么做的話,前后上下文的信息越充足,預(yù)測的詞句就越精確,越符合自然語言溝通的特性。
語言模型本質(zhì)上是一個概率模型,在給定前后上下文的基礎(chǔ)上,從概率上預(yù)測接下來的內(nèi)容,模型的目標(biāo)就是學(xué)會語言的“套路”,即文法,句式和詞法,所以上下文越詳細(xì),預(yù)測的目標(biāo)越明確。比如“人們彼此的交往離不開_”,空缺文字可以是“語言”,“文字”,或者“信息”,但不可能是“動物”,如果加上“語言是人與人之間的一種交流方式”的前提,那答案只能是“語言”。
圖1
圖2
傳統(tǒng)語言模型使用N 元語言模型,把訓(xùn)練的語料中連續(xù)的文本切成語言的碎片,用前面N 個詞預(yù)測第N+1 個詞,比如二元語言模型(參考圖1),但弊端是過于短程的依賴無法滿足語言的多樣性,而多元語言模型雖然可以支持長詞句依賴,卻也造成了統(tǒng)計結(jié)果變得稀疏,算力的依賴也大幅增加。
使用循環(huán)神經(jīng)網(wǎng)絡(luò)語言模型可以解決長程依賴的問題,在Bengio Yoshua 提出前向神經(jīng)網(wǎng)絡(luò)(Feed-forward Neural Network, FNN)語言模型之后,神經(jīng)網(wǎng)絡(luò)語言模型引起廣泛關(guān)注,而循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network, RNN)引入語言建模,使得語言模型的性能得到較大的提升。接著循環(huán)神經(jīng)網(wǎng)絡(luò)的改進(jìn)版本,長短期記憶(Long Short Term Memory, LSTM)和注意力機(jī)制(Attention),相繼地被用于進(jìn)一步改善語言建模的性能。
單向RNN 共享一個權(quán)重矩陣 A ,理論可以編碼無限長度,只往一個方向,弊端是根據(jù)有限的前置上下文預(yù)測后詞,難度大,準(zhǔn)確率低,而雙向RNN 能根據(jù)前后文預(yù)測之間的詞,準(zhǔn)確率更高,網(wǎng)絡(luò)深度更深,算力要求更高。
注意力機(jī)制的核心思想是拉平所有的詞,將每個詞與任意一個詞巧妙的建立了聯(lián)系,這在解釋翻譯時,通過每個詞的語義向量的加權(quán)和,識別出每個詞在整句中的重要性分布,和人類翻譯時的注意力習(xí)慣是保持一致的。如圖2 所示。
Bert 的全稱是Bidirectional Encoder Representation from Transformers,是Google 開源的一套模型,采用了雙向注意力機(jī)制,Bert 運用了更復(fù)雜的結(jié)構(gòu),更多的語料,mask lm 方式的編碼,以及給模型更多的上下文內(nèi)容來訓(xùn)練模型。
1.4.1 Bert 的結(jié)構(gòu)
Bert 運用了三種向量,詞向量(Token EmBeddings)并沒有進(jìn)行預(yù)訓(xùn)練,但會在訓(xùn)練過程中變化、學(xué)習(xí)。表征向量(Segment EmBeddings)表明輸入序列是前句還是后句,EA 和EB 分別代表左句子和右句子。位置向量(Position EmBeddings)和注意力機(jī)制不同,注意力機(jī)制中所有的詞一起輸入,沒有序列,位置向量則會有序列編碼,位置向量是可訓(xùn)練的,只跟位置有關(guān),和具體的詞無關(guān)。在模型的輸入中,會包含“cls”,“sep”二種特殊符號,cls 用于預(yù)測下一句話,當(dāng)為true 表示前后兩句話是連續(xù)有關(guān)系的,false 則相反。Sep 是前后文本的分隔符。
1.4.2 Masked LM
mask language mode,類似完形填空,雖然仍舊看得到所有位置信息,但需要預(yù)測的詞已被特殊符號代替,不影響雙向encoding。模型訓(xùn)練時隨機(jī)遮蓋語料中15%的token,然后將masked token 位置輸出的最終隱層向量送入softmax,來預(yù)測masked token。這樣輸入一個句子,每次只預(yù)測句子中大概15%的詞,模型訓(xùn)練速度會比較慢,但網(wǎng)絡(luò)模型非常深。本文按一定的比例在需要預(yù)測的詞位置上輸入原詞或者輸入某個隨機(jī)的詞。80%的概率用“[mask]”標(biāo)記來替換、10%的概率用隨機(jī)采樣的一個單詞來替換、10%的概率不做替換。
1.4.3 Transformer
Transformer 模型是2018年5月提出的,可以替代傳統(tǒng)RNN和CNN 的一種新的架構(gòu),用來實現(xiàn)機(jī)器翻譯。 無論是RNN 還是CNN,在處理NLP 任務(wù)時都有缺陷。CNN 是其先天的卷積操作不很適合序列化的文本,RNN 是其沒有并行化,很容易超出內(nèi)存限制。Transformer 結(jié)構(gòu)主要由編碼器,解碼器以及attention 組成,每個attention 都具有multi-head 的特征,將一個詞向量切分成h 個維度,求attention 相似度時每個h 維度計算。由于單詞映射在高維空間作為向量形式,每一維空間都可以學(xué)到不同的特征,相鄰空間所學(xué)結(jié)果更相似,相較于全體空間放到一起對應(yīng)更加合理。而每個詞位的詞都可以無視方向和距離,有機(jī)會直接和句子中的每個詞encoding,這是self-attention 的特征,最后,通過position encoding加入沒考慮過的位置信息。
實驗數(shù)據(jù)采用百度百科以及中文維基中1 億token 級向量作為訓(xùn)練語料,訓(xùn)練參數(shù)分別為batch_size=32,length=512。
本文選用了2 種任務(wù),文本對分類任務(wù)判斷前后文是否有關(guān)聯(lián),QA 任務(wù)向系統(tǒng)提問并獲得答案。
由于預(yù)訓(xùn)練的成本比較高,預(yù)訓(xùn)練階段的模型,本文采用Google 提供的現(xiàn)成模型,由于本文只處理中文,所以我們選用一個參數(shù)較小的BERT 預(yù)訓(xùn)練模型Chinese Simplified and Traditional, 12-layer, 768-hidden, 12-heads, 110M parameters。 用Fine-Tuning 方法來運行,在預(yù)訓(xùn)練的語言模型基礎(chǔ)上,加入少量的任務(wù)參數(shù)。直接運行tensorflow 開源代碼中run_classsifier。py 就可以進(jìn)行模型的訓(xùn)練,--task_name 可以配置我們的任務(wù)key,--output_dir可以配置模型的輸出路徑。
本文采用了迭代率、準(zhǔn)確率作為模型的測評指標(biāo)。其中準(zhǔn)確率是指在各項任務(wù)中最后的輸出結(jié)果是否符合預(yù)期,而迭代率則關(guān)注得到結(jié)果所付出的系統(tǒng)代價。
表1:實驗結(jié)果
由表1 可知,對于不同的迭代次數(shù),基于BERT 的微調(diào)分類模型與另外2 個模型相比,其準(zhǔn)確率要高幾個百分點,說明基于BERT 的微調(diào)分類模型效果最優(yōu)。雖然基于 BERT 的微調(diào)分類模型與 Transformer 分類模型的網(wǎng)絡(luò)結(jié)構(gòu)有相似的結(jié)構(gòu),但基于 BERT 的微調(diào)分類模型在預(yù)訓(xùn)練階段通過無監(jiān)督的方法學(xué)習(xí)具有上下文語義的詞嵌入特征,能更好的表達(dá)語義,在微調(diào)階段再用監(jiān)督的方法訓(xùn)練 BERT 模型和全連接層的參數(shù)。結(jié)果說明,基于 BERT 的模型具有結(jié)構(gòu)簡單,訓(xùn)練參數(shù)較少,訓(xùn)練速度快等特點,同時能夠高效分析和處理。
本文針對自然語言處理的問題,構(gòu)建了基于BERT 文本對分類任務(wù)以及問答系統(tǒng)的模型,證實了兩階段模型(預(yù)訓(xùn)練和微調(diào))較強(qiáng)的表征學(xué)習(xí)能力對自然語言處理的影響,結(jié)果顯示基于BERT 的模型在QA 任務(wù)上效果明顯,但在短文本分類上效果不如預(yù)期,在不按完整句子構(gòu)建span 時,預(yù)測是否連續(xù)的任務(wù)收斂很快,短句很多時ppl 收斂很慢。