[機器學習]---如何用機器學習來判定紅樓夢後40回是否曹雪芹所寫

前言

看到用機器學習方法分析紅樓夢的文章不少,也有好幾種方法,大觀是因爲純文字的分析成本低吧,比較適合初學者練手,先轉載一兩篇文章過來學習。所謂機器學習也是一些數學統計的方法,通過習慣用詞來做判斷, 也並不是很難。這裏判定的維度越多越精準,下面判定僅供參考,僅供娛樂學習!

判定整體思路

主要從以下幾個方面可以進行粗略進行判定:

1.寫作習慣

每個人寫作都有一些與種不同的小習慣,這些小習慣並不會輕易就會發生改變;萬分之一的例外情況不考慮!

2.詞頻統計

就像每次領導人開會一樣,媒體或政客們都會去統計領導人講話中出現的高頻詞彙,來判斷領導人政策的下一步走向!

用開源的分詞工具把全書分詞,然後統計詞頻。把出現頻次超過100次的詞語找出來,人工去掉一些可能因爲文章內容造成前後出現不一致的人名、地名;

3.分別統計章節中的詞頻

然後每一章按照下列表中的詞頻表,看這一章中出現這些詞語的頻次;

4.進行推斷

前80回、後40回各選15回作爲機器學習的數據,讓機器學習這些章節的用詞特點,然後推算其他章節的用詞特點是屬於前80回呢、還是後40回;

5.得出結論

如果機器根據這些用詞特徵推算的是否屬於後40回的結果跟實際的結果吻合,那麼就說明後40回的寫作風格跟前80回有很大不同,很可能是兩個人寫的;

下面就對上面的判斷依據進行一一實現,所謂編程其實就是一個自我假設,自我實現論證,改進的過程!

生成全書的詞彙表

這裏寫圖片描述

截詞說明

這只是截取了其中一段的詞頻表。
像寶二爺、黛玉笑這種涉及人物的詞語,可能前面戲份多、後面戲份少,所以就不選它們作爲用詞習慣的特徵,而像忽然、故、只要、可不是這種承接性質的碎詞,就不太容易會受情節的影響,所以適合選出來作爲用詞習慣的特徵。

處理

最終,我按照出現從多到少排序,選擇了278個詞作爲機器學習的用詞習慣。

接下來對整本書120回的詞頻進行一個有效統計

全書詞頻統計

接下來我把每一回出現這278個詞的頻次統計出來,得到我們給機器學習的樣本。這個樣本的樣子大概是這樣的:
這裏寫圖片描述
通常我們在進行復雜的事情前,喜歡先簡化問題,或者給自己一些直觀的圖表,以便了解問題。機器學習也是一樣的。

我嘗試着在圖上把前80回和後40回習慣用詞出現的頻次畫出來。以第一回爲例,x1座標代表「道」出現多少次,x2座標代表「說」出現多少次,x3座標代表「也」出現多少次……x280座標代表「則」出現多少次。
這裏寫圖片描述
這個是120個章節的用詞習慣從278緯降到3維以後的圖,紅色+的點是前80回,藍色o的點是後40回。

結論

從這個圖可以直觀地看到,確實在用詞習慣上有明顯的區別。就算我們沒有機器學習工具的幫忙,也可以大膽猜測後40回是出自於另外一個人了。

機器學習判定

下面我們用機器學習來看精確一點的判斷。
通過課程我大致瞭解了SVM的原理和簡化版問題的算法實現,這裏用python的scikit庫來幫助我來完成這個預測。

算法的步驟很簡單,前80回、後40回各選15個來餵給機器學習它們的特點,然後把剩下的章節輸入給機器,問它們屬於前80還是後40。
這裏寫圖片描述

結論

看out[44]的結果,代表了機器預測這120回的用詞習慣到底屬不屬於後40回(0爲不屬於,1爲屬於)。

機器在學習以後告訴我,如果我把隨便一章的用詞習慣告訴它、但不告訴它到底是前80回還是後40回,那麼機器有95%的把握能猜出它是不是後40回。

至此,我們可以很有信心地判斷它們的寫作風格不同。

情節不同會造成用詞習慣多大的差別?

好吧,那我再來做一個旁證。我把另外一部四大名著「三國演義」拿來分析,看看上部跟下部的用詞習慣會不會有比較明顯的差別。
這裏寫圖片描述

結論

這個是三國演義的用詞習慣縮到三維以後的圖,紅色+代表前60部的用詞習慣,藍色o代表後60部的用詞習慣。

你可能會說,雖然中間交叉的地方比較多,但是還是可以看出來是有區分的。

可如果你比對一下跟紅樓夢的圖,你就會發現紅樓夢的差別會明顯得多。
這裏寫圖片描述

大結論

最後,用機器學習的方式來說,如果我把三國演義隨便一章的用詞習慣告訴它、但不告訴它到底是前60回還是後60回,那麼機器有7成的把握猜對,這個準確度已經遠遠低於紅樓夢的95%的預測水平。

所以,我們用「三國演義」這個旁證來分析,即便是因爲情節需要導致的用詞習慣差別也不應該這麼大。

所以,我們就更有信心說曹老先生沒有寫後40回了。


轉載參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章