情緒值分析
- 情緒分析
情緒分析(也稱為意見挖掘)是指用自然語言處理、文本挖掘以及計算機語言學等方法來識別和提取原素材中的主觀信息。由於本論文非旨在提出新的情緒分析模型,將採用前人研究成果之模型直接進行分析,以下介紹本論文將使用的模型與擴充語料庫。本論文將根據評論進行文本情緒分析,得到兩種結果,分別是『情緒值』與『情緒分類』。其中情緒值為0~1的數值,越大代表情緒越正向,反之代表情緒越負面,而分類為將該評論分到一個情緒分類,不賦值。
本論文採用的情緒分析方法與辭典如下:
- SnowNLP
SnowNLP作者受到TextBlob(一個用Python撰寫的開源文字處理套件)的啟發而製作的SnowNLP此款針對中文文本內容處理的Python套件,而SnowNLP的演算法是使用Naive Bayes,而訓練資料主要是買賣東西時的評價。 下面將簡單說明單純貝氏分類模型。單純貝氏分類是應用貝氏定理,貝氏定理為機率論的一種理論,描述在某些已知條件下,某個特定事件發生機率為何。貝氏定理表示條件機率之間轉換的關係,貝氏分類就是透過貝氏定理計算不同類別下的條件機率,得到條件機率最大值作為預測結果。 - LIWC
LIWC 為Pennebaker於1990初所研發進行語文特性分析之電腦工具,而他是從兩個部分所組成,一部分是辭典,另外一部分是工具程式,而本論文只使用他們的詞典部分。由於Pennebaker早年在發展語文分析字詞的策略上是針對文本中所使用的詞類計算相對使用百分比,因此他將工具命名為「語文探索與字詞計算」(Linguistic Inquiry and Word Count,簡稱LIWC)(Pennebaker et al., 2015)隨後經歷多次的更新,目前LIWC以具有豐富且優良的信效度。而中文版的LIWC也於2012年經Pennebaker教授的授權下正式發表而成。 - NTUSD
NTUSD又稱國立台灣大學情緒詞詞典(Ku & Chen, 2007)是2006年公開的中文詞典,可學術用途免費使用。在數據集上面,團隊使用了兩組情感詞,第一組是英文的,將這些詞翻譯成中文,而第二組資料是從網路上收集下來的中文資料,並講兩組彙整成情緒詞辭典。 - 大連理工辭典
大連理工辭典為,『大連理工信息檢索研究室』(http://ir.dlut.edu.cn/ )之『情感詞彙辭典』(徐琳宏, 2008),此詞典為該研究室產出之相當具有代表性的的辭典,並且也有許多熱門文獻引用(何炎祥, 2017; 杨亮, 2012),詞典將情緒分為7大類21小類,本論文將使用此辭典進行情緒分類,與評估一地區之情緒多樣性。另補充說明情感詞可能含有多種情感,本論文採取重複計入的方式。而在用詞方面,研究者在檢視過這個詞典後,考量到網路的流通率很高,兩岸的中文詞已經趨於一致(如:範例詞)。對本論文沒有太大的困擾。本論文重新整理之分類表如下表
編號 | 情感大類 | 情感小類 | 範例詞 |
1 | 樂 | 快樂(PA) | 喜悅、歡喜、笑咪咪 |
2 | 安心(PE) | 踏實、寬心、問心無愧 | |
3 | 好 | 尊敬(PD) | 恭敬、敬愛、肅然起敬 |
4 | 讚揚(PH) | 英俊、通情達理、優秀 | |
5 | 相信(PG) | 信任、可靠、毋庸置疑 | |
6 | 喜愛(PB) | 傾慕、寶貝、一見鐘情 | |
7 | 祝願(PK) | 渴望、保佑、福壽綿長 | |
8 | 怒 | 憤怒(NA) | 氣憤、惱火、大發雷霆 |
9 | 哀 | 悲傷(NB) | 憂傷、心如刀割、悲苦 |
10 | 失望(NJ) | 憾事、絕望、心灰意冷 | |
11 | 疚(NH) | 懺悔、問心有愧、內疚 | |
12 | 思(PF) | 思念、相思、牽腸掛肚 | |
13 | 懼 | 慌(NI) | 慌張、心慌、手忙腳亂 |
14 | 恐懼(NC) | 膽怯、害怕、膽顫心驚 | |
15 | 羞(NG) | 害羞、害臊、無地自容 | |
16 | 惡 | 煩悶(NE) | 憋悶、煩躁、自尋煩惱 |
17 | 憎惡(ND) | 反感、可恥、深惡痛絕 | |
18 | 貶責(NN) | 呆板、虛榮、雜亂無章 | |
19 | 妒忌(NK) | 眼紅、吃醋、嫉賢妒能 | |
20 | 懷疑(NL) | 多心、生疑、將信將疑 | |
21 | 驚 | 驚奇(PC) | 奇怪、奇蹟、瞠目結舌 |
- 情緒值
本論文採用SnowNLP情感分析library進行情緒值預測,SnowNLP使用Naive Bayes(單純貝氏分類)模型進行情感預測,其中,本論文將擴充使用LIWC、NTUSD、大連理工辭典,擴充SnowNLP資料訓練模型。
- 情緒多樣性
本論文將採用『大連理工信息檢索研究室』之『情感詞彙辭典』,進行情緒分類,將其結果作為情緒多樣性指標之指數之一。
- 情緒分析結果
如前述,本論文將使用SnowNLP模型架構,將其資料庫由簡體轉為繁體,並加入LIWC、大連理工、NTUSD三項資料庫,進行情緒分析。本論文將進行兩種情緒分析,第一種為『情緒值』,將以SnowNLP模型為主,輔以其他三項資料庫進行分析;第二種為『情緒多樣性』,將使用大連理工資料庫進行分析。
- 情緒值
SnowNLP模型訓練需要將語料庫分為正向(Pos)以及負向(neg)兩種
首先說明如何統整上述幾項資料進到模型,為了提昇資料庫之豐富度與完整性,故本論文加入額外三項資料庫,在進行模型訓練前,本論文對四項資料庫之數據進行如下之預處理:
- SnowNLP:SnowNLP本身資料庫具有 16547句正向資料與18576句負向資料,然而本身是簡體資料,故將其轉為繁體使用。
- LIWC:LIWC2015之繁體字典共有739個正向詞彙與1173個負向詞彙,也將之直接併入SnowNLP資料庫。
- NTUSD:NTUSD資料庫提供共9365個正向詞彙與11230個負向詞彙,將之直接併入SnowNLP資料庫
- 大連理工辭典:大連理工辭典並沒有直接提供詞彙與句的正負向標記,而是使將所有詞分成7大類21小類,如表 2所示,這邊我們將七大類(樂、好、怒、哀、懼、惡、驚)根據普遍認知分成正(樂、好、驚)負(怒、哀、懼、惡)兩類。
將詞彙據此分類後,得到13302個正向詞彙與14613個負向詞彙,併入SnowNLP資料庫。
整合完後,總共得到39945個正向詞彙語句與45142個負向詞彙語句,以此重新對SnowNLP模型進行訓練。訓練後,對82萬多則評論一一進行情緒值分析,每個評論都得到一個介於0至1中間的情緒值,越大代表越正向。這邊我們對模型預估出的情緒值可信程度做一個評估,我們下面計算模型推估的情緒值,與評論之Rating (Google Map之星星數) 之間的差距程度。由於Google Map上之評論四星與五星評價佔了多數,在評估差距程度時,若資料分布過於集中在特定類別,可能造成結果偏差,我們先統計各星值評論量。
評論值 | 一星 | 二星 | 三星 | 四星 | 五星 |
評論量 | 58081 | 25099 | 83567 | 194540 | 464105 |
可見最少的是二星評論25099個,我們以此為基準進行下採樣(Under Sampling)方法可以使資料集中各個類別的數據數量更加平衡,以避免模型偏向較多數據的類別,對各星評論都隨機取整數25000則評論出來,而我們擔心的下採樣所造成的樣本不具代表性缺點,由於我們的資料量已多達25000筆,在資料量大的情況下此點較不影響。
評論值 | 一星 | 二星 | 三星 | 四星 | 五星 | 綜合 |
RMSE | 1.45 | 1.48 | 1.36 | 1.20 | 1.38 | 1.37 |
而在各樣本數量達到25000計算情緒預估值與評論值的均方根誤差(root-mean-square error,RMSE)。我們將SnowNLP預測出的情緒值進行乘四並加一,把範圍調整到與評論星星一至五相同,可以計算得四捨五入到小數點第二位之 RMSE = 1.37。也就是平均來說,預估出的評論情緒,跟星星數平均會有1,37顆星星左右的誤差,然而需注意的是,評論內容之情緒與評論之星星數不一定是完全正相關,故此RMSE值僅作為參考。
接著,我們根據評論所在行政區,計算該行政區內情緒值之平均(0~1),四捨五入到小數點後第四位。
行政區 | 情緒值 | 行政區 | 情緒值 |
五峰鄉 | 0.7721 | 北區 | 0.6877 |
峨眉鄉 | 0.7622 | 新埔鎮 | 0.6834 |
尖石鄉 | 0.7317 | 東區 | 0.6808 |
寶山鄉 | 0.7126 | 竹北市 | 0.6709 |
北埔鄉 | 0.7114 | 新豐鄉 | 0.6638 |
關西鎮 | 0.7053 | 竹東鎮 | 0.6597 |
橫山鄉 | 0.7044 | 湖口鄉 | 0.6461 |
香山區 | 0.7020 | 芎林鄉 | 0.6357 |
根據表格數值,我們可以看到,普遍認知上的郊區(這邊可以在表格的行政區附上人口排名當作市區郊區的判斷),情緒值較市區為佳,我們以情緒值表徵居民的地方認同感,從圖上也可觀察到,新竹縣市東側環山的地方,普遍擁有較高的情緒值。可以從中得知新竹山區居民對於該地地方認同較高,我們可以推測因都市地區的居民多屬於新住民且組成較為混雜,山區地區居民多為代代居住於此的居民,故其地方認同感也較高。