馬 海 馬 力
(西安郵電大學 西安 710121)
文本情感分析[2]是對文本的情感極性的分析、主題的判別、意見的挖掘以及情感細粒度的分類等。簡言之,是對帶有情感色彩的主觀性文本進行分析、處理、歸納和推理的過程[1]。隨著互聯(lián)網(wǎng)的快速發(fā)展,以及社交網(wǎng)絡的日?;?,讓世界各地的網(wǎng)民可以同時發(fā)表自己的意見,這樣的數(shù)據(jù)才能更有效地體現(xiàn)出大眾對于某件事、某件商品、某個政策、某個人、某個國家等的評價[3]。這些文本數(shù)據(jù)包含了大眾的個人情感色彩,例如喜、怒、哀、樂等。細粒度情感的分類更能體現(xiàn)出大眾的情感細微變化,對于政府和商家來說就能夠更具體地引導大眾情感與推廣商品[5]。
目前,關于情感細粒度方面的詞典研究工作還比較少,Ekman的六大類情感分類體系[12]在國外相對來說具有很大的影響力;國內在Ekman的六大類情感分類中再添加了一種情感“好”也就是形成了七大類情感,同時在大連理工大學信息檢索研究室林鴻飛教授的指導下,經(jīng)過全體研究人員的努力,最終得到了中文情感詞匯本體庫,此庫包括七大類情感類別和二十一小類情感類別。其中七大類情感類別分別為樂、好、怒、哀、惡、驚、懼;二十一小類情感又分為{快樂(PA)、安心(PE)}、{尊敬(PD)、贊揚(PH)、相信(PG)、喜愛(PB)、祝愿(PK)}、{憤怒(NA)}、{悲傷(NB)、失望(NJ)、疚(NH)、思(PE)}、{煩悶(NE)、憎惡(ND)、貶責(NN)、妒忌(NK)、懷疑(NL)}、{驚奇(PC)}、{慌(NI)、恐懼(NC)、羞(NG)}。
由于人類情感的復雜性,人們表達的情感不一定就是目前七大類明確的情感分類,情感的表達還可能存在模糊情感(這里將其定義為中間情感類別),例如“樂”衍生出的“不樂”,它只傳達給我們“不樂”,而無法確定是其他六類情感中的哪一類。故,本文提出了十四大類情感類別,即樂、不樂、好、不好、怒、不怒、哀、不哀、惡、不惡、驚、不驚、懼、不懼。同時在文獻[1]中情感分類算法上進行了改進,最終得到自己的基于詞典的情感細粒度分類算法,并通過對2017 年11 月23 號開始發(fā)生的紅黃藍事件近一個月的微博數(shù)據(jù)進行實驗分析。
要對微博文章進行情感細粒度分類,就必須先要對其文章進行預處理,因為未處理的文章不能通過算法進行情感細粒度分類,未處理的文章中包括很多其他非標點符號,還有很多噪聲詞匯,比如,很多虛詞、助詞、代詞、介詞都沒有情感,同時針對于各種話題時可能話題詞內含有情感詞匯,這樣分詞后此情感詞會干擾整條微博文章的情感分類。
微博文章預處理是一個必不可少的重要環(huán)節(jié),它可以減少情感分類環(huán)節(jié)的計算量[12]。微博文章預處理大致可以分為兩大步,第一步是對文章的分詞操作(本文在這里會先加入相應話題的分詞詞典,提高微博情感的分類率。),第二步是停用詞的過濾,在這里利用專門的停用詞詞典對文章的分詞結果進行匹配過濾。本文微博文章預處理流程圖如圖1所示。
圖1 微博文章預處理流程圖
情感分析[8]是分析個人對客觀事物的主觀評價所產(chǎn)生的情感傾向的分析,提到微博情感分析我們就得涉及兩個概念,一個是情感傾向方向,另一個是情感傾向度。
情感傾向方向[16]也可以稱其為情感類別,這里使用中文情感詞匯本題庫里的七大類情感類別為基礎情感類別,由于事物都有兩面性,本文就提出了十四大類情感類別,這里只是根據(jù)情感詞前面的否定詞來判斷七大情感類別的對立面情感,由于衍生出的情感類別可能包含多種情感傾向,例如“好”衍生出的“不好”這種情感可能是“惡”,也可能是“哀”等,故本文將此類情感定義為中間情感類別。
情感傾向度[19]是指個體對客關事物表達個人主觀情感時的強弱程度,不同的情感程度往往是通過不同的情感詞或情感語氣等來體現(xiàn)。例如:“友鄰”與“佳句”都是表達“好”的情感,極性同為褒義的詞。但是“友鄰”要比“佳句”在表達情感程度上要弱一些。通常在情感傾向分析研究中,為了區(qū)分兩者的程度差別,采取給每個情感詞賦予不同的權值來體現(xiàn)。
相對于文獻[1]來說,本文主要提出了轉折詞和主張詞對于情感分析的重要性,它們能體現(xiàn)出整句微博的情感重點在哪,無形減少了許多不必要的計算量。例如:“你雖然人很不錯,但是我還是不喜歡你?!?,如果沒有轉折詞的計算過程,整句話就得計算“不錯”和“喜歡”這兩個情感詞的情感傾向度,而添加了轉折詞的計算過程,整句話就會直接計算“但是”之后的情感傾向度,這樣就減少了情感計算量。主張詞跟轉折詞基本上一樣,都減少了情感計算量。
本文的情感分析總的來說分為兩大步,第一步是先判斷微博的情感極性;第二步是在第一步的前提下,判斷此極性下的細粒度情感類別。之所以分為兩大部分,是因為如果直接細粒度情感分類的話,可能存在情感傾向度最大的細粒度情感類別可能不是整句話的情感極性類別,這樣的話微博情感判斷不準。
本文以每條微博中的句子為單位,以標點符號為切割判斷標志,將每條微博的文本分割成n 個句子S1、S2、S3……Sn,每個句子中可能包括四種極性p1、p2、p0、p3(即極性1、2、0、3),然后根據(jù)情感極性判斷過程先判斷轉折詞、主張詞,之后再提取每個句子的情感詞wi,情感詞可能有否定詞wb和程度副詞wa修飾,所以情感詞的極性權重計算公式如式(1)所示:
公式中Mwb為否定詞對應的權重,Mwa為程度副詞對應的權重,Swi為情感詞對應的權重。
因為情感極性有四種p1、p2、p0、p3,所以每個詞都有其對應的極性,故每個情感詞對應的極性和極性權重如式(2)所示:
每個句子中每種極性可能含有k 個情感詞w1、w2、w3……wk,故每個句子的每種情感極性權重計算公式如式(3)、(4)所示:
由式(2)可以得到每句話的最終情感極性和權重計算公式,如式(5)所示:
故含有n 條句子若p1和p2極性各含有m 和l 個句子的的微博信息di的最終情感極性計算公式如式(6)所示:
第一步的情感極性判別流程圖如圖2所示。
第二步我們先要獲取第一步的情感極性,再獲取此極性下的情感細粒度類別,由于代碼內實現(xiàn)了存儲每個極性下情感細粒度類別和其權重的容器,所以我們可以直接比較每個情感類別的權重大小,最后來判斷整條微博的最終情感細粒度類別。
本文情感類別定義了十四種細類別E1、E2、E3……E14(分別對應樂、不樂、好、不好、怒、不怒、哀、不哀、惡、不惡、驚、不驚、懼、不懼),本來在第一步計算每個情感詞極性下的權重之后就要計算極性下的情感類別對應的權重,由于第一步的重點是計算極性情感,所以就沒有提及。
圖2 極性情感判斷流程圖
如果極性下情感Ei包括m 個情感詞,那么式(7)為極性下的情感類別權重計算公式:
最后根據(jù)第一步的極性Pdi來計算整條微博的情感類別,計算公式如式(8)所示:
實驗數(shù)據(jù)是使用CCF 自然語言處理與中文計算會議評測的NLP&CC2013評估任務_中文微博情緒識別數(shù)據(jù)集,該語料主要用于識別出整條微博所表達的情緒,不是簡單的褒貶分類,而是涉及到多個細粒度情緒類別(例如悲傷、憂愁、快樂、興奮等),屬于細粒度的情感分類問題。經(jīng)過實驗驗證,得到如下數(shù)據(jù)。
實驗驗證了本文改進的算法對微博評論情感細粒度分類的各項評估指標,由以上數(shù)據(jù)可看出本文的分類效果還是可以的。
本文又爬取了微博上熱點話題來分析實際應用,爬取數(shù)據(jù)是從2017 年11 月23 日到2017 年12月23 日關于“紅黃藍幼兒園事件”的所有微博,總共1841 條微博,本文對這些微博進行了情感細粒度類別分析,從11 月23 到12 月23 的每種情感(除樂、好、惡、哀)類別折線圖中可以得出:中間情感類別基本上占比都在0.1 以下且趨勢波動平穩(wěn),也就是說人們在微博上的情感表達基本上都是愛憎分明,但還是有少部分人存在這種表達情感方式。從圖形趨勢波動明顯和占比上來看,只有樂、好、惡、哀這四種情感類別比較突出,以下就對這四種折線圖進行詳細的分析。
表1 情感分類驗證數(shù)據(jù)表
圖3 情感惡的情感波動圖
圖4 情感好的情感波動圖
如圖3,情感“惡”的折線圖中,11 月27 日這天開始出現(xiàn)大波動,是因為28 日官方微博發(fā)布沒有發(fā)現(xiàn)虐童行為,所以之后兩天關注度一直在上升,符合微博用戶情緒波動;11 月30 日官方發(fā)出了一系列解決措施,第二天就起到了效果,之后的情感波動基本上都是趨于穩(wěn)定下降的走勢。
如圖4,情感“好”的情感波動趨勢和情感“惡”的波動趨勢基本上相反,可以基本確定情感波動趨勢符合微博用戶的情緒波動。
圖6 情感哀的情感波動圖
如圖5、圖6,情感“樂”和“哀”在12 月1 日這天的極點波動分別和“好”、“惡”的極點波動一樣,“樂”是達到了最高極點,“哀”是達到了最低極點,它們兩個情感波動也基本符合微博用戶情緒波動。
實驗結果證明本文情感細粒度分類基本上是準確的、符合微博用戶情緒波動的。
本文是基于情感詞典對中文微博情感進行了細分類研究,本文的情感分類算法是先計算情感極性,然后再計算情感類別,再計算過程中本文加入了轉折詞和主張詞的判別,經(jīng)過實驗驗證本文改進算法準確率基本在70%以上。將本算法應用到“紅黃藍幼兒園事件”中,經(jīng)實驗結果分析得出本文提出的算法計算出來的微博用戶情感波動,符合實際用戶情感波動。