1. 程式人生 > >[NLP]如何進行情感分析

[NLP]如何進行情感分析

本文介紹的是如何進行情感識別。

在自然語言中(尤其社交媒體和購物網站中),每一句話都隱含了具體的情感傾向,比如中性、正面、負面。比如:今天天氣不錯;今天心情不太好;蘋果手機不錯;地球是圓的。對於人來說,可以很輕易的就分辨出上述句子是正面的、中性的、負面的。
但是在自然語言處理中是如何進行判斷的呢?下面就對基本的情感分析方法進行介紹。

1.準備

1.1 種子詞庫

在真正開始前,首先想想人看到一句話是如何思考的。
比如:今天天氣不錯。對於今天和天氣來說,只是具體的對話物件,表明討論的是今天的天氣;而真正起作用的是‘不錯’,表明今天的天氣令人很舒暢,或者心情變好。因為才會得出‘今天天氣不錯’是正面的評價。
這裡我們不關心具體的評價物件,但是可以很清楚看出某些詞對於情感傾向識別是起關鍵作用的。那麼我們是否可以建立一個標準情感詞庫作為情感分析的種子詞庫呢?答案是肯定的。
情感傾向的種子詞庫建立是通過分析語料庫,首先對語料庫去除停用詞,然後對與其中的詞進行分類,分別為:正面、負面、中性。比如:

正面:不錯、很好、很棒、偉大
負面:不好、很壞、討厭、無用
中性:手機、地球、一般、還行

1.2 文件頻率和文件共現頻率

文件頻率是指某一個詞在文件中出現的次數,用p(w)表示。
文件共現頻率是指在同一個文件中共同出現的詞的出現次數,用p(w1,w2)表示。
假設我們有很多商品評價或者微博比如下面的形式:

1.xxxxxxxx
2.xxxxxxx
3.xxxx
4.xxxxxx

那麼如何統計p(w)p(w1,w2)的呢?
p(w)通過/計算得到。
p(w1,w2)通過(w1,w2)/計算得到。

1.3 PMI

PMI(Pointwise Mutual Information),中文稱為互資訊,描述的是兩個事件在概率分佈上的近似度量。計算公式如下:

pmi(w1,w2)=log(p(w1,w2)p(w1)p(w2))
如果w1w2分佈是相互獨立的,那麼p(w1,w2)=p(w1)p(w2),pmi(w1,w2)=log1=0
相反,如果w1w2的分佈不是相互獨立的,那麼p(w1,w2)>p(w1)p(w2),並且相關性越強pmi的值越大,說明w1w2共現攜帶的訊息越多。這個也很好理解,比如美國和川普是經常一起出現的,因為美國的總統是川普。相反,川普和我的名字大概率是不會共現的,因為我兩根本沒啥關係。

1.4 情感分析

我們給每一個句子都給出一個得分score,得分通過(PMI)(PMI)得到。
對於socre:

score>0表示正面情感

score=0表示中性情感

socre<0表示負面情感

2.編碼

有了上文的準備工作就可以進行編碼了,程式碼邏輯為:

  • 1.統計和儲存p(w)p(w1,w2)
  • 2.統計和儲存pmi(w_1,w_2)矩陣
  • 3.分別計算待測短語中詞與正面情感詞庫所有詞的PMI,將得到的PMI相加得到pmi(wi,wp)
  • 4.分別計算待測短語中詞與負面情感詞庫所有詞的PMI,將得到的PMI相加得到pmi(wi,wn)
  • 5.計算情感傾向總得分score=pmi(wi,wp)pmi(wi,wn)

3.總結

本文介紹的只是簡單的情感分析方法,實際的工作並不是這麼簡單。本文介紹的方法也有很多不足的地方:

  • 需要的人工參與量大
  • 模型效果對語料庫依賴度高
  • 某些修飾詞和否定詞的作用被忽略,比如不偉大,不開心

這些都是需要後續改進的地方。

另外新申請了個個人公眾號,分享關於學習AI的經歷,歡迎關注!
這裡寫圖片描述

version_1_20171008