胡曉輝 朱志祥
(1.西安郵電大學(xué)物聯(lián)網(wǎng)與兩化融合研究院 西安 710061)(2.陜西省信息化工程研究院 西安 710061)
作為自然語言處理中的一個重要研究方向,分詞的目的是將一個完整的句子切分成詞語級別。由于英語語句是由不同的單詞組成,故其分詞可以依據(jù)單詞間的分界符來劃分。而由于中文語句其基本組成單位是字,無法像英語那樣依據(jù)分界符來劃分,所以中文分詞相比于英語分詞更增加了一定的難度。由于分詞的基礎(chǔ)性,所以分詞的好壞對模型的提升起著重要的作用[1]。
20 世紀(jì)80 年代,便有學(xué)者進(jìn)行了中文分詞的研究,到目前為止,其基本分詞方法主要包含以下幾種。1)通過構(gòu)建一個語庫詞典,分詞時與字典進(jìn)行匹配[2];2)通過建立一系列的分詞規(guī)則,利用分詞規(guī)則進(jìn)行分詞[3~4];3)使用傳統(tǒng)機(jī)器學(xué)習(xí)算法進(jìn)行分詞,如最大熵模型[5],條件隨機(jī)場模型[6]等;4)引入深度學(xué)習(xí)模型進(jìn)行分詞。相比前三種的分詞方法,將深度學(xué)習(xí)應(yīng)用到中文分詞取得了重要的成就。
2011 年,Weston 將神經(jīng)網(wǎng)絡(luò)模型應(yīng)用到自然語言處理方向上[7]。Chen 等在 2013 提出一種感知器算法,將其應(yīng)用到中文分詞任務(wù)上,加速了訓(xùn)練時間[8]。在 Chen 等的基礎(chǔ)上,Ge 等提出一種MMTNN 模型,該模型在中文分詞任務(wù)上有較好的效果[9]。2015 年,Chen 先后將 LSTM 模型[10]和基于棧的GRU 模型[11]應(yīng)用到中文分詞上,這兩種模型都取得了不錯的效果。由于單向LSTM 只能利用上文的語句,不能充分利用下文的信息。所以,2015 年 ,Huang 將 BLSTM+CRF應(yīng)用到中文分詞上[12],相比與單向 LSTM 模型,該模型可以充分利用上下文信息。
1986 年,Rumelhart等提出的RNN(遞歸神經(jīng)網(wǎng)絡(luò))[13],其網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。
圖1 RNN網(wǎng)絡(luò)結(jié)構(gòu)示意圖
循環(huán)神經(jīng)網(wǎng)絡(luò)之所有具有保持信息的能力,是由于當(dāng)前輸出與上一時間點(diǎn)的輸出有關(guān)。將RNN按照時間展開,如下圖所示。
圖2 RNN網(wǎng)絡(luò)展開圖
其中xt代表t 時刻輸入的值x,U 表示輸入層到隱藏層的權(quán)重值,st代表t時刻的隱藏層的值,ot表示t 時刻輸出的值,V 表示隱藏層到輸出層的權(quán)重值,W 表示t-1 時刻隱藏層值輸入到t 時刻隱藏層的權(quán)重。由上圖看出,st的值不僅與當(dāng)前輸入xt有關(guān),而且與上一時刻的st-1有關(guān)。RNN的計算方法公式如下:
式(1)是輸出層的計算公式,輸出層是一個全連階層,式中g(shù) 代表激活函數(shù)。式(2)隱藏層的計算公式,它是一個循環(huán)層,f代表激活函數(shù)。
將式(2)不斷地帶入到式(1)中,可以發(fā)現(xiàn),t時刻的輸出不僅與當(dāng)前輸入有關(guān),且與t-2 時刻,t-1時刻……等有關(guān)。
RNN 解決了信息不能保留的難題,但當(dāng)中間層數(shù)增多時,會出現(xiàn)梯度消失的問題,從而造成長距離歷史信息不能夠被保留,只能利用部分信息的情況。
LSTM 網(wǎng)絡(luò)[14]的出現(xiàn)解決了 RNN 不能保留長距離歷史信息的情況。LSTM 網(wǎng)絡(luò)結(jié)構(gòu)如圖3 所示。
圖3 LSTM網(wǎng)絡(luò)結(jié)構(gòu)圖
LSTM 網(wǎng)絡(luò)由于加入了記憶單元和輸入門,遺忘門,輸出門等門限機(jī)制,實現(xiàn)了對長距離信息的有效利用。其具體計算公式如下:
其中i,f,o分別表示輸入門,遺忘門和輸出門,xt表示輸入,ht表示隱藏層輸出,W 表示連接兩層的權(quán)重,b表示偏置量,c標(biāo)記記憶單元的狀態(tài)。
LSTM 網(wǎng)絡(luò)由于解決了信息長距離依賴的問題,在序列問題取得了巨大的成功。它被廣泛地應(yīng)用到情感分類[15~16]、機(jī)器翻譯[17]、語義識別[18]以及自助問答[19]等問題上。但LSTM 它只能捕捉輸入上文語句的信息,對下文的信息不能充分利用。例如對于輸入語句“美麗的小明是一只小貓”,使用單向LSTM 的話便無法推斷出小明的類型。所以引入了雙向 LSTM。2005 年,Graves 使用 LSTM 進(jìn)行分類問題研究,取得了比單向LSTM 好的效果[20]。其結(jié)構(gòu)如圖4所示。
圖4 BLSTM網(wǎng)絡(luò)結(jié)構(gòu)圖
在計算機(jī)視覺獲得巨大成功的卷積神經(jīng)網(wǎng)絡(luò),由于其特有的卷積層與池化層,可以有效地提取到圖片的局部特征,實現(xiàn)圖片抽象化的處理。
卷積神經(jīng)網(wǎng)絡(luò)通常由輸入層,若干卷積層,若干池化層,全連接層,輸出層組成。一般池化層跟在卷積層后面,但也有卷積層或池化層單獨(dú)使用。卷積層由多個特征面組成,每個特正面由多個神經(jīng)元組成,它的每一個神經(jīng)元通過卷積核與上一層特征面的局部區(qū)域相連。卷積核是一個權(quán)重矩陣。卷積核通過卷積操作不斷提取輸入矩陣的各種特征。池化層對經(jīng)過卷積層的矩陣進(jìn)行局部池化操作,一般有最大值池化和均值池化。
在CRF的應(yīng)用領(lǐng)域,CRF可以使用字、詞、詞性等上下文特征,同時也可以利用外部訓(xùn)練出的字典等特征,即可以將有關(guān)的特征都融合進(jìn)文本特征中去。由于CRF 結(jié)合了HMM 和最大熵模型的特點(diǎn),同時又克服了HMM假設(shè)的限制及最大熵模型標(biāo)記偏執(zhí)問題,具有一定的優(yōu)越性。所以,本文最后模型標(biāo)志層采用線性鏈條件隨機(jī)場。
在中文分詞中應(yīng)用CRF,我們需要定義一些特征函數(shù),這些特征函數(shù)依據(jù)一些序列規(guī)則為每一個標(biāo)注序列進(jìn)行打分,打分只能為0 或者1,例如B 開始的單詞,其后邊必然要接一個E,不可能B 后邊還跟著一個B。然后將所有特征函數(shù)對某一序列的打分綜合起來,即為該序列的最終打分值。這些特征函數(shù)接受四個參數(shù)值,用來表示句子的S,用來表示句子s 中的第i 個字符的i,li用來表明要評分的序列給第i 個字符注明的詞性,li-1用來表示要評分的序列給第i-1個字符標(biāo)注的詞性。特征函數(shù)集對序列的評分函數(shù)如下:
上式中里面的求和是對序列中每一個位置的字符的特征值求和,外面的是對函數(shù)集中的所有函數(shù)對一個序列的打分求和。再對這個分?jǐn)?shù)指數(shù)化和標(biāo)準(zhǔn)化,即可以得到一個標(biāo)注序列的概率值如下式:
中文分詞是序列標(biāo)注問題中的一類,它是基于字符級的分類問題。即我們將每一個字符進(jìn)行分類的問題。本人將字符的類別劃分為{B,M,E,S,P,U}六種類別,其中 B 代表詞語的開始的字,M 代表詞語的的中間字,E 代表詞語的最后的一個字,S代表單個字成詞語,P代表填充的值,U代表未知屬性。對訓(xùn)練集的字符進(jìn)行編碼,通過設(shè)計的神經(jīng)網(wǎng)絡(luò),訓(xùn)練模型,使得模型可以對每一個字符進(jìn)行判別分類,從而達(dá)到分詞的效果。
在進(jìn)行文本向量化之前,先對原始文本數(shù)據(jù)進(jìn)行數(shù)據(jù)預(yù)處理,將其變成成一行一句話的形式,每個字符由空格隔開,再將每個字符轉(zhuǎn)換成其所對應(yīng)的標(biāo)志項。例如我是中國人轉(zhuǎn)換成SBES形式。
字符序列化,由于文本內(nèi)容不能被計算機(jī)識別,所以我們需要將訓(xùn)練集中每一個字符轉(zhuǎn)換成一個唯一標(biāo)示符數(shù)字,并取訓(xùn)練集中包含字符最多的句子的長度作為輸入序列的標(biāo)準(zhǔn)長度,長度不夠的序列自動補(bǔ)零。
在輸入模型訓(xùn)練之前,先對文本進(jìn)行向量化表示。對文本向量化的方法一般有兩種。
1)one-hot 表示。該方法在對字符向量化表示之前,先定義一個包含許多字符的字典,一個字符向量的表示成一個1,其余全為0 的向量,其中1 的位置,即為該字符在字典中出現(xiàn)的位置。這種方式編碼簡單,一定程度上能夠表示文本。但是這種方法存在兩個問題,一個是維度爆炸的問題,由于向量的長度由字典包含的字符個數(shù)決定,而字典包含的字符越多,文本向量的表示就越準(zhǔn)確,所以最后形成一個巨大的稀疏矩陣,這就需要消耗大量的計算資源。另一個是不能有效地表達(dá)語義。字符在字典中的位置是隨機(jī)的,所以無法通過字符的向量表示來確定它們的遠(yuǎn)近關(guān)系,不能深刻地表達(dá)出字符背后的語義。
2)分布式表示。針對one-hot表示存在的兩個缺點(diǎn),學(xué)者們提出了分布式表示方法,又稱字嵌入(embedding)。該方法通過將字映射到一個低維空間,將每一個字轉(zhuǎn)換成一個低維向量。同時,由于該表示方法在訓(xùn)練時后考慮字前后的字符,所以映射的向量可以通過計算向量間的距離來表達(dá)語義的遠(yuǎn)近。
本文分布式表示方法采用谷歌于2013 年開源的word2vec 模型,word2vec 將詞向量映射到一個低維空間,訓(xùn)練出的詞向量能夠計算向量間的距離來表示語義關(guān)系的遠(yuǎn)近。word2vec 包含CBOW 和Skip-gram 兩種模型,Skip-gram 模型通過當(dāng)前詞語預(yù)測該詞語前后的c 個詞語,而CBOW 通過文本的前后詞語預(yù)測當(dāng)前詞語。兩種模型訓(xùn)練過程類似,本文將僅介紹CBOW 模型的訓(xùn)練過程。它的訓(xùn)練過程包含一個三層神經(jīng)網(wǎng)絡(luò),即輸入層,隱藏層,輸出層。輸入層是當(dāng)前詞語W 的前后c 個詞語的詞向量,輸出為當(dāng)前詞語w 的詞向量,隱藏層即為該詞語的的分布式向量表示。
由于每句話中的詞語數(shù)目不一樣,我們將數(shù)據(jù)輸入模型之前,需要將序列化的句子填充,使每句話都是等數(shù)目的詞語,一般選用0 來填充句子序列。
本文模型由雙向LSTM、CNN 以及CRF 組成,雙向LSTM 用來提取輸入文本序列的前后信息,CNN用來提取文本的局部特征信息,CRF進(jìn)行最后的序列標(biāo)注。
雙向LSTM 由兩層網(wǎng)絡(luò)組成,一層是從開始到結(jié)尾的LSTM 層,一層是從結(jié)尾到開始的LSTM層。將填充完的序列數(shù)據(jù)通過嵌入層,得到每一個詞語的分布式向量。將分布式向量由前向后輸入LSTM 層,再由后向前輸入LSTM 層,得到一個與分布式向量等維度的向量。
CNN層由一個卷積層組成,卷積核的高度由分布式向量的長度決定,卷積核的長度決定每次提取當(dāng)前詞語前后相關(guān)詞語的個數(shù)。將經(jīng)過嵌入層輸出的分布式向量輸入CNN 層,得到一個長度為最大詞語個數(shù),寬度為卷積核個數(shù)的向量。
CRF層主要進(jìn)行最后的序列標(biāo)注,將輸入的數(shù)據(jù)標(biāo)注成B,M,E,S 的向量形式形式。在本文模型中,將分布式向量分別通過雙向LSTM 和CNN,得到兩種特征向量,將這兩種向量進(jìn)行合并,再經(jīng)過全連接層,得到一個長度為最大詞語數(shù),寬度為類別數(shù)目的向量,輸入到CRF 層,進(jìn)行最后的序列標(biāo)注,輸出最后類別的向量表示。
本次采用了準(zhǔn)確率、召回率和F1 三個綜合指標(biāo)來評價本次模型的性能優(yōu)劣。其中準(zhǔn)確率是指某類別下預(yù)測正確的的樣本數(shù)目與預(yù)測結(jié)果該類別總的數(shù)據(jù)樣本數(shù)目的比值,本文用P 表示,查全率是指某類別下預(yù)測正確的樣本數(shù)目與該類別下真實的樣本數(shù)目的比值,本文用R 表示。用A 表示分類正確的樣本數(shù)據(jù),B 表示錯誤的劃分到該類別的樣本數(shù),C 表示屬于某類,但沒有劃分到該類的樣本數(shù)。則準(zhǔn)確率與查準(zhǔn)率的公式計算如下:
從式(10)、(11)可以看出,這兩個指標(biāo)是矛盾的指標(biāo),即當(dāng)準(zhǔn)確率高的時候,查準(zhǔn)率往往偏低,而查準(zhǔn)率高的時候,準(zhǔn)確率又變得很低,所以不能完全的表現(xiàn)出算法的優(yōu)劣。Fθ指標(biāo)可以很好地解決上述問題。它的定義如下公式所示:
其中θ必要大于0,反應(yīng)了R 與P 的相對重要性。當(dāng)θ比 1 大時,R 比 P 重要,當(dāng)θ比 1 小時,R 沒有P 重要。本次我們實驗選取θ=1,對應(yīng)的指數(shù)F1表示為
本實驗采用曙光A620r-G 服務(wù)器,內(nèi)存為64G,CPU 型號:AMD Opteron 6128,操作系統(tǒng)為Ubuntu14.04.64bi,語言是采用 python3.6 版本,使用了gensim,re等包,深度學(xué)習(xí)框架使用的keras。
本次實驗通過比較不同字向量長度,最終選擇字向量長度為128。各種字向量性能指標(biāo)如表1。
表1 不同字向量的長度性能對比
字向量的長短對模型的性能有直接的影響,過長的向量增加了內(nèi)存消耗空間,過短的詞向量又不能完全表達(dá)語義。谷歌實驗室的研究表名,字向量的長度設(shè)置在50~300 之間都是合理的,本文通過比較不同字向量長度,確定本文字向量長度為128。
本次實驗Dropout 設(shè)置為20%。Dropout 是隨機(jī)刪除一些節(jié)點(diǎn),有利于減少模型過擬合,而設(shè)置過高又容易導(dǎo)致欠擬合,本文設(shè)置為20%。
本次實驗分別在三個數(shù)據(jù)集上進(jìn)行模型訓(xùn)練,并與其他的幾種模型進(jìn)行比較,發(fā)現(xiàn)我們提出的模型相比以往的模型有一定的提高,各個實驗?zāi)P偷慕Y(jié)果如表2所示。
表2 不同模型的指標(biāo)對比
由上表可以看出,由于本文應(yīng)用了CNN 到序列標(biāo)注問題上,加強(qiáng)了模型提取局部單詞的能力。在中文分詞上,相比于其他模型,分詞效果有一定的提高。
針對自然語言處理中的中文分詞任務(wù),本文提出了一種基于BLSTM+CNN+CRF 的模型,該模型兼具了BLSTM 可以利用長遠(yuǎn)距離信息和上下文信息的優(yōu)點(diǎn)和CNN 提取局部特征的的特點(diǎn),在中文分詞任務(wù)上有較好的效果。由于實體識別,中文分詞都屬于序列標(biāo)注問題,具有一定的相似性,因此該模型也可以應(yīng)用到實體識別等一系列的序列標(biāo)注問題上。
盡管本文提出的模型在中文分詞上出現(xiàn)了較好的效果,但本文依賴人民日報預(yù)料訓(xùn)練出的字向量過于簡單,若想取得更好的效果,應(yīng)該在更大規(guī)模的數(shù)據(jù)集上訓(xùn)練字向量,從而得到更好的效果。