2
原作者聲明:寫這篇文章的目的,是找個小課題來應用下機器學習的知識。文章內容既不中立,也不客觀,更不實事求是。你們隨便看看就好。
[1] 引子
鬼吹燈是一本我很喜歡的網絡小說,它幫助我度過無數個空虛寂寞孤獨冷的夜晚。不但文字看了一遍,后來被青雪故事出了有聲書以后我還聽了一遍。
按照作者描述,鬼吹燈一共出了 8 本,寫作時間是 06 年 2 月到 08 年 2 月。雖然我們都知道一個系列開頭精彩、后面爛尾的可能性是極大的,可鬼吹燈前四部跟后四部的差距也太大了吧。
鬼吹燈 1(前四部)的發(fā)生在知青大時代中。那是一個蔑視一切牛鬼蛇神的時代,而各種詭異的神秘事件又發(fā)生在軍隊中,最不信邪的一幫人遇到了邪乎事,到底怎么辦?
連我老媽讀了以后,也問我「粽子」到底有沒有(作者說這個完全是他創(chuàng)造的名詞啦)。而鬼吹燈后四本的時候,整個風格就變掉了。于是就有一堆網友質疑一個沒經歷過知青的年輕人怎么寫得如此生動,后面又出來說前四部其實是一個知青老教師寫的。
對于寫作「抄襲」這事,似乎有一種叫做「文體學」的研究來解決。它的思路是一個人的寫作內容會經常 改變,但不經意間養(yǎng)成的小習慣是不太會變的。
這個不經意的小習慣,就是對于副詞、助詞、介詞的使用。
我們只要分析天下霸唱在副詞、助詞、介詞使用的特點,就可以找到鬼吹燈前后四部是不是一個人寫的了。這件事恰好是機器學習擅長的。
[2] 工作流
對于這種比較復雜的工作,實現設定一個工作流有助于自己在陷進去解決細節(jié)的時候,不至于迷失了最終解決問題的方向。
我的工作流是這樣的:
收集鬼吹燈的 txt 版本,作為機器學習的基礎素材;
選取漢語詞典收錄的常見助詞、副詞、介詞,作為特征詞;
由于這次找到的特征詞都是單字,我就不用分詞,直接算天下霸唱文章出現這些單字的頻次;
計算每 N 萬字的鬼吹燈片段出現特征字的次數,作為樣本 x[i](經過幾次試驗,N 選為 1 萬字);
將樣本 x[i] 用 PCA 方法降到二維畫圖,直觀感受自己的假設到底合不合理,調整 N 萬字的大小和特征詞的選擇(降維僅用于畫圖,不參與模型預測);
將 x[i] 標準化,減少異常值;
隨機選 70% 的數據進行機器學習建模(用 LogisticRegression 方法);
用剩下的 30% 數據進行預測,看準確性。
好了,下面正式開始。
[3] 選取特征詞
一開始我認為老知青用字的廣度可能沒有現代人這么多。于是我用過最常見的 500 個漢字、2500 個漢字、次常用的 1000 個漢字來做特征,降維后畫出來的圖效果并不好。說明大家的用詞廣度上沒有太大區(qū)別。
后來分別用了常用助詞、介詞、副詞降維來作圖,區(qū)分讀已經比較高了??紤]到這點數據量處理的性能不是問題,我就將助詞 + 介詞 + 副詞總共 655 個特征一起使用了。
乃烏乍了一萬無不專業(yè)東且世兩習也亂舉公共其具勿匆決況凈歷分初剛劃列則別刬剩兀允光先兜虧互亙亟匪匿陽陰阿除陡險都隱茲兼幾凡即卻再罔力加務動劣勤從會...(總共 655 個字)... 比照較方爿暨拿替望朝爰直由率被用繇齊至管自起趁踐跟
[4] 計算詞頻
接下來是比較磨人的分塊、統(tǒng)計詞頻、標準化工作。這塊是體力活,寫代碼熟練的人就很快。像我這種很久沒寫,然后邊查用法邊試驗的人,就得花上一段時間處理數據了。
據一些前輩反饋,數據的清洗、處理、標準化在現實工作中其實占用了大量的時間精力,最后 bingo 的那一下擬合其實并沒花多久。
前戲長,高潮短。世間很多事情道理都是相通的。
[5] PCA 降維畫圖
將數據降到 2 維以后,用散點圖畫出來鬼吹燈 1-4(性感藍)和鬼吹燈 5-8(雞屎黃),在副詞、介詞、助詞的使用習慣中是怎樣的。

雖然降維損失了大量的信息,但是可以看到前 4 部跟后 4 部是有比較明顯區(qū)分的。
特別提醒的是:菱形◆圖示的點是第五部作品「黃皮子墳」。這部作品用詞特征似乎是由一個習慣轉到另一個習慣的過渡期。
這個猜測在后面的模型調整中會用到,現在先不展開。
[6] 機器學習 & 結果分析
隨機挑選 70% 的數據進行機器學習,然后用 30% 的數據來檢查我們的結果。

然后我們把預測的結果打印出來,看看到底是怎樣的結果:

我把數據按照統(tǒng)計人習慣的方式整理一下,方便閱讀:

用通俗一點的語言來解讀,就是你隨便給我一段鬼吹燈的片段,這個被訓練過后的機器有 80% 的把握能判斷出來這個片段是屬于前 4 部還是后 4 部的。厲害了吧。
這個結果其實已經能說明鬼吹燈前 4 部和后 4 部的寫作特征上發(fā)生了明顯變化,按照文體學的理論,不大可能是一個人了。
但是我們還可以再進一步。還記得我們在看散點圖的時候看到鬼吹燈第五部「黃皮子墳」的寫作特征其實更像前四部么?
如果我們把「黃皮子墳」歸類到前 4 部進行機器學習的訓練,會發(fā)生怎樣的事情呢?
[7] 將黃皮子墳調整后的建模結果

「黃皮子墳」劃歸前 4 部的散點圖,可以看到黃藍的界限更明顯。

「黃皮子墳」歸到前四部以后,有一個非常顯著的結果出現:如果你把前 5 部的一個片段隨機給到機器,然后讓機器去猜它到底是前 5 部還是后 3 部,機器 100% 地猜對了!

用統(tǒng)計學的指標來看,機器已經非常確信地判斷鬼吹燈的寫作風格發(fā)生了顯著變化。
天下霸唱的鬼吹燈 1-4 甚至 5 的很大一部分,應該是另外一個人所做了。
可是有人會說,你不給人家因為文章內容需要所以變了習慣???
助詞、介詞、副詞的使用習慣是比較難改變的,況且天下霸唱自己說這 8 本書是在 2 年寫完的。習慣在短時間內就更難改了;
我們拿天下霸唱寫的另外一部長篇小說《謎蹤之國》來看看它的寫作特征圖,你就明白習慣其實并沒有多少變化。

謎蹤之國為紅色,按照相同方式處理以后,綠黃之間有一定的交叉,但是跟藍樣本的界線非常明顯。(如果你是紅綠色盲的話,也許會不太容易分辨)
[8] 總結
至此,機器學習的結果已經給了我們很強的「旁證」,告訴我們鬼吹燈前 4 部跟后 4 部的作者不太可能是一個人。
要不就是前 4 部是天下霸唱寫,后面的作品是出了名以后找人代筆。要不就是前面是那個新聞老知青寫的、天下霸唱潤色,后面的作品才是霸唱本人的真跡。
不管怎樣,總算完成了這次工作。吁,長吸一口氣,結束。
雷鋒網按:本文原作者黎晨,原載于作者的知乎專欄。雷鋒網已獲得授權轉載。
雷峰網版權文章,未經授權禁止轉載。詳情見轉載須知。