《少年的你》短評情感分析——機器學習之邏輯回歸

背景

《少年的你》這部國產青春劇影響還是蠻大的,票房達到了14億,從票房上看,這部電影在大陸制作的青春劇中比較成功,演員:易烊千璽+周冬雨,當然會引起一些流量效應,但是許多演員對這部電影的劇情、演員的演技評價頗好,包括自己的姐姐也非常喜歡;同時它也陷入了抄襲東野圭吾的《白夜行》和《嫌疑人X的獻身》的熱議,引起許多原著粉絲的不滿。下面就利用邏輯回歸(LogisticRegression)對《少年的你》的一些短評進行情感分析,看一看已經觀影的人對這部電影的評價如何。

獲取數據

數據是從豆瓣電影——《少年的你》短評上獲取的


在這里插入圖片描述

雖說圖中顯示的有220200條短評,我卻只爬取到600條,但當一個小的數據集樣本也是足夠的
爬蟲過程并不難,不再過多概述

處理數據

需要的庫和工具

import pandas as pd
import jieba
import re

工具jupyter notebook

數據整理

數據讀取如下圖

在這里插入圖片描述

數據內容:名字,短評,評價
由于爬取的短評內容分為500個樣本和100個樣本,所以需要先將兩個數據集整合成一個數據集
利用pandasmerge方法即可
在這里插入圖片描述

rating這一列中,數據還是列表格式,可觀性也比較差,很容易能推斷出10-50分為五個等級,也就是我們在網頁上看到的幾星評價,為了分析便利,可以寫一個函數將rating分為1-5五個等級

def rating(e):
    if '50' in e:
        return 5
    elif '40' in e:
        return 4
    elif '30' in e:
        return 3
    elif '20' in e:
        return 2
    else:
        return 1
data['new_rating'] = data['rating'].map(rating)
data.head()

運行后數據如下圖

在這里插入圖片描述

那么問題又來了,對于評價只有好評和壞差評之分,可是rating有五個等級怎么辦呢?
可以先將三星評價刪去,因為這些評價大概率為中性評價,然后將四星和五星定為好評,用1表示;再將一星和二星定位差評,用-1表示

new_data = data[data['new_rating']!=3]
new_data['sentiment'] = new_data['new_rating'].apply(lambda x : +1 if x>3 else -1)
new_data
在這里插入圖片描述

樣本只剩下557個,說明有43個三星中性評價被刪去


在這里插入圖片描述

好評和差評的比率大約為3.5:1,可以看出喜歡這部電影的人還是比較多的
但是樣本也出現了樣本不均衡的問題,這會對后期建模有一定的影響

怎么判定一句短評是好還是差?

我喜歡你 我討厭你
喜歡 討厭

不就可以根據一句話中的一些單詞進行判斷嘛,所以下一步用jieba庫對每一條短評進行分詞
在分詞前我們可以先分析一下文本,里面會有許多對情感分析沒有影響的內容,比如數字和字母,所以分詞時可以將其剔除

#分詞
def cut_word(text):
    text = jieba.cut(str(text),cut_all=False)
    return ' '.join(text)
new_data['new_short'] = new_data['short'].apply(cut_word)
#剔除數字
def remove_num(new_short):
    return re.sub(r'\d+','',new_short)
#剔除字母
def remove_word(new_short):
    return re.sub(r'[a-z]+','',new_short)
new_data['new_short'] = new_data['new_short'].apply(remove_num)
new_data['new_short'] = new_data['new_short'].apply(remove_word)

分詞效果如下


在這里插入圖片描述

文本中就可以看到一些帶有個人情感的單詞,比如無私奉獻,矯情等等

邏輯回歸建模

需要的庫

from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import LogisticRegression
import numpy as np
from pandas import DataFrame

分析與建模

第一步需要對分析好的數據進行數據劃分,分為訓練集和測試集

train_data,test_data = train_test_split(new_data,train_size = 0.8,random_state = 0)
#文本提取
transfer = CountVectorizer()
train_word = transfer.fit_transform(train_data['new_short'])
test_word = transfer.transform(test_data['new_short'])
#稀疏矩陣
print('new_data:\n',train_word.toarray())
#特征值
print('feature_name:\n',transfer.get_feature_names())

第二步對分詞后的文本進行特征值提取,可以生成一個對應的稀疏矩陣,并且得到稀疏矩陣對應的特征值
第三步利用邏輯回歸建模,即讓訓練集中的特征值和目標值進行擬合,從而生成一個模型

x_train,x_test,y_train,y_test = train_test_split(new_data['new_short'],new_data['sentiment'],train_size = 0.8,random_state = 0)
x_train = train_word
x_test = test_word
model = LogisticRegression()
model.fit(x_train,y_train)
y_predict = model.predict(x_test)
print('布爾比對:\n',y_predict==y_test)
score = model.score(x_test,y_test)
print('模型準確率:\n',score)

得出預測結果和模型準確率如下


在這里插入圖片描述

模型準確率為85.7%,建模效果一般
我們可以從測試集文本中挑選出一些例子進行驗證,觀察一下情感分析是否正確

example = test_data[50:55]
example[['short','new_rating','sentiment']]

在這里插入圖片描述

如果想要觀察完整短評,可以寫一個迭代器,將短評完整輸出
不過在圖中我們就可以看出這些短評的語意是如何的,比如第三個涉及抄襲,所以對應sentiment為-1
通過邏輯回歸的predict_proba可以獲得一個評價為好評的概率,也就是概率越接近于1,這條短評越可能是好評,同理短評為差評的概率接近于0

possibility = model.predict_proba(test_word)[:,1]
test_data.loc[:,'possibility'] = possibility
test_data.head()

得出數據如下圖

在這里插入圖片描述

之后可以通過索引得到對《少年的你》評價最好的五條和最差的五條短評
在這里插入圖片描述

在這里插入圖片描述

同樣迭代可查看完整短評,可以看到好評Top5寫的都比較多,也比較走心,大部分是在說這部電影反射出的社會問題——校園霸凌;而差評Top5都指出這部電影是在抄襲,引起許多人的不滿
在這里插入圖片描述

上圖為在短評中出現次數較多的單詞:
(演技 青春 少年 希望 喜歡)——這些詞應該是出至于一些好評,屬于正面詞匯,可以影響評價夾帶著的情感
(欺凌 保護 校園 霸凌 暴力)——這些詞語是陳述電影背景的詞語,雖然有些帶有負面情感,但還需根據短評句子的語意才能判斷好差之分
(抄襲)——這個單詞出現67次,而sentiment為-1的短評一共才有122個,通過分析也可得知帶有抄襲的評價大概率為差評

總結

一部票房可以達到14億的電影,一定有它的獨到之處,不論是演員陣容或者是背景題材,但是一部確定抄襲的電影注定不會成為一部好電影,作為一個路人,對《少年的你》是否抄襲不能做出判斷;但任何人的知識產權不能被侵犯是一定的!

公眾號“奶糖貓”后臺回復“少年的你”可獲取源碼和數據供參考,感謝支持。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內容

  • 摘要 我在《爬取簡書百萬頁面 分析簡書用戶畫像》 中分析了簡書用戶的書籍喜好,這里繼續嘗試通過簡書影評文章的抓取、...
    hirainchen閱讀 4,954評論 10 52
  • 文本情感分析 文本情感分析(也稱為意見挖掘)是指用自然語言處理、文本挖掘以及計算機語言學等方法來識別和提取原素材中...
    c9af2eadd50d閱讀 6,447評論 0 11
  • 1.文本數據的特征提取、中文分詞及詞袋模型 本節我們一起學習如何對文本數據進行特征提取,如何對中文分詞處理,以及如...
    勇于自信閱讀 2,575評論 0 0
  • 不知有多久。也不是很久。 自己每天跟打雞血似的努力與忙碌,與快樂并存。或許這才是踏實充足的生活吧。 但是,我對自己...
    阿布十月閱讀 195評論 0 1
  • 今晚又是修行的一個重要的節點,今天算是明晰的意識到組長所說的,所有星宿關系都要修行正統,不可以倒置,倒置是破壞了天...
    月光下的樹林子閱讀 484評論 0 0