我叫你一聲,你敢答應嗎?
- 2019 年 10 月 11 日
- 筆記
西遊記著名橋段「我叫你一聲你敢答應嗎?」想必大家都有非常深刻的印象,甚至還會浮出這個畫面:

不對,是這個圖:

但是,大家還記得,孫悟空回答了什麼名字被葫蘆吸了進去了嗎?孫悟空被叫的最多的名字是悟空還是大聖?帶著這些問題,我們用科學的方法對西遊記進行分詞分析,竟然獲得了出人意料的結果。
分詞工具
我們知道,中文分詞指的是將一個漢字序列切分成一個一個單獨的詞。之前,在紅樓夢文本分析的時候用過一個非常著名的分詞工具:jieba分詞。
jieba 是一個python實現的中文分片語件,在中文分詞界非常出名,支援簡、繁體中文,高級用戶還可以加入自定義詞典以提高分詞的準確率。
jieba分詞是一種基於統計語言模型分詞的:



摘自 吳軍《數學之美》
從圖中可以看出來,jieba分詞是一種基於詞典的統計分詞方法,而這裡的詞典是來源主要有兩個,一個是網上能下載到的1998人民日報的切分語料還有一個msr的切分語料。另一個是我自己收集的一些txt小說,用ictclas把他們切分(可能有一定誤差)。然後用python腳本統計詞頻。總結起來就是基於現代語料而獲得的詞典。
但是,西遊記作為一個傳統小說,文風為半白半文,詞典的加入在理論上可能影響分詞的準確率。但是jieba對於詞典中沒有的詞使用了採用了基於漢字成詞能力的HMM模型,使用了Viterbi演算法。用簡單的話就是說jieba分詞也考慮到了詞典中沒有出現的詞。
為了嚴謹起見,我們在jieba分詞之外再使用另外一種無詞典的分詞方法。這個方法在分析紅樓夢的時候用到過。這個方法的主要基於資訊熵的無字典分詞演算法。簡單來說,就是不藉助其他文本,從西遊記小說本身入手,通過統計方法猜出來西遊記文本哪些是詞的可能性。
所以這裡的無詞典的意思不是說不用詞典,而是詞典是來自於文本本身。當基於文本本身的詞典建立好了之後,我們再採用Viterbi演算法去解基於漢字成詞能力的HMM模型最終獲得分詞結果。
在最終結果出來之前,我們不對上面兩個方法的好壞做出判斷。
分詞結果
我們先展示jieba分詞中出現頻率最高的十大詞:

出乎意料的是,前十名竟然沒有「悟空」,反而給八戒,三藏,還有沙僧這幾位足夠的牌面。還有第一名的「行者」又是什麼呢?我們不禁要問是不是分詞結果出錯了呢?
我們進一步給出分詞詞雲圖,這張圖我們選取前五十名:

我們發現了悟空,大聖這些詞,但是出現頻率相對較低。
為了驗證jieba分詞的準確性,我們再給出無詞典分詞結果:

從結果可以看出來,這裡分詞並沒有把「xx道」分好。不過也能看出來,西遊記在描寫某個人物的時候,有大約一半的場景是這位人物在說話。其中「三藏道」甚至超過了第13名的「三藏」,難道這就是大話西遊裡面唐僧很愛說話的驗證?

我們將「xx道」和「xx」合併一下,重新畫出頻率統計圖:

對比jieba分詞結果,發現差距沒有那麼大,行者依然排名第一,其他人物的排名有細微差別。
總結下來,jieba分詞的結果可信度比較高。
文本分析
基於分詞工具給出來結果是「行者」出現的次數遠遠高於我們習慣中的「悟空」,這是怎麼回事呢?要想回答這個問題,我們必須回到文本當中。
將手中寶珠凈瓶往海心裡撲的一摜,唬得那行者毛骨竦然。
行者仔細看那馱瓶的怪物,怎生模樣:根源出處號幫泥
行者見了,暗笑道:「原來是看瓶的,想是不見瓶,就問他要
行者即忙斂袖,將左手伸出。菩薩拔楊柳枝,蘸甘露
行者合掌道:「是弟子不知。」
行者不敢推辭,捨命往上跳。
我們隨機摘取了包含行者的幾個片段。不難發現,西遊記作為一個第三人稱視角的小說,在描述孫悟空的時候,用的是「行者」,而不是「悟空」。
我們再摘抄有悟空的片段:
菩薩道:「悟空休言語,跟我來也。」
唐三藏心中害怕,兜住馬不能前進,急回頭道:悟空,是那裡這等響振?
三藏勒馬道:「悟空,你怎麼來打聽個響聲
玉帝聞奏:「著孫悟空挑選幾員天將,下界擒魔去也。」
魔王大怒道:「你想是孫悟空請來的。我就是那聖僧的魔頭哩
那行者正然點看山景,忽聽得有人叫道:「孫悟空,從那裡來?往何處去?
可以看出來,在對話裡面,悟空出現了很多次。因此我們發現西遊記的影視作品當中,大家都用「悟空」這個名字是有道理的。而「行者」是出於第三人稱的描寫視角而導致了出現次數非常之多。
參考資料
jieba分詞原理介紹:
https://www.cnblogs.com/echo-cheng/p/7967221.html
jieba分詞字典來源:
https://github.com/fxsjy/jieba/issues/7
無詞典分詞程式碼:
https://github.com/LouYu2015/analysis_on_the_story_of_a_stone
無詞典分詞原理:
https://www.cnblogs.com/bigdatafly/p/5014597.html
無詞典分詞原理:
https://zhuanlan.zhihu.com/p/29209681