劉 陽, 高 巍, 李大舟
(沈陽化工大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院, 遼寧 沈陽 110142)
隨著微博的快速發(fā)展,越來越多的人習(xí)慣用微博來發(fā)表自己對事物的看法.在微博上,人們有一定的言論自由,各抒己見,因此,如果我們想要得到一個(gè)正確的觀點(diǎn),就需要對大量的微博文本進(jìn)行情感分析.而且隨著輿情信息越來越多,輿情的監(jiān)控也變得更加困難,所以,對微博情感分析的研究具有重要意義.
情感分析又稱傾向性分析,它是對帶有情感色彩的主觀性文本進(jìn)行分析、處理、歸納和推理的過程[1].情感傾向性分析主要有以下幾個(gè)方面:中文語料處理,抽取情感詞、程度副詞及否定詞,計(jì)算情感得分.其中在中文語料處理方面,基于詞典的分詞方法雖然算法簡單,運(yùn)算效率高,但是隨著互聯(lián)網(wǎng)的發(fā)展,對一些新的詞匯或符號等的加入,詞典不能及時(shí)自動更新,其弊端也逐漸暴露[2].所以,本文采用基于隱馬爾可夫模型(HMM)的維特比算法做中文分詞處理[3].在語義分析方面,基于情感詞典的情感分析方法因具有簡單、易于理解、處理速度快、情感傾向性判斷準(zhǔn)確等優(yōu)勢利用率比較高.因此,本文利用知網(wǎng)開放的情感分析用詞語集[4]進(jìn)行語義分析,計(jì)算情感得分,判斷情感傾向.
馬爾可夫模型是由俄國化學(xué)家Markovnikov于1870年提出的一種統(tǒng)計(jì)模型,在語音識別、詞性自動標(biāo)注、音字轉(zhuǎn)換、概率文法等各個(gè)自然語言處理領(lǐng)域有著廣泛的應(yīng)用.馬爾可夫模型本質(zhì)上是一種隨機(jī)過程,即表示在某事件發(fā)展的過程中,每一次狀態(tài)的轉(zhuǎn)移都取決于前一時(shí)刻的狀態(tài),與過去的狀態(tài)無關(guān),這樣的狀態(tài)鏈稱為馬爾可夫鏈.而馬爾可夫預(yù)測法就是一種基于馬爾可夫鏈去預(yù)測事件發(fā)生概率的方法[5].
隱馬爾可夫模型是一個(gè)二重馬爾可夫隨機(jī)過程,包括具有狀態(tài)轉(zhuǎn)移概率的馬爾可夫鏈和輸出觀測值的隨機(jī)過程,其狀態(tài)只有通過觀測序列的隨機(jī)過程才能表現(xiàn)出來.隱馬爾可夫模型提供了一種基于訓(xùn)練數(shù)據(jù)的概率自動構(gòu)造識別系統(tǒng),在信息抽取領(lǐng)域己經(jīng)表現(xiàn)出很好的發(fā)展勢頭.
隱馬爾可夫模型可以用5個(gè)元素來描述,包括2個(gè)狀態(tài)集合和3個(gè)概率矩陣.
(1) 可觀測狀態(tài)O:在模型中與隱含狀態(tài)相關(guān)聯(lián),可通過直接觀測得到.
O={o1,o2,…,on}.
(1)
其中n為可觀測值的個(gè)數(shù).
(2) 隱含狀態(tài)S:這些狀態(tài)之間滿足馬爾可夫性質(zhì),是馬爾可夫模型中實(shí)際所隱含的狀態(tài).這些狀態(tài)通常無法通過直接觀測得到.
S={s1,s2,…,sm}.
(2)
其中m為隱含狀態(tài)個(gè)數(shù).
(3) 初始狀態(tài)概率矩陣П={πi},表示隱含在初始時(shí)刻的概率矩陣.
(3)
其中πi表示狀態(tài)si在初始時(shí)刻的概率.
(4) 隱含狀態(tài)概率矩陣A:描述了HMM模型中各個(gè)狀態(tài)之間的轉(zhuǎn)移概率.
A=[aij]M×M,aij=Q(pt+1=sj|pt=st),
1≤i,j≤N.
(4)
其中:A是一個(gè)M×M階的狀態(tài)轉(zhuǎn)移概率矩陣;aij表示狀態(tài)si到sj之間的轉(zhuǎn)換概率.
(5) 觀測狀態(tài)轉(zhuǎn)移概率矩陣B.
B=[bj(k)]M×N,bj(k)=Q(Ht=
Ok|Pt=Sj), 1≤i≤M, 1≤k≤N.
(5)
bj(k)表示在狀態(tài)sj時(shí)刻觀測值OK的概率.
通過以上內(nèi)容可知:隱含狀態(tài)概率矩陣A和觀測狀態(tài)轉(zhuǎn)移概率矩陣B中皆有對可觀測狀態(tài)O和隱含狀態(tài)S的說明,因此,將隱馬爾可夫模型表示為λ=(П,A,B).
維特比算法由安德魯·維特比(Andrew Viterbi)于1967年提出,是一個(gè)特殊但應(yīng)用最廣的動態(tài)規(guī)劃算法.其用于尋找最有可能產(chǎn)生觀測事件序列的維特比路徑-隱含狀態(tài)序列,特別是在馬爾可夫信息源上下文和隱馬爾可夫模型中,利用動態(tài)規(guī)劃,可以解決任何一個(gè)圖中的最短路徑問題.而維特比算法是針對一個(gè)特殊的圖——籬笆網(wǎng)絡(luò)(Lattice)的有向圖的最短路徑問題提出的[6],使用HMM描述的問題都可以用它來解碼,中文分詞即是其中一個(gè).
算法實(shí)現(xiàn)主要步驟如下:
(1) 初始化,計(jì)算t=1時(shí)刻的概率,參數(shù)δt(i)表示在t時(shí)刻到狀態(tài)為i的各個(gè)節(jié)點(diǎn)的最大概率,即最短路徑
δ1(i)=πibi(o1),φ1(i)=0 .
(6)
(2) 迭代計(jì)算,計(jì)算t=2時(shí)刻的概率,參數(shù)φt(i)表示在t時(shí)刻到i狀態(tài)經(jīng)過的最大概率的路徑之前的一個(gè)節(jié)點(diǎn),并且它將經(jīng)過的最短路徑的節(jié)點(diǎn)依次保存.
δ1(j)=max1?i?N[δi-1(i)aij]bj(ot),
2i?t?T, 1?j?N,
(7)
2?t?T, 1?j?N.
(8)
(9)
(10)
(4) 回溯,根據(jù)最終得出的最短路徑,依次向前回溯每個(gè)節(jié)點(diǎn).
t=T-1,T-2,…,1.
(11)
以“小明碩士畢業(yè)于中國科學(xué)院計(jì)算所”為例,將初始狀態(tài)概率矩陣Π、隱含狀態(tài)概率矩陣A和觀測狀態(tài)轉(zhuǎn)移概率矩陣B利用維特比算法求解,根據(jù)表1得到兩個(gè)矩陣δ[4][15]和φ[4][15].
δ[4][15],其中4是狀態(tài)數(shù)(0:B,1:E,2:M,3:S),15代表句子的總字?jǐn)?shù).φ[4][15]同δ[4][15]一樣,4是狀態(tài)數(shù)(0:B,1:E,2:M,3:S),15代表句子的總字?jǐn)?shù).這里對最大概率的前一個(gè)字的狀態(tài)做記錄,就是為了下一步利用維特比算法計(jì)算完整矩陣δ[4][15]之后,對之前輸入的句子進(jìn)行反向回溯,即得出最優(yōu)的狀態(tài)序列.
表1 各分詞初始狀態(tài)表Table 1 Initial state table of each participle
先對δ進(jìn)行初始化,使用初始狀態(tài)概率矩陣Π和觀測狀態(tài)轉(zhuǎn)移概率矩陣B對δ二維數(shù)組進(jìn)行初始化.由觀測狀態(tài)轉(zhuǎn)移概率矩陣B可以得出表2所示概率.
表2 下標(biāo)0觀測狀態(tài)轉(zhuǎn)移概率矩陣Table 2 Subscript 0 observation state transition probability matrix
接下來初始化δ[i][0] 的值如表3所示.
表3 對0初始化Table 3 Initialization of 0
最后遍歷找出δ的最大值,并且記錄出φ的值:
for(size_ti=1;i<15;i++)//遍歷句子,對0已初始化結(jié)束,即從1開始
{
for(size_tj=0;j<4;j++)//遍歷可能的狀態(tài)
{δ[j][i]=MIN_DOUBLE;
φ[j][i]=-1;
for(size_tk=0;k<4;k++)//遍歷前一個(gè)字可能的狀態(tài)
{
double tmp=δ[k][i-1]+_transProb[j][sentence[i]];
If 9tmp>δ[j][i])//找出最大的δ[j][i]值
{
δ[j][i]=tmp;
φ[j][i]=k;
}
}
}
}
算法執(zhí)行完畢后,δ[4][15]和φ[4][15]的值計(jì)算完成,接下來就是要找到最優(yōu)序列.對于每個(gè)輸入的句子,根據(jù)中文分詞的規(guī)則,最后一個(gè)字的狀態(tài)只可能是 E 或者 S.本文中只要比較δ[4][15]和φ[4][15]的大小.δ[1][14]=-102.492,φ[3][14]=-101.632 ,因此,最優(yōu)路徑的起點(diǎn)是φ[3][14],對此路徑進(jìn)行回溯,得到序列“SEBEMBEBEMBEBEB”,進(jìn)行倒序可得“BEBEBMEBEBMEBES”,進(jìn)行切詞可得“BE/BE/BME/BE/BME/BE/S”,最終可得分詞結(jié)果為“小明/碩士/畢業(yè)于/中國/科學(xué)院/計(jì)算/所”.
使用知網(wǎng)的情感分析用詞語集進(jìn)行語義分析,并計(jì)算得分,根據(jù)得分的正負(fù)來判斷情感的傾向性.其中得分大于0的為正向情感、小于0的為負(fù)向情感,等于0的為中性情感.表4、表5為知網(wǎng)發(fā)布的“情感分析用詞語集(beta版)”,共12個(gè)文件.其中“中文情感分析用詞語集”與“英文情感分析用詞語集”各6個(gè),一共包含詞語 17887個(gè).文件中已經(jīng)將根據(jù)情感傾向分為6類,分別為“正面評價(jià)”詞語、“負(fù)面評價(jià)”詞語、“正面情感”詞語、“負(fù)面情感”詞語、“主張” 詞語、“程度級別”詞語.
2.1.1 情感詞
情感詞,是主體對于某一客體表示內(nèi)在評價(jià)的詞語,帶有強(qiáng)烈的情感色彩.情感詞有兩個(gè)屬性:情感極性(Emotional polarity)和強(qiáng)度(intensity),其中情感極性又分為正向情感、中性情感和負(fù)向情感,見表4.正向情感和負(fù)向情感分別賦值2分和-2分.
表4 情感詞Table 4 Emotional words
2.1.2 程度副詞
程度副詞是對一個(gè)形容詞或者副詞在程度上加以限定或修飾的副詞,其本身沒有情感傾向性,但被程度副詞修飾的情感詞的情感強(qiáng)度會被程度副詞影響.如果忽略程度副詞對情感詞的影響,即使文本的傾向性不變,但情感傾向性的強(qiáng)度一定會有所偏差.程度副詞及權(quán)值見表5.
表5 程度副詞及權(quán)值Table 5 Degree adverbs and weights
2.1.3 否定詞
否定詞本身沒有情感傾向性,但否定詞能夠改變情感的傾向性,知網(wǎng)給出的詞集中沒有否定詞集,本文對日常使用的一些常用的否定詞做了匯總并將其構(gòu)建為否定詞詞典:
沒 沒有 不 不要 不曾 毋 非 莫 弗 勿 否 別 無 休 無 難以 未 未曾 未必
計(jì)分方法如下:
(1)如果某語句中有情感詞,那么該語句的情感得分為:
Score=Emotional polarity×intensity
(2)如果情感詞前有程度副詞,那么該語句的情感得分將受程度副詞的影響,得分為:
Score=Score×weight
(3)如果情感詞前有否定詞,否定詞能改變語句的極性,此時(shí)的情感得分為:
Score=-Score
這里將(2)中的情感得分加負(fù)號是因?yàn)榉穸ㄔ~會改變語義的極性.如:“開心”,“不開心”,多了一個(gè)“不”字,整個(gè)句子的傾向性就變得完全相反了.
(4)當(dāng)一個(gè)句子中同時(shí)出現(xiàn)否定詞和程度副詞時(shí),依次根據(jù)否定詞與程度副詞出現(xiàn)的先后順序計(jì)算得分.
利用基于HMM的維特比算法對“這樣的酒店配這樣的價(jià)格著實(shí)不錯(cuò),我很滿意!”這句話進(jìn)行中文分詞并且去除停用詞,即得到:
酒店/配/價(jià)格/著實(shí)/不錯(cuò),很/滿意
依次將處理后得到的單詞與知網(wǎng)情感詞典進(jìn)行逐個(gè)查找,如果能找到,則是情感詞,記錄該情感詞的位置,表示為(詞語位置,情感詞,得分).然后以每個(gè)情感詞為基準(zhǔn),向前依次尋找程度副詞、否定詞,并作相應(yīng)分值計(jì)算.隨后對分句中每個(gè)情感詞的得分作求和運(yùn)算.每個(gè)句子的得分再求和即得到文章的情感得分,根據(jù)分值即可分析情感傾向性.
得分計(jì)算過程如下:
(1)依次從左至右掃描詞語,得到情感詞“不錯(cuò)”,得分+2并記錄詞語位置,(5,“不錯(cuò)”,2).
向前依次尋找否定詞或程度副詞,找到一個(gè)程度副詞“著實(shí)”,該程度副詞的權(quán)值為1.3,計(jì)算得分1.3×2=2.6 ,更新情感得分為:(5,“著實(shí)”,2.6 ).
(2)從第5個(gè)詞繼續(xù)向后掃描詞語,得到情感詞“滿意”,得分+2并記錄詞語位置,(7,“滿意”,2 ).
(3)從位置7向前尋找否定詞或程度副詞,找到一個(gè)程度副詞“很”,該程度副詞的權(quán)值為1.3,計(jì)算得分 1.3×2=2.6 ,更新情感得分為:(7,“滿意”,2.6 ).
(4)然后從第7個(gè)位置向后尋找情感詞,直至結(jié)束.
最終這個(gè)句子的情感得分為2.6+2.6=5.2 ,為正向情感.
文章主要研究的是怎樣判斷文本的情感傾向性.重點(diǎn)介紹了如何進(jìn)行中文分詞,以及計(jì)算情感得分的方法,并通過得分來判斷情感的傾向性.通過實(shí)驗(yàn)驗(yàn)證了算法的有效性.實(shí)驗(yàn)利用Python爬取的新浪微博文章進(jìn)行測試,共計(jì)200篇文章,得分分布情況如圖1所示,情感傾向匯總?cè)鐖D2所示.
圖1 情感得分分布Fig.1 Emotional score distribution
圖2 情感傾向匯總Fig.2 Summary of emotional tendencies
由圖2可知:正向情感128篇,中性情感20篇,負(fù)向情感52篇.實(shí)驗(yàn)表明:通過基于HMM的維特比算法以及基于情感詞典的情感傾向性分析方法,能有效判斷微博文本的情感傾向性,這為未來微博輿情分析提供了有效方法.
采用基于情感詞典的情感傾向性分析方法,有效利用了詞典中各個(gè)詞語之間的語義聯(lián)系,挖掘出情感詞,得到大量的情感詞語.但是隨著科技的發(fā)展,情感的表達(dá)方式多種多樣,比如利用表情或者符號等,因此,不能只靠單純的文本分析方法確定文章中所有情感的傾向性.未來對于這一方面還要做出很多改進(jìn),完善情感詞典,利用標(biāo)點(diǎn)符號或表情符號等改進(jìn)計(jì)分策略.