前幾天燈神給我發(fā)了一篇文章,,講的是用機(jī)器學(xué)習(xí)的方式來判定紅樓夢后40回到底是不是曹雪芹寫的。
黛玉重建桃花社,。畫家孫溫,。圖片來自:Wikipedia
我這段時(shí)間也在自學(xué)Andrew Ng的機(jī)器學(xué)習(xí)課程,還差4週就能完成課程了,。
電腦是一個(gè)很強(qiáng)調(diào)learning by doing的學(xué)科,,于是我也來“學(xué)以致用”,用剛學(xué)到的SVM演算法來分析下雪芹老師到底有沒有寫后面的40回,。
作為一個(gè)從沒看過紅樓夢的人,,我的大致思路是這樣的:
受到《獵人》里蟻王破解會長無敵招數(shù)的啟發(fā),每個(gè)人的寫作都有些小習(xí)慣,,雖然文章前后說的內(nèi)容會有差別,,但是這些用詞的小習(xí)慣不容易改變;
用開源的分詞工具把全書分詞(python的jieba分詞),,然后統(tǒng)計(jì)詞頻,。把出現(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回有很大不同,,很可能是兩個(gè)人寫的;
好了,,下面我儘量少涉及數(shù)學(xué)跟程式設(shè)計(jì)的知識,,來一步步解讀機(jī)器學(xué)習(xí)是怎幺完成這個(gè)問題的,。
生成全書的詞頻表
我截取了其中一段的詞頻表。像寶二爺,、黛玉笑這種涉及人物的詞語,,可能前面戲份多、后面戲份少,,所以就不選它們作為用詞習(xí)慣的特徵,,而像忽然、故,、只要,、可不是這種承接性質(zhì)的碎詞,就不太容易會受情節(jié)的影響,,所以適合選出來作為用詞習(xí)慣的特徵,。
最終,我按照出現(xiàn)從多到少排序,,選擇了278個(gè)詞作為機(jī)器學(xué)習(xí)的用詞習(xí)慣,。
將120回的詞頻進(jìn)行統(tǒng)計(jì)
接下來我把每一回出現(xiàn)這278個(gè)詞的頻率統(tǒng)計(jì)出來,得到我們給機(jī)器學(xué)習(xí)的樣本,。這個(gè)樣本的樣子大概是這樣的:
比如以B行2列舉例,,說明在第一回里面“道”這個(gè)動詞,出現(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)我們用燈光照射一個(gè)立體的圖時(shí),,平面會有它的影子,。這個(gè)影子雖然沒有立體圖的資訊這幺豐富,不過我們看影子還是可以猜出來大致的樣子。對于高緯度的問題,,我們也可以用投影的方式來降低緯度,。
雖然資訊損失了不少,不過能給我們一個(gè)直觀的感受,。
這個(gè)是120個(gè)章節(jié)的用詞習(xí)慣從278緯降到3維以后的圖,,紅色+的點(diǎn)是前80回,藍(lán)色o的點(diǎn)是后40回,。
從這個(gè)圖可以很直接地看到,,確實(shí)在用詞習(xí)慣上有明顯的區(qū)別。就算我們沒有機(jī)器學(xué)習(xí)工具的幫忙,,也可以大膽猜測后40回是出自于另外一個(gè)人了,。
下面我們用機(jī)器學(xué)習(xí)來看精確一點(diǎn)的判斷。
機(jī)器學(xué)習(xí)
透過課程我大致了解了SVM的原理和簡化版問題的演算法實(shí)現(xiàn),,不過對于複雜問題我還是沒這個(gè)能力寫程式。于是用python的scikit庫來幫助我來完成這個(gè)預(yù)測,。
演算法的步驟很簡單,,前80回、后40回各選15個(gè)來餵給機(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í)慣多大的差別,?
好吧,,那我再來做一個(gè)旁證。我把另外一部四大名著“三國演義”拿來分析,,看看上部跟下部的用詞習(xí)慣會不會有比較明顯的差別,。
這個(gè)是三國演義的用詞習(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成的把握猜對,這個(gè)準(zhǔn)確度已經(jīng)遠(yuǎn)遠(yuǎn)低于紅樓夢的95%的預(yù)測水準(zhǔn),。
所以,,我們用“三國演義”這個(gè)旁證來分析,即便是因?yàn)榍楣?jié)需要導(dǎo)致的用詞習(xí)慣差別也不應(yīng)該這幺大,。
所以,,我們就更有信心說曹老先生沒有寫后40回了。
更多的機(jī)器學(xué)習(xí)有趣的玩法,,我會在學(xué)習(xí)的過程中慢慢嘗試的,。以上。
專線:劉剛 13911133352
E-mail:[email protected]
北京金恒智能系統(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)