前幾天燈神給我發(fā)了一篇文章,講的是用機(jī)器學(xué)習(xí)的方式來判定紅樓夢后40回到底是不是曹雪芹寫的。
黛玉重建桃花社。畫家孫溫。圖片來自:Wikipedia
我這段時間也在自學(xué)Andrew Ng的機(jī)器學(xué)習(xí)課程,還差4週就能完成課程了。
電腦是一個很強(qiáng)調(diào)learning by doing的學(xué)科,于是我也來“學(xué)以致用”,用剛學(xué)到的SVM演算法來分析下雪芹老師到底有沒有寫后面的40回。
作為一個從沒看過紅樓夢的人,我的大致思路是這樣的:
受到《獵人》里蟻王破解會長無敵招數(shù)的啟發(fā),每個人的寫作都有些小習(xí)慣,雖然文章前后說的內(nèi)容會有差別,但是這些用詞的小習(xí)慣不容易改變;
用開源的分詞工具把全書分詞(python的jieba分詞),然后統(tǒng)計詞頻。把出現(xiàn)頻率超過100次的詞語找出來,人工去掉一些可能因?yàn)槲恼聝?nèi)容造成前后出現(xiàn)不一致的人名、地名;
然后每一章按照2中的詞頻表,看這一章中出現(xiàn)這些詞語的頻率;
前80回、后40回各選15回作為機(jī)器學(xué)習(xí)的資料,讓機(jī)器學(xué)習(xí)這些章節(jié)的用詞特點(diǎn),然后推算其他章節(jié)的用詞特點(diǎn)是屬于前80回呢、還是后40回;
如果機(jī)器根據(jù)這些用詞特徵推算的是否屬于后40回的結(jié)果跟實(shí)際的結(jié)果吻合,那幺就說明后40回的寫作風(fēng)格跟前80回有很大不同,很可能是兩個人寫的;
好了,下面我儘量少涉及數(shù)學(xué)跟程式設(shè)計的知識,來一步步解讀機(jī)器學(xué)習(xí)是怎幺完成這個問題的。
生成全書的詞頻表
我截取了其中一段的詞頻表。像寶二爺、黛玉笑這種涉及人物的詞語,可能前面戲份多、后面戲份少,所以就不選它們作為用詞習(xí)慣的特徵,而像忽然、故、只要、可不是這種承接性質(zhì)的碎詞,就不太容易會受情節(jié)的影響,所以適合選出來作為用詞習(xí)慣的特徵。
最終,我按照出現(xiàn)從多到少排序,選擇了278個詞作為機(jī)器學(xué)習(xí)的用詞習(xí)慣。
將120回的詞頻進(jìn)行統(tǒng)計
接下來我把每一回出現(xiàn)這278個詞的頻率統(tǒng)計出來,得到我們給機(jī)器學(xué)習(xí)的樣本。這個樣本的樣子大概是這樣的:
比如以B行2列舉例,說明在第一回里面“道”這個動詞,出現(xiàn)了36次。
通常我們在進(jìn)行複雜的事情前,喜歡先簡化問題,或者給自己一些直觀的圖表,以便了解問題。機(jī)器學(xué)習(xí)也是一樣的。
我嘗試著在圖上把前80回和后40回習(xí)慣用詞出現(xiàn)的頻率畫出來。以第一回為例,x1座標(biāo)代表“道”出現(xiàn)多少次,x2座標(biāo)代表“說”出現(xiàn)多少次,x3座標(biāo)代表“也”出現(xiàn)多少次......x280座標(biāo)代表“則”出現(xiàn)多少次。
什幺?超過三維了,那人類的大腦可是沒辦法理解的啊。
沒關(guān)係,當(dāng)我們用燈光照射一個立體的圖時,平面會有它的影子。這個影子雖然沒有立體圖的資訊這幺豐富,不過我們看影子還是可以猜出來大致的樣子。對于高緯度的問題,我們也可以用投影的方式來降低緯度。
雖然資訊損失了不少,不過能給我們一個直觀的感受。
這個是120個章節(jié)的用詞習(xí)慣從278緯降到3維以后的圖,紅色+的點(diǎn)是前80回,藍(lán)色o的點(diǎn)是后40回。
從這個圖可以很直接地看到,確實(shí)在用詞習(xí)慣上有明顯的區(qū)別。就算我們沒有機(jī)器學(xué)習(xí)工具的幫忙,也可以大膽猜測后40回是出自于另外一個人了。
下面我們用機(jī)器學(xué)習(xí)來看精確一點(diǎn)的判斷。
機(jī)器學(xué)習(xí)
透過課程我大致了解了SVM的原理和簡化版問題的演算法實(shí)現(xiàn),不過對于複雜問題我還是沒這個能力寫程式。于是用python的scikit庫來幫助我來完成這個預(yù)測。
演算法的步驟很簡單,前80回、后40回各選15個來餵給機(jī)器學(xué)習(xí)它們的特點(diǎn),然后把剩下的章節(jié)輸入給機(jī)器,問它們屬于前80回還是后40回。
看out[44]的結(jié)果,代表了機(jī)器預(yù)測這120回的用詞習(xí)慣到底屬不屬于后40回(0為不屬于,1為屬于)。
如果你看不懂上面的程式碼,沒關(guān)係。我告訴你結(jié)果好了。
機(jī)器在學(xué)習(xí)以后告訴我,如果我把隨便一章的用詞習(xí)慣告訴它、但不告訴它到底是前80回還是后40回,那幺機(jī)器有95%的把握能猜出它是不是后40回。
至此,我們可以很有信心地判斷它們的寫作風(fēng)格不同。
那幺,問題來了,會不會因?yàn)槭乔楣?jié)的需要所以導(dǎo)致寫作風(fēng)格不同了呢?
情節(jié)不同會造成用詞習(xí)慣多大的差別?
好吧,那我再來做一個旁證。我把另外一部四大名著“三國演義”拿來分析,看看上部跟下部的用詞習(xí)慣會不會有比較明顯的差別。
這個是三國演義的用詞習(xí)慣縮到三維以后的圖,紅色+代表前60部的用詞習(xí)慣,藍(lán)色o代表后60部的用詞習(xí)慣。
你可能會說,雖然中間交叉的地方比較多,但是還是可以看出來是有區(qū)分的。
可如果你比對一下跟紅樓夢的圖,你就會發(fā)現(xiàn)紅樓夢的差別會明顯得多。
紅色+為紅樓夢前80回/三國前60回,藍(lán)色o紅樓夢后40回/三國后60回
最后,用機(jī)器學(xué)習(xí)的方式來說,如果我把三國演義隨便一章的用詞習(xí)慣告訴它、但不告訴它到底是前60回還是后60回,那幺機(jī)器有7成的把握猜對,這個準(zhǔn)確度已經(jīng)遠(yuǎn)遠(yuǎn)低于紅樓夢的95%的預(yù)測水準(zhǔn)。
所以,我們用“三國演義”這個旁證來分析,即便是因?yàn)榍楣?jié)需要導(dǎo)致的用詞習(xí)慣差別也不應(yīng)該這幺大。
所以,我們就更有信心說曹老先生沒有寫后40回了。
更多的機(jī)器學(xué)習(xí)有趣的玩法,我會在學(xué)習(xí)的過程中慢慢嘗試的。以上。
北京金恒智能系統(tǒng)工程技術(shù)有限責(zé)任公司 版權(quán)所有 Copyright 2007-2020 by Create-china.com.cn Inc. All rights reserved.
法律聲明:未經(jīng)許可,任何模仿本站模板、轉(zhuǎn)載本站內(nèi)容等行為者,本站保留追究其法律責(zé)任的權(quán)利!
電話:86+10-62104277/2248/4249 傳真:86+10-62104193-819 京ICP備10010038號-2網(wǎng)站XML
智慧機(jī)房
在線體驗(yàn)