[轉錄] 用機器學習判定紅樓夢後40回是否曹雪芹

作者: mited (太郎)   2016-07-06 15:34:09
知乎:用機器學習判定紅樓夢後40回是否曹雪芹所寫
https://zhuanlan.zhihu.com/p/21421723
作者:黎晨
作為一個從沒看過紅樓夢的人,我的大致思路是這樣的:
1.受到全職獵人裡蟻王破解會長無敵招數的啟發,每個人的寫作都有些小習慣,雖然文章
前後說的內容會有差別,但是這些用詞的小習慣不容易改變;
2.用開源的分詞工具把全書分詞(python的jieba分詞),然後統計詞頻。把出現頻次超
過100次的詞語找出來,人工去掉一些可能因為文章內容造成前後出現不一致的人名、
地名
3.然後每一章按照2中的詞頻表,看這一章中出現這些詞語的頻次;
4.前80回、後40回各選15回作為機器學習的數據,讓機器學習這些章節的用詞特點,然後
推算其他章節的用詞特點是屬於前80回呢、還是後40回;
5.如果機器根據這些用詞特徵推算的是否屬於後40回的結果跟實際的結果吻合,那麼就說
明後40回的寫作風格跟前80回有很大不同,很可能是兩個人寫的;
好了,下面我盡量少涉及數學跟編程的知識,來一步步解讀機器學習是怎麼完成這個問題
的。
生成全書的詞頻表
https://pic4.zhimg.com/86db71e47e3cbd6091906d50c61ab967_b.png
我截取了其中一段的詞頻表。像寶二爺、黛玉笑這種涉及人物的詞語,可能前面戲份多、
後面戲份少,所以就不選它們作為用詞習慣的特徵,而像忽然、故、只要、可不是這種承
接性質的碎詞,就不太容易會受情節的影響,所以適合選出來作為用詞習慣的特徵。
最終,我按照出現從多到少排序,選擇了278個詞作為機器學習的用詞習慣。
將120回的詞頻進行統計
接下來我把每一回出現這278個詞的頻次統計出來,得到我們給機器學習的樣本。這個樣
本的樣子大概是這樣的:
https://pic1.zhimg.com/999d0b7e34e5df4f9f00a6bdffec245c_b.png
比如以B行2列舉例,說明在第一回裡面「道」這個動詞,出現了36次。
通常我們在進行複雜的事情前,喜歡先簡化問題,或者給自己一些直觀的圖表,以便了解
問題。機器學習也是一樣的。
我嘗試著在圖上把前80回和後40回習慣用詞出現的頻次畫出來。以第一回為例,x1坐標代
表「道」出現多少次,x2坐標代表「說」出現多少次,x3坐標代表「也」出現多少次
......x280坐標代表「則」出現多少次。
什麼?超過三維了,那人類的大腦可是沒辦法理解的啊。
沒關係,當我們用燈光照射一個立體的圖時,平面會有它的影子。這個影子雖然沒有立體
圖的信息這麼豐富,不過我們看影子還是可以猜出來大致的樣子。對於高緯度的問題,我
們也可以用投影的方式來降低緯度。
雖然信息損失了不少,不過能給我們一個直觀的感受。
https://pic3.zhimg.com/d89993509cfb2ea46e2fead27df7616e_b.png
這個是120個章節的用詞習慣從278緯降到3維以後的圖,紅色+的點是前80回,藍色o的點
是後40回。
從這個圖可以直觀地看到,確實在用詞習慣上有明顯的區別。就算我們沒有機器學習工具
的幫忙,也可以大膽猜測後40回是出自於另外一個人了。
下面我們用機器學習來看精確一點的判斷。
機器學習
通過課程我大致了解了SVM的原理和簡化版問題的算法實現,不過對於復雜問題我還是沒
這個編碼能力的。於是用python的scikit庫來幫助我來完成這個預測。
算法的步驟很簡單,前80回、後40回各選15個來餵給機器學習它們的特點,然後把剩下的
章節輸入給機器,問它們屬於前80還是後40。
https://pic4.zhimg.com/8269c925992144fa4ab1cc18be09d7af_b.png
看out[44]的結果,代表了機器預測這120回的用詞習慣到底屬不屬於後40回(0為不屬於
,1為屬於)。
如果你看不懂上面的代碼,沒關係。我告訴你結果好了。
機器在學習以後告訴我,如果我把隨便一章的用詞習慣告訴它、但不告訴它到底是前80回
還是後40回,那麼機器有95%的把握能猜出它是不是後40回。
至此,我們可以很有信心地判斷它們的寫作風格不同。
那麼,問題來了,會不會因為是情節的需要所以導致寫作風格不同了呢?
情節不同會造成用詞習慣多大的差別?
好吧,那我再來做一個旁證。我把另外一部四大名著「三國演義」拿來分析,看看上部跟
下部的用詞習慣會不會有比較明顯的差別。
https://pic2.zhimg.com/83a849aba46a550bf5fb9094aa76b121_b.png
這個是三國演義的用詞習慣縮到三維以後的圖,紅色+代表前60部的用詞習慣,藍色o代表
後60部的用詞習慣。
你可能會說,雖然中間交叉的地方比較多,但是還是可以看出來是有區分的。
可如果你比對一下跟紅樓夢的圖,你就會發現紅樓夢的差別會明顯得多。
https://pic2.zhimg.com/c3117edef7f9f8a05672c37fac4a6f59_b.jpg
(紅色+為紅樓夢前80回/三國前60回,藍色o紅樓夢後40回/三國後60回)
最後,用機器學習的方式來說,如果我把三國演義隨便一章的用詞習慣告訴它、但不告訴
它到底是前60回還是後60回,那麼機器有7成的把握猜對,這個準確度已經遠遠低於紅樓
夢的95%的預測水平。
所以,我們用「三國演義」這個旁證來分析,即便是因為情節需要導致的用詞習慣差別也
不應該這麼大。
所以,我們就更有信心說曹老先生沒有寫後40回了。
更多的機器學習有趣的玩法,我會在學習的過程中慢慢嘗試的。以上。
作者: femlro (母豬教謀神異端審問官1.5)   2016-07-06 15:53:00
只有工程師才會無聊到 用機械學習判斷是不是誰寫的誰寫的不重要 重點是文學上的成就與價值一堆大師寫出的垃圾仍是垃圾有品牌迷思的人 就沒辦法獨立思考品牌與價值有正向相關 但不是絕對相關
作者: cashko   2016-07-06 16:03:00
覺得提供不同角度的判斷法也挺有意思的
作者: winken2004 (新竹肥宅)   2016-07-06 16:04:00
挺有趣的
作者: lemon7242 (檸檬酸)   2016-07-06 16:40:00
一樓幹嘛那麼激動 照這說法名畫都不用鑑定了
作者: art787472 (Sumiki)   2016-07-06 16:51:00
原PO並沒有要討論文學價值的問題吧他只是提供另一個方法來探討後四十回的作者是不同人
作者: fosa (阿盛)   2016-07-06 16:52:00
我覺得很有意思耶,這已經算是AI的領域了~
作者: tom50512 (空心菜)   2016-07-06 17:17:00
蠻有趣的!!
作者: Hitle (希透)   2016-07-06 17:35:00
有趣!不過好像缺乏一些更精細的分析設計
作者: rpg1234pk (giveme5)   2016-07-06 17:41:00
厲害,就跟模仿一樣,被模仿者總是有些眉角是他人學不來的。用電腦統計分析的方法,比人類直觀判斷來的精準!
作者: yudofu (豆腐)   2016-07-06 18:13:00
如果是兩個人寫的,那麼這個第二個人本身當然也有研究價值,對於結局也不能把後40回視為一個人風格的改變而是兩個人,當然能釐清的話就釐清,怎麼會沒有價值,是就是,不是就不是,嚴謹的研究精神有工程師跟不是工程師嗎?講得好像這個問題是工程師提的,研究紅學的人都無所謂一樣。
作者: semicoma (後勤人力足 前進災區吧)   2016-07-06 19:00:00
這篇並沒在討論作品成就及價值 一樓要加油喔 做為台大文院畢業生現在在寫程式 兩者並不是互斥的 如果你願意試著理解 我可以教你的 不客氣
作者: milyspice (香米)   2016-07-06 19:38:00
我也是學機器學習的,滿有趣的。
作者: edum (lazybone)   2016-07-06 19:39:00
超酷
作者: blake7899 (starblake)   2016-07-06 19:57:00
這是文獻計量學的一種應用吧
作者: demonOoO (demonOoO)   2016-07-06 20:12:00
你要不要把前四十回 中四十回 後四十回 都分開來算算這本書前後花了十年 十年前你的文字跟十年後?另外 後四十回本來不就是殘稿? 文字量遠低於前八十回殘稿經過修補 本來就會有落差 這又何能證明完全無殘稿?另外 三國演義是民間集體創作 由同一人編定而成這有何好比較? 事實就是這樣啊...不曉得你有懂我意思嗎 一個出版序言已明講是斷稿修補本來文字就有落差 但不能證明全無原作者文字一個是出於單一修訂成同時間集合完成 文字本就統一許多我的意思是說 你這不能證明新的事實同樣 也不能反推沒有曹雪芹文字在內妳只能說後四十回文字使用與前八十回不同, 但不代表你的結論: 後四十回非曹雪芹文字因為作家文字風格會變、按高鶚敘言此40回乃殘稿蒐羅而成加上前後創作達10年之久 這種種因素並不能排除在外所以你不能全盤否定300年前當事人高鶚的說法並簡單結論說: 這裡頭沒有曹雪芹的文字之可能既然科學求證 也應該下科學式的結論: 後四十回文字有部份異於前八十回之使用習慣 可能更合科學精神否則反對方 依然可找到大量前後相同之使用詞彙來反駁你
作者: oreo17 (T3T)   2016-07-06 21:31:00
好酷!人永遠無法完全模仿另一人啊
作者: enjoyloli (M)   2016-07-06 22:05:00
好文推
作者: yudofu (豆腐)   2016-07-06 22:23:00
高鶚是當事人,但是當事人已死,如果你以高鶚所為必為真的前提來講的話也沒甚麼好研究了
作者: xelnaga (Xel'Naga)   2016-07-06 22:24:00
一樓就無法獨立思考
作者: demonOoO (demonOoO)   2016-07-06 22:50:00
按樓樓上邏輯 那你說後四十回非曹氏所寫 當事人已作古他連反駁或同意的話都沒機會說了老實說 討論後四十回究竟是誰寫的根本就是很____的事情把它當成文學作品閱讀有這麼困難嗎?不是他寫的又怎樣 他寫的又怎樣 現存文本結局就長那樣
作者: semicoma (後勤人力足 前進災區吧)   2016-07-06 22:54:00
我的思維比較像demon大 工程師要不要做這件事情根本沒啥好批評的 但是工程師下的結論或是演算方式倒是可以挑戰但無論如何 都無涉文本的價值 今天這篇文章比較像是拿幾個 buzzwords(機器學習 紅樓夢) 來吸引眼球 但很可能一開始就是個假議題
作者: demonOoO (demonOoO)   2016-07-06 23:04:00
研究紅樓夢的部分人常常厭惡現存的結局,而將怒氣推到高鶚身上,所以不信他的說詞. 但又極端支持 脂硯齋 的評語及結局預測, 不是自打嘴巴嗎? 不論高鶚或脂硯 都非作者!所以一切的推論揣測 從頭到尾都是假議題
作者: episold (episold)   2016-07-06 23:36:00
很有趣 但是以詞彙頻率來推斷作者 這feature太粗略了再想想怎樣把「寫作風格」變成特徵吧
作者: s9041200 (小明阿)   2016-07-07 00:23:00
原來機器學習可以這麼玩,好有趣!!
作者: ttyycc (小捲)   2016-07-07 01:34:00
可以試試看從中間分一半,看看電腦區分的準確度是否下降
作者: BIGP (ツンデレ大好!)   2016-07-07 09:05:00
超酷的 XDDDDDDDDDDDDD
作者: swingman (勇敢gogo)   2016-07-07 13:11:00
能否分析一下洪蘭譯文XD
作者: michelleadio (H i d e)   2016-07-07 13:39:00
純噓1F補推
作者: hgs1906 (受遺棄之子)   2016-07-07 14:02:00
推 很有趣
作者: nebbia (nebbia)   2016-07-07 14:14:00
我覺得應該要做一下 permutation test
作者: thegod13 (thedog13)   2016-07-07 14:21:00
拉板凳囉
作者: islandqoo (You Don't Know Me )   2016-07-07 14:34:00
酷!!
作者: lin0817 (lin0817)   2016-07-07 15:08:00
推,想看分析洪蘭的翻譯作品
作者: celebleaf (Polaris)   2016-07-07 15:55:00
作者: guesting (茶君)   2016-07-07 16:26:00
推 有趣的方法
作者: elapseregret (不知何往)   2016-07-07 22:57:00
推!! 很有意思的研究!!
作者: galaxystyle (卍新北首席法騎卍)   2016-07-07 23:03:00
推!好特別又好有趣啊!
作者: ChouTzuyu (子瑜欸唷↘)   2016-07-07 23:05:00
好酷啊!
作者: carrothead (イズミ)   2016-07-07 23:54:00
好有意思啊!!
作者: scimonster (紫色的初夏)   2016-07-08 10:11:00
有趣 作品的好壞 跟 正牌作者是誰一樣重要
作者: cloudworld (艾利歐特)   2016-07-08 13:52:00
作者: naminono (諾諾)   2016-07-08 14:18:00
我倒覺得詞頻已經是不錯的feature了,因為能使用的資料少(曹的訓練+測試只有四十回),而且還要排除容易被劇情影響的特徵
作者: luciferii (路西瓜)   2016-07-09 08:24:00
其實應該要把同作者不同時期的作品都一起參考詞頻表才會比較準確
作者: Gosssiping (摳吸品)   2016-07-09 14:23:00
幹超屌的 原始碼會開源嗎@@
作者: k800i (K800i)   2016-07-11 15:34:00
判詞、情節、詩詞等等是很重要的提點,可偏偏後四十回跟前面就是矛盾。而一大堆前人的筆記記載,都表示見過異本。這統計不錯,雖然原始還無法用AI去模擬人腦如何判斷文風,總是嘗試開端,科學不就是這樣,質疑修正,慢慢完備。考據版本這個,去紅樓專版吵吧。
作者: ssd123698745 (noel)   2016-07-12 17:43:00
這篇只是提供一個角度看這問題,當然不是100%完善的方法,也沒有要對文學價值作評價不懂有什麼好激動

Links booklink

Contact Us: admin [ a t ] ucptt.com