用機器學習鑒定《鬼吹燈 1-4》是不是天下霸唱所寫
原作者聲明:
寫這篇文章的目的,是找個小課題來應用下機器學習的知識。文章內容既不中立,也不客觀,更不實事求是。你們隨便看看就好。
[1] 引子
鬼吹燈是一本我很喜歡的網路小說,它説明我度過無數個空虛寂寞孤獨冷的夜晚。不但文字看了一遍,後來被青雪故事出了有聲書以後我還聽了一遍。
按照作者描述,鬼吹燈一共出了 8 本,寫作時間是 06 年 2 月到 08 年 2 月。雖然我們都知道一個系列開頭精彩、後面爛尾的可能性是極大的,可鬼吹燈前四部跟後四部的差距也太大了吧。
鬼吹燈 1(前四部)的發生在知青大時代中。那是一個蔑視一切牛鬼蛇神的時代,而各種詭異的神秘事件又發生在軍隊中,最不信邪的一幫人遇到了邪乎事,到底怎麼辦?
連我老媽讀了以後,也問我「粽子」到底有沒有(作者說這個完全是他創造的名詞啦)。而鬼吹燈後四本的時候,整個風格就變掉了。於是就有一堆網友質疑一個沒經歷過知青的年輕人怎麼寫得如此生動,後面又出來說前四部其實是一個知青老教師寫的。
對於寫作「抄襲」這事,似乎有一種叫做「文體學」的研究來解決。它的思路是一個人的寫作內容會經常 改變,但不經意間養成的小習慣是不太會變的。
這個不經意的小習慣,就是對於副詞、助詞、介詞的使用。
我們只要分析天下霸唱在副詞、助詞、介詞使用的特點,就可以找到鬼吹燈前後四部是不是一個人寫的了。這件事恰好是機器學習擅長的。
[2] 工作流
對於這種比較複雜的工作,實現設定一個工作流有助於自己在陷進去解決細節的時候,不至於迷失了最終解決問題的方向。
我的工作流是這樣的:
收集鬼吹燈的 txt 版本,作為機器學習的基礎素材;
選取漢語詞典收錄的常見助詞、副詞、介詞,作為特徵詞;
由於這次找到的特徵詞都是單字,我就不用分詞,直接算天下霸唱文章出現這些單字的頻次;
計算每 N 萬字的鬼吹燈片段出現特徵字的次數,作為樣本 x[i](經過幾次試驗,N 選為 1 萬字);
將樣本 x[i] 用 PCA 方法降到二維畫圖,直觀感受自己的假設到底合不合理,調整 N 萬字的大小和特徵詞的選擇(降維僅用於畫圖,不參與模型預測);
將 x[i] 標準化,減少異常值;
隨機選 70% 的資料進行機器學習建模(用 LogisticRegression 方法);
用剩下的 30% 資料進行預測,看準確性。
好了,下面正式開始。
[3] 選取特徵詞
一開始我認為老知青用字的廣度可能沒有現代人這麼多。於是我用過最常見的 500 個漢字、2500 個漢字、次常用的 1000 個漢字來做特徵,降維後畫出來的圖效果並不好。說明大家的用詞廣度上沒有太大區別。
後來分別用了常用助詞、介詞、副詞降維來作圖,區分讀已經比較高了。考慮到這點資料量處理的性能不是問題,我就將助詞 + 介詞 + 副詞總共 655 個特徵一起使用了。
乃烏乍了一萬無不專業東且世兩習也亂舉公共其具勿匆決況淨曆分初剛劃列則別剗剩兀允光先兜虧互亙亟匪匿陽陰阿除陡險都隱茲兼幾凡即卻再罔力加務動劣勤從會...(總共 655 個字)... 比照較方爿暨拿替望朝爰直由率被用繇齊至管自起趁踐跟
[4] 計算詞頻
接下來是比較磨人的分塊、統計詞頻、標準化工作。這塊是體力活,寫代碼熟練的人就很快。像我這種很久沒寫,然後邊查用法邊試驗的人,就得花上一段時間處理資料了。
據一些前輩回饋,資料的清洗、處理、標準化在現實工作中其實佔用了大量的時間精力,最後 bingo 的那一下擬合其實並沒花多久。
前☆禁☆戲長,高☆禁☆潮短。世間很多事情道理都是相通的。
[5] PCA 降維畫圖
將資料降到 2 維以後,用散點圖畫出來鬼吹燈 1-4(性☆禁☆感藍)和鬼吹燈 5-8(雞屎黃),在副詞、介詞、助詞的使用習慣中是怎樣的。
雖然降維損失了大量的資訊,但是可以看到前 4 部跟後 4 部是有比較明顯區分的。
特別提醒的是:菱形◆圖示的點是第五部作品「黃皮子墳」。這部作品用詞特徵似乎是由一個習慣轉到另一個習慣的過渡期。
這個猜測在後面的模型調整中會用到,現在先不展開。
[6] 機器學習 & 結果分析
隨機挑選 70% 的資料進行機器學習,然後用 30% 的資料來檢查我們的結果。
然後我們把預測的結果列印出來,看看到底是怎樣的結果:
我把資料按照統計人習慣的方式整理一下,方便閱讀:
用通俗一點的語言來解讀,就是你隨便給我一段鬼吹燈的片段,這個被訓練過後的機器有 80% 的把握能判斷出來這個片段是屬於前 4 部還是後 4 部的。厲害了吧。
這個結果其實已經能說明鬼吹燈前 4 部和後 4 部的寫作特徵上發生了明顯變化,按照文體學的理論,不大可能是一個人了。
但是我們還可以再進一步。還記得我們在看散點圖的時候看到鬼吹燈第五部「黃皮子墳」的寫作特徵其實更像前四部麼?
如果我們把「黃皮子墳」歸類到前 4 部進行機器學習的訓練,會發生怎樣的事情呢?
[7] 將黃皮子墳調整後的建模結果
「黃皮子墳」劃歸前 4 部的散點圖,可以看到黃藍的界限更明顯。
「黃皮子墳」歸到前四部以後,
有一個非常顯著的結果出現:如果你把前 5 部的一個片段隨機給到機器,然後讓機器去猜它到底是前 5 部還是後 3 部,機器 100% 地猜對了!
用統計學的指標來看,機器已經非常確信地判斷鬼吹燈的寫作風格發生了顯著變化。
天下霸唱的鬼吹燈 1-4 甚至 5 的很大一部分,應該是另外一個人所做了。
可是有人會說,你不給人家因為文章內容需要所以變了習慣啊?
助詞、介詞、副詞的使用習慣是比較難改變的,況且天下霸唱自己說這 8 本書是在 2 年寫完的。習慣在短時間內就更難改了;
我們拿天下霸唱寫的另外一部長篇小說《謎蹤之國》來看看它的寫作特徵圖,你就明白習慣其實並沒有多少變化。
謎蹤之國為紅色,按照相同方式處理以後,綠黃之間有一定的交叉,但是跟藍樣本的界線非常明顯。(如果你是紅綠色盲的話,也許會不太容易分辨)
[8] 總結
至此,機器學習的結果已經給了我們很強的「旁證」,告訴我們鬼吹燈前 4 部跟後 4 部的作者不太可能是一個人。
要不就是前 4 部是天下霸唱寫,後面的作品是出了名以後找人代筆。要不就是前面是那個新聞老知青寫的、天下霸唱潤色,後面的作品才是霸唱本人的真跡。
不管怎樣,總算完成了這次工作。籲,長吸一口氣,結束。
雷鋒網按:本文原作者
黎晨
,原載于作者的
知乎專欄
。雷鋒網已獲得授權轉載。