1. 程式人生 > >情感分析和傾向分析

情感分析和傾向分析

1微部落格心情挖掘研究(英文已於2009年8月發表,中文草稿只貼,定稿版以英文為準,最新版的工具做了若干微調)

包含情感分析工具的軟體下載入口介紹地址,點選此處
瀋陽1 李舒晨2 鄭玲3 任曉東 程小龍
(1武漢大學資訊管理學院 430072 2武漢大學國際軟體學院430072 3武漢大學測繪學院30072)
  摘 要: 為確定語料所表達的情緒,對微部落格資料所表現的情感進行情感估計,本文對情感詞進行分類,構建含有1342詞的態度詞權值詞典,並引入自定義的否定詞詞典、程度詞詞典和感嘆詞詞典,對2213條微部落格進行分類統計分別得到首句和尾句表句子主要意思的條目佔複句的比例為23.8%和51.3%。先算每個分句的權值,然後對首尾句的權值特殊處理再疊加得到某條微部落格的心情指數。使用C#語言編寫的微部落格心情權值計算器情感識別測試的結果經交叉判定正確率達到80.6%。
  關鍵詞:態度詞 權值字典 心情指數 權值計算
Emotion Mining Research on Micro-blog
(1 School of Information Management, Wuhan University 430072;2 International School of Software, Wuhan University, Wuhan 430079;3 School of Geodesy and Geomatics, Wuhan University, 430072)
Abstract :In order to identify the emotion expressed in corpus and to estimate the feelings conveyed by micro-blog data, in this paper, we categorize emotional words, build attitudinal words weight dictionary(WD) which consists of 1342 words, and introduce self-defined negative words dictionary(NWD), degree words dictionary(DWD) and interjection words dictionary(IWD). We then process classified statistics on 2213 micro-blog items, finding that items whose first sentence express the main idea accounts for 23.8% of all the complex sentences, and items whose last sentence express the main idea 51.3%, respectively. We first calculate the weights of each clause in a micro-blog item, then take special treatment to the first and last sentence, finally we add up all the weights to get the emotional index(EI) of the item. Test results from the micro-blog emotion weight calculator(MBEWC) developed in C# are cross-checked and reach an accuracy rate of 80.6%.
Keywords: attitudinal words, weight dictionary, emotional index, weight calculating


1.心情挖掘研究背景
  在人機互動領域,情緒對反應的影響早已被人們所重視,尤其在工作和產出效率方面[1]。2006年,Chung-Hsien Wu使用了一種新穎的方式,包括構建情感規則、表示語義標記和屬性、構建情感相關性規則和使用獨立的混合模型,自動識別文字中的情感,並將情感簡化為高興、不高興和中立三種[2]。同年,Jon oberlander開始使用個人部落格語料庫對部落格作者的情感進行分類[3]。2007年,Kazuyuki?Matsumoto通過構建情感字典來確定文字對話中的情感,他們根據詞出現在某一情感環境中的概率來確認權值,並獲得80%左右的情感確定精確度[4]。2008年,Jon oberlander的同伴Alastair J. Gill對部落格文字進行情感評定,發現當文字關鍵詞傾向性很強時,對情感的評判隨著文章長度增長越發準確,而對於文字關鍵詞大多傾向中立的文章,評判結果誤差較大[5]。本文的研究將Kazuyuki?Matsumoto與Chung-Hsien Wu的主要研究思想結合,通過構建權值字典來確定語料所表達的情緒。《普通心理學》一書將一般心情分類為快樂、憤怒、恐懼和悲哀四類[6],在此將後三種情緒合併,將情緒定義為積極情緒和消極情緒,並根據微部落格資訊量有限的特點加入中立情緒。
2挖掘方法
  心情挖掘主要藉助微部落格文字中的語義規律給每一條微部落格資料賦值,通過值的大小來判斷心情。定義該值為心情指數,即為每條微部落格語句中情緒狀態的判斷指標。心情指數為正表示積極情緒,心情指數為負表示消極情緒,心情指數為0表示中立情緒。心情指數越高,表示心情越積極;心情指數越低,表示心情越消極。
2.1 權值字典的構建
  語料選擇的方法關係到語料庫的覆蓋率,所謂覆蓋是指語料在各個不同領域的分佈或散佈,這些不同領域通常是指由時間軸(反映時代特徵) 、空間軸(反映地域特徵) 、學科軸(反映知識特徵) 、風格軸(反映語體特徵) 構成的四維模型[7]。然而,由於微部落格140個字元的限制和目前多數使用者主要關心天氣、生活、電影、感情、情緒等日常話題,且存在大量沒有與人交流的隔離使用者[8],使得微部落格不可能有完備的時間軸,空間軸,學科軸和風格軸。所以本文直接篩選微部落格中的關鍵詞進行計算,從而得出整個微部落格的心情指數。而且,微部落格中存在大量的垃圾資訊,在計算微部落格心情指數之前,要去除微部落格中與情緒無關的廣告類和推介類微部落格。2008年,徐琳巨集對情感語料庫的構建和分析進行了研究[9],並從教科書、文學類書籍中採集了大量的語料。此研究以篇為研究物件,標註句;而微部落格以句為單位,標註詞。同時,此研究經構建的大語料庫證明,無感情類語句最多[25],這也從側面證明了定義中立情緒的可行性。此研究的侷限性是對否定詞和程度副詞的劃分與判斷沒有給出相應的解決方法。事實上,資訊中否定詞對句子情感色彩影響也較大,特別是對語句的褒貶傾向性影響較大[10]。鑑於此,又構建了否定詞庫。中文存在多重否定現象,當否定詞出現奇數次時,表示否定意思;當否定詞出現偶數次時,表示肯定意思。
  首先,定義詞的權值,引入態度詞的概念,並打破傳統的動詞、名詞、形容詞的分類。態度詞指表示人態度的詞語,如歡喜、悲傷等,大部分態度詞由動詞、形容詞和副片語成,並含有少量名詞。同時,並不是所有的動詞、形容詞和副詞都能表示態度。每個態度詞對應一個表示心情程度的權值,將權值的範圍定義為[-20, 20],例如,狂喜的權值是20,絕望的權值為-20。正值表示積極的心情,負值表示消極的心情。某個詞的正值越大,表示越能表達積極的情緒;反之,表示越能表達消極的情緒。之後,使用微部落格抽取工具抽取微部落格“飯否”中的資料,在這些資料中隨機選取2000條資料,過濾掉廣告、推介、火星文等型別的微部落格條目,餘下1403條資料。按照態度詞的定義,通過3個人人工標註,加權平均後,在1403條微部落格資料中初步標註出524個態度詞,並按權值排序組成權值字典;並且初步組成了含有13個常見否定詞的否定詞詞典。在進一步的試驗中,藉助同義詞詞典對權值字典詞彙量進行了人工擴充,通過7個人交叉進行權值標註,經加權平均後,得到了現有的1342個態度詞的權值字典。權值字典構建過程如圖1所示:
 
  直接使用微部落格而不使用已有教科書、文獻作為語料來蒐集權值詞典有以下兩個原因:(1)微部落格表達內容有限。完整文章通常表達一個或多個完整的意思,而微部落格140個字元通常只能比較一個完整或較完整,甚至不完整的意思。微部落格用語屬於非正式的書面語,與正式書面語有明顯區別。(2)網路詞彙豐富。由於微部落格最初出現的載體是網際網路,為此微部落格中存在各種各樣的網路用語,這些詞語在正式書面語語料庫中並不常見,但在微部落格中比比皆是。在後續研究中,可以根據心情挖掘的物件來構建語料庫的構建。並且,還可以另外通過傳統文獻,教科書等構建通用權值字典,從而對傳統部落格、文章、文獻,甚至評論的心情、情緒進行挖掘,同樣具有巨大的價值。
2.2心情計算器演算法簡述與演算法改進
  構建好權值字典後,使用C#語言編寫了微部落格心情計算工具“ROST微部落格心情權值計算器”。“ROST微部落格心情權值計算器”在改進的過程中有以下3個版本:(1)beta1:不帶否定詞典;(2)beta2:帶否定詞典;(3)beta3:帶否定詞典,增加程度詞和感嘆詞詞典,改進演算法。
  在最初版本的“ROST微部落格心情權值計算器beta1”中,只考慮標記關鍵詞的方法,並沒有加入否定詞,並且使用的權值詞典為手工構建的524個詞的權值詞典。隨後,對權值字典進行了人工擴充,增加到1342個詞,並構建了小型的否定詞典。“ROST微部落格心情權值計算器beta2”對演算法進行改進,考慮了否定詞,並使用擴充詞典。在進一步的研究過程中,由於許多型度詞中本身還有否定詞,原來演算法會重複計算態度詞中的否定詞,從而使計算結果產生錯誤。
改進後演算法基本思路:
(1) 讀入一條微部落格文字a,將微部落格按標點進行分句a1, a2, …, an;
(2) 搜尋a1所有包含在權值字典中的態度詞,將a1中所有態度詞的權值進行疊加,得到v1;
(3) 搜尋a1所有包含在否定字典中的否定詞數量。當否定詞為奇數個時,將a1所在分句態度權值v1轉化為-v1;
(4) a1計算完畢,搜尋a的下一分句a2重複(2)(3)計算v2;
(5) 直到計算出vn後,將v1, v2, …, vn相加得到v,即一條微部落格a的心情指數;
(6) 讀入下一條微部落格b重複(1)。
  改進後微部落格權值F計算公式如下:
                                  
 其中a為微部落格,w為權值字典中的權值。i表示一條為部落格中的第i個分句,j表示一個分句內第j個帶有權值的詞(即該詞包含在權值字典中)。改進後關鍵程式碼如下:
 token[n] = microblog[m].spliter; //將一條微部落格進行分句
 getWeight(Dic, token[n]); //計算一分句微部落格態度詞的疊加值
 if countNumber(NegtiveWord)%2 == 1
  getWeight = -getWeight; //如果否定詞數為奇數,將此分句心情值取相反數
 Weight = Weight + getWeight; //疊加各分句的心情值
2.3 進一步改進的演算法基本思路和關鍵程式碼
  在進一步的研究當中,語句中的程度詞和感嘆詞對句子情感的表現的作用非常突出,而心情工具在處理這類問題時往往容易出錯,於是,在以前的基礎上又添加了相關的含有10個詞的程度詞詞典和含有16個詞的感嘆詞詞典。此外,根據中國人說話的習慣,通常首句和尾句的地位比較重要,改進的演算法在計算微部落格心情指數時對首句和尾句進行特殊處理。為了得到首尾句的相關關係,對2213條微部落格條目做了相關的研究和統計。抽取飯否中的2213條微部落格資料,經統計,單句為808條。在1405條複句中,首句表句子主要意思佔複句23.8%,尾句表句子主要的意思為51.3%,其他為24.8%,如表1所示:
表1 單複句分類統計結果
2213條微部落格條目
單句808條,佔微部落格總條目數36.5%

複句808條,佔微部落格總條目數63.5%
首句表句子的主要意思:335條,佔複句條目比例23.8%


首句表句子的主要意思:721條,佔複句條目比例51.3%


其他:349條,佔複句條目比例24.8%
  改進後演算法基本思路:
(1) 讀入一條微部落格文字a,將微部落格按標點進行分句a1, a2, …, an;
(2) 搜尋a1所有包含在權值字典中的態度詞,將a1中所有態度詞的權值進行疊加成,得到v1,刪除a1中經過匹配的態度詞得到a1?;
(3) 搜尋a1?所有包含在否定字典中的否定詞數量,每匹配一個否定詞刪除a1?中所包含的此否定詞得到a1?。重複(3)直到a1?中不含有否定詞。當否定詞為奇數個時,將a1所在分句態度權值v1轉化為-v1;
(4) 搜尋a1?所有包含在程度字典中的程度詞數量,每匹配一個程度詞刪除a1?中所包含的此程度詞得到a1?。重複(4)直到a1?中不含有否定詞。每增加一個程度詞分句態度權值增加一倍。
(5) 搜尋a1?所有包含在感嘆字典中的感嘆詞數量,每匹配一個感嘆詞刪除a1?中所包含的此感嘆詞得到a1?。重複(5)直到a1?中不含有否定詞。因中文由於感嘆詞大多一般都分兩種:積極感嘆詞和消極感嘆詞。例如:哈哈,呵呵,唉,哼等,一看就知道知道其心情怎樣,所以在句子起一定的主導作用。所以分別給它們1和-1兩種性質的權,來判斷整個句子心情值的走向。如果整個句子含有消極感嘆詞,則將a1所在分句態度權值v1轉化為-v1,
(6) a1計算完畢,搜尋a的下一分句a2重複(2)(3)計算v2;
(7) 直到計算出vn後,將v1, v2, …, vn 按特定的權重比例相累加到V,進數;
(8) 讀入下一條微部落格b重複(1)。
  改進後微部落格權值F計算公式如下:
       (如果存在感嘆詞)      
    F =
                         (否則)            (III)
                      (IV)   
                               (IV)    
  其中a為微部落格,w為權值字典中的權值。i表示一條為部落格中的第i個分句,j表示一個分句內第j個帶有權值的詞(即該詞包含在權值字典中)。改進後關鍵程式碼如下:
if(token[n].hasDegreeWord)            // 判斷分句是否含有程度詞countDegreeNumber(DegreeWord)            //計算一分句微部落格程度詞的個數
     getWeight=getWeight*(countDegreeNumber+1) //每多一個程度詞,其心情值翻一倍
 if(token[n].hasExclamationWord)         // 判斷分句是否含有感嘆詞
   getWeight=exclamationWeight *︱getWeight︳//如含感嘆詞,將此分句心情值取絕對值,乘以感嘆詞的性質權
Total=24%FirWeight+25%∑(MidWeight)+51%LasWeight //將整個句子,按分句的位置進行權值分配,FirWeight代表第一個分句,MidWeight代表中間的分句,LasWeight代表最後一句分句
2.4 心情計算的基本過程
  微部落格心情計算的基本過程如圖2所示。首先,將一條微部落格按標點進行分句。其次,在一條微部落格分句中查詢包含在權值字典中的詞,將它們的權值疊加。再次,在該條微部落格分句中查詢包含在否定詞典中的詞,並統計數目,以確定肯定或否定語氣。最後,將每一分句的計算值疊加,得出一條完整微部落格的心情值。

圖2 微部落格心情計算的基本過程
3 心情計算成功率
  為檢測ROST心情權值計算器的準確性,設計了以下3組共6個試驗進行準確率對比:(1)beta1(不帶否定詞典),與1342詞權值字典和524詞權值字典;(2)beta2(帶否定詞典),與1342詞權值字典和524詞權值字典;(3)beta3,(帶否定詞、程度詞和感嘆詞詞典,改進演算法),與1342詞權值字典和524詞權值字典。
  由於演算法精確度限制和心情界定模糊的影響,本文認為若句子表達積極心情且計算結果為正,句子表達消極心情且計算結果為負,計算成功。由於句子無法表達心情情況的特殊性,在判斷上可能產生不同的偏差,當計算結果在[-3,3]時,計算成功。其他情況則計算失敗。
3.1 試驗資料集的選取和試驗步驟
  首先,在飯否的已抽取資料集中選擇一天的資料,選擇2008年10月12日的資料2582條。之後,按照上文中提到的微部落格垃圾資訊種類,用ROST Content Mining先分詞,然後對資料集按照時間段切割成若干文件,將某個時間段的文字看做一個文件,利用傳統的TFIDF變形公式計算出一些無效常用詞詞頻並構建為過濾詞表,依次去除了連結、天氣預報、滿140字推介資訊,餘下2213條微部落格作為試驗物件。
       (VI)
  表示文件d的長度,avg_len表示所有文件的平均長度,N表示全部訓練文件的總數,n(t)表示包含詞t的文件數。
  由於目前軟體不能支援英文檢測和軟體的侷限性,全英文條目人工和軟體都判其心情指數為0。首先,3個人交叉判斷2125條微部落格並標註積極、消極情緒和中性,。得到表積極情緒條目605條,984條表消極情緒的條目,624條無明顯感情的中性條目。然後,將這三個經初步統一的條目分別由另外5個大學生判斷其表現出來的情感傾向,得到如下表2所示結果,去掉相應的最大和最小值,取平均得到平均值。
表2 2215條微部落格分類判斷結果

積極
中性
消極
總條目
605
984
624
No.1
576
940
589
No.2
588
884
559
No.3
517
946
561
No.4
575
950
534
No.5
567
924
544
平均值
573
945
555

  最後,將此2125條微部落格資訊分別載入各版本的心情計算器進行計算。將計算結果與人工判斷結果進行對比檢查計算正確性。
3.2 心情權值計算器4組試驗結果比較
表3 ROST 微部落格心情權值計算器正確率
版本號
版本說明
積極
中性
消極

詞典大小
演算法特徵
正確計算條目
正確計算比例
正確計算條目
正確計算比例
正確計算條目
正確計算比例
人工判斷
----
--------
573
----
945
----
555
----
BATE 1

1342
不考慮否定詞
480
83.7%
630
66.6%
284
51.1%

524
不考慮否定詞
450
78.5%
629
66.6%
417
75.1%
BATE 2

1342
考慮否定詞
460
80.2%
627
66.3%
318
55.9%

524
考慮否定詞
429
74.8%
633
66.9%
308
55.5%
BATE 3
1342
考慮否定詞,改進演算法
462
80.6%
714
75.6%
322
58.0%

524
考慮否定詞,改進演算法
446
77.8%
743
78.6%
325
58.6%
  將用524詞權值詞典測試出來的結果與用1324詞權值詞典測試出來的結果相比較,用1324詞權值詞典並不能明顯大幅提升正確率。中性詞條目測試結果,500詞典的測試結果均比1324詞詞典測試正確率高,說明新增加態度詞,有一部分本來表示無態度,或者表示態度但是存在正面和反面兩種態度,卻片面賦了某一方面的值,導致判斷有誤。
  縱向比較每個版本,對結果進行分析,版本2增加否定詞詞典以後,消極的條目正確率增加了,中性條目正確率基本沒有變,但是積極條目的正確率卻大大減少了,這是因為判斷之前沒有對句子進行分詞,使得表積極情緒的句子判為負。
  在計算的結果中,加入首尾句的特殊處理後,測試的結果其值與前幾個版本不加特殊處理相比較更符合實際情況,計算結果的精確度有較大幅度的提高。
3.3 心情權值計算仍存在的問題
  在正確性統計階段,ROST心情權值計算器在計算一般陳述句時或字面意思方面,準確率較高,但對以下五種情況存在較大的計算誤差:反問句和疑問句;反語,如自嘲,即字面意思和實際意思相反;一部分古詩文;一句話中辯證地從正反兩方面闡述同一事實,或同時對同一事物表達程度相當的積極和消極情感;以及,某些方言中的特定詞彙。對這些誤差較大的情況還有待於做進一步研究。
4. 結論
  本文定義了態度詞,構建了含有1342詞的權值字典、含有13詞的否定詞典、含有10個詞的程度詞詞典和含有16個詞的感嘆詞詞典,並提出一種計算微部落格心情值的方法。此方法考慮了中文否定詞、多重否定等語言現象對心情表達的影響。編寫了ROST微部落格心情計算器,批量計算微部落格心情,達到80.6%的正確率。本文比較了詞典容量大小、考慮否定詞,和具體識別否定詞的演算法對準確率的影響。今後,我們將在此領域進一步進行研究,改進計算工具,提高準確率。同時,考慮將微部落格挖掘移植到評論挖掘。