薛 濤
(運(yùn)城師范高等??茖W(xué)校數(shù)計(jì)系,山西 運(yùn)城 044000)
情感分析是自然語(yǔ)言處理(NLP)的關(guān)鍵任務(wù)之一,對(duì)計(jì)算機(jī)理解文本具有重要意義[1]。 與圖像和音頻相比,文本是一種高度抽象的信號(hào),計(jì)算機(jī)很難對(duì)其進(jìn)行理解和處理。情感分析主要集中在文本的情感表達(dá)上,以預(yù)測(cè)文本所表達(dá)的情感積極的(如同意)還是消極的(如不同意、貶義)。在現(xiàn)實(shí)生活中,情緒分析可以應(yīng)用于許多場(chǎng)景,例如分析財(cái)務(wù)新聞以預(yù)測(cè)股票市場(chǎng)的動(dòng)向;分析電影的評(píng)價(jià)以預(yù)測(cè)其票房。社交媒體作為一種免費(fèi)共享的工具,其用戶可以表達(dá)自己的觀點(diǎn),共享知識(shí)并在社交網(wǎng)絡(luò)上創(chuàng)建內(nèi)容[2-3]。對(duì)社交媒體的文本進(jìn)行情感分析,量化情感并挖掘分布或規(guī)律性,可以從中獲得有價(jià)值的信息。本文以新浪微博為研究對(duì)象,以Python編程語(yǔ)言[4]為基礎(chǔ),探討基于機(jī)器學(xué)習(xí)技術(shù)的中文情感分析方法。
所設(shè)計(jì)的情感分析方法的主要流程如圖1所示。首先,通過(guò)網(wǎng)絡(luò)爬蟲從微博網(wǎng)頁(yè)獲得微博文本。將微博的評(píng)論作為語(yǔ)料庫(kù),將每個(gè)評(píng)論視為文檔。在完成預(yù)處理后,將所有經(jīng)過(guò)預(yù)處理的文本輸入到連續(xù)詞袋(CBOW)模型[5]中進(jìn)行詞嵌入。接下來(lái),將詞嵌入后的向量作為堆疊雙向長(zhǎng)期短期記憶網(wǎng)絡(luò)(SBLSTM)的輸入。最后,采用softmax分類器從最后一個(gè)隱藏層中提取信息,并對(duì)標(biāo)簽文本進(jìn)行情感分析。
圖1 情感分析流程
采用微博提供的API來(lái)進(jìn)行爬蟲,從網(wǎng)頁(yè)抓取評(píng)論(部分代碼如圖2所示)。抓取到的數(shù)據(jù)為JSON格式(主要字段如圖3所示),對(duì)其進(jìn)行解析后就可以得到評(píng)論的原文[6]。從JSON文件中獲取原始文本后,首先使用Python的PyQuery庫(kù)對(duì)原始文本進(jìn)行解析以刪除原始文本中的html標(biāo)簽,然后對(duì)這些文本進(jìn)行預(yù)處理。微博文本通常會(huì)包含噪音,如哈希標(biāo)簽、回復(fù)符號(hào)以及引用符號(hào)。因此預(yù)處理過(guò)程會(huì)將數(shù)據(jù)中的噪音清除,以提高數(shù)據(jù)質(zhì)量,從而提高情感分析的準(zhǔn)確性。同時(shí),還通過(guò)刪除與主題無(wú)關(guān)的評(píng)論,以減少不相關(guān)的特征。預(yù)處理后,使用Python的中文分詞庫(kù)jieba對(duì)評(píng)論進(jìn)行分割,并刪除停止詞。
圖2 通過(guò)API獲取微博部分Python代碼
圖3 微博JSON格式
詞表示模型的基本思想是將單詞映射成向量??臻g中詞向量的距離取決于它們的語(yǔ)義或上下文相似性。采用CBOW模型來(lái)進(jìn)行詞嵌入,并將詞嵌入到100維的空間中文檔表示模型能根據(jù)上下文信息捕獲文檔的特征。首先對(duì)網(wǎng)絡(luò)輸入的長(zhǎng)度進(jìn)行歸一化:當(dāng)句子的長(zhǎng)度大于K時(shí),會(huì)將多余的單詞去除;否則,使用零對(duì)輸入進(jìn)行補(bǔ)充。然后,通過(guò)使用嵌入向量替換評(píng)論中的詞,得到了順序詞向量。接下來(lái),采用SBLSTM模型學(xué)習(xí)順序詞向量的特征。最后,提取最后一個(gè)隱藏層的值來(lái)表示文檔。由于模型的輸入是詞嵌入的向量,最終的文檔向量會(huì)包含語(yǔ)義信息和上下文信息。
然后,將softmax分類器應(yīng)用到SBLSTM模型的輸出來(lái)進(jìn)行情感分析。使用交叉熵來(lái)評(píng)估預(yù)測(cè)值和實(shí)際值之間的差異,并為每個(gè)評(píng)論計(jì)算損失值?;趽p失值,使用Adam優(yōu)化器[7]來(lái)優(yōu)化模型的參數(shù)。
介紹基于SBLSTM模型的情感分析。圖4展示了用于情感分析的2層堆疊式雙向LSTM網(wǎng)絡(luò)的基本結(jié)構(gòu)。給定N條評(píng)論,每條評(píng)論都包含了K個(gè)單詞。令X={X1,...,XN}表示N條評(píng)論的集合,令Xi={X1,...,XK}表示評(píng)論Xi的單詞集合。該模型的目標(biāo)是預(yù)測(cè)每個(gè)評(píng)論的情感Y。對(duì)于評(píng)論Xi,其情感Yi只能是消極(用(1,0)表示)或者積極(用(0,1)表示)。因此,將輸入中客觀中立的評(píng)論刪除。使用SBLSTM模型進(jìn)行情感分析包括三個(gè)步驟:首先對(duì)輸入進(jìn)行預(yù)處理;然后建立SBLSTM模型,提取上下文特征來(lái)表示文檔;最后將輸出放入softmax分類器中以進(jìn)行情感分析。
圖4 SBLSTM網(wǎng)絡(luò)的基本結(jié)構(gòu)
首先,為了確保模型可以獲得相等大小的輸入,需要對(duì)評(píng)論的長(zhǎng)度進(jìn)行標(biāo)準(zhǔn)化:如果評(píng)論的長(zhǎng)度大于K(該評(píng)論的單詞數(shù)量超過(guò)K個(gè)),那么超出的單詞會(huì)被刪除;如果評(píng)論的長(zhǎng)度小于K,則使用零進(jìn)行補(bǔ)充,直到其長(zhǎng)度達(dá)到K。然后,將評(píng)論中的每個(gè)單詞映射為一個(gè)D維矢量。如果單詞在嵌入模型中沒有對(duì)應(yīng)的向量,則將其替換為元素全部為零的D維矢量。
使用兩層SBLSTM模型來(lái)獲取每個(gè)評(píng)論的文檔表示。SBLSTM可以從過(guò)去和將來(lái)的時(shí)間序列中獲取豐富的上下文信息,而且SBLSTM具有更多的上層來(lái)進(jìn)行進(jìn)一步的特征提取。
對(duì)于時(shí)間序列T,輸入序列{x1,...,xT}沿前向{a1,...,aT}進(jìn)入隱藏層以獲得過(guò)去的完成信息,并沿反向{c1,...,cT}進(jìn)行隱藏層以獲得將來(lái)的完整信息。之后,上層隱藏層將下層隱藏層的輸出作為輸入,以提取更多特征。具體來(lái)說(shuō),前向隱藏層的上層是{b1,...,bT}和反向隱藏層的上層為{d1,...,dT}。最后,輸出層將兩個(gè)上層的隱藏向量集成在一起作為它們的輸出。圖4中的每個(gè)隱藏層節(jié)點(diǎn)代表一個(gè)LSTM單元。LSTM單元的如圖5所示。該單元具有一個(gè)新的存儲(chǔ)器、一個(gè)輸入門、一個(gè)遺忘門和一個(gè)輸出門。新存儲(chǔ)器代表添加新輸入后的新候選值,輸入門代表存儲(chǔ)在單元狀態(tài)中的新信息,遺忘門意味著從單元狀態(tài)中轉(zhuǎn)儲(chǔ)哪些信息,輸出門決定要輸出單元狀態(tài)的哪些部分,控制參數(shù)決定信息的存儲(chǔ)或丟棄。
圖5 LSTM單元
對(duì)于第一個(gè)前向傳播層,其隱藏狀態(tài)at由以下的公式?jīng)Q定:
Ca(t)=ia(t)⊙ua(t)+fa(t)⊙Ca(t-1),
a(t)=oa(t)⊙tanh(Ca(t))
(1)
對(duì)于隱藏狀態(tài)b(t)、c(t)和d(t),可以采用類似(1)的方法計(jì)算。神經(jīng)網(wǎng)絡(luò)最終的輸出O(t)是第二個(gè)前向傳播層和第二個(gè)反向傳播層的組合,即
O(t)=UOb(t)+WOd(t)+bO
(2)
Softmax分類器將SBLSTM的輸出OK作為其輸入,預(yù)測(cè)評(píng)論的情感y。預(yù)測(cè)值y*可以通過(guò)以下公式計(jì)算:
(3)
然后,使用交叉熵來(lái)訓(xùn)練損失函數(shù)。損失函數(shù)的表達(dá)式如下所示:
(4)
使用Adam優(yōu)化器[7]自適應(yīng)地調(diào)整學(xué)習(xí)率并優(yōu)化模型的參數(shù)?;赑yTorch開源機(jī)器學(xué)習(xí)平臺(tái)實(shí)現(xiàn)了SBLSTM,主要代碼如圖6所示。
實(shí)驗(yàn)所采用的數(shù)據(jù)集由30,000條微博評(píng)論構(gòu)成,其中15,140條微博評(píng)論被標(biāo)注為積極評(píng)論,14,860條微博被標(biāo)注為消極評(píng)論。從中隨機(jī)選擇75%的數(shù)據(jù)作為訓(xùn)練數(shù)據(jù)集,剩余25%的數(shù)據(jù)作為測(cè)試數(shù)據(jù)。
圖6 基于Python實(shí)現(xiàn)的SBLSTM主要代碼
實(shí)驗(yàn)使用100維的單詞嵌入向量作為所有模型的輸入,最大句子長(zhǎng)度設(shè)置為13個(gè)單詞。使用截?cái)嗾龖B(tài)分布(均值為0、方差為1)對(duì)網(wǎng)絡(luò)權(quán)重進(jìn)行初始化。在SBLSTM網(wǎng)絡(luò)中,每一層隱藏層擁有64個(gè)節(jié)點(diǎn),每次輸入到神經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)大小為300。
選擇精度、召回率和F-度量作為性能評(píng)估的指標(biāo),其計(jì)算方式分別如下所示:
(5)
(6)
(7)
其中,Pre是指精度,Rec是指召回率,F(xiàn)是F-度量。TP是指被預(yù)測(cè)為正樣本,實(shí)際上也是正樣本的數(shù)量;FP是指被預(yù)測(cè)為正樣本,實(shí)際上是負(fù)樣本的數(shù)量,F(xiàn)N是指被預(yù)測(cè)為負(fù)樣本,實(shí)際上是正樣本的數(shù)量。
選擇SVM、CNN和LSTM網(wǎng)絡(luò)作為對(duì)比對(duì)象,對(duì)比結(jié)果如表1所示。本文設(shè)計(jì)的SBLSTM模型具有較高的預(yù)測(cè)精度。其中,深度學(xué)習(xí)模型(即CNN、LSTM和SBLSTM)的性能要好于傳統(tǒng)機(jī)器學(xué)習(xí)方法(即SVM)。與LSTM相比,SBLSTM擁有更多的隱藏層,具有更好的特征表示能力,因此能獲得更好的性能表現(xiàn)。
表1 實(shí)驗(yàn)結(jié)果
采用機(jī)器學(xué)習(xí)技術(shù),以Python高級(jí)編程語(yǔ)言為基礎(chǔ),設(shè)計(jì)了一種情感分析方法。該方法使用CBOW來(lái)表示單詞的語(yǔ)義特征,利用SBLSTM神經(jīng)網(wǎng)絡(luò)模型從順序的單詞嵌入向量中提取上下文特征。實(shí)驗(yàn)結(jié)果表明,該方法比現(xiàn)有的常用模型具有更好的性能。未來(lái)的研究工作將采用注意力機(jī)制來(lái)進(jìn)一步提高方法的學(xué)習(xí)能力,并設(shè)計(jì)更高效的預(yù)處理方法來(lái)提高輸入數(shù)據(jù)集的質(zhì)量。