柴源
(西安航空學院圖書館,陜西西安 710077)
文本情感識別是指利用自然語言處理和文本挖掘技術,對帶有情感色彩的主觀性文本進行分析、處理和抽取的過程[1]。近年來,在網上商城中,用戶產生了大量對圖書及其服務評論的主觀性文本[2],挖掘這些文本信息,獲取其中隱藏的有價值信息,能有效提高圖書館圖書采選質量[3]。但是,這些文本隱含有較強的語義信息,在詞向量的訓練中,詞袋模型無法表征詞語之間的語義信息;其次,這些文本文檔不能通過一個線性分類器(直線、平面)來實現分類;第三,人工監控分析不僅耗費大量人工成本,而且有很強的滯后性[4]。
Word2vec 模型通過詞向量來表征語義信息,即在詞向量的訓練過程中引入了詞的上下文。SVM 可以將低維空間映射到高維空間,解決線性不可分問題[5]。因此,文中構建了一種基于Word2vec和SVM的在線圖書評論情感識別系統。
Word2vec 是一種詞嵌入(Word Embedding)方法,它根據語料中詞匯共現信息,將詞匯編碼成一個向量,可以計算每個詞語在給定語料庫環境下的分布式詞向量[6]。它包含兩種訓練模型,即跳字模型(Skipgram)和連續詞袋模型(Continuous Bag of Words,CBOW),如圖1 所示。

圖1 Word2vec訓練模型
CBOW 模型是一個三層神經網絡,利用上下文或周圍的詞語來預測當前位置詞語w(t)的概率,即P(w(t)|w(t-k),w(t-(k-1)),…,w(t-1),w(t+1),w(t+2),…,w(t+k))[7];Skip-gram模型的計算方法逆轉了CBOW的因果關系,利用當前位置詞語w(t)來預測上下文中詞的概率,即P(w(i)|w(t)),其中,t-k≤i≤t+k且i≠k[8]。
Word2vec 通過訓練詞向量,可以定量地度量詞與詞之間的相似程度,挖掘詞語之間的語義關系,適合做情感分類。
支持向量機(Support Vector Machine,SVM)是Vapnik 等人于1995 年提出的,它是通過某種事先選擇的非線性映射,將輸入向量映射到一個高維空間中,構造最優分類超平面,將不同類別的樣本分開[9]。超平面是指比原特征空間少一個維度的子空間,在二維情況下是一條直線,在三維情況下是一個平面。研究表明,支持向量機在處理二分類任務時是非常成功的[10]。
在線圖書評論情感識別只有正向和負向兩種結果,本質上也是二分類問題。因此,可構造SVM 分類器,實現在線圖書評論的情感識別。基本原理表述如下:

基于Word2vec和SVM的在線圖書評論情感識別系統的設計主要包括數據預處理、Word2vec 詞向量表示、構造SVM 分類器、文本分類結果等,如圖2所示。

圖2 系統設計
1)數據清洗。去除字母、數字、漢字以外的所有符號。
2)構建用戶情感詞典。采用jieba 技術進行預分詞,提取程度副詞和否定詞,程度副詞表示情感強弱,否定詞會將句子情感轉向相反的方向,而且通常是疊加的,并融合相關情感詞典等構建用戶情感詞典。
3)形成研究數據集。在1)、2)的基礎上過濾掉“的”、“了”等不影響情感表達的詞語,進行二次分詞,形成研究數據集,并將數據集按照0.25的比例劃分為訓練集和測試集,訓練集用于模型的訓練,測試集用于結果測試。
1)模型設置與訓練。Gensim 是一款開源的第三方Python 工具包,用于從原始的非結構化文本中,無監督地學習到文本隱層的主題向量表達,支持包括TF-IDF、LSA、LDA和Word2vec 在內的多種主題模型算法。文中采用Gensim 中的Word2vec 類對訓練集數據進行向量化表示,生成訓練詞表。
2)構建建模矩陣。如圖3 所示,將訓練詞表通過DataFrame 轉化為詞向量矩陣,由于在線圖書評論文本長度各異,所以用各詞向量直接平均(MEAN)的方式生成句向量,完成建模矩陣的構建,實現整個文本文檔的分類處理。

圖3 構建建模矩陣
SVM 分類器的構造主要包括訓練SVM 分類器、驗證分類器、評估分類器、優化分類器以及分類器測試運用等,如圖4 所示。

圖4 構造SVM分類器
1)訓練SVM分類器。在Python環境下,利用sklearn.svm中的SVC類,使用rbf核,設置參數gamma、degree,輸入建模矩陣訓練分類器。選取高斯核函數K(x,xi)=exp(-xi)2,x為訓練集樣本向量,xi為測試集樣本向量,利用訓練集對參數進行訓練。
2)驗證分類器。利用已構造的SVM 分類器,對訓練集中的在線圖書評論文本進行情感識別,將識別錯誤的文本返回訓練集,進行增量訓練。增量訓練指機器學習不僅可以保留已經學習過的知識,也可以從新的樣本中學習新的知識,這種學習是可以迭代的[13]。分類器在初次訓練結束后,將訓練數據的特征向量在訓練好的分類器上進行預測,若預測結果與實際結果不一致,則將該條數據加入到新的訓練集中,之后將所有訓練集中預測失敗的數據作為新的訓練數據進行增量訓練,增加難以預測的訓練集樣本的權重。
3)評估分類器。混淆矩陣和f1-score 是評估分類器性能的重要指標[14],混淆矩陣是一個誤差矩陣,矩陣的每一行表示真實類中的實例,每一列表示預測類中的實例,如表1 所示。

表1 分類結果混淆矩陣
表1 中,TP(True Positive)表示將正例預測為正例;FN(False Negative):將反例預測為反例;FP(False Positive)表示將反例預測為正例;TN(True Negative)表示將正例預測為反例。通過分類結果混淆矩陣,可以判斷不同類型分類的正誤數量。
f1-score 是精確率和召回率的調和平均數,最大為1,最小為0[14],計算流程如下:
計算每個類別下的精確率(Precision)和召回率(Recall),精確率指被分類器判定正例中的正樣本的比重,召回率指的是被預測為正例的占總的正例的比重。計算方式如下:

計算每個類下的f1-score,計算方式如下:

對各個類的f1-score 求均值,得到最后的評測結果,計算方式如下:

4)優化分類器。GridSearchCV 即網格搜索和交叉驗證,輸入參數列表,模型可計算出最優的結果和參數,是普遍使用的一種自動調參方式[15]。研究通過選擇不同的degrees、gammas 參數構造列表,通過循環來尋找預測效果最優的模型。
5)分類器測試運用。Tkinter 模塊是Python的標準Tk GUI 工具包的接口[16],利用Tkinter 構建在線圖書評論情感識別系統應用界面,并在測試集上進行應用。
實驗語料為online_shopping_10_cats 數據集中的圖書評論部分,共4 117 條,正向評論(用1 表示)2 100 條,負向評論(用-1 表示)2 017 條。
實驗在數據清洗、提取程度副詞和否定詞的基礎上,融合知網情感詞典、BosonNLP 情感詞典等,構建用戶情感詞典user_dict。基于此,進行二次分詞,形成研究數據集,并利用sklearn 中的train_test_split將分詞結果、情感分類按照test_size=0.25的比例劃分為訓練集x_train、y_train和測試集x_test、y_test。
1)模型設置與訓練。實驗用Gensim訓練Word2vec模型,調用gensim.models.word2vec()函數對訓練集x_train 數據進行訓練,并生成訓練詞表。參數設置如下:
①size=300,表示特征向量的維度,維度設置越大,需要的訓練數據越多,訓練出來的效果越好;
②window=5,表示窗口大小,即當前詞與預測詞在一個句子中的最大距離;
③min_count=5,表示最小詞頻。訓練時,首先對預處理后的數據集進行詞頻統計,發現小于5的詞語數量龐大且沒有研究意義,所以實驗將最小詞頻設置為5。
2)構建建模矩陣。首先構造整句所對應的所有詞條的詞向量矩陣,然后用各詞向量直接平均的方式生成對應的句向量,完成建模矩陣train_vecs的構建。部分數據如圖5 所示。

圖5 train_vecs建模矩陣(部分)
在生成train_vecs 建模矩陣后,利用sklearn 中的SVC 分類器建立支持向量機模型[17-18],設置kernel=“rbf”,即使用rbf 核,gamma=0.05,即rbf 核相對應的參數為0.05,degree=3 表示模型的冪次方等于3。得到模型后,使用轉換后的矩陣train_vecs和訓練集x_train 數據對模型進行訓練。
分類器訓練完成后,編寫預測函數對訓練集的數據進行驗證,將驗證結果與實際結果不一致的數據加入到新的訓練集中,作為新的訓練數據進行增量訓練,重復多次。準確率在每輪增量訓練時均在上升,但是在后面的迭代時會下降,如圖6 所示。究其原因,在于數據特征向量維度較高,數據集中含有一些與分類關系不大的無關特征。

圖6 精確率與迭代次數關系圖
增量訓練后,查看模型的混淆矩陣、f1-score,如表2 所示。

表2 模型的性能指標
支持度表示相應類中,有多少樣例分類正確。由表2 可知,類別-1的精確率為0.87,類別1的精確率為0.79,精確率均值為0.83,召回率均值為0.82,f1-score 均值為0.82,表明模型具有一定的優化空間。
調用sklearn.model_selection 中的GridSearchCV進行模型優化,設置degrees=[2,3,4,5],gammas=[0.05,0.5,5],通 過{"gamma":gammas,"degree":degrees}尋 找預測效果最優的模型。實驗結果顯示,當degree=5,gamma=5 時,類別-1的精確率為0.96,類別1的精確率為0.91,精確率均值為0.94,召回率均值為0.94,f1-score 均值為0.93,模型的泛化能力得到了一定的提升,如表3 所示。

表3 優化后模型的性能指標
利用Tkinter 構建在線圖書評論情感識別系統應用界面,如圖7 所示,對測試集數據進行測試應用。圖7 中,當輸入在線圖書評論內容后,點擊“識別”,實現對文本內容的情感判斷。例如,輸入文本text=“《海底的秘密》是適合全體讀者的,是無文字,無國界的,充滿了愛,可以讓人永葆青春的,要用心閱讀的書。”時,識別結果為正向。

圖7 在線圖書評論情感識別系統應用界面
在線圖書評論反映了消費者對圖書的各種情感色彩和情感傾向,具有一定的研究價值和使用價值。研究以online_shopping_10_cats 數據集中的圖書評論部分為實驗數據,經過jieba 分詞、用戶情感詞典整合等文本預處理,采用Word2vec 將詞語轉化為可計算、結構化的向量,得到語義化的特征矩陣;構造SVM 分類器模型,采用增量訓練和GridSearchCV 優化分類器,并應用Tkinter 實現文本信息情感識別可視化。實驗結果表明,該系統精確率為0.94,召回率為0.94,f1-score 為0.94,泛化能力較強。