<article>
課程地址:https://class.coursera.org/nlp/lecture/31
1. What is Sentiment Analysis?
情感分析(Sentiment analysis)又可以叫做
意見抽取(Opinion extraction)
意見挖掘(Opinion mining)
情感挖掘(Sentiment mining)
主觀分析(Subjectivity analysis)等等。
比如對電影好壞的評價:
比如Google Product Search 上面對產品屬性的評價,并展示褒貶程度:
還比如Bing Shopping對上面同一臺打印機的評價結果:
Twitter sentiment versus Gallup Poll of Consumer Confidence
通過Tewitter上和民意調查得來的數據的進行對比,發現兩者對于消費者信心的統計結果有很大的相關性(correlation),相關度達到80%。
同樣,利用Twitter上的公眾情緒預測股票,發現:CLAM(平靜)情緒的指數可以預測三天后道瓊斯的指數。
Target Sentiment on Twitter(Twitter Sentiment App):用戶可以輸入產品關鍵字來查詢其他網友對此產品的評價
Why sentiment analysis?
- Movie: is this review positive or negative?
- Products: what do people think about the new iPhone?
- Public sentiment: how is consumer confidence? Is despair increasing?
- Politics: what do people think about this candidate or issue?
- Prediction: predict election outcomes or market trends from sentiment
電影產品預測,民意政治傾向等等…
Sentiment analysis is the detection of attitudes
分析用戶對人或物品的態度(attitudes:enduring, affectively colored beliefs, dispositions towards objects or persons)
分析主體包括:
Holder (source) of attitude :誰有這個屬性
Target (aspect) of attitude :評價的對象
-
Type of attitude :有哪些方面
- From a set of types
Like, love, hate, value, desire, etc. - Or (more commonly) simple weighted polarity:
positive, negative, neutral, together with strength
- From a set of types
Text containing the attitude :文本是單句還是整句
Sentence or entire document
由簡單到復雜的情感分析:
-
Simplest task:
- Is the attitude of this text positive or negative? 簡單的極性
-
More complex:
- Rank the attitude of this text from 1 to 5 評分等級
-
Advanced:
- Detect the target, source, or complex attitude types 對象,來源及復雜的態度等。
2. Sentiment Analysis: A baseline algorithm基準算法
本節講解對電影評論進行情感分類(sentiment classification)的一個實例
引用的論文:
Bo Pang, Lillian Lee, and Shivakumar Vaithyanathan. 2002. Thumbs up? Sentiment Classification using Machine Learning Techniques. EMNLP-2002, 79—86.
Bo Pang and Lillian Lee. 2004. A Sentimental Education: Sentiment Analysis Using Subjectivity Summarization Based on Minimum Cuts. ACL, 271-278
任務的目的:極性判斷(Polarity detection):
Is an IMDB movie review positive or negative?
并且可在此網站http://www.cs.cornell.edu/people/pabo/movie-review-data下載實驗數據
下面是截取的一小段數據,我們看到可以通過里面的一些關鍵詞來判斷這段影評的極性:
基準算法(Baseline Algorithm)的幾個步驟
1 . Tokenization標記:
- Deal with HTML and XML markup 文本解析
- Twitter mark-up (names, hash tags)處理哈希tags
- Capitalization (preserve for words in all caps)保留大寫字母前的標點
- Phone numbers, dates 過濾時間
- Emoticons 表情符號很重要
2 . Feature Extraction 特征提取
通常我們會利用否定句(negation)來做處理,并且通常來說整個文本作為特征,效果會比單純的形容詞好。
但是在處理否定句的時候,像上面的兩個句子雖然有很明顯的極性差別,但是卻只有一個詞的差別,為了更好的處理這種情況,我們一般在否定詞到標點之間的每一個之間都加NOT_
3 . Classification using different classifiers 用不同的分類器進行分類
- Na?ve Bayes 樸素貝葉斯
- MaxEnt 最大熵模型
- SVM 支持向量機
詳述一下樸素貝葉斯:
上式可以得出最有可能的分類等于最大化先驗概率和似然概率的乘積
先驗概率就是出現該詞的文檔占全部文檔的概率
似然函數可以想象成所有文本中這個單詞出現在每個當前文檔中的頻率和
我們加入拉普拉斯平滑來處理零概率的問題,因為當在文本處理時,一個詞在訓練集中沒有出現過,那么他的概率為零,在連乘的過程中導致整個文本出現的概率也是零,這是不合理的。沒出現不代表沒可能。
Binarized (Boolean feature) Multinomial Na?ve Bayes
在進行特征提取時,我們更關心的是句子中極性詞是否出現,而不是出現的次數,所以我們引入了二值多項式貝葉斯(不知道翻譯的對不對 : ))來進行分類
所以我們在執行算法的過程中,只需要將每個text文本中重復的詞去掉,只取一個單詞實例就足夠了,剩下的計算還和上面的貝葉斯相同。
另外需注意,Binarized (Boolean feature) Multinomial Na?ve Bayes不同于Multivariate Bernoulli Na?ve Bayes,MBNB在文本情感分析上的效果并不好。另外課中也提到可以用交叉驗證的方式進行訓練驗證。
What makes reviews hard to classify?
情感分析的難點:
- 例如表達含蓄,語義微妙的句子使人很難理解
- 或者是先揚后抑的風格(Thwarted Expectations)以及句子順序的影響,也是增加了分析難度。
3.Sentiment Lexicons 情感詞典
在實際情感分析的過程中,通常依賴情感詞典來提取特征,情感詞典中包含了詞的多種極性。
下面羅列了一些比較流行的詞典:
-
The General Inquirer http://www.wjh.harvard.edu/~inquirer/homecat.htm
這里寫圖片描述 -
LIWC (Linguistic Inquiry and Word Count) http://www.liwc.net/ 分類較多,褒貶,猜疑。
image -
MPQA Subjectivity Cues Lexicon http://www.cs.pitt.edu/mpqa/subj_lexicon.html
這里寫圖片描述 -
Bing Liu Opinion Lexicon http://www.cs.uic.edu/~liub/FBS/opinion-lexicon-English.rar
這里寫圖片描述 -
SentiWordNet http://sentiwordnet.isti.cnr.it/ 標注了極性的可能性
這里寫圖片描述
下面是不同詞典之間的差別,可以看出SentiWordNet和其他的詞典還是有些出入,我們可以根據此來關注詞語歧義的問題。
Analyzing the polarity of each word in IMDB
當我們拿到一個詞我們如何判斷他在每個類別中出現的概率呢?以IMDB影評為例
Potts, Christopher. 2011. On the negativity of negation. SALT 20, 636-659. 論文中寫到通過給詞語打分的形式來對應頻率,比如給單詞(“bad”) 打分 1-star, 2-star, 3-star…
但是!我們不能用單純的原始計數(raw counts)方法來進行打分,如下圖
bad顯然是一個消極詞,但是10星的頻率卻出現的比2星的還多,這會產生很大的干擾,所以我們不能采用之中原始計數的方法,而是似然函數
同時,有的單詞會出現多次,有的會出現少次,為了方便比較,我們引入了尺度似然(scale likehood)
所以我們可以通過計算scale likehood來對單詞進行打分,判斷單詞的極性:
那么像no,not,never這些否定詞是否會跟消極詞有關呢?Potts 在實驗中利用上面的方法得到了下圖:
可以看出,這些否定詞同樣可以作為單詞極性的一個判斷依據。
4. Learning Sentiment Lexicons
很多情況下,有時我們需要一些專業領域的或者已有詞典庫不具備的情感詞典,這時我們就需要構建我們自己的情感詞典。
通常我們采用的方法為半監督的bootstrap方法
具體步驟為:
-
Use a small amount of information
- A few labeled examples
- A few hand-built patterns
To bootstrap a lexicon
即使用少部分已經標注好的實例來半監督的不斷填充整個詞典
下面通過兩篇論文來學習如何構建我們自己的情感詞典:
Vasileios Hatzivassiloglou and Kathleen R. McKeown. 1997. Predicting the Semantic Orientation of Adjectives. ACL, 174–181
第一篇是Hatzivassiloglou和McKeown的文章,思想很好理解:連接詞為“and”的兩個詞極性相同,反之,連接詞為“but”的兩個詞極性相反。
這種bootstrap的方法共有四步:
Step1:
選取1336個形容詞的種子集,其中包含肯定的和否定的詞
Step2:
利用種子集進行擴充, 填充與此形容詞相關聯的情感詞,比如我們可以利用google搜索,只要有一定出現頻率的相關詞,我們都可以收錄下來。
Step3:
接下來我們可以計算兩個詞的相似性,可以通過計算兩個詞之間出現and和but頻率,出現and多就相近,出現but多就不相關。而后我們可以利用任何分類方法將詞語集分類。
Step4:
最終輸出,形成我們的情感詞典(但是也會存在一些錯誤)
第二篇論文:Turney Algorithm
Turney (2002): Thumbs Up or Thumbs Down? Semantic Orientation Applied to Unsupervised Classification of Reviews
上一篇論文很好的算出的單個詞的極性,但是我們更想得到的是短語和單詞同時存在的情感詞典。就用到了Turney 算法,另一種半監督的bootstrap算法。
Step1:Extract a phrasal lexicon from reviews 提取關鍵短語
我們通過一些規則提取出文中的短語,比如第一行的 形容詞 + 名詞/復數名詞 + 任何單詞 提取出 兩詞的短語
Step2:Learn polarity of each phrase 計算詞條的極性
和上面的算法類似,我們只需要計算短語的共現關系(co-occurence),
比如積極的詞我們會發現通常和excellent一起出現
Positive phrases co-occur more with “excellent”
消極的會和poor等一起出現。但是怎么計算
Negative phrases co-occur more with “poor”
所以我們該如何計算他們之間的共現程度呢?
于是引入點互信息(Pointwise Mutual Information)這個概念
聯合概率 / 獨立的兩個概率乘積
轉化為兩個詞之間就是:
分母分子概率的計算公式
p(word) = (word)出現次數 / N
p(word) = (word1 NEAR word2)出現的次數 / N
所以PMI也可以寫成:
有了PMI我們就可以計算短語之間的極性(并不局限于excellent,poor)了,容易得到極性公式:
之后我們可以看一下統計結果,分別來自于用戶好評和差評的統計:
可以看到極性劃分的還不錯
Turney 算法的結果:
一共410個評論。170(41%)negative,240(59%)postive。
算法的準確率達到了74%
Step3:Rate a review by the average polarity of its phrases 最后一步:用平均極性值來估計評論的情感傾向。
還有一種方法就是實用WordNet:
簡單來講就是把上面的找共現詞換成在積極的或者消極的感情詞集后面加入同義詞和反義詞,不斷重復,最后過濾掉不良的例子,得出情感詞的極性。
論文:S.M. Kim and E. Hovy. 2004. Determining the sentiment of opinions. COLING 2004
M. Hu and B. Liu. Mining and summarizing customer reviews. In Proceedings of KDD, 2004
總結詞典學習算法:
優點:
- 適用特定領域
- 具有不錯的魯棒性
思想:
以一個詞條集開始(‘good’‘poor’)
-
尋找其他具有相似極性的詞
- 使用 “and”,“but”
- 使用臨近詞
- 使用WordNet的同義詞和反義詞
5.Other Sentiment Tasks 其他的任務
在情感分析中,找到情感詞的屬性,對象尤為重要。我們通常采用的一是頻率詞+規則來提取屬性,圖中的就利用great來提取出情感的對象。二是通過已有屬性來來判斷對象是什么,比如菜單,裝修,實物判斷出餐廳。
還有就是S.Blair-Goldensohn提出的一種通用的對象訓練器
論文:S. Blair-Goldensohn, K. Hannan, R. McDonald, T. Neylon, G. Reis, and J. Reynar. 2008. Building a Sentiment Summarizer for Local Service Reviews. WWW Workshop
我們需注意的是通常我們是假設每個分類都是等概率的:
如果他們不相等
- 就不能用準確性來估計
- 需要引入F-scores來解決
嚴重的不平衡會影響分類器的表現
通常的兩個解決方案:
訓練集重采樣
- 隨機降采樣(Random undersampling)
Cost-sensitive learning算法
其他與情感分析類似的工作:情緒,性格等等
總結
1. 情感分析通常就是轉換為分類問題
2.特點:
否定詞很重要
使用全部詞匯做分類
情感詞典非常重要
- 已建好的詞典
- 自己利用半監督的bootstrap方法構建
</article>
</main>
轉自csdn