【揭祕】紅樓夢後四十回到底是誰寫的?機器學習告訴你
流傳到今天的《紅樓夢》共有120回,很多人認為是曹雪芹寫了前八十回,後四十回是高鶚續寫。後來隨著新材料的發現,紅學界經過慎重考察,認為後四十回並不是高鶚所寫,高鶚和程偉元只是整理出版了《紅樓夢》。這究竟是怎麼回事?曹雪芹到底有沒有寫完《紅樓夢》?今天小七試試從機器學習的角度破解這個懸案。
本文選擇了“之”、“其”、“亦”等五十多個文言虛詞,加上紅樓夢中在所有120回中均有出現的部分詞語共同組成特徵值,這樣算下來一共有一百餘個詞,採用這些詞的出現頻率來作為特徵,最大程度地排除了情節的影響,某種程度上體現了寫作者的寫作風格。原理
1. 每個人的寫作都有些小習慣,雖然文章前後說的內容會有差別,但是這些用詞的小習慣不容易改變;
2. 將紅樓夢120回通過統計方法轉換為向量,並打上是否為前八十回的標籤,之後從中抽取一小部分作為訓練集,剩下大部分為測試集;
3. 訓練集送入分類演算法進行學習,然後用此演算法放在測試集上檢驗;
4. 如果精度較高則表明前八十回和後四十回的寫作風格的確有所不同,那麼就說明很可能是兩個人寫的。
選擇了常用的SVM演算法,用的語言是Python 3.5。
具體操作分成四步進行:
一、引入模組
開頭部分沒什麼過多可以說的,就是引入需要的模組,以scikit-learn的內容為主。HC這個模組裡面是自己寫的一些常用函式。
二、向量化
首先是讀取紅樓夢的文字,這個文字是在網上抓取的一個無脂批的紅樓夢120回版本,經過了一定預處理然後儲存下來的檔案。
之後呼叫了張華平博士開發的NLPIR漢語分詞系統,將所有文字進行分詞,然後收整合一個詞典。
下一步,將每一回均出現的詞加上五十餘個文言虛詞合併起來,作為特徵值。程式執行結果顯示最後作為特徵值的詞有138個。
將文字向量化的時候使用了最簡單粗暴的詞頻統計方法,一開始也試過tf-idf等方法將文字向量化,但是執行之後發現在本次應用裡其結果還沒有簡單的詞頻方法好。
三、分類演算法
將120回隨機分成了兩部分,比例是0.8,也就是訓練集佔20%,24回,剩下的96回作為測試集。由於是文字分類任務,就直接把SVM的核定為線性核,然後用gridsearch搜尋一下引數C,得到一個最優化的引數。最後在測試集上驗證演算法。
四、視覺化
為了有個直觀一些的印象,將138維的文字向量壓縮成2維並畫出來,降維過程採用的是PCA的方法。
執行程式後,在測試集上得到了如下的驗證結果:
Precision | Recall | F1-score | Support | |
0 | 0.97 | 0.88 | 0.92 | 34 |
1 | 0.94 | 0.98 | 0.96 | 62 |
Avg | 0.95 | 0.95 | 0.95 | 96 |
在驗證集上得到了0.95的平均f1值,效果還是不錯的。這也可以表明,前八十回和後四十回至少在寫作用詞習慣上是有所區別的,使用演算法可以很清楚地區分開。光看f1值有些抽象,可以考慮將高維的文字向量降維,然後畫出來,雖然會損失很多資訊,但是也可能有一些直觀的東西呈現出來。
將138維向量壓縮到2維之後得到的影象如下:
其中藍色星形為前八十回,紅色十字為後四十回。可以看到,雖然經過了從138維到2維的劇烈壓縮,損失了大量資訊,但是仍然可以發現前八十回和後四十回沒完全重合,分佈有所區別。
依照如上方式,如果將紅樓夢分為三部分畫出來,可以得到:
其中綠色圓形為前四十回,藍色星形為四十一至八十回,紅色十字為後四十回。同理,可以發現前四十回與四十一至八十回分佈基本上重合,也就是前八十回內部是比較均勻和相似的,而後四十回則是另一種分佈。
本文用機器學習的方法選取了一個很小的方面來對紅樓夢前八十回和後四十回的區別做了些探究,演算法並不複雜,結果還是比較明顯。由於用詞風格上存在明顯差異,我們有理由相信,《紅樓夢》後四十回,極有可能是他人假託曹雪芹之名的偽作!
老鐵們,你們用機器學習做過哪些有意思的實驗,快來留個言吧!
★推薦閱讀★
相關文章
- 機器學習之紅樓夢作者判斷(貝葉斯分類)機器學習
- 讓機器學習告訴你,你的siri在想什麼!機器學習
- 揭祕FACEBOOK未來的機器學習平臺機器學習
- 人工智慧PK高鶚,續寫《紅樓夢》人工智慧
- 揭祕Stripe欺詐檢測系統背後的機器學習演算法 - quastor機器學習演算法AST
- 《紅樓夢》中的宗教信仰
- 用大白話告訴你 :Java 後端到底是在做什麼?Java後端
- 機器學習中特徵選擇怎麼做?這篇文章告訴你機器學習特徵
- 論《紅樓夢》中的詩詞曲賦
- 機器學習到底是什麼?機器學習
- 碼教授告訴你學完這些月入過萬不是夢
- 揭祕.NET Core剪裁器背後的技術
- 用大白話告訴你,Java到底是什麼Java
- Python老司機告訴你,學習Python應該讀哪些書!Python
- 引領深度學習潮流,刷屏計算機視覺頂會,揭祕商湯研究夢之隊深度學習計算機視覺
- 誰告訴你 Flutter 會幹掉原生開發?Flutter
- 為你揭祕小程式音視訊背後的故事......
- 攻略《紅樓夢》裡的十二釵,可能是一代人對國產黃油最後的回憶
- 揭開AI、機器學習和深度學習的神秘面紗AI機器學習深度學習
- 不敢閱讀 npm 包原始碼?帶你揭祕 taro init 背後的哲學NPM原始碼
- 【雲中論道】揭祕短視訊爆紅背後的技術支柱
- 回顧·機器學習/深度學習工程實戰機器學習深度學習
- 安利一個驚豔的紅樓夢視覺化作品視覺化
- 《紅樓夢》人物關係有多複雜?一張圖幫你理清楚!
- 揭祕如何搭建夢幻西遊社交框架框架
- 0基礎如何學習Python?4種方法告訴你!Python
- 噓!這有幾條沒人會告訴你的資料科學求職祕密資料科學求職
- 揭祕任務型對話機器人(下篇)機器人
- 揭祕任務型對話機器人(上篇)機器人
- 《Spring揭祕》學習筆記——IOC是什麼Spring筆記
- Google BERT中文應用之《紅樓夢》對話人物提取Go
- 機器學習中的正則化到底是什麼意思?機器學習
- 用半勵志的方式告訴你,怎麼學習Python開發Python
- Azure帶你揭祕出海爆款遊戲後面的雲科技遊戲
- 實在RPA告訴你一個處理金融工作的小祕密。
- 機器學習2020年回顧 - Kristóf機器學習
- 網付:揭祕聚合支付背後的真相
- ElasticSearch7.3 學習之倒排索引揭祕及初識分詞器(Analyzer)Elasticsearch索引分詞