影視評論分析(三)-- 情感分析

知識儲備

  • 情感分析定義

文本情感分析(也稱為意見挖掘)是指自然語言處理冯痢、文本挖掘以及計算機語言學等方法來識別和提取原素材中的主觀信息呀页。(摘自《維基百科》)

  • 使用到的第三方庫文件: snownlp TextBlob(英文) SnowNLP(中文)

  • TextBlob githubTextBlob

  • SnowNLP githubSnowNLP

  • 樸素貝葉斯定義

樸素貝葉斯是基于貝葉斯定理與特征條件獨立假設的分類方法谈跛。貝葉斯分類器基于一個簡單的假定:給定目標值時屬性之間相互條件獨立(摘自《百度百科》)

  • 停用詞定義

在信息檢索中习寸,為節(jié)省存儲空間和提高效率祭阀,在處理自然語言數(shù)據(jù)(或文本)之前或之后會自動過濾掉某些詞或字垮卓,這些詞或字即被稱為Stop Word(停用詞)(摘自《維基百科》)
目前有很多比較成熟的停用詞表垫桂,可以參考這個 github項目

  • 混淆矩陣

混淆矩陣中的4個數(shù)字,分別代表:

  • TP: 本來是正向扒接,預測也是正向的伪货;
  • FP: 本來是負向,預測卻是正向的钾怔;
  • FN: 本來是正向碱呼,預測卻是負向的;
  • TN: 本來是負向宗侦,預測也是負向的愚臀。
混淆矩陣數(shù)字含義

開始干活吧

  • 文本文件讀入
import  pandas as pd
# 讀入文本文件 
df = pd.read_csv()
  • 定義函數(shù)將星級評分大于3分的,當成正向情感矾利,取值為1姑裂,反之取值為0
def make_label(df):

    df["sentiment"] =df['comment_ratting'].apply(lambda x: 1 if x>3 else 0)

  • 拆分特征和標簽
# 提取全部特征值
X = df[['comment']] 
y = df.sentiment
  • 中文分詞
# 結巴分詞工具做分詞操作
import jieba 
def chinese_word_cut(content):
    return ' '.join([word for word in jieba.cut(content,cut_all=False) if len(word)>=2])
# apply函數(shù),對每行評論進行分詞
X['cutted_comment'] = X.comment_infos.apply(chinese_word_cut)
  • 訓練集和測試集拆分
from sklearn.model_selection import train_test_split
# from sklearn.cross_validation import train_test_split (sklearn版本低于0.18男旗,請使用該行)
# random_state 保證隨機數(shù)在不同環(huán)境中保持一致舶斧,以便驗證模型效果
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
  • 中文停用詞處理
def get_custom_stopwords(stop_words_file):
    with open(stop_words_file) as f:
        stopwords = f.read()
    stopwords_list = stopwords.split('\n')
    custom_stopwords_list = [i for i in stopwords_list]
    return custom_stopwords_list
stop_word_file = '中文停用詞文件'
stopwords = get_custom_stopwords(stop_words_file)
  • 特征向量化
from sklearn.feature_extraction.text import CountVectorizer
vect = CountVectorizer(
                      max_df = 0.8,# 在超過這一比例的文檔中出現(xiàn)的關鍵詞(過于平凡),去除掉察皇。
                       min_df = 3, # 在低于這一數(shù)量的文檔中出現(xiàn)的關鍵詞(過于獨特)茴厉,去除掉。
                       token_pattern=u'(?u)\\b[^\\d\\W]\\w+\\b', #取出數(shù)字特征
                       stop_words=frozenset(stopwords))
                       )
# 向量化工具轉化分詞后的訓練集語句什荣,并轉換為DataFrame對象
term_matrix = pd.DataFrame(vect.fit_transform(X_train.cutted_comment).toarray(), columns=vect.get_feature_names())

  • 利用生成矩陣訓練模型
# 樸素貝葉斯分類
from sklearn.naive_bayes import MultinomialNB
nb = MultinomialNB()
from sklearn.pipeline import make_pipeline
pipe = make_pipeline(vect, nb)
# 將未特征向量化的訓練集內容輸入矾缓,做交叉驗證,計算模型分類準確率

from sklearn.cross_validation import cross_val_score
print (cross_val_score(pipe, X_train.cutted_comment, y_train, cv=5, scoring='accuracy').mean())

結果輸出:0.819563608026

  • 驗證模型準確度
# 模型擬合
pipe.fit(X_train.cutted_comment, y_train)
# 在測試集上稻爬,對情感分類進行預測
y_pred = pipe.predict(X_test.cutted_comment)
# 引入sklearn測量工具集
from sklearn import metrics
print (metrics.accuracy_score(y_test, y_pred))

結果輸出:0.80612244898

  • 混淆矩陣驗證
print (metrics.confusion_matrix(y_test, y_pred))

結果輸出:[[67 3][16 12]]

  • SnowNLP進行情感分析
from snownlp import SnowNLP
def get_sentiment(text):
    return SnowNLP(text).sentiments

# 測試數(shù)據(jù)集 利用SnowNLP處理
y_pred_snownlp = X_test.comment_infos.apply(get_sentiment)
# 當我們查看結果就會發(fā)現(xiàn)SnowNLP輸出結果為[0-1]之間的小數(shù)值
# 所以我們將大于0.5的結果作為正向嗜闻,小于0.5的結果作為負向y_pred_snownlp_normalized = y_pred_snownlp.apply(lambda x: 1 if x>0.5 else 0)
# 查看模型的準確率
print (metrics.accuracy_score(y_test, y_pred_snownlp_normalized))

結果輸出:0.489795918367 結果很糟糕哦!

小結

  • 如何利用停用詞桅锄、詞頻閥值和標記模式(token_pattern)移除無關的特征詞匯琉雳,降低模型復雜度
  • 選用合適的機器學習分類模型,對詞語特征矩陣分類的重要性
  • 如何使用管道模式友瘤,歸并和簡化機器學習步驟流程
  • 如何選擇合適的性能測試工具咐吼,對模型的效果作出評估和對比

相關閱讀 請移步

影視評論分析(四)-- 輿情分析

初步學習有很多不足之處,希望大家多多指教
代碼和數(shù)據(jù)集會在整理后及時更新

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末商佑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子厢塘,更是在濱河造成了極大的恐慌茶没,老刑警劉巖肌幽,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異抓半,居然都是意外死亡喂急,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門笛求,熙熙樓的掌柜王于貴愁眉苦臉地迎上來廊移,“玉大人,你說我怎么就攤上這事探入〗瓶祝” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵蜂嗽,是天一觀的道長苗膝。 經常有香客問我,道長植旧,這世上最難降的妖魔是什么辱揭? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮病附,結果婚禮上问窃,老公的妹妹穿的比我還像新娘。我一直安慰自己完沪,他們只是感情好域庇,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著丽焊,像睡著了一般较剃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上技健,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天写穴,我揣著相機與錄音,去河邊找鬼雌贱。 笑死啊送,一個胖子當著我的面吹牛,可吹牛的內容都是我干的欣孤。 我是一名探鬼主播馋没,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼降传!你這毒婦竟也來了篷朵?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎声旺,沒想到半個月后笔链,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡腮猖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年鉴扫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澈缺。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡坪创,死狀恐怖,靈堂內的尸體忽然破棺而出姐赡,到底是詐尸還是另有隱情莱预,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布雏吭,位于F島的核電站锁施,受9級特大地震影響,放射性物質發(fā)生泄漏杖们。R本人自食惡果不足惜悉抵,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望摘完。 院中可真熱鬧姥饰,春花似錦、人聲如沸孝治。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谈飒。三九已至岂座,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間杭措,已是汗流浹背费什。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留手素,地道東北人鸳址。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像泉懦,于是被迫代替她去往敵國和親稿黍。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內容