劉京麥野,劉 新,郭炳元,孫道秋
(湘潭大學 信息工程學院,湘潭 411105)
近年來隨著科技信息的發(fā)展,自然語言處理逐漸成為計算機科學和人工智能交叉領域中的一個研究熱點[1].其中語義完整性分析的主要工作就是判斷一句話是否語義完整,它是長文本句法分析、語義分析、機器翻譯等自然語言處理任務的前期工作.在主觀題的自動評分中,特別是長文本答案的主觀題評分,就需要將學生答案和標準答案進行分句處理,即分割成多個語義完整的句子,再進行句法、語義的相似度匹配.對中文進行語義完整性分析的原因在于漢語中標點的使用沒有嚴格的語法限制,尤其逗號的使用較為隨意,逗號既可用于語義完整片段的分隔,也可在語義不完整時起停頓作用.因此,利用最新的自然語言處理技術對中文句子進行語義完整性分析具有重要意義.
目前對于語義完整性還沒有公認的統(tǒng)一定義.根據(jù)實際工作的需要,我們認為一條語句如果能夠完整的表達出意思,不再需要借助其他的語句,且不產(chǎn)生歧義,就稱它是語義完整的.語義完整性分析,判別語義完整性,有助于提高問答系統(tǒng),機器翻譯以及主觀題自動評分等應用系統(tǒng)的準確性.
近年來深度神經(jīng)網(wǎng)絡發(fā)展迅速,被廣泛應用于語音識別、計算機視覺和自然語言處理等鄰域中.目前,將深度學習技術應用于解決自然語言處理(NLP)任務是一個研究熱點.其中循環(huán)神經(jīng)網(wǎng)絡(Recurrent Neural Network,RNN)的特點是可以將某個時刻隱藏層的輸出作為輸入用于計算下一時刻隱藏層的輸出,所以適合來解決一些時間序列的問題.而且不同于以往模型使用的固定序列長度,它能夠處理任意長度的序列.
文獻[2]通過使用循環(huán)神經(jīng)網(wǎng)絡來訓練語言模型,提出了詞向量Word2Vec,隨后對詞的分布式特征的研究不斷興起.文獻[3]使用循環(huán)神經(jīng)網(wǎng)絡來生成文本,提出了一種新的RNN 結(jié)構(gòu)MRNN,提高文本生成能力.文獻[4]和文獻[5]分別將循環(huán)神經(jīng)網(wǎng)絡和深度學習用在情感分析領域,并取得了不錯的效果.文獻[6]在序列標注的前提下利用雙向循環(huán)神經(jīng)網(wǎng)絡模型進行中文分詞,通過增加詞的上下文信息能夠有效地解決梯度爆炸問題,并取得了相對較好的分詞效果.文獻[7]中提出了一種通過抽取句法、詞匯、長度等特征分析逗號是否是子句邊界的方法,然而,在本文語義完整性分析研究中,若使用傳統(tǒng)方法判斷句子是否是語義完整,一方面需要對句子進行句法、語法分析,另一方面需要從分析結(jié)果中抽取合適的特征并且分析特征與結(jié)果的因果關系,當問題較復雜時,這種方式基本不可行.文獻[8]提出了一種基于循環(huán)神經(jīng)網(wǎng)絡的古文自動斷句方法,該方法采用基于GRU 的雙向循環(huán)神經(jīng)網(wǎng)絡對古文進行斷句.在大規(guī)模古籍語料上的實驗結(jié)果表明,該方法能夠取得比傳統(tǒng)方法更高的斷句F1 值,但是該方法是針對于單個字進行標注用于斷句,并不適合本文以詞語為單位進行標注的語義完整句切分.
本文試圖將循環(huán)神經(jīng)網(wǎng)絡應用于中文句子語義完整性分析,將句子語義完整性分析轉(zhuǎn)換為典型的序列標注問題來處理.
本文提出的模型采用基于雙層的Bi-LSTM 循環(huán)神經(jīng)網(wǎng)絡,結(jié)構(gòu)如圖1所示.首先,模型的輸入為原始文本經(jīng)過預處理后的詞序列,將其映射為相應的詞向量并標注,經(jīng)過循環(huán)滑動窗口和欠采樣處理后作為Bi-LSTM 的輸入.然后通過雙層Bi-LSTM 更加準確地學習特征,最終通過分類器輸出相應標簽概率.
圖1 基于循環(huán)神經(jīng)網(wǎng)絡的語義完整性分析方法架構(gòu)
漢語詞匯是語言中能夠獨立運用的最小語言單元,是語言中的原子結(jié)構(gòu),所以對中文進行分詞是自然語言處理的基礎.分詞的準確率將會直接影響后續(xù)詞性標注,句法分析,詞向量等相關工作的質(zhì)量.本文采用結(jié)巴分詞的精確模式進行分詞處理.
為了讓計算機理解人類的自然語言,把詞表示為計算機適合處理的方式,這樣詞向量的概念就應運而生了.通常,詞向量有兩種表示方式:one-hot representation和distribution representation.
One-hot representation 是一種離散表示,它把每個詞表示為一個長向量,向量中只有一個維度的值為1,其余維度為0,這個維度就代表了當前的詞.例如:“物質(zhì)”表示為[0,0,0,1,0,0,0,0,0,···,0,0,0],這種表示方式簡單容易實現(xiàn),但缺點就是編碼太過于稀疏,將會導致維度非常高,同時每個詞本身的信息量太小,無法展示詞與詞之間的關系.
Distribution representation 是將詞轉(zhuǎn)化成一種分布式表示,是一種既能表示詞本身又可以考慮語義距離的詞向量表示方法.它是一種低維實數(shù)向量,例如:“物質(zhì)”表示為[0.792,-0.177,-0.107,···,0.109,-0.542].這種分布式表示的優(yōu)點在于它不但解決了維數(shù)災難問題,并且挖掘了詞與詞之間的關聯(lián)屬性,每一維度都有特定的含義,包含了更多的信息,從而提高了向量語義上的準確度.因此,近幾年流行的語言模型Word2Vec 就是采用這種方法表示詞向量的.
近幾年循環(huán)神經(jīng)網(wǎng)絡(Recurrent Neural Network,RNN)廣泛應用于自然語言處理,它引入了基于時間(狀態(tài))的循環(huán)機制,RNN 神經(jīng)單元在某一時刻的輸出依賴于當前的輸入和以往時刻的信息,同時這一時刻隱藏層的輸出也可以作為下一個神經(jīng)單元的輸入,這樣就能夠保持數(shù)據(jù)的依賴關系,有效利用信息.
經(jīng)過大量實驗證明,當相關信息和當前預測位置之間的間隔變得非常大時,普通循環(huán)神經(jīng)網(wǎng)絡就很難學習長期依賴,原因在于梯度消失和梯度爆炸問題,所以長短時間記憶(Long Short-Term Memory,LSTM)網(wǎng)絡這種特定類型的循環(huán)神經(jīng)網(wǎng)絡就是專門設計出來解決這個問題的.LSTM 在以往的循環(huán)神經(jīng)元結(jié)構(gòu)基礎上進行了改進,它有四個不同的神經(jīng)網(wǎng)絡層進行信息的交互.LSTM 單個神經(jīng)元的網(wǎng)絡結(jié)構(gòu)如圖2所示.
圖2 LSTM 神經(jīng)元細胞
LSTM 通過“門”的結(jié)構(gòu)來控制細胞狀態(tài),門可以實現(xiàn)讓信息選擇性的通過,它主要是包括一個非線性激活函數(shù)Sigmoid和一個點乘運算Pointwise 操作來實現(xiàn).這樣的門有三個,分別是輸入門、遺忘門和輸出門,LSTM 通過這三個門來實現(xiàn)信息的存儲和更新.其中Sigmoid 函數(shù)輸出的是一個0 到1 之間的實數(shù),表示讓對應信息通過的權重,0 表示“不讓任何信息通過”,1 表示“讓所有信息通過”.它通過公式(1)~(6)進行計算,其中xt表示t時刻的輸入,ft表示遺忘門的輸出、it表示輸入門的輸出、ot表示輸出門的輸出、St為t時刻的狀態(tài)、ht為t時刻的輸出.
Bi-LSTM 與LSTM 本質(zhì)上是一致,只不過Bi-LSTM 是在標準LSTM 上加了一個反向的LSTM,這樣某一時刻的輸出就能由它前面和后面的若干輸入共同決定,充分利用句子的上下文信息,相比標準LSTM信息更加全面.
本文采用改進的雙層Bi-LSTM 來進行訓練[9],其中每個層包含多個存儲器單元,能夠更加準確地學習特征.第一層Bi-LSTM 給后一層的Bi-LSTM 提供序列輸出,而不是單個值輸出.
(1) 輸入層
首先對經(jīng)過清洗后的數(shù)據(jù)集進行分詞,然后采用四元標注集T={S,B,M,E}進行標注.定義B 表示為一個語義完整句的開頭詞,M 表示為一個語義完整句的中間詞,E 表示為一個語義完整句的結(jié)尾詞,S 表示為特定符號(,:、等)前面和后面最靠近的一個詞.例如:“物質(zhì)世界的運動是絕對的,而物質(zhì)在運動過程中又有某種相對的靜止”.這個語義完整句對應的詞序列和正確的標簽為“物質(zhì)/B 世界/M 的/M 運動/M 是/M 絕對/M 的/S 而/S 物質(zhì)/M 在/M 運動/M 過程/M 中/M 又/M有/M 某種/M 相對/M 的/M 靜止/E”.
經(jīng)過上述規(guī)則標注的標簽數(shù)量會出現(xiàn)嚴重的類別不平衡問題[10],M 標簽數(shù)量遠大于其他標簽,我們采用改進的隨機欠采樣方法對M 標簽進行處理.對于一個語義完整句子來說,E和B 標簽的數(shù)目為1,S 標簽數(shù)目與句中標點符號有關,一般是2 個或者4 個,而M 標簽的數(shù)目可以達到10 個左右.其中連續(xù)的M 標簽是出現(xiàn)次數(shù)最多的,并且其特征對我們語義完整性分析來說,不是特別重要.所以將左邊和右邊標簽都為M 的詞依據(jù)一定比率進行丟棄,丟棄原則根據(jù)為M 標簽數(shù)目略多于其他標簽的數(shù)目即可,具體丟棄比率設置可見3.3 節(jié)中第四個對比實驗.處理前后的標簽統(tǒng)計數(shù)量如圖3所示.雖然處理后的M 依然大概占有近半的數(shù)目,但通過后文對比實驗表明,本文所提出的改進的隨機欠采樣方法對類別不平衡問題有很大的改善.
圖3 各個標簽采樣前后數(shù)目統(tǒng)計
隨機欠采樣后的詞序列因為上下文特征改變,可能會出現(xiàn)欠擬合的現(xiàn)象,為了既對詞序列進行采樣,又不丟失一個詞應有的上下文信息,本文提出滑動窗口的方法,在隨機欠采樣前對序列數(shù)據(jù)進行處理.對于一個有n個詞的詞序列T(1:n),用大小為k的滑動窗口從首滑動至尾,每次窗口內(nèi)的子序列作為Bi-LSTM 的輸入.假設k值為5,序列T中下標為i(下標從0 開始)的詞生成的子序列表示為(Ti-2,Ti-1,Ti,Ti+1,Ti+2),其中Ti=T[(n+i)%n].
(2) 雙層Bi-LSTM
為了方便說明,這里假設滑動窗口的大小為5 的雙層Bi-LSTM 其內(nèi)部結(jié)構(gòu)如圖4所示.
圖4 雙層Bi-LSTM 結(jié)構(gòu)圖
在輸入層我們已經(jīng)把輸入的詞序列轉(zhuǎn)換為維度為64 的詞向量,圖4中小矩形的數(shù)目即序列的長度.在第一個Bi-LSTM 中,這里輸入為維度64 的詞向量,輸出為維度128 的詞向量,由于其不是最后一層Bi-LSTM,這里會輸出5 個128 維的詞向量V1’…V5’.第二個Bi-LSTM 輸入為V1’…V5’都為128 維詞向量,經(jīng)轉(zhuǎn)換后得到V1”…V5”為256 維詞向量,當前已經(jīng)是最后一層Bi-LSTM,所以這里規(guī)定V5”為窗口中間詞即詞向量V3對應的輸出.
(3) 輸出層
深層神經(jīng)網(wǎng)絡中,過擬合會使模型泛化性能變差,為了防止過擬合,模型中增加了Dropout 層[11].Drop out 層將在訓練過程中每次更新參數(shù)時按一定概率隨機斷開輸入神經(jīng)元,這就防止了神經(jīng)元之間過度的協(xié)同適應.
Dropout 層的輸出向量維度與Bi-LSTM 的輸出維度相同,為了將向量維度轉(zhuǎn)換為與標簽類別數(shù)一致,所以增加了一個全連接層,并采用elu 激活函數(shù),將Dropout 層的輸出轉(zhuǎn)換為指定維度的向量.最后對提取的特征采用Softmax 激活函數(shù)得到輸出的概率.Softmax 的函數(shù)定義如下:
其中,Vi是全連接層的輸出,i表示類別索引,總的類別個數(shù)為C,Si表示的是當前元素的指數(shù)與所有元素指數(shù)和的比值.一個含任意實數(shù)的K維向量,通過Softmax 層后,都會“壓縮”到另一個K維實向量中,壓縮后的向量每個元素都在[0,1]范圍中,并且所有元素的和為1.
本文實際解決的是一個多分類問題,采用的損失函數(shù)為交叉熵損失函數(shù)[12],即模型的訓練目標是使如下?lián)p失函數(shù)最?。?/p>
其中,y表示真實標簽的分布,a則為訓練后模型的預測標簽分布,交叉熵損失函數(shù)可以衡量y與a的相似性.此外,交叉熵作為損失函數(shù)還有一個好處是能避免均方誤差損失函數(shù)學習速率降低的問題,因為學習速率可以被輸出的誤差所控制.模型的訓練過程采用GPU 并行加速,為了使模型達到更好的效果,本文選取大量神經(jīng)網(wǎng)絡優(yōu)化算法進行實驗.
模型的預測過程即對于任意的輸入序列,深度神經(jīng)網(wǎng)絡輸出的是每個時刻標注的條件概率(參見Softmax 輸出格式).預測過程中,模型需要根據(jù)該輸出值,進一步輸出對應的標簽.本文為了檢驗模型的準確性,直接選取概率最大的標簽作為預測結(jié)果.
實驗環(huán)境如表1所示.
表1 實驗環(huán)境配置
本文采用的數(shù)據(jù)集是賓州中文樹庫(CTB)8.0 語料庫,總字數(shù)大概130 萬字,采用自動標注和人工標注相結(jié)合的方法,先將數(shù)據(jù)集中的幾種標點(.?!;)視為語義完整的標志,然后通過人工檢查進一步提高標注的準確性.最后隨機的將數(shù)據(jù)集切分為90%的訓練集和10%的測試集.
詞向量數(shù)據(jù)來源為百度百科+維基百科+新聞+小說一共120 g 數(shù)據(jù),詞向量維度為64 維.本文在獲取詞向量過程中,對于未登錄詞統(tǒng)一用特殊向量代替.
本文屬于多分類問題,我們采用準確率(A)、宏查準率(macro-P)、宏查全率(macro-R)以及宏F1(macro-F1)作為評價模型效果的指標.A為模型整體的準確率.其他指標計算方式如下,其中n為類別數(shù),Pi、Ri分別表示第i個類別的P值和R值.
本文提出的模型影響實驗結(jié)果的主要參數(shù)有神經(jīng)元數(shù)目,激活函數(shù)類型以及模型優(yōu)化器的選擇,為了找到每個參數(shù)的較優(yōu)解,本文采用控制變量法,分別作如下實驗.
(1) 神經(jīng)元數(shù)目
這里說的神經(jīng)元數(shù)目,準確來說是循環(huán)神經(jīng)網(wǎng)絡的前饋網(wǎng)絡層中隱藏神經(jīng)元的個數(shù),一般情況下,隱藏神經(jīng)元的數(shù)目越多,模型就越復雜,訓練時間越長.下面分別將隱藏神經(jīng)元大小設定為64、128、256、512,實驗結(jié)果如圖5所示.從實驗結(jié)果可以看到,在神經(jīng)元數(shù)目較小時,隨著神經(jīng)元數(shù)目的遞增模型各指標遞增的比較明顯.當神經(jīng)元數(shù)目達到一定的值后,各指標增速放緩,最后甚至有下降的趨勢.為了兼顧模型效果和訓練速度,本文選取的神經(jīng)元數(shù)目為256.
(2) 激活函數(shù)的選擇
激活函數(shù)的作用是給模型添加非線性因素,增加模型對數(shù)據(jù)的適應性,使得分類更加準確.神經(jīng)網(wǎng)絡常用的激活函數(shù)有sigmoid、tanh、elu、relu 等,本文選取這四種激活函數(shù)分別進行實驗,實驗結(jié)果如表2所示.從圖中可以看到,不同激活函數(shù)對結(jié)果影響還是很大的,根據(jù)實驗結(jié)果,本文選擇elu 作為激活函數(shù).
圖5 神經(jīng)元數(shù)目對比實驗結(jié)果
表2 激活函數(shù)實驗對比結(jié)果
(3) 模型優(yōu)化器設定
模型優(yōu)化器就是設置深度學習的優(yōu)化算法,主要目的是優(yōu)化參數(shù)的更新策略.不恰當?shù)膬?yōu)化算法會導致模型收斂到局部最優(yōu)解.本文選擇較常用的adam 優(yōu)化算法[13]及adadelta 算法[14]作對比.實驗結(jié)果如表3所示.其中adam+decay 表示采用adam 優(yōu)化算法,但是每次迭代完成后用decay 值減小學習率.AMSGrad 為adam 的變體[15].優(yōu)化算法的參數(shù)選用默認值或者論文中的推薦值.從表中可以看出,adam 的變種(AMSGrad)比原生的adam 的效果要好得多.而adadelta 算法比AMSGrad 算法要略好一點,因此本文選取的模型優(yōu)化算法為adadelta 算法.
表3 模型優(yōu)化器對比實驗結(jié)果
(4) 輸入欠采樣方案比較
對于分類不平衡問題,本文采取改進的隨機欠采樣方法對輸入數(shù)據(jù)進行處理.實驗結(jié)果如表4所示,實驗1 為普通隨機欠采樣方式,M 標簽占比為50%.實驗2、3、4 為本文提出的改進隨機欠采樣方式,采樣后M 標簽占比分別為50%,45%,40%.從實驗可以看出,本文提出的改進隨機欠采樣方法比普通隨機欠采樣方法效果要好很多,并且當M 標簽占比為45%時,實驗效果最好,這可能是因為當M 標簽占比為45%時,各標簽分配比例剛好符合模型訓練要求.
表4 優(yōu)化算法對比實驗結(jié)果
經(jīng)過上述參數(shù)對比試驗,本文主要參數(shù)設定如下:Bi-LSTM 神經(jīng)元數(shù)目為256,Dropout 層設定比率為0.5,詞序列的滑動窗口大小為9,訓練神經(jīng)網(wǎng)絡的批次(batch)大小設定為64,訓練循環(huán)次數(shù)(epoch)設定為20,每次循環(huán)結(jié)束將訓練數(shù)據(jù)集進行shuffle 處理.采用AdaDelta 優(yōu)化算法,全連接層激活函數(shù)為elu.為了說明本模型的有效性,使用相同的數(shù)據(jù)集,分別采用RNN、LSTM、雙層LSTM、雙層Bi-LSTM 進行對比實驗,實驗結(jié)果如表5所示.
表5 模型對比實驗結(jié)果
從結(jié)果可以看出,本文提出的雙層Bi-LSTM 模型的準確率可以達到91.61%,優(yōu)于其他模型.一方面,本文采用的循環(huán)窗口和隨機欠采樣方法可以在欠采樣過程中很好的保留上下文特征.另一方面,Bi-LSTM 能夠更好的學習上下文特征,且雙層Bi-LSTM 模型獲取特征更準確,因此可以達到較好的效果.
本文采用基于雙層Bi-LSTM 的循環(huán)神經(jīng)網(wǎng)絡模型,對長文本實現(xiàn)自動標注,從而實現(xiàn)語義完整性分析.從實驗結(jié)果和項目使用來看,本方法可以較好的解決標注語義完整性的問題.后續(xù)將模型用到生產(chǎn)環(huán)境的過程中,可以結(jié)合標簽之間的依賴關系,對模型輸出結(jié)果,按照一定的詞性規(guī)則進一步提升預測結(jié)果.