摘要
我在《爬取簡(jiǎn)書百萬(wàn)頁(yè)面 分析簡(jiǎn)書用戶畫像》 中分析了簡(jiǎn)書用戶的書籍喜好跟衅,這里繼續(xù)嘗試通過(guò)簡(jiǎn)書影評(píng)文章的抓取苗膝、內(nèi)容清洗止毕、影評(píng)句子提取尝盼,建立機(jī)器學(xué)習(xí)情緒預(yù)測(cè)模型吞滞,挖掘分析簡(jiǎn)書用戶對(duì)流行電影的喜好。
涉及的技術(shù)點(diǎn)/知識(shí)點(diǎn)
涉及的NLP(自然語(yǔ)言處理)知識(shí)點(diǎn):
- 中文分詞
- 關(guān)鍵詞提取
- 文本相似度
- 中心句提取
- 情緒識(shí)別
涉及的ML(機(jī)器學(xué)習(xí))知識(shí)點(diǎn):
- 有監(jiān)督分類
- 數(shù)據(jù)不平衡問(wèn)題
大綱
- 序
- 數(shù)據(jù)源
- 難點(diǎn)問(wèn)題
- 難點(diǎn)1:電影名稱識(shí)別
- 難點(diǎn)2:評(píng)論句提取
- 難點(diǎn)3:文本的情緒識(shí)別
- 難點(diǎn)4:如何評(píng)估預(yù)測(cè)結(jié)果的準(zhǔn)確性
- 總結(jié)
序
意欲何為 - 沒有評(píng)分機(jī)制時(shí)盾沫,如何判定用戶對(duì)電影的喜惡裁赠?
電影的拍攝成本高、票價(jià)也不低赴精,消費(fèi)者投入的關(guān)注度和觀看成本高(最終的投入成本是包括注意力投入佩捞、金錢投入、時(shí)間投入和感情投入)蕾哟。
簡(jiǎn)單算下觀看一部電影的成本(步驟):先看下預(yù)告內(nèi)容一忱,做下同期上映電影的比較,覺得導(dǎo)演渐苏、演員陣容都不錯(cuò)掀潮,下定決心要看了,跟男/女友/老婆 /老公/基友/閨密做推薦琼富,推薦成功后去選座買票,觀影當(dāng)天說(shuō)不定還得先吃個(gè)飯庄新,飯后乖乖的在影院呆上90分鐘(關(guān)鍵時(shí)刻還得憋尿)鞠眉,觀影結(jié)束后指不定還得來(lái)個(gè)夜宵、開個(gè)房間探討下人生什么的择诈。械蹋。。
讀一本書的成本(步驟):1.打開書/電子閱讀器/手機(jī)羞芍;2. 讀哗戈!
這樣對(duì)比看一部電影比讀一本書的投入成本高多了!
因此觀眾給出的反饋?zhàn)匀灰脖葧畷?huì)強(qiáng)烈一些荷科,特別是滿懷期待看完卻發(fā)現(xiàn)是一部爛片唯咬,有種上當(dāng)受騙的感覺。
因此對(duì)電影光是通過(guò)詞頻作為喜好度是不夠的畏浆,用戶可能反復(fù)的在罵呢胆胰。
所以需要引入多一個(gè)分析的因子:情緒。用戶提及某個(gè)電影時(shí)的情緒是怎么樣的刻获,是積極愉悅蜀涨、還是負(fù)面憤怒,加上這個(gè)才能有效判定用戶對(duì)電影或者某個(gè)事物的喜好。
如何得之 - 如何得到用戶的情緒厚柳?
在豆瓣上氧枣,用戶的評(píng)分就是最直接的情緒數(shù)值:5力薦,4推薦别垮,3還行便监,2較差,1很差宰闰。
但在簡(jiǎn)書這類寫作平臺(tái)上茬贵,發(fā)布文章時(shí)是沒有一個(gè)選項(xiàng)來(lái)填寫分?jǐn)?shù),也沒提供選擇心情的選項(xiàng)移袍。
“所言即其所思”解藻,這是普遍人性。每個(gè)用戶寫下的文字表達(dá)想法葡盗,在字里行間都會(huì)不經(jīng)意的使用一些情緒用詞來(lái)表達(dá)螟左,這些便是我可以獲取的“原始數(shù)據(jù)”。
得之何用 - 情緒分析用途觅够?
精準(zhǔn)推薦胶背!用戶談?wù)摰枚嗟臇|西未必是TA所喜愛的,也許是TA痛恨的(比如說(shuō)前任)喘先。如果用戶在自己大力差評(píng)某部電影的文章底部看到另一部相似爛片的推薦钳吟,推薦文案還寫著“親,我猜你還喜歡看這些”窘拯,估計(jì)這用戶會(huì)有種吃了蒼蠅剛吐出來(lái)發(fā)現(xiàn)迎面又飛來(lái)幾只的感覺红且。
通過(guò)用戶在討論某事物時(shí)上下文的情緒分析,來(lái)判斷對(duì)該事物的喜惡涤姊,將預(yù)測(cè)結(jié)果加入對(duì)事物的打分計(jì)算中暇番,最后得出一個(gè)可量化、可計(jì)算的分?jǐn)?shù)值思喊,便是一個(gè)精準(zhǔn)推薦系統(tǒng)的需要解決的問(wèn)題壁酬。
如何為之 - 怎么做?
理論上只需要一句話:要識(shí)別出文章中提及的電影恨课,以及作者對(duì)該電影的評(píng)論舆乔,是好評(píng)還是差評(píng),作為文章作者對(duì)該電影的喜惡庄呈,并根據(jù)評(píng)論的情緒強(qiáng)烈程度轉(zhuǎn)化為喜惡程度即可蜕煌。
那實(shí)際上,就要解決以下問(wèn)題:
- 難點(diǎn)1:電影名稱識(shí)別
- 難點(diǎn)2:評(píng)論句提取
- 難點(diǎn)3:文本的情緒識(shí)別
- 難點(diǎn)4:如何評(píng)估預(yù)測(cè)結(jié)果的準(zhǔn)確率
下面逐一細(xì)說(shuō)诬留。
數(shù)據(jù)來(lái)源
我采集了簡(jiǎn)書上幾個(gè)比較受歡迎的電影專題以及一個(gè)大V帳號(hào)文章(數(shù)據(jù)截止至采集數(shù)據(jù)時(shí)):
-
收錄了 38549 篇文章斜纪,601170 人關(guān)注
-
簡(jiǎn)書電影院 - 專題 - 簡(jiǎn)書贫母;
收錄了 37193 篇文章,50321 人關(guān)注
-
41783 粉絲; 1424 文章
但由于簡(jiǎn)書對(duì)專題頁(yè)面加了訪問(wèn)限制盒刚,每個(gè)專題只能訪問(wèn)到最新的200個(gè)列表頁(yè)面腺劣,因而每個(gè)專題可獲取2~3000篇文章,以此作為抽樣數(shù)據(jù)樣本因块。
難點(diǎn)問(wèn)題
難點(diǎn)1:電影名稱識(shí)別
要分析對(duì)電影的評(píng)價(jià)橘原,首先就要獲取到文章中提到電影名稱有哪些,最簡(jiǎn)單的匹配規(guī)則便是提取書名號(hào)《》
內(nèi)的內(nèi)容涡上。
而實(shí)際獲取到的電影名稱真可謂“臟亂差”趾断,有電影名、書籍名吩愧、文章名等芋酌,有些電影名稱會(huì)用縮寫引用(如《變1》、《復(fù)聯(lián)》雁佳、《生化危機(jī)4/5/6》)脐帝,或者中英文混合在一起(如《機(jī)器人總動(dòng)員(wall-e)》),甚至還有錯(cuò)漏別字(如《那些年糖权,我們一起追過(guò)的女孩》堵腹,多了個(gè)“過(guò)”字),以及包含中英文特殊標(biāo)點(diǎn)空白符號(hào)等星澳,例如:
因此需要進(jìn)行一輪“數(shù)據(jù)大清洗”疚顷,我使用如下清洗策略:
- 提取文章中所有書名號(hào)
《》
中包含的文本 - 去掉其中為鏈接、文章標(biāo)題(句子中包含“文章|寫過(guò)”等字眼的)禁偎、書名(句子中包含“本書|書中|那本...”等字眼的)
- 構(gòu)建
電影專用詞典
荡含,并使用文本相似性算法查找出與電影詞典最相似的一個(gè)名稱 - 構(gòu)建
電影停用詞典
,去掉停用詞典里包含的內(nèi)容 - 使用匹配規(guī)則届垫,統(tǒng)一標(biāo)點(diǎn)符號(hào)、去掉空白字符全释、中英文名稱分離装处、系列名分離
- 去重
構(gòu)建電影專用詞典
其中“電影專用詞典”,是通過(guò)采集了「貓眼 影片總票房排行榜」2000~2017年間上榜的所有電影浸船,約有3000+部妄迁,如圖:
再根據(jù)文章中所收集到的電影名稱的候選文本,抓取「豆瓣網(wǎng)」的官方電影名字(遭遇了豆瓣業(yè)內(nèi)聞名的反爬策略就不多說(shuō)了)李命,合并去重后約有8400多部登淘。看一眼才發(fā)現(xiàn)好多電影連聽都沒聽過(guò)封字,有些電影名稱還挺有趣黔州,以后有時(shí)間還可以做下電影名稱的分析耍鬓。
電影名稱糾錯(cuò)
為了解決錯(cuò)別字,我通過(guò)文本相似性算法流妻,在電影專用詞典里找出與之最相似名稱牲蜀。
知名的相似算法有不少,如:
- jaro_distance
- ngram_distance
- levenshtein_distance
- damerau_levenshtein_distance
經(jīng)過(guò)簡(jiǎn)單比較绅这,我選擇了其中表現(xiàn)最好的jaro_winkler_distance
# e.g.: str_edit_distance("加勒比海盜五:死無(wú)對(duì)證") # => ["加勒比海盜5:死無(wú)對(duì)證", 0.9754]
jaro_winkler_distance(str1, str2).round(4) # 0.9754, best
jaro_distance(str1, str2).round(4) # 0.9589
ngram_distance(str1, str2).round(4) # => 0.9091
normalized_levenshtein_distance(str1, str2).round(4) # => 0.7273
normalized_damerau_levenshtein_distance(str1, str2).round(4) # => 0.7273
運(yùn)用到文章內(nèi)容上涣达,可得到相似電影名稱,感覺效果還可以:
構(gòu)建Pipeline
構(gòu)建一個(gè)Pipeline用于提取頁(yè)面中電影名稱证薇,對(duì)單個(gè)頁(yè)面測(cè)試效果如下:
運(yùn)用到所有頁(yè)面上:
至此完成了電影名稱的提取度苔、清洗,得出每篇文章提及的電影名稱浑度,如圖:
難點(diǎn)2:評(píng)論句提取
判斷一篇文章的情緒寇窑,最簡(jiǎn)單的做法是通過(guò)提取所有情緒詞來(lái)統(tǒng)計(jì)下詞頻及其權(quán)重可得到一個(gè)粗糙的結(jié)果,但這樣的結(jié)果對(duì)“影評(píng)”類文章不是很準(zhǔn)確俺泣。
根據(jù)觀察疗认,一篇電影評(píng)論文章中,往往會(huì)有大段的電影情節(jié)描述伏钠,然后夾雜一兩句評(píng)論横漏。而有些電影本身劇情就是比較負(fù)面、陰暗的(如災(zāi)難片類的)熟掂,但影片本身質(zhì)量很高(如《釜山行》缎浇,豆瓣評(píng)分8.2),如果文章內(nèi)容包含大量的劇情描述赴肚,那么得到關(guān)鍵詞會(huì)偏向于負(fù)面情緒素跺,并不能用于表達(dá)出作者對(duì)電影的喜好情緒。
因此我使用了這樣的提取策略:
- 跳過(guò)電影名稱多于一個(gè)的文章(不確定因素太多)
- 直接相關(guān)語(yǔ)句子:包含電影名的句子
- 間接相關(guān)句子:包含點(diǎn)評(píng)詞語(yǔ)的句子誉券,如:“這部電影|豆瓣評(píng)分|總的來(lái)說(shuō)|看完之后|電影結(jié)束|個(gè)人感受...”等等
- 總結(jié)性段落:文章標(biāo)題和文章最后段落
評(píng)論句子提取的結(jié)果示例如下:
這樣的策略對(duì)有些內(nèi)容不是很適用指厌,例如這樣的標(biāo)題:《同樣是豆瓣9.2分,它或許比《摔跤吧踊跟!爸爸》更深》踩验,這是典型的“借勢(shì)營(yíng)銷”型文案,文章內(nèi)容中推介的是另外一部韓國(guó)電影《熔爐》商玫,而時(shí)下《摔跤吧箕憾!爸爸》正熱,標(biāo)題中帶上這個(gè)會(huì)更吸引用戶點(diǎn)擊拳昌。
另外一個(gè)思路是對(duì)文章進(jìn)行摘要提取寂祥,然后對(duì)摘要進(jìn)行情緒識(shí)別照棋。而對(duì)于文章的主題提取,可以使用在ML算法中的用于解決主題模型
問(wèn)題的算法(如LDA)敬辣,但不確定是否適合影評(píng)這種混合了大量劇情描述的文章內(nèi)容。
難點(diǎn)3:文本的情緒識(shí)別
得到相關(guān)評(píng)論文本后,便可對(duì)文本進(jìn)行分詞及情緒識(shí)別,這里有兩種做法,一是使用帶有情緒情感度的專業(yè)詞典并闲,配合專有算法;另外一種是使用機(jī)器學(xué)習(xí)算法谷羞。
使用專業(yè)詞典
一開始我使用了大連理工大學(xué)的《大連理工情感詞匯本體庫(kù)》帝火,是目前最權(quán)威的中文情緒詞典,共含有情感詞共計(jì)27466個(gè)湃缎,包含了詞語(yǔ)的詞性種類犀填、情感類別、情感強(qiáng)度及極性等信息嗓违,例如:
詞語(yǔ) | 詞性種類 | 詞義數(shù) | 詞義序號(hào) | 情感分類 | 強(qiáng)度 | 極性 | 輔助情感分類 | 強(qiáng)度 | 極性 |
---|---|---|---|---|---|---|---|---|---|
無(wú)所畏懼 | idiom | 1 | 1 | PH | 7 | 1 | |||
手頭緊 | idiom | 1 | 1 | NE | 7 | 0 | |||
周到 | adj | 1 | 1 | PH | 5 | 1 | |||
言過(guò)其實(shí) | idiom | 1 | 1 | NN | 5 | 2 |
中文情感詞匯本體的情感分類體系是在國(guó)外比較有影響的Ekman的6大類情感分類體系的基礎(chǔ)上構(gòu)建的九巡。在Ekman的基礎(chǔ)上,詞匯本體加入情感類別“好”對(duì)褒義情感進(jìn)行了更細(xì)致的劃分蹂季。最終詞匯本體中的情感共分為7大類21小類冕广,如圖:
把情感詞典加入分詞詞典,對(duì)候選每個(gè)句子進(jìn)行分詞偿洁,得出情感詞組撒汉,并累加每個(gè)情感詞的強(qiáng)度值作為句子的情感值。
但經(jīng)過(guò)測(cè)試后涕滋,發(fā)現(xiàn)預(yù)測(cè)效果并不理想睬辐,究其原因發(fā)現(xiàn)是情感詞典中命中的詞語(yǔ)太少,在句子中得不到相關(guān)詞語(yǔ)宾肺,也就無(wú)法判斷情感極性和強(qiáng)度溯饵。
使用情感詞典的測(cè)試結(jié)果:
而專業(yè)詞典的擴(kuò)展需要專業(yè)領(lǐng)域知識(shí),擴(kuò)展起來(lái)很困難锨用,我目前沒找到更新的專業(yè)詞典丰刊,國(guó)內(nèi)這塊的資料相當(dāng)匱乏,而國(guó)外有個(gè)知名的SentiWordNet庫(kù)增拥,中文NLP研究的難度系數(shù)可想而知藻三。
使用機(jī)器學(xué)習(xí)
鑒于情感詞典的資源限制,決定嘗試使用機(jī)器學(xué)習(xí)來(lái)對(duì)文本做正跪者、負(fù)面情緒預(yù)測(cè)。
1). 構(gòu)建分詞詞典:
分詞需要構(gòu)建專用領(lǐng)域的詞典熄求,這樣得到的分詞結(jié)果才會(huì)更精確渣玲。
因?yàn)橹恍枰姓?fù)情感類別、不需要有情感強(qiáng)度及極性等信息弟晚,我使用了網(wǎng)絡(luò)上公開的一些情感詞典忘衍,:
- 《大連理工情感詞匯本體庫(kù)》:這里只利用了情感類別
- 《臺(tái)灣大學(xué)簡(jiǎn)體中文情感極性詞典NTUSD》:2810正極性詞語(yǔ) + 8276負(fù)極性詞語(yǔ)
- 《知網(wǎng)情感分析用詞語(yǔ)集》:由知網(wǎng)發(fā)布的詞典逾苫,包括中文情感詞典和英文情感詞典
- 《BosonNLP情感詞典》(加上后發(fā)現(xiàn)預(yù)測(cè)效果并不好,原因是這個(gè)詞典其實(shí)是預(yù)測(cè)文本的分詞結(jié)果枚钓,不是整理過(guò)的專業(yè)情感詞匯铅搓,并沒使用上)
- 國(guó)外的 《SentiWordNet》 (只有英文單詞,這次沒有使用)
“正面情感”詞語(yǔ)搀捷,如:愛星掰,贊賞,快樂嫩舟,感同身受氢烘,好奇,喝彩家厌,魂?duì)繅?mèng)縈播玖,嘉許 ...
“負(fù)面情感”詞語(yǔ),如:哀傷饭于,半信半疑蜀踏,鄙視,不滿意掰吕,不是滋味兒果覆,后悔,大失所望 ...
“正面評(píng)價(jià)”詞語(yǔ)畴栖,如:不可或缺随静,部?jī)?yōu),才高八斗吗讶,沉魚落雁燎猛,催人奮進(jìn),動(dòng)聽照皆,對(duì)勁兒 ...
“負(fù)面評(píng)價(jià)”詞語(yǔ)重绷,如:丑,苦膜毁,超標(biāo)昭卓,華而不實(shí),荒涼瘟滨,混濁候醒,畸輕畸重,價(jià)高杂瘸,空洞無(wú)物 ...
合并倒淫、清洗和去重后,最終構(gòu)建出了14000+
個(gè)詞的積極情緒詞典败玉,18000+
個(gè)詞的消極情緒詞典敌土。
積極詞典:
消極詞典:
2). 準(zhǔn)備訓(xùn)練語(yǔ)料
從網(wǎng)上搜集到幾個(gè)帶有積極镜硕、消極的標(biāo)注的評(píng)論語(yǔ)料數(shù)據(jù)集,分別包含了書籍返干、DVD兴枯、音樂、購(gòu)物領(lǐng)域的各有4000條評(píng)論矩欠,如下圖:
可惜沒找到中文影評(píng)相關(guān)的語(yǔ)料财剖,但找到國(guó)外英文的影評(píng)語(yǔ)料 ,對(duì)晚顷,英文資料很豐富峰伙。。该默。
3). 訓(xùn)練模型
由于是文本型特征瞳氓,分類算法上選擇了樸素貝葉斯
,把數(shù)據(jù)分為2份栓袖,一半訓(xùn)練匣摘,另一半做測(cè)試。
使用jieba
分詞工具裹刮,對(duì)文本進(jìn)行分詞得到候選詞組音榜,把得到的詞組作為特征輸入來(lái)訓(xùn)練情緒預(yù)測(cè)模型。
訓(xùn)練后的模型測(cè)試結(jié)果如下:
Classifier stats:
{:categories=>["positive", "negative"],
:category_stats=>
"For category positive, 20731 examples (47.94% of the total) and 144306 total_tokens\n" +
"For category negative, 22512 examples (52.06% of the total) and 91796 total_tokens",
:total_examples=>43243,
:train_times=>43243}
Run measure task for data_type=book
Loading test data for book
Test with 2000(2000~4000) comments for book
Progress(Time: 00:00:14)[2000/2000](100%):|========================================================================================================================|Time: 00:00:14
Measure scores:
{:tp=>796,
:tn=>832,
:fp=>181,
:fn=>191,
:precision=>0.815,
:recall=>0.806,
:f1_score=>0.81}
Accuracy:
Predict 1628 success of 2000, accuracy is 81.4% (?? Good)
Show details?(y/n):n
save correct_words?(y/n): n
Run measure task for data_type=music
Loading test data for music
Test with 2000(2000~4000) comments for music
Progress(Time: 00:00:12)[2000/2000](100%):|========================================================================================================================|Time: 00:00:12
Measure scores:
{:tp=>716,
:tn=>910,
:fp=>237,
:fn=>137,
:precision=>0.751,
:recall=>0.839,
:f1_score=>0.793}
Accuracy:
Predict 1626 success of 2000, accuracy is 81.3% (?? Good)
Show details?(y/n):n
save correct_words?(y/n): n
Run measure task for data_type=dvd
Loading test data for dvd
Test with 2000(2000~4000) comments for dvd
Progress(Time: 00:00:12)[2000/2000](100%):|========================================================================================================================|Time: 00:00:12
Measure scores:
{:tp=>791,
:tn=>851,
:fp=>229,
:fn=>129,
:precision=>0.775,
:recall=>0.86,
:f1_score=>0.815}
Accuracy:
Predict 1642 success of 2000, accuracy is 82.1% (?? Good)
Show details?(y/n):n
save correct_words?(y/n): n
Run measure task for data_type=shopping
Loading test data for shopping
Test with 2000(2000~4000) comments for shopping
Progress(Time: 00:00:11)[2000/2000](100%):|========================================================================================================================|Time: 00:00:11
Measure scores:
{:tp=>970,
:tn=>751,
:fp=>30,
:fn=>249,
:precision=>0.97,
:recall=>0.796,
:f1_score=>0.874}
Accuracy:
Predict 1721 success of 2000, accuracy is 86.1% (?? Good)
Show details?(y/n):n
save correct_words?(y/n): n
訓(xùn)練后的模型在書籍捧弃、音樂赠叼、影碟及購(gòu)物評(píng)論的語(yǔ)料上都有不錯(cuò)的效果。
在提取出的影評(píng)短句上測(cè)試:
又是“無(wú)聊”违霞、“又俗又傻”而一個(gè)“但”字就反轉(zhuǎn)了情緒嘴办,真是難為分類器了:
經(jīng)過(guò)反復(fù)對(duì)比實(shí)驗(yàn),發(fā)現(xiàn)語(yǔ)料的質(zhì)量決定了模型的精度买鸽,而語(yǔ)料的擴(kuò)展對(duì)比擴(kuò)展專業(yè)詞典卻容易多了涧郊。例如幾年前都沒有“因吹斯汀”這些網(wǎng)絡(luò)流行詞,更不知道它代表是正面情緒眼五,以后只要不斷更新相關(guān)領(lǐng)域的語(yǔ)料庫(kù)來(lái)重新訓(xùn)練則可得到更精確的模型妆艘。
難點(diǎn)4:如何評(píng)估預(yù)測(cè)結(jié)果的準(zhǔn)確性
俗話說(shuō)“是騾子是馬拉出來(lái)遛遛”。
得到一個(gè)預(yù)測(cè)情緒的模型后看幼,便可對(duì)影評(píng)文章進(jìn)行預(yù)測(cè)批旺,但預(yù)測(cè)的結(jié)果是否準(zhǔn)確?準(zhǔn)確率又有多高诵姜?這又是個(gè)問(wèn)題朱沃。
每當(dāng)事情陷入停滯,我就會(huì)想起日本漫畫大師安達(dá)充說(shuō)過(guò)“當(dāng)故事情節(jié)發(fā)展不下去的時(shí)候,加入一個(gè)新角色逗物,是最簡(jiǎn)單的做法”。
這時(shí)需要祭出一個(gè)“旁證”了。這所謂的“旁證”摆寄,也就是目前大家比較認(rèn)可的電影評(píng)分網(wǎng)站——豆瓣網(wǎng)失暴。
引入“旁證”
大家都知道豆瓣網(wǎng)上的電影用戶通過(guò)打星(5力薦,4推薦微饥,3還行逗扒,2較差,1很差)欠橘,轉(zhuǎn)換得出的10分制的評(píng)分矩肩,我們可簡(jiǎn)單把14.9分視作負(fù)面評(píng)價(jià)、510分視作正面評(píng)價(jià)肃续,沒有分?jǐn)?shù)的視作中性評(píng)價(jià)黍檩。再把豆瓣的評(píng)價(jià)結(jié)果視作大部分人認(rèn)同的結(jié)果,當(dāng)然這樣肯定是有偏差的始锚。
大膽假設(shè)刽酱,小心求證,先試試看吧瞧捌。
根據(jù)電影名詞典再次去抓取豆瓣網(wǎng)上的電影信息棵里,這次包含了電影分?jǐn)?shù)::
使用獲取到的電影專題『簡(jiǎn)書電影院』文章內(nèi)容測(cè)試,結(jié)果如下:
1048篇中姐呐,豆瓣評(píng)分結(jié)果與模型預(yù)測(cè)符合的有974篇殿怜,準(zhǔn)確率是92.9%,WOW皮钠!真的這么準(zhǔn)嗎稳捆?
看下詳細(xì)結(jié)果,豆瓣評(píng)分是正面的有1022條麦轰,預(yù)測(cè)對(duì)了973篇乔夯,例如:
而豆瓣評(píng)分是負(fù)面的有28條記錄,而模型只預(yù)測(cè)出1篇是負(fù)面的:
真的是模型預(yù)測(cè)錯(cuò)了嗎款侵?
從負(fù)面例子中抽樣看看模型分解的結(jié)果:
評(píng)論《麻煩家族》(豆瓣評(píng)分4.8)的:
從自動(dòng)摘要出來(lái)的句子來(lái)看末荐,實(shí)際上文章作者表現(xiàn)出正面情緒,模型預(yù)測(cè)為正面新锈,預(yù)測(cè)正確 ??甲脏。
再看評(píng)論同一部電影的另外一個(gè)文章的評(píng)論:
作者顯然是給了個(gè)差評(píng),但模型給了出的預(yù)測(cè)是正面,預(yù)測(cè)錯(cuò)誤 ??块请。
校驗(yàn)“旁證”
負(fù)例的預(yù)測(cè)準(zhǔn)確率低娜氏,有兩個(gè)原因,一個(gè)是豆瓣評(píng)分正負(fù)標(biāo)準(zhǔn)的閥值設(shè)定不夠精準(zhǔn)墩新,二是訓(xùn)練數(shù)據(jù)不平衡贸弥。
之前使用的閥值策略是:“簡(jiǎn)單把14分視作負(fù)面評(píng)價(jià)、510分視作正面評(píng)價(jià)海渊,沒有分?jǐn)?shù)的視作中性評(píng)價(jià)”绵疲。
我猜測(cè)在4~5分這個(gè)區(qū)間應(yīng)該是灰度地帶,正負(fù)面評(píng)論都會(huì)有臣疑。為了驗(yàn)證這個(gè)猜想盔憨,使用獲取到的所有豆瓣電影分?jǐn)?shù),導(dǎo)入數(shù)據(jù)分析工具中讯沈,排除掉沒有分?jǐn)?shù)的條目后得到6500+條電影數(shù)據(jù)郁岩,其中最低是2.1,最高是9.7芙盘。
查看評(píng)分分布的直方圖與比例餅圖:
調(diào)整區(qū)間閥值驯用,把2.1-4.9
劃分為一個(gè)區(qū)間,系統(tǒng)自動(dòng)分成了3組分值:
發(fā)現(xiàn)5分以下電影僅占12%儒老。
從評(píng)分分布結(jié)果看蝴乔,在簡(jiǎn)書上大部分人寫文章是針對(duì)高分(好評(píng))電影為主,低分(差評(píng))電影的文章數(shù)量很少驮樊,從提取出來(lái)的數(shù)據(jù)量看薇正,兩者比率約為100:3。
解決數(shù)據(jù)不平衡問(wèn)題
訓(xùn)練數(shù)據(jù)不平衡導(dǎo)致正例過(guò)擬合囚衔,而負(fù)例欠擬合挖腰。
要解決數(shù)據(jù)不平衡問(wèn)題,可以重新采樣訓(xùn)練集练湿。有兩種方法使不平衡的數(shù)據(jù)集來(lái)建立一個(gè)平衡的數(shù)據(jù)集——欠采樣和過(guò)采樣猴仑,解釋如下:
欠采樣:
欠采樣是通過(guò)減少豐富類的大小來(lái)平衡數(shù)據(jù)集,當(dāng)數(shù)據(jù)量足夠時(shí)就該使用此方法肥哎。通過(guò)保存所有稀有類樣本辽俗,并在豐富類別中隨機(jī)選擇與稀有類別樣本相等數(shù)量的樣本,可以檢索平衡的新數(shù)據(jù)集以進(jìn)一步建模篡诽。
過(guò)采樣:
相反崖飘,當(dāng)數(shù)據(jù)量不足時(shí)就應(yīng)該使用過(guò)采樣,它嘗試通過(guò)增加稀有樣本的數(shù)量來(lái)平衡數(shù)據(jù)集杈女,而不是去除豐富類別的樣本的數(shù)量朱浴。通過(guò)使用重復(fù)吊圾、自舉或合成少數(shù)類過(guò)采樣等方法(SMOTE)來(lái)生成新的稀有樣品。
由于訓(xùn)練數(shù)據(jù)不多翰蠢,我使用了過(guò)采樣
中的自舉方案项乒。我將另外一個(gè)簡(jiǎn)書的電影專題『影視天堂』中模型預(yù)測(cè)結(jié)果與豆瓣評(píng)分結(jié)果一致的內(nèi)容作為訓(xùn)練數(shù)據(jù)集來(lái)強(qiáng)化訓(xùn)練模型:
然后再對(duì)電影專題『簡(jiǎn)書電影院』測(cè)試一次:
負(fù)例的準(zhǔn)確率改善了一些些,這說(shuō)明效果是有的梁沧,以后只需繼續(xù)獲取到新的數(shù)據(jù)再“喂”給模型板丽,模型預(yù)測(cè)結(jié)果會(huì)越來(lái)越精準(zhǔn)。
總結(jié)
至此趁尼,得到一個(gè)不算成熟的電影情緒預(yù)測(cè)模型,可以用來(lái)做一些有趣的統(tǒng)計(jì)分析了猖辫。
專題分析
將『影視天堂』專題的分析結(jié)果在數(shù)據(jù)分析工具上進(jìn)行數(shù)據(jù)可視化展示酥泞,得到一個(gè)「長(zhǎng)尾圖」:
從報(bào)表中可得到這些信息:
- 最多人關(guān)注的影視作品前5是《歡樂頌》、《歡樂頌2》啃憎、《神奇女俠》芝囤、《白鹿原》和《深夜食堂》
- 最多人喜歡的是《歡樂頌》(豆瓣評(píng)分7.3)
- 最多差評(píng)的卻是《歡樂頌2》(豆瓣評(píng)分5.3),看來(lái)觀眾的期望值被第一部放大了很多
注1:嚴(yán)格來(lái)說(shuō)《歡樂頌》不是電影而是電視劇作品辛萍,在用豆瓣網(wǎng)的數(shù)據(jù)構(gòu)建電影詞典時(shí)我沒有做嚴(yán)格區(qū)分
注2:專題的數(shù)據(jù)獲取是在5月份完成的悯姊,以及簡(jiǎn)書專題的最新收錄文章有訪問(wèn)限制,無(wú)法獲取到舊的文章贩毕,因此得到的當(dāng)時(shí)熱門影視作品的影評(píng)悯许,從而呈現(xiàn)出信息跟當(dāng)時(shí)熱播作品比較相關(guān)
整體用戶分析
再對(duì)先前獲取到的1萬(wàn)個(gè)簡(jiǎn)書用戶的近60萬(wàn)篇文章內(nèi)容,運(yùn)行相應(yīng)的Pipeline進(jìn)行電影情緒數(shù)據(jù)的提取辉阶。
可視化數(shù)據(jù)后得到圖表:
現(xiàn)在可以看看先壕,簡(jiǎn)書上用戶給予好評(píng)的電影有哪些,使用「詞云圖」展示如下:
簡(jiǎn)書用戶給予差評(píng)的電影有哪些:
個(gè)體用戶分析
現(xiàn)在也可以精準(zhǔn)了解每一個(gè)簡(jiǎn)書用戶的電影口味了谆甜,以『毒舌電影 - 簡(jiǎn)書』 為例子:
注3:本文發(fā)表時(shí)簡(jiǎn)書上“毒舌電影”經(jīng)歷過(guò)被封事件后已改名為“Sir電影”垃僚;簡(jiǎn)書專題“影視天堂”已改名為“簡(jiǎn)書電影”
以后做電影個(gè)性化推薦可就不要推薦錯(cuò)了 ??。