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

看板Redology作者 (太郎)時間8年前 (2016/07/06 15:28), 編輯推噓17(1707)
留言24則, 17人參與, 最新討論串1/3 (看更多)
張愛玲名言:「紅樓夢看到八十回後,一個個人物都語言無味,面目可憎起來」 對岸有人用電腦運算80回前後用詞習慣的改變 雖然特徵選取方式尚有可議之處 但也呈現出值得參考的觀點 知乎:用機器學習判定紅樓夢後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回了。 更多的機器學習有趣的玩法,我會在學習的過程中慢慢嘗試的。以上。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.141.160.87 ※ 文章網址: https://www.ptt.cc/bbs/Redology/M.1467790081.A.319.html

07/06 16:10, , 1F
太強了!
07/06 16:10, 1F

07/06 17:44, , 2F
有趣~~
07/06 17:44, 2F

07/07 09:49, , 3F
太酷了 會想到這樣分析還真是厲害 好有趣的想法
07/07 09:49, 3F

07/07 10:26, , 4F
我FB轉這篇,不到八小時就33人轉貼
07/07 10:26, 4F

07/07 11:46, , 5F
07/07 11:46, 5F

07/07 12:17, , 6F
方法不夠嚴謹 至少也要cv反覆訓練才行 不過題材很
07/07 12:17, 6F

07/07 12:17, , 7F
有趣
07/07 12:17, 7F

07/07 13:00, , 8F
趕快推一下 不然人家以為我看不懂
07/07 13:00, 8F

07/07 13:31, , 9F
政大統研所有一篇論文也是用數據分析後40是否是同一
07/07 13:31, 9F

07/07 13:31, , 10F
個作者,結論好像也是非同一個作者~
07/07 13:31, 10F

07/07 13:54, , 11F
推推
07/07 13:54, 11F

07/07 14:02, , 12F
杜協昌博士在四年前的數位典藏與數位人文研討會
07/07 14:02, 12F

07/07 14:02, , 13F
發過〈利用文本採礦探討《紅樓夢》的後四十回作者爭議〉
07/07 14:02, 13F

07/07 14:03, , 14F
利用斷詞跟詞頻分析的方法也幾乎一樣?
07/07 14:03, 14F

07/07 14:07, , 15F
請問你在訓練階段成效如何?
07/07 14:07, 15F

07/07 14:08, , 16F
訓練的好不好?
07/07 14:08, 16F
nikolas:轉錄至看板 Python 07/07 14:18

07/07 14:28, , 17F
不過我覺得,以三國演義來做對照的結果,似乎顯示情節有
07/07 14:28, 17F

07/07 14:29, , 18F
很重要的影響?
07/07 14:29, 18F

07/07 17:54, , 19F
厲害!!!
07/07 17:54, 19F

07/07 20:00, , 20F
分析一下鹿鼎記跟金庸其他作品
07/07 20:00, 20F

07/10 21:20, , 21F
後四十回稍微翻一下就覺得文字很囉哩八縮
07/10 21:20, 21F

07/10 21:21, , 22F
撇開情節 在敘事上就覺得不夠精練 口氣突變
07/10 21:21, 22F

09/09 23:30, , 23F
強!
09/09 23:30, 23F

09/13 14:28, , 24F
超科學!!有信服力
09/13 14:28, 24F
文章代碼(AID): #1NVBC1CP (Redology)
討論串 (同標題文章)
文章代碼(AID): #1NVBC1CP (Redology)