李昊璇,張華潔
(山西大學 物理電子工程學院,山西 太原 030006)
隨著互聯(lián)網和電子商務的發(fā)展,各種網站、 APP提供的商品種類及樣式越來越繁多,選擇在網上購物的人也越來越多[1].人們選擇網購不僅因為它方便快捷,而且也因為它更容易表達自己的喜好,并參考別人的意見做出自己的購買選擇.購買圖書是一種典型的網購行為.圖書購物網站例如“當當網”、 “亞馬遜”等擁有大量圖書、 大量用戶集及用戶評論,通常每本書的購買用戶評論在幾百條到百萬條量級之間,每條評論文本或長或短,都表達了用戶的喜好.所以本文選擇在圖書購物網站上獲取大量書籍評論文本,并對此加以處理和分析,繼而對評論文本的情感進行分類.
文本情感分析是對帶有情感色彩的主觀性文本進行分析、 處理、 歸納和推理的過程,利用機器提取人們對某人或某事物的態(tài)度,從而發(fā)現(xiàn)潛在的問題用于改進或預測[2].書籍評論是用戶的主觀性評價,包括正面態(tài)度、 中立態(tài)度和負面態(tài)度.如何判斷用戶的態(tài)度,對文本中包含的情感進行分析,是當前自然語言處理(Natural Language Processing,NLP)中的一個重要的研究方向.傳統(tǒng)的文本情感分析方法模型中的詞的表示是原始的、 面向字符串的[3].兩個語意相近的詞的字符串可能完全不同,這給自然語言處理和文本情感分析都帶來了挑戰(zhàn)——字符串本身無法儲存語意信息.而神經概率語言模型中詞的表示是向量形式、 面向語義的.兩個語義相似的詞對應的向量也是相似的,具體反映在夾角或距離上.甚至一些語義相似的二元詞組中的詞語對應的向量做線性減法之后得到的向量依然是相似的.詞的向量表示可以顯著提高傳統(tǒng)NLP任務的性能.詞向量編碼方式為One-hot編碼和Word2Vec模型編碼,One-hot使用N位狀態(tài)寄存器來對N個狀態(tài)進行編碼,每個狀態(tài)都有它獨立的寄存器位,并且在任意時候,其中只有一位有效的詞匯表大小為N.One-hot編碼方法得到的特征是離散稀疏的,這樣對于中文語句的詞向量計算來說會造成維度災難.而Word2Vec得到的詞的向量形式則可以自由控制維度,一般是100維[4].本文選擇Word2Vec模型訓練得到詞向量.
本文提出一種基于詞向量[5]和卷積神經網絡(Convolutional Neural Network,CNN)[6]的自然語言處理方法,解決了對文本情感的分類問題.本文通過生成語料庫及構建的卷積神經網絡模型對詞向量進行訓練,較好地提高了文本分類的準確率.
本文的文本情感分類方法如圖 1 所示.
該圖分為3個模塊,分別是:
1) 生成語料庫: 這個模塊由獲取文本、 文本分詞和詞向量訓練組成.通過在圖書購物網站使用Python爬蟲技術得到書籍評論文本數(shù)據(jù).評論文本直接表達了用戶對書籍的喜好.通過jieba分詞技術實現(xiàn)分詞[7],本文使用jieba分詞模式中的精確模式,將句子最精確地切開,該模式適合文本分析.詞向量訓練通過Word2Vec模型實現(xiàn),本文使用Word2Vec模型中的Skip-Gram模型對分詞后的文本進行訓練,該模型用中心詞預測周圍詞,考慮文本的上下文關系和詞頻,對于出現(xiàn)頻率低的詞學習效果也較好,很好地提高了書籍評論情感分析系統(tǒng)的準確率.生成語料庫模塊輸出一個評論高頻詞的詞向量詞典,詞典中一個詞語對應著一個詞向量.
2)文本預處理: 這個模塊實現(xiàn)了構建評論向量.評論文本數(shù)據(jù)同樣由爬蟲技術[8]得到,評論文本包括評論內容和評論分數(shù)兩部分.在本文中以評論分數(shù)來生成用戶喜好標簽: 分數(shù)10分記為1,為好評; 小于等于2分記為-1,為差評; 其余的評分記為0,為中評.本文構成語料庫的好評、 差評、 中評的比例類似于網站上的數(shù)據(jù)比,為6∶1∶3.文本由jieba分詞,再將每條評論中的每個詞在詞典中找到對應的詞向量,再把詞向量按文本順序拼裝起來,生成評論的詞向量矩陣.本部分輸出評論文本向量,即帶著用戶喜好標簽的詞向量矩陣.
3) 情感分類器: 本模塊實現(xiàn)對評論向量的分類,根據(jù)用戶喜好標簽將評論向量分為3類,分別對應著好評、 差評和中評.情感分類器由卷積神經網絡實現(xiàn),使用80%的評論向量作為訓練集對卷積神經網絡進行訓練,20%的評論向量作為測試集對模型的分類能力進行測試.
對自然語言進行情感分析,是當前自然語言處理的一個熱點方向[9].傳統(tǒng)處理辦法存在兩點問題: 其一,國內中文語料庫多為日常生活詞語集、 古漢語集、 詩詞書籍內容詞語集,詞語集內容寬泛,詞語數(shù)量多,對某一領域沒有針對性,尤其是對于本文研究的書籍評論沒有很好的針對性,造成訓練時間長而準確性不高的問題.其二,傳統(tǒng)方法一般會使用到兩種特征: 詞袋模型(Bag of Words,BoW)和N元模型(n-gram).BoW忽略了詞序,只是單純對詞計數(shù),忽略了文本的上下文關系; n-gram則是考慮到了詞序,但是需要相當規(guī)模的訓練文本來確定模型的參數(shù),并且n-gram模型是根據(jù)相互之間沒有任何遺傳屬性的離散單元詞構建的,從而不具備連續(xù)空間中的詞向量所滿足的語義上的優(yōu)勢,只有在已知關鍵詞權重非常大的情況下,n-gram才會展現(xiàn)出自己的優(yōu)勢[9,10].
本文針對以上兩點問題進行改進: 使用書籍評論文本訓練詞向量構建語料庫,很好地解決了現(xiàn)有語料庫對書籍評論針對性不強的問題,減少了訓練時長,提高了書籍評論情感分析的準確率; 本文使用Word2Vec中的Skip-Gram模型作為生成詞向量的算法,通過中心詞預測周圍詞,考慮文本的上下文關系和詞頻,能夠很好地提高書籍評論情感分析系統(tǒng)的準確率.
本文中的詞向量分為兩個部分,分別是構成語料庫詞典的詞向量集和評論向量(即情感分類神經網絡的輸入詞向量).兩部分詞向量的生成方法不同,前者是由書籍評論文本通過Skip-Gram模型訓練生成,后者是通過前者的詞典生成.
由于現(xiàn)有的相關中文語料庫非常有限[11],語料庫中的詞語范圍寬泛,對書籍評論情感分析的針對性不強,存在訓練時間長但結果不夠準確等問題.為了更好地開展文本情感分析的研究,本文選擇訓練生成語料庫.本文生成語料庫的文本,通過爬蟲技術獲取對圖書購物網站的書籍評論,jieba分詞得到評論的詞語集.詞語集經過Word2vec中的Skip-Gram模型訓練,選擇其中高頻詞的詞向量,構建成一個書籍評論的語料庫.該語料庫對書籍評論情感分析問題的針對性強,很好地解決了現(xiàn)有中文語料庫存在的問題.
現(xiàn)有中文語料庫和本文語料庫得到的文本評論分析訓練情況在本文的第3小節(jié)有所對比.
Word2Vec模型主要有Skip-Gram和CBOW兩種語言模型.本文通過Word2Vec模型中的Skip-Gram生成詞向量.
Skip-Gram模型是一種根據(jù)一個詞語來預測上下文詞語出現(xiàn)概率的語言模型,其網絡結構圖如圖 2 所示.
圖 2 Skip-Gram模型網絡結構圖Fig.2 Network structure diagram of Skip-Gram model
圖 2 中:w(t)代表當前詞語位于句子的位置t,同理定義其他記號.在窗口內(本文的窗口大小為5),除了當前詞語之外的其他詞語共同構成上下文.從圖 2 中可以看出,對于這個模型,輸入層是語料庫中任意一個詞w,投影層將輸入層的詞向量傳遞給輸出層,輸出層輸出最可能的上下文詞向量[12].
Skip-Gram模型的優(yōu)化目標是
(u|?),
(1)
其中,
p(u|?)=
[σ(v(?)Tθu)]Lω(u)[1-σ(ν(?)Tθu]1-Lω(u).
(2)
最終目標函數(shù)為
(ω,?,u),
(3)
其中,
Γ(ω,?,u)=Γω(u)log[σ(ν(?)TθU]+
[1-Γω(u)]log[1-σ(ν(?)TθU)].
(4)
分別求出梯度后,得到更新方法為
θu+=η[Γω(u)-1-σ(ν(?)Tθu)ν(?)],
(5)
ν(?)∶=ν(?)+
(6)
通過這種訓練方法得到的詞向量形如: “好評: [ 1.411 379 1-0.287 171 93 -4.223 255-1.833 177 4 3.616 365 7-0.504 491 15 0.042 088 93 0.034 972 72 0.872 664 87…]”.詞向量的形式為鍵值對,一個詞語文本對應著一個詞向量矩陣.語料庫中的每個詞都對應一個N維的詞向量.選擇高頻詞對應的詞向量作為語料庫的詞典.
評論向量作為情感分析神經網絡的輸入詞向量,由詞向量詞典生成.詞向量詞典包括了高頻、 常見的書籍評論詞語,所以書籍評論中的大部分文本向量都可以在其中找到,某些低頻詞在詞典中找不到則將對應的詞向量記為0,最后生成的評論向量形式為鍵值對,一個帶用戶喜好標簽的文本句子對應著一個詞向量矩陣.例如: “( 這本書很好, 1 ): ( [ 1.411 379 1-0.287 171 93 -4.223 255-1.833 177 4 3.616 365 7-0.504 491 15 0.042 088 93 0.034 972 72 0.872 664 87…] , [1.231 379 1-0.213 311 93 -3.223 255-0.823 177 4 1.616 323 7-0.504 491 15 0.042 088 93 0.034 972 72 0.872 664 87…] , … )”.
本文通過TensorFlow深度學習框架[13]用1D卷積神經網絡實現(xiàn)情感分類器.TensorFlow是一個開源軟件庫,用于各種感知和語言理解任務的機器學習,很適合用來進行大規(guī)模的數(shù)值計算,其中也包括實現(xiàn)和訓練深度神經網絡模型.卷積神經網絡在語音處理、 圖像識別等領域上有著突出貢獻.近年來,人們把越來越多的目光投入到卷積神經網絡在自然語言上的處理.
本文以TensorFlow深度學習框架作為生成卷積神經網絡的后端庫,以Keras作為前端具體實現(xiàn)搭建和訓練模型[14].TensorFlow是一個開放源代碼軟件庫,用于進行高性能數(shù)值計算,可為機器學習和深度學習提供強力支持,并且其靈活的數(shù)值計算核心廣泛應用于許多其他科學領域.在本文使用該框架可以實現(xiàn)快速靈活地構建訓練模型.
卷積神經網絡是一種前饋神經網絡,它的人工神經元可以響應一部分覆蓋范圍內的周圍單元.卷積神經網絡由一個或者多個卷積層和頂層的全連通層組成,同時也包括關聯(lián)權值和比重.這一結構使得卷積神經網絡能夠利用輸入數(shù)據(jù)的二維結構.與其他深度學習結構相比,卷積神經網絡在圖像和語音識別方面能夠給出更好的結果.近年來也在自然語言處理上有著很好發(fā)展[15].
如圖 3 所示,本文將詞向量矩陣層作為情感分類器的輸入層,經過卷積、 池化層后進入全連接層,Softmax層,最后輸出分類結果.該模型訓練迭代10輪后,得到情感分類器的卷積神經網絡模型.其中,卷積、 池化層由3個1D卷積層和最大池化層線性組合構成.卷積、 池化層的結構如圖 4 所示.
圖 3 情感分類器的結構圖Fig.3 Structure diagram of sentiment classifier
輸入層為詞向量矩陣層.詞向量為n*N形式,n為矩陣的長度,N維為每個向量的長度,本文將N設定為100,200,300和400進行對比實驗,維度的設定對情感分類器結果精確度的影響在第3小節(jié)里有所對比.第二層是卷積、 池化層,卷積層為1D卷積層,卷積核的數(shù)目即輸出維度為128,卷積核的窗口長度為5,輸出(5,128)的二維張量.池化層為最大池化層,池化窗口為5,卷積、 池化層交替組合3次后,再線性融合輸入全連接層,全連接層的輸出維度為128,激活函數(shù)為tanh,輸出的張量進入Softmax層,輸出維度為labels_index,在本文中按照用戶喜好分為3類,分別是好評1,中評0和差評-1.模型進行編譯和訓練,訓練模型10輪后輸出模型的結果和精確度.本模型的評估指標使用經典算法accuracy.
圖 4 卷積+池化層結構圖Fig.4 Diagram of convolution + pool layer
如表 1 所示,通過對比現(xiàn)有語料庫和本文生成的語料庫的訓練情況,可知本文生成的語料庫的訓練結果明顯高于現(xiàn)有語料庫.這是由于本文生成的語料庫對書籍評論情感分析問題的針對性強,提高了訓練結果的準確率.
表 1 語料庫的準確率對比
Word2Vec的詞向量維度一般在100維左右,所以本文從100維開始實驗,分別對比了100、 200、 300和400維詞向量訓練結果的準確率.實驗結果表明,300維的詞向量訓練結果較好于其他結果.如表 2 所示,對比了不同詞向量維度和評論數(shù)據(jù)集大小的訓練情況.100維的詞向量存在訓練結果欠擬合的情況,而維度較大(400維)的詞向量會出現(xiàn)過擬合的情況.
表 2 詞向量維度和訓練文本個數(shù)的準確率對比
評論數(shù)據(jù)集大小分別對比了8萬、 10萬和13萬的情況,數(shù)據(jù)集數(shù)量為10萬時訓練結果較好于其他情況.數(shù)據(jù)集數(shù)量為8萬時因數(shù)據(jù)集較少而出現(xiàn)欠擬合的情況,數(shù)據(jù)集數(shù)量為13萬時因數(shù)據(jù)量過大而出現(xiàn)過擬合,準確率降低.
300維10萬數(shù)據(jù)集的訓練結果如圖 5 和圖 6 所示,橫坐標表示迭代次數(shù),縱坐標分別表示訓練的準確率和丟棄率.迭代10次時,準確率可以達到92.99%,丟棄率收斂為16.83%.
圖 5 準確率Fig.5 Accuracy rate
圖 6 丟棄率Fig.6 Loss rate
本文提出了一種基于詞向量預處理和1D卷積神經網絡的文本情感分類方法.通過實驗,確定了構建針對性強的語料庫對訓練結果有明顯的提升.詞向量維度為300維時訓練準確率到達最高值.并且該方法同時適用于長文本、 短文本和混合文本.綜合以上幾個方面,本文訓練的準確率到達了 92.99%,較好于現(xiàn)有的語料庫和方法.
在互聯(lián)網飛速發(fā)展的時代,未來的文本數(shù)據(jù)量將爆炸性的增長.本文研究的只是自然語言處理中眾多類問題其中的一類小問題.在下一步的研究工作中,擬解決以下問題:
1) 由于分詞技術不是本文研究的重點,因此本文中用到的分詞技術為jieba分詞,沒有對其進行優(yōu)化.如果可以依據(jù)不同領域的專業(yè)詞進行劃分,將得到更好的分詞效果.這也是本文之后需要進一步研究的方向.
2) 語料庫中的詞向量可以進一步優(yōu)化,可以針對語料庫中詞向量的維度、 情感評論的占比等因素進行實驗.
3) 相比于傳統(tǒng)的機器學習算法,深度學習有著更有效的訓練結果,如何將這一優(yōu)勢應用到更多的領域,在更多的場景中發(fā)揮其優(yōu)勢也是本文之后的研究方向.