任偉 劉循



【摘要】 隨著互聯網行業的發展,各式各樣的網站不斷興起,用戶在網上發帖留言已經成為一種常態,對用戶的留言進行情感分析,分析用戶的情感傾向和主觀情感已經變得越來越流行。首先,本文用基于情感詞典的情感分析方法對用戶的情感進行分析,為用戶的每一條回帖計算其正向情感分值和負向情感分值得以及計算其 正向情感詞數目和負向情感詞數目,最后以用戶為單位,計算均值,得到每個用戶的情感特征向量,我們根據用戶的情感特征向量,對用戶進行聚類分析,探究用戶的行為模式有什么不同點和相同點。
關鍵字:情感分析;KMeans;聚類分析
User cluster analysis based on sentiment feature
REN - wei, LIU- xung (School of Computer, Sichuan University, Chengdu 610065, China)
Abstract: With the development of Internet,all kinds of website becomes popular,users like to leave somemessages on it.That is a good resource for us to analysis sentiment for every user.
This paper uses a dictionary-based method to analysis users sentiment.we calculate thepositive points,negative points,the number of positive word and the number of negative word for every message.then get a mean value of them as a feature vecture for every user.At last,we can use the KMeans algorithe to cluster them and analysis the way when people leave a message.
Keywords:KMeans; cluster; sentiment analysis
一、用戶情感分析
本文采用的是基于情感字典的情感分析方法.
1.1 原理
比如這么一句話:“這手機的畫面極好,操作也比較流暢。不過拍照真的太爛了!系統也不好。”
① 情感詞
要分析一句話是積極的還是消極的,最簡單最基礎的方法就是找出句子里面的情感詞,積極的情感詞比如:贊,好,順手,華麗等,消極情感詞比如:差,爛,壞,坑爹等。出現一個積極詞就+1,出現一個消極詞就-1。
里面就有“好”,“流暢”兩個積極情感詞,“爛”一個消極情感詞。那它的情感分值就是1+1-1+1=2. 很明顯這個分值是不合理的,下面一步步修改它。
② 程度詞
“好”,“流暢”和‘爛“前面都有一個程度修飾詞。”極好“就比”較好“或者”好“的情感更強,”太爛“也比”有點爛“情感強得多。所以需要在找到情感詞后往前找一下有沒有程度修飾,并給不同的程度一個權值。比如”極“,”無比“,”太“就要把情感分值*4,”較“,”還算“就情感分值*2,”只算“,”僅僅“這些就*0.5了。那么這句話的情感分值就是:4*1+1*2-1*4+1=3
③ 感嘆號
可以發現太爛了后面有感嘆號,嘆號意味著情感強烈。因此發現嘆號可以為情感值+2. 那么這句話的情感分值就變成了:4*1+1*2-1*4-2+1 = 1
④ 否定詞
明眼人一眼就看出最后面那個”好“并不是表示”好“,因為前面還有一個”不“字。所以在找到情感詞的時候,需要往前找否定詞。比如”不“,”不能“這些詞。而且還要數這些否定詞出現的次數,如果是單數,情感分值就*-1,但如果是偶數,那情感就沒有反轉,還是*1。在這句話里面,可以看出”好“前面只有一個”不“,所以”好“的情感值應該反轉,*-1。
因此這句話的準確情感分值是:4*1+1*2-1*4-2+1*-1 =-1
⑤ 積極和消極分開來
再接下來,很明顯就可以看出,這句話里面有褒有貶,不能用一個分值來表示它的情感傾向。而且這個權值的設置也會影響最終的情感分值,敏感度太高了。因此對這句話的最終的正確的處理,是得出這句話的一個積極分值,一個消極分值(這樣消極分值也是正數,無需使用負數了)。它們同時代表了這句話的情感傾向。所以這句評論應該是”積極分值:6,消極分值:7“
⑥ 以分句的情感為基礎
再仔細一步,詳細一點,一條評論的情感分值是由不同的分句加起來的,因此要得到一條評論的情感分值,就要先計算出評論中每個句子的情感分值。這條例子評論有四個分句,因此其結構如下([積極分值, 消極分值]):[[4, 0], [2, 0], [0, 6], [0, 1]]
以上就是使用情感詞典來進行情感分析的主要流程了,算法的設計也會按照這個思路來實現。
1.2 算法設計
第一步:讀取評論數據,對評論進行分句。
第二步:查找對分句的情感詞,記錄積極還是消極,以及位置。
第三步:往情感詞前查找程度詞,找到就停止搜尋。為程度詞設權值,乘以情感值。
第四步:往情感詞前查找否定詞,找完全部否定詞,若數量為奇數,乘以-1,若為偶數,乘以1。
第五步:判斷分句結尾是否有感嘆號,有嘆號則往前尋找情感詞,有則相應的情感值+2。
第六步:計算完一條評論所有分句的情感值,用數組(list)記錄起來。
第七步:計算并記錄所有評論的積極情感值,消極情感值,積極情感詞個數,消極情感詞個數。
二、構建用戶情感特征向量
通過上一節的工作 我們得到了每個用戶每條的回帖的情感特征向量,即[正向情感得分,負向情感得分,正向情感詞數目,負向情感詞數目],通過每條發言的情感特征,我們可以構建用戶的整體情感特征,分別計算用戶的正向情感均值、負向情感均值,正向情感方差,負向情感方差,正向情感詞平均數,負向情感詞平均數,用戶的整體情感特征有助于我們對用戶的情感進行分析,比如均值代表了正向情感或者負向情感的大致水平,而方差則表示了用戶情感水平的波動情況,方差越大,表明用戶的情感變化范圍較大,而正向情感詞平均數和負向情感詞平均數則需要配合情感均值來使用,若是 負向情感詞平均數 或者 正向情感詞平均數 很高 但是 正向情感均值 和 負向情感均值 缺不高 說明在情感詞時用了很多否定詞,說明在表達情感時比較委婉。反之 若正向情感均值或負向情感均值 比較高 同時 正向情感詞平均數 與負向情感詞平均數也比較高 則說明在表達情感時顯得比較直接。
三、用戶情感特征分析
我們對100位用戶的情感特征向量進行進行分析,首先進行相關性分析,我們利用皮爾遜相關系數 來計算各個變量之間的相關性。首先對每一列數據進行標準化處理 即每一列的數據減去該列的均值同時除以標準差 公式如下
X*=(x-e(x))/sd(x)
然后采用協方差公式進行相關系數的計算
R(x,y)=cor(x*,y*)=x.y
從相關系數矩陣中我們可以看出,正向情感得分和正向情感詞數目,負向情感得分和負向情感次數目 ,正向情感詞數目 和負向情感詞數據 具有最想的想關性,但是 跟據我們的算法 正向情感得分 就是 根據 正向情感詞數據而來的 除非情感詞前面加了否定詞 此時 說話的語氣會變得較為委婉無法揣測真是的情感 如 語句“他成績不好” 這句話是直接方式的負向情感的表達 如果改為 好 還是 成績還可以呢,所以 此時 不管是負向情感得分 還是負向情感得分 都為0.但是在情感詞數據上 則不為0,這說明用戶在說話習慣上產生了不同,有的人說話比較直接,有人說話比較為委婉,所以我們變換特征向量,即讓用戶情感特征向量的第一列除以第三列,第二列除以第四列,我們將新的特征向量的第一列命名為 正向情感直接系數,第二列命名為負向情感直接系數,情感直接系數反應了用戶說話的直接程度,越高 說明用戶說話約直接。接下來我們用KMeans聚類算法 對用戶進行聚類,以此來驗證我們的想法。在使用KMeas 之前 我們首先用散點圖 來對數據點的分布進行觀察。
從圖1中可以看出 數據點的分布近似橢圓形,適合用KMeans算法對數據點進行聚類(因為我們使用歐式距離來對數據點之間的距離進行度量)。同時有非常明顯的2個聚類中心,所以在使用KMeans算法時 我們將聚類的數目定義為2[1]。
我們不對數據進行任何預處理的工作,直接對數據進行聚類,聚類效果如下圖所示。
我們發現數據點被分成了2個類,Y軸坐標比較大的分為了一類,Y軸坐標比較小的分為了一類,這是因為數據點的Y軸坐標范圍比X軸范圍大得多,而KMeans算法采用歐式距離來度量數據點之間的差異性,而由于Y軸坐標的范圍比X軸大的多,所思數據點之間的差異主要由Y軸坐標決定,所以分類超平面就會垂直于Y軸。這樣的聚類效果 顯然不是我們想要的。為了使得X軸和Y軸有相同的均值和方差,我們需要對數據繼續標準化處理,這樣樣本點在X軸和Y軸上的均值都將變為0,方差變為1[2]。
對數據進行標準化處理后 我們用散點圖來看下聚類的效果。
可以看到數據被分成了2類,我們對每一類球均值,可以發現 第一類的均值向量為(0.269,0.59) 第二類的均值向量為(1.16,1.01) 第二類的情感直接系數比第一類大了許多,說明第一類人說話較為婉轉,第二類的人說話則更為直接。
四、結論以及進一步的工作
我們通過對用戶的網絡留言數據進行情感分析,得到用戶的情感特征向量,
通過用戶的情感特征向量,對用戶進行聚類分析,通過聚類分析,得到用戶的說話的行為習慣。但是本文有些地方做的還是不夠細致。
1、在得到用戶的情感得分矩陣中,我們使用了基于字典的情感分析方法,對用戶的情感進行打分,但是在具體的算法上 顯得較為粗糙,沒有結合客觀情況進行深入分析,如“科比的球技不太好”,這句話利用我們的情感分析算法,得到的情感得分為0,但是這句話其實表達了一種負向情感,因為真是情況是科比的球技很好,所以這句話表達的應該是負向情感。
2、特征較少,沒有進行更深入的特征工程構建,只是對用戶說話的直接與否進行對用戶進行分類,所使用的特征有限,應該更加深入構建用戶的情感特征。
參 考 文 獻
[1]Christopher Bishop.Pattern Recognition and Machine Learning[M].Americn:spring er,2007-10-1.548-662.
[2]Trent Hauck.Sklearn-coobook[M].England:packer publishing,2014-11-4.66-78.