周曉蘭 戴香平 陳洪龍
(湖南科技大學計算機科學與工程學院,湖南湘潭 411201)
情感分析(Sentiment Analysis)是自然語言處理( Natural Language Processing , NLP )領(lǐng)域中的一個重要分支。文本情感分析關(guān)鍵是分析一組文本以理解其所表達的觀點,一般使用正值或負值量化文本所表達的情緒。近年來,基于網(wǎng)絡(luò)平臺文本評論的情感分析越來越多,論文針對實時發(fā)送的文本數(shù)據(jù)使用樸素貝葉斯模型,對獲得的文本數(shù)據(jù),利用SnowNLP 進行情感分析,得出分析結(jié)果。
文本情感分析致力于將單詞、句子和文檔映射到一組相對應(yīng)的情感類別上,繼而得到一個可用于劃分情感狀態(tài)的心理學模型。[1]近年來,深度神經(jīng)網(wǎng)絡(luò)取得了極大的進展,各個主流領(lǐng)域,包括圖像分類、機器翻譯、自然語言處理、語音識別等,均依賴于深度學習技術(shù)提供的高層語義特征及分類方法。
SnowNLP 是適用于中文自然語言處理的Python 類庫,專門針對中文文本進行挖掘,主要可以進行中文分詞、詞性標注、情感分析、文本分類、轉(zhuǎn)換拼音、繁體轉(zhuǎn)簡體、提取文本關(guān)鍵詞、提取摘要、分割句子、文本相似。[2]SnowNLP 類庫中存在已經(jīng)訓練好的模型,因此,在實際使用的過程中,用戶需要根據(jù)實際情況,重新訓練模型。在重新訓練模型的時候,必須修改調(diào)用模型的位置。
樸素貝葉斯模型是一種基于貝葉斯定理與特征條件獨立假設(shè)的,非常簡單、特別有效的分類器,主要應(yīng)用在文本分類、垃圾郵件過濾、疾病診斷等領(lǐng)域。[3]
樸素貝葉斯算法具有很多優(yōu)點,一是它有著堅實的理論基礎(chǔ);二是在訓練和查詢大量數(shù)據(jù)方面效率很高;三是能處理小規(guī)模的數(shù)據(jù);四是即使存在缺失的數(shù)據(jù),對分析的結(jié)果影響也不大;五是易于進行文本分類,分類結(jié)果容易被人理解。
樸素貝葉斯是基于貝葉斯決策理論的分類方法,對于樸素貝葉斯總是假設(shè)特征之間互不關(guān)聯(lián)。例如對于c1 和c2 兩個類別,其特征w1,w2,……,wn 之間是相互獨立的,根據(jù)貝葉斯公式可知:
c1 的貝葉斯模型為:
P(c1w1,w2,……,wn)=P(w1,w2,……,wn|c1)*P(c1)/P(w1, w2,……,wn)
C2 的貝葉斯模型為:
P(c2|w1,w2,……,wn)=P(w1, w2,……,wn|c2)*P(c2)/P(w1, w2,……,wn)
其中:P(w1, w2,……,wn)=P(w1, w2,……,wn|c1)·P(c1)+P(w1, w2,……,wn|c2)·P(c2)。
貝葉斯模型訓練是統(tǒng)計每一個特征出現(xiàn)的正類或負類的頻次,統(tǒng)計好正類和負類數(shù)據(jù)就說明模型訓練完畢。
貝葉斯模型預(yù)測是分別求出P (c1|w1,w2, ……,wn)> 和P(c2|w1,w2,……,wn)的值,然后根據(jù)貝葉斯分類準則判斷。
如果P(c1|w1,w2,……,wn)> P(c2|w1,w2,……,wn),則屬于c1類;如果P(c1|w1,w2,……,wn)
情感分析主要采用SnowNLP 中自然語言處理庫進行核心情感分析。情感分析是在評論文本數(shù)據(jù)獲取完成,且返回了正確的信號值后,再對獲得的評論文本進行情感分析。獲取的實時評論文本先是保存在數(shù)據(jù)庫中,經(jīng)過情感分析后,將分析的結(jié)果同樣保存在數(shù)據(jù)庫中,這些打分結(jié)果可以為其他應(yīng)用提供有用的信息。
2.2.1 采用樸素貝葉斯模型進行分類
樸素貝葉斯通過訓練數(shù)據(jù)集的條件概率分布P(x|y)來學習聯(lián)合概率。
首先用先驗概率分布和條件概率分布來替代聯(lián)合概率。
給定數(shù)據(jù)集:T={(x1,y1),(x2,y2),…,(xN,yN)};
輸出的類別:yi∈{c1, c2, ...., ck}
貝葉斯條件概率是指在事件x 發(fā)生的情況下,事件y 發(fā)生的概率,用P(x|y)表示。先預(yù)估計一個“先驗概率”,然后加入實驗結(jié)果,看這個實驗到底是增強還是削弱了“先驗概率”,由此得到更接近事實的“后驗概率”。
先驗概率分布:
對于樸素貝葉斯模型,各個特征是相不關(guān)聯(lián)的,可以得出條件概率分布:
各特征之間相互獨立,后驗概率分布:
根據(jù)分類公式,模型為:
貝葉斯模型訓練的過程,實際上是統(tǒng)計每一個特征出現(xiàn)的頻次,在SnowNLP 中,貝葉斯模型訓練過程的核心內(nèi)容是sentiment.train()。情感分析結(jié)果寫入數(shù)據(jù)庫。
2.2.2 采用SnowNLP 類庫進行情感分析
SnowNLP 中支持情感分析的模塊在文件夾sentiment 中,其核心代碼在__init__.py。使用snownpl 類庫進行情感分析時,使用到以下重要代碼:
S=SnowNLP(source_data)
Result=S.sentiments
調(diào)用SnowNLP(source_data)創(chuàng)建了一個SnowNLP 類實例S,將需要進行情感分析的數(shù)據(jù)data,作為參數(shù)(object 類型)傳入函數(shù)。調(diào)用S.sentiments,主要是通過類實例調(diào)用該類中的成員方法sentiments(),在該方法中再調(diào)用sentiment 文件中的classify( )方法,而后在classify( )方法中調(diào)用貝葉斯模型,就可以開始情感分析。
調(diào)用SnowNPL_analysis.analysis()和read_and_analysis()進行情感分析,得出分析結(jié)果。
在進行情感分析之前,根據(jù)業(yè)務(wù)需求確定是否要重新訓練模型。業(yè)務(wù)場景要求模糊或者和商品評論的場景相差不大,可以直接使用已訓練的模型進行簡單情感分析,這種情況下得到的結(jié)果的準確度可以達到要求。如果業(yè)務(wù)場景非常明確,且要求結(jié)果非常準確,則需要用典型的語料建立語料庫,重新訓練模型,進行情感分析,以便達到更好的分析結(jié)果。系統(tǒng)要求分析直播平臺的彈幕數(shù)據(jù),彈幕數(shù)據(jù)短小精悍,且含有較多網(wǎng)絡(luò)用語,場景非常明確,從而需要用直播平臺典型的語料建立語料庫(詞典),重新訓練模型。
通過模型訓練,初步獲得新訓練出來的適用于系統(tǒng)業(yè)務(wù)場景的新模型。為了對比訓練模型與未訓練模型的效果,模塊事先預(yù)留了210 條測試數(shù)據(jù)(存放在Excel 表中),預(yù)留數(shù)據(jù)中122條來自網(wǎng)絡(luò)上收集的常見的網(wǎng)絡(luò)彈幕用語,另外88 條為直播間隨機獲取的實時彈幕數(shù)據(jù)。對于這210 條數(shù)據(jù)事先都作了人工情感標簽標注label(消極為-1,積極為1)。
在測試中,設(shè)置打分結(jié)果大于或等于0.5 的為“積極”情感,設(shè)置打分小于0.5 的為“消極”情感,把模型情感分析輸出grade值和模型預(yù)測的情感標簽值predict 保存到到測試數(shù)據(jù)的Excel表中(1 對應(yīng)“積極”,-1 對應(yīng)“消極”),同時比對grade 和人工標注的label 標簽相同的比率(比率越高,說明準確率越高)。對未經(jīng)訓練的模型和進過訓練的模型進行測試,并保存結(jié)果。未經(jīng)訓練模型的測試結(jié)果如圖1 所示,進過訓練模型的測試結(jié)果如圖2 所示。
圖1 未經(jīng)訓練模型的測試結(jié)果圖
圖2 經(jīng)過訓練模型的測試結(jié)果圖
為了模型更加適應(yīng)系統(tǒng)的應(yīng)用場景,系統(tǒng)需要重新訓練模型。模型訓練采用基于詞典與機器學習相結(jié)合的方式進行。對于文本分類來說,訓練語料分類的準確性決定了情感分析結(jié)果的準確率,從而系統(tǒng)還要求從直播平臺語境構(gòu)建情感詞典。
2.3.1 構(gòu)建基礎(chǔ)情感詞典
訓練模塊從相對成熟的文本詞典基礎(chǔ)上進一步拓展情感詞典,內(nèi)容包括現(xiàn)有成熟情感詞典、直播平臺彈幕語、流行網(wǎng)絡(luò)用語和其他網(wǎng)絡(luò)詞匯。系統(tǒng)最終采用知網(wǎng)情感詞典和搜集的網(wǎng)絡(luò)詞匯作為情感詞典。對于搜集的網(wǎng)絡(luò)詞匯,需要有人工情感標記,另外對于知網(wǎng)情感詞典和搜集的網(wǎng)絡(luò)詞匯必須去重后才能作為最終的基礎(chǔ)情感詞典。系統(tǒng)對于最終詞典分出正面情感(正訓練樣本)和負面情感(負訓練樣本),經(jīng)過整理系統(tǒng)中正面情感詞典和負面情感詞典分別超過四千條。
2.3.2 訓練模型
系統(tǒng)采用貝葉斯模型訓練的方法,操作步驟如下:
第一步,準備正負情感分類的樣本,將基礎(chǔ)情感詞典整理成一個正樣本(保存為積極訓練.txt),和一個負樣本(保存為消極訓練.txt);
第二步,利用sentiment.train()方法訓練新的模型(正樣本和負樣本作為sentiment.train()的參數(shù)傳入);
第三步,利用sentiment.save()方法保存最近一次訓練的模型;
第四步,利用最近一次訓練的模型進行情感分析,注意在采用最近一次訓練模型進行后續(xù)情感分析時需要修改訓練模型的路徑(即需要正確傳入最近一次訓練好的模型位置)。
在相同的消極測試樣本下,未訓練的模型輸出的情感分析結(jié)果中,predict 字段標注的值(1,-1)與人工標注的情感標簽值(1,-1)有很多是不一致的,即模型的準確度不高,說明沒有重新訓練的模型(采用SnowNLP 自帶的舊模型)是不適用于本直播平臺的語境的;而在訓練過后,用同樣的方式去分析,就會發(fā)現(xiàn)label 字段和predict 字段的一致性有很大的提升,積極的測試樣本同理。
通過9000 多條數(shù)據(jù)的訓練,在200 多條數(shù)據(jù)的測試下,未訓練時情感分析的準確率為57.1%,經(jīng)過訓練的模型情感分析準確率達到85.7%。從這個結(jié)果可以得出:模型訓練過程是有效的。
從上文可知,初步的訓練是有成效的,后續(xù)需要對模型進行持久的訓練,才能讓模型情感分析效果越來越優(yōu)秀。持續(xù)化訓練方式為每次進行情感分析后,篩選當次情感分析打分結(jié)果中小于0.1 的極端負面評論,將其自動添加入消極訓練文本,然后判斷消極訓練文本中有無通過情感分析新寫入的語料,有則調(diào)用模型訓練的方法進行一輪模型訓練。通過這種自動化的訓練機制,可以隨著系統(tǒng)的持續(xù)運行,持續(xù)提升情感分析模型的準確度。
從測試效果可以看出,系統(tǒng)達到了情感分析效果,但還是存在一定的局限性,由于實時獲取在線數(shù)據(jù)的速度較慢、數(shù)量不夠豐富,導致整體效率和效果理想;另外,樸素貝葉斯模型存在一定的問題,比如,在模型中進行分類決策時有差錯率;對輸入數(shù)據(jù)的形式要求較高;它使用了樣本獨立性假設(shè),但在人們的實際生活中,樣本的屬性其實是相關(guān)聯(lián)的。
當前網(wǎng)絡(luò)文本挖掘的研究發(fā)展迅速,其中網(wǎng)絡(luò)評論情感分析這個技術(shù)領(lǐng)域也十分熱門。隨著情感分析軟件開發(fā)日漸完善,它能夠?qū)崿F(xiàn)對網(wǎng)絡(luò)直播平臺評論(輿論)的正確引導與控制,情感分析領(lǐng)域前景非常廣闊。