毛紫荊,張 軍,馮云婷
(天津職業(yè)技術(shù)師范大學(xué)電子工程學(xué)院,天津 300222)
在互聯(lián)網(wǎng)技術(shù)迅速發(fā)展的今天,人們獲取信息的途徑也更加多樣,如在選航班前,通常會在評論區(qū)提前了解大量帶有感情色彩的主觀性文本,以此作為自己選擇心儀航空公司的參考,以便能夠享受到更舒適的服務(wù),得到更優(yōu)質(zhì)的出行體驗(yàn)。航空行業(yè)屬于服務(wù)類型的行業(yè),有時(shí)會出現(xiàn)客戶服務(wù)差池、航班延誤、行李丟失等一系列問題,在旅程結(jié)束時(shí),多數(shù)旅客會在評論區(qū)寫下對某一航空公司服務(wù)的評論。若航空公司掌握旅客的情感變化,便能為旅客提供更好的個(gè)性化服務(wù),從而提升用戶體驗(yàn)滿意度。
近年來,深度學(xué)習(xí)技術(shù)在全社會各個(gè)領(lǐng)域得到廣泛應(yīng)用[1],特別是在文本情感分析和文本特征方面也獲得了新的突破。因此,深度學(xué)習(xí)也成為了自然語言處理中新的研究熱點(diǎn)。在文本分類任務(wù)中,卷積神經(jīng)網(wǎng)絡(luò)可以提取局部特征,Kim[2]證實(shí)了詞向量可以作為一個(gè)通用的特征維度向量,提出多通道卷積模型,該模型能夠有效防止過擬合,在問題分類、情感分析等領(lǐng)域取得較好的效果。情緒標(biāo)注短語的信息可以提高樸素貝葉斯(naive Bayes,NB)和支持向量機(jī)(support vector machine,SVM)[3]等其他分類算法的準(zhǔn)確率。文獻(xiàn)[4-6]認(rèn)為,使用短句作為訓(xùn)練對象,可以讓分類器的學(xué)習(xí)更加復(fù)雜,提出從特征到句子間的卷積神經(jīng)網(wǎng)絡(luò)(character to sentence CNN,CharSCNN)可以使文本在細(xì)分類中擁有較高的準(zhǔn)確率。針對文本內(nèi)容的序列順序問題,循環(huán)神經(jīng)網(wǎng)絡(luò)能夠更好地得到上下文信息。劉建興等[7]提出了一種新模型,對情緒進(jìn)行分析預(yù)測,這種基于深度雙向長短時(shí)記憶循環(huán)神經(jīng)網(wǎng)絡(luò)(deep bidirectional long-short-term memory RNN,DB-LSTMRNN)的模型,相比基于淺層統(tǒng)計(jì)特征的方法準(zhǔn)確率提高了7.6%。陳千等[8]和Bahdanau 等[9]在情感分類中引入注意力機(jī)制,使用不同標(biāo)記信息,提取全局特征和局部特征將其進(jìn)行融合,隨著數(shù)據(jù)集的增大,循環(huán)卷積注意力模型(LSTM-CNN-ATT,LCA)變得穩(wěn)定,表現(xiàn)逐漸變好。本文研究長短時(shí)記憶網(wǎng)絡(luò)(long short term memory,LSTM)與雙向循環(huán)神經(jīng)網(wǎng)絡(luò)巧妙反向結(jié)合的原理,并與多種神經(jīng)網(wǎng)絡(luò)模型進(jìn)行討論和對比,提出M-BRNN(modified-BRNN)模型,以預(yù)測文本評論中的感情傾向。
循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural network,RNN)[10]是一種用于處理和預(yù)測數(shù)據(jù)的神經(jīng)元網(wǎng)絡(luò)模型,它既有反饋通路,又有前饋通路,功能強(qiáng)大。RNN 與傳統(tǒng)全連接神經(jīng)網(wǎng)絡(luò)不同之處在于,它能記憶之前的信息,并將其用于正在輸出的計(jì)算當(dāng)中,而且具有權(quán)值共享特點(diǎn),即隱藏層的輸入同時(shí)包括輸入層目前的輸出以及上一時(shí)刻隱藏層的狀態(tài)輸出。其中,反饋通路對網(wǎng)絡(luò)處理時(shí)序問題非常重要。
RNN 網(wǎng)絡(luò)結(jié)構(gòu)如圖1 所示。該結(jié)構(gòu)由1 個(gè)輸入層、1 個(gè)隱藏層和1 個(gè)輸出層組成,其最大特點(diǎn)是隱藏層的值h 不僅取決于t 時(shí)刻的輸入x,還取決于t-1 時(shí)刻隱藏層的值h,這種層與層之間的依賴關(guān)系,較適用時(shí)間序列數(shù)據(jù)。將圖1 所示的結(jié)構(gòu)展開后,多個(gè)RNN網(wǎng)絡(luò)結(jié)構(gòu)如圖2 所示。重復(fù)的網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)可以共享,這樣可以使神經(jīng)網(wǎng)絡(luò)所需的輸入?yún)?shù)減少,降低網(wǎng)絡(luò)的使用內(nèi)存,提高學(xué)習(xí)效率。
圖1 單個(gè)RNN 網(wǎng)絡(luò)結(jié)構(gòu)
圖2 多個(gè)RNN 網(wǎng)絡(luò)結(jié)構(gòu)
RNN 可用以下公式計(jì)算
式中:softmax、tanh 為激活函數(shù);xt為 t 時(shí)刻訓(xùn)練樣本的輸入;ht為t 時(shí)刻模型的隱藏狀態(tài);ot為t 時(shí)刻模型的輸出;Lt為t 時(shí)刻模型的損失函數(shù),可以量化時(shí)間序列的損失值;U、V、W 3 個(gè)矩陣代表模型的權(quán)值參數(shù),它在整個(gè)RNN 網(wǎng)絡(luò)中共享,同一類型的全連接權(quán)值相同。
由于RNN 存在迭代性,并隨著模型深度的增加,導(dǎo)致相應(yīng)梯度的消失,也有較少情況會發(fā)生梯度爆炸。此時(shí),可以設(shè)置梯度閾值,若當(dāng)前的梯度值大于設(shè)定閾值,就可以直接截取,使初始化權(quán)重值合理,改變激活函數(shù),或使用其他網(wǎng)絡(luò)結(jié)構(gòu),如LSTM。1997年,Hochreiter 等[11]提出 LTSM 單元,Tang 等[12]對句子之間的情感關(guān)系進(jìn)行了建模,有效地應(yīng)對了梯度的消失問題。
在原始狀態(tài)下,RNN 隱藏層只有一個(gè)狀態(tài),對短期的輸入非常敏感,但對于長期的輸入敏感度不高。LSTM 網(wǎng)絡(luò)是一種特殊的RNN 網(wǎng)絡(luò),對比二者網(wǎng)絡(luò)的隱藏單元,LSTM 單元的內(nèi)部結(jié)構(gòu)更為復(fù)雜,這種結(jié)構(gòu)新增了一個(gè)狀態(tài)來保存長期的輸入,使得該網(wǎng)絡(luò)可以學(xué)習(xí)長期依賴的信息。LSTM 單元內(nèi)部結(jié)構(gòu)如圖3所示。
圖3 LSTM 單元內(nèi)部結(jié)構(gòu)
LSTM 模型的隱藏單元的門控有3 種類型,分別為:輸入門it、遺忘門ft和輸出門ot。由圖3 可知,本單元還有1 個(gè)隱藏狀態(tài)ct,在輸出之前也會與遺忘門和輸入門相作用。門控能夠完成LSTM 網(wǎng)絡(luò)對信息的存儲和更新,相當(dāng)于一層全連接層。其中,Sigmoid 函數(shù)是機(jī)器學(xué)習(xí)中常用的非線性激活函數(shù),值域?yàn)?~1,故門的輸出是0~1 的實(shí)數(shù)向量。當(dāng)該函數(shù)取值為0 時(shí),其與任何向量相乘都等于0 向量,此時(shí)任何信息都不能通過;若取值為1 時(shí),任何信息都可以通過。因此,LSTM 模型能夠更好地應(yīng)用于文本情感分析。
很多自然語言處理任務(wù)時(shí)都需要獲取單詞的上下文信息來處理任務(wù),Schuster 等[13]提出雙向循環(huán)神經(jīng)網(wǎng)絡(luò)(bi-directional RNN,BRNN),BRNN 包含 2 個(gè)不同的隱藏層[14],能夠在2 個(gè)時(shí)間方向處理同一個(gè)序列,達(dá)到對輸入文本更加豐富的處理,相當(dāng)于2 個(gè)RNN。2個(gè)隱藏層之間沒有連接,只是將相同的信息以不同的方式呈現(xiàn)給循環(huán)網(wǎng)絡(luò),在同一個(gè)輸入層輸入,然后在同一個(gè)輸出層輸出,可以提高精度并緩解遺忘。雙向循環(huán)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)如圖4 所示。
圖4 雙向循環(huán)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
循環(huán)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練算法采用基于隨機(jī)梯度下降的反向傳播(back-propagation,BP)算法或基于時(shí)間的反向傳播(back-propagation through time,BPTT)算法[15-16],優(yōu)化完成后即可得到神經(jīng)網(wǎng)絡(luò)語言模型。BPTT算法可以很好地利用隱含層狀態(tài)中的信息,對網(wǎng)絡(luò)中的參數(shù)進(jìn)行更新,這是BP 算法的一種改進(jìn),也是目前循環(huán)神經(jīng)網(wǎng)絡(luò)最常用的訓(xùn)練算法。BPTT 算法是將網(wǎng)絡(luò)的時(shí)序操作展開為一個(gè)具有隱含層的深層前饋神經(jīng)網(wǎng)絡(luò),在各時(shí)間步之間權(quán)值共享。常用BPTT 算法的模型是RNN 模型,其中的梯度下降算法沿著需要優(yōu)化的參數(shù)的負(fù)梯度方向不斷尋找更優(yōu)的點(diǎn)直至收斂,經(jīng)過一次次的迭代,才能得到較為合適的模型參數(shù)。它與傳統(tǒng)前向神經(jīng)網(wǎng)絡(luò)中的標(biāo)準(zhǔn)反向傳播算法不同,BPTT 算法做到了參數(shù)共享,并計(jì)算了關(guān)于W 每個(gè)時(shí)間點(diǎn)上的梯度之和,t 時(shí)刻隱藏狀態(tài)的梯度定義為
把網(wǎng)絡(luò)按時(shí)間序列展開,反向傳播算法結(jié)構(gòu)如圖5 所示。從圖5 可以看出,該算法結(jié)構(gòu)是一個(gè)在各時(shí)間序列之間權(quán)值共享的大網(wǎng)絡(luò)。
圖5 反向傳播算法結(jié)構(gòu)
在反向傳播時(shí),在某一時(shí)間序列t 的梯度損失由當(dāng)前位置的輸出對應(yīng)的梯度損失和時(shí)間序列t-1 的梯度損失兩部分共同決定。
然而,循環(huán)神經(jīng)元網(wǎng)絡(luò)模型沒有較長時(shí)間的記憶,其原因在于:依據(jù)鏈?zhǔn)椒▌t,在連續(xù)的時(shí)間序列數(shù)據(jù)反向傳播時(shí),存在多個(gè)因子連乘的情況,容易發(fā)生梯度消失或爆炸的問題。
模型訓(xùn)練會發(fā)生過擬合現(xiàn)象,產(chǎn)生這種現(xiàn)象的原因有網(wǎng)絡(luò)的參數(shù)過多、訓(xùn)練數(shù)據(jù)較少和訓(xùn)練次數(shù)過多。Srivastava 等[17]和 Tobergte 等[18]在 2012 年提出了Dropout 技術(shù),該技術(shù)是一種常用的正則化技巧,在深度學(xué)習(xí)網(wǎng)絡(luò)中可以抑制神經(jīng)網(wǎng)絡(luò)模型發(fā)生過擬合。最早在卷積神經(jīng)網(wǎng)絡(luò)中運(yùn)用Dropout 方法,卷積神經(jīng)網(wǎng)絡(luò)可以達(dá)到更強(qiáng)的魯棒性。不僅在卷積神經(jīng)網(wǎng)絡(luò)中,Dropout 方法在RNN 中使用也能夠得到一定的優(yōu)化結(jié)果,隨機(jī)設(shè)置一定比例不工作的隱藏節(jié)點(diǎn),這些節(jié)點(diǎn)對應(yīng)的權(quán)值在訓(xùn)練中就不會更新。在創(chuàng)建模型過程中需注意的是,Dropout 層需要設(shè)置在網(wǎng)絡(luò)的非循環(huán)結(jié)構(gòu)體之間,在同層之間不適用Dropout 層,否則可用信息會在循環(huán)步驟中逐漸丟失。
在沒有增加模型復(fù)雜度的情況下,LSTM 模型建立了64 個(gè)神經(jīng)元,增加RNN 隱含層數(shù)量,在反向傳播算法節(jié)點(diǎn)上采用LSTM 模型,這樣文本數(shù)據(jù)在輸入層就要經(jīng)過正向序列和反向序列。由于模型的性能隨著網(wǎng)絡(luò)層數(shù)的加深而提高,因此需要增加密集連接反向LSTM 網(wǎng)絡(luò)模型的堆疊層數(shù),確定步長為3,采用RepeatVector 改變每一步的維數(shù)。這樣的正向反向序列深度結(jié)構(gòu),輸出層用Sigmoid 分類器進(jìn)行情感分類,有效解決梯度消失問題,可以將各層之間的特征信息緊密聯(lián)系。因準(zhǔn)確率并非一直隨著隱含層中的神經(jīng)元數(shù)量的增加而增加,當(dāng)堆疊層數(shù)大于一定閾值時(shí)也會影響準(zhǔn)確率。改進(jìn)的雙向RNN 網(wǎng)絡(luò),加深了初始網(wǎng)絡(luò)深度,通過Flatten 層將輸入的多維數(shù)據(jù)“扁平化”,轉(zhuǎn)化為一維數(shù)據(jù)。編譯層自適應(yīng)優(yōu)化算法從Adam 更換成RMSProp,可改變梯度累積,在求解極值問題時(shí),可以達(dá)到較快的收斂速度,也是循環(huán)神經(jīng)網(wǎng)絡(luò)常用的優(yōu)化器。學(xué)習(xí)速率采用回調(diào)函數(shù)監(jiān)視損失值,如果在5個(gè)訓(xùn)練周期過后看不到模型性能提升,則減少學(xué)習(xí)率。學(xué)習(xí)率最小值設(shè)為0.000 01。
仿真設(shè)備為 Intel(R)-Core(TM)i3-6100CPU@3.70 GHz,操作系統(tǒng)為Ubuntu 16.04,操作環(huán)境為TensorFlow+python3.5+jupyter,深度學(xué)習(xí)框架為Keras。
本文主要以python 為開發(fā)環(huán)境,Keras 框架(一種核心高階 API)包含 python3 的庫、NumPy、Pandas 和Matplotlib,作為圖像處理的基本庫,選用TensorFlow作為Keras 框架的前端。TensorFlow 是谷歌開發(fā)的深度學(xué)習(xí)框架,可進(jìn)行數(shù)值計(jì)算、優(yōu)化和評估。Keras 的可操作性很強(qiáng),可優(yōu)化或擴(kuò)展模塊,具有簡潔的API、高效的獨(dú)立性,使代碼編寫變得十分便捷,還可支持不同神經(jīng)網(wǎng)絡(luò)的結(jié)合算法。
本仿真采用了航空公司評論數(shù)據(jù)庫,該數(shù)據(jù)集來源于2015 年2 月美國主要航空公司的Twitter 數(shù)據(jù),共有14 640 條評論,可分為正面、負(fù)面和中性3 類。正面評價(jià)9 178 條,中性評價(jià)3 099 條和負(fù)面評價(jià)2 363 條,涵蓋6 家主要航空公司,分別是Southwest公 司 、Delta 公 司 、United 公 司 、American 公 司 、US Airways 公司和 Virgin America 公司。其中,United 公司的差評率最高,達(dá)到了68.89%。在負(fù)面評價(jià)中,主要問題為客戶服務(wù)、航班延誤、移動設(shè)備不能使用等方面。從TUAS 數(shù)據(jù)集中取2 363 條正面評價(jià)和負(fù)面評價(jià)數(shù)據(jù),構(gòu)建本文所需要的數(shù)據(jù)集,其中80%作為訓(xùn)練集,20%作為測試集。
建立模型框架一般包括預(yù)處理數(shù)據(jù)、建立模型、訓(xùn)練模型、預(yù)測模型這3 個(gè)階段。首先,在模型訓(xùn)練之前對數(shù)據(jù)進(jìn)行預(yù)處理,提取’airline_sentiment’和’text’2 列,采用數(shù)字標(biāo)簽,將正面評價(jià)表示為1,負(fù)面評價(jià)表示為0。對文本的預(yù)處理主要步驟如下:
(1)去除評論文本中的特殊字符或標(biāo)點(diǎn)符號,所有單詞變小寫,提出唯一的英文單詞,再將每個(gè)單詞轉(zhuǎn)換成字典形式,一一對應(yīng)為整數(shù)序列。由于每一條的評論的字?jǐn)?shù)不一致,需將所有文本填充至統(tǒng)一長度,將整數(shù)序列的長度設(shè)置為40。
(2)加入Embedding 層將整數(shù)序列轉(zhuǎn)換成向量序列,并加入Dropout 層防止過度擬合。
(3)搭建深度學(xué)習(xí)模型,模型的相關(guān)參數(shù):RNN模型中神經(jīng)元Unit 為16,LSTM 模型建立了32 個(gè)神經(jīng)元單次訓(xùn)練用的樣本數(shù),設(shè)為128,設(shè)置50 個(gè)訓(xùn)練周期,經(jīng)過模型的訓(xùn)練,可以觀察預(yù)測結(jié)果。
3.4.1 映射成密集向量的長度對模型的影響
訓(xùn)練模型時(shí),在Embedding 層需要指定一個(gè)映射成密集向量的長度值,在研究映射成密集向量長度對模型準(zhǔn)確率的影響時(shí),對評論的單詞個(gè)數(shù)進(jìn)行統(tǒng)計(jì),繪制出評論文本的長度分布圖,句子長度分布圖如圖6 所示。評論的單詞個(gè)數(shù)有近 1/2 在 20~30 內(nèi),30~40 內(nèi)單詞個(gè)數(shù)的評論較少,數(shù)據(jù)分布與高斯分布類似。映射成密集向量的長度值對準(zhǔn)確率的影響如圖7 所示。
模型共訓(xùn)練50 個(gè)訓(xùn)練周期,對后20 個(gè)訓(xùn)練周期的正確率取平均值進(jìn)行比較。對于此數(shù)據(jù)集,詞向量的維度值取10 時(shí),模型效果最好。若長度值較小,截取文本時(shí)會造成語義特征信息丟失;若最大長度值較大,模型準(zhǔn)確率則在較低范圍內(nèi)波動。
圖6 句子長度分布圖
圖7 密集向量長度對準(zhǔn)確率的影響
3.4.2 設(shè)置不同Dropout值對模型的影響
在此數(shù)據(jù)集上,研究設(shè)置了不同Dropout 值對模型訓(xùn)練效果的影響,設(shè)置一定比例的不工作隱藏節(jié)點(diǎn),這些節(jié)點(diǎn)在模型訓(xùn)練中,其對應(yīng)的權(quán)值就不會更新,仿真結(jié)果如圖8 所示。從圖8 可以看出,在一定條件下,當(dāng)Dropout 值為0.5 時(shí),模型準(zhǔn)確率可達(dá)0.94,損失率在0.18 左右,訓(xùn)練效果最好。所以,一般情況下,Dropout 值都默認(rèn)選擇0.5。
圖8 不同Dropout 值對模型效果的影響
仿真1 TensorFlow 直接調(diào)用LSTM 模型,測試集的準(zhǔn)確率可達(dá)0.923,而損失率在第4 個(gè)訓(xùn)練周期之后呈直線上升趨勢。雖然損失率在20 個(gè)訓(xùn)練周期之后大幅下降,但在訓(xùn)練結(jié)束時(shí)損失率升至0.7 之多,可見LSTM 模型并不能達(dá)到很好的測試效果。
仿真2 在模型中加入Dropout 層(D-LSTM 模型),訓(xùn)練結(jié)果的準(zhǔn)確率和損失率起伏波動較大,模型剛開始損失率變化較緩慢,但也一直呈上升趨勢,在最后依舊保持較高的損失率,結(jié)果不理想。
仿真3 雙向RNN 網(wǎng)絡(luò)(BRNN 模型)在經(jīng)過 10個(gè)訓(xùn)練周期之后準(zhǔn)確率和損失率都趨于穩(wěn)定,模型性能在兩方面都有較好的穩(wěn)定性。
仿真 4 改進(jìn)的 BRNN 網(wǎng)絡(luò)(M-BRNN 模型),準(zhǔn)確率接近0.96,損失率在0.2 左右,在模型訓(xùn)練后期,具有較好的穩(wěn)定性,過度擬合程度已經(jīng)減輕。
4 個(gè)仿真的對比結(jié)果如圖9 和圖10 所示。相較于LSTM 模型,增加了Dropout 層的模型以及BRNN 模型,本文提出的LSTM 與雙向循環(huán)神經(jīng)網(wǎng)絡(luò)反向融合的模型,增加Flatten 層,改變了優(yōu)化器類型以融合信息特征,設(shè)置一定的學(xué)習(xí)速率,取得了較好的分類效果。從圖9 可以看出,本文模型準(zhǔn)確率較BRNN 模型提高了1.8%左右。
圖9 不同模型情感分類準(zhǔn)確率
圖10 不同模型情感分類損失率
本文通過融合LSTM 網(wǎng)絡(luò)和RNN 神經(jīng)網(wǎng)絡(luò),提出一種基于Keras 框架的M-BRNN 模型。通過對模型進(jìn)行訓(xùn)練,最終預(yù)測出評論內(nèi)容的正面傾向或負(fù)面傾向。仿真結(jié)果表明,與LSTM、D-LSTM、BRNN 常用方法比較,本文提出的M-BRNN 模型,雖然運(yùn)算較復(fù)雜,運(yùn)行時(shí)間相對較長,但該模型可以很好地理解上下文的語義特征,表現(xiàn)最優(yōu),同時(shí)穩(wěn)定性最佳,較好地證實(shí)了該方法在自然語言處理方面的可行性和有效性。本研究下一步將優(yōu)化模型,結(jié)合更多的用戶信息,細(xì)化類別,利用GPU 來加快訓(xùn)練速度,從而挖掘到更多有價(jià)值的信息,并研究更加復(fù)雜的文本分類情況。