作為中文系應用語言學專業的學生以及一名數學 Geek ,我非常熱衷於用計算的方法去分析漢語資料。漢語是一種獨特而神奇的語言。對漢語資料進行自然語言處理時,我們會遇到很多其他語言不會有的困難,比如分詞——漢語的詞與詞之間沒有空格,那計算機怎麼才知道,“已結婚的和尚未結婚的青年都要實行計劃生育”究竟說的是“已/結婚/的/和/尚未/結婚/的/青年”,還是“已/結婚/的/和尚/未/結婚/的/青年”呢?這就是所謂的分詞歧義難題。不過,現在很多語言模型已經能比較漂亮地解決這一問題了。但在中文分詞領域裡,還有一個比分詞歧義更令人頭疼的東西——未登錄詞。中文沒有首字母大寫,專名號也被取消了,這叫計算機如何辨認人名地名之類的東西?更慘的則是機構名、品牌名、專業名詞、縮略語、網絡新詞等等,它們的產生機制似乎完全無規律可尋。最近十年來,中文分詞領域都在集中攻克這一難關。自動發現新詞成為了關鍵的環節。
挖掘新詞的傳統方法是,先對文本進行分詞,然後猜測未能成功匹配的剩余片段就是新詞。這似乎陷入了一個怪圈:分詞的准確性本身就依賴於詞庫的完整性,如果詞庫中根本沒有新詞,我們又怎麼能信任分詞結果呢?此時,一種大膽的想法是,首先不依賴於任何已有的詞庫,僅僅根據詞的共同特征,將一段大規模語料中可能成詞的文本片段全部提取出來,不管它是新詞還是舊詞。然後,再把所有抽出來的詞和已有詞庫進行比較,不就能找出新詞了嗎?有了抽詞算法後,我們還能以詞為單位做更多有趣的數據挖掘工作。這裡,我所選用的語料是人人網 2011 年 12 月前半個月部分用戶的狀態。非常感謝人人網提供這份極具價值的網絡語料。
要想從一段文本中抽出詞來,我們的第一個問題就是,怎樣的文本片段才算一個詞?大家想到的第一個標准或許是,看這個文本片段出現的次數是否足夠多。我們可以把所有出現頻數超過某個阈值的片段提取出來,作為該語料中的詞匯輸出。不過,光是出現頻數高還不夠,一個經常出現的文本片段有可能不是一個詞,而是多個詞構成的詞組。在人人網用戶狀態中,“的電影”出現了389 次,“電影院”只出現了175 次,然而我們卻更傾向於把“電影院”當作一個詞,因為直覺上看,“電影”和“院”凝固得更緊一些。
為了證明“電影院”一詞的內部凝固程度確實很高,我們可以計算一下,如果“電影”和“院”真的是各自獨立地在文本中隨機出現,它倆正好拼到一起的概率會有多小。在整個 2400 萬字的數據中,“電影”一共出現了 2774 次,出現的概率約為 0.000113 。“院”字則出現了 4797 次,出現的概率約為 0.0001969 。如果兩者之間真的毫無關系,它們恰好拼在了一起的概率就應該是 0.000113 × 0.0001969 ,約為 2.223 × 10-8 次方。但事實上,“電影院”在語料中一共出現了 175 次,出現概率約為 7.183 × 10-6 次方,是預測值的 300 多倍。類似地,統計可得“的”字的出現概率約為 0.0166 ,因而“的”和“電影”隨機組合到了一起的理論概率值為 0.0166 × 0.000113 ,約為 1.875 × 10-6 ,這與“的電影”出現的真實概率很接近——真實概率約為 1.6 × 10-5 次方,是預測值的 8.5 倍。計算結果表明,“電影院”更可能是一個有意義的搭配,而“的電影”則更像是“的”和“電影”這兩個成分偶然拼到一起的。
當然,作為一個無知識庫的抽詞程序,我們並不知道“電影院”是“電影”加“院”得來的,也並不知道“的電影”是“的”加上“電影”得來的。錯誤的切分方法會過高地估計該片段的凝合程度。如果我們把“電影院”看作是“電”加“影院”所得,由此得到的凝合程度會更高一些。因此,為了算出一個文本片段的凝合程度,我們需要枚舉它的凝合方式——這個文本片段是由哪兩部分組合而來的。令 p(x) 為文本片段 x 在整個語料中出現的概率,那麼我們定義“電影院”的凝合程度就是 p(電影院) 與 p(電) · p(影院) 比值和 p(電影院) 與 p(電影) · p(院) 的比值中的較小值,“的電影”的凝合程度則是 p(的電影) 分別除以 p(的) · p(電影) 和 p(的電) · p(影) 所得的商的較小值。
可以想到,凝合程度最高的文本片段就是諸如“蝙蝠”、“蜘蛛”、“彷徨”、“忐忑”、“玫瑰”之類的詞了,這些詞裡的每一個字幾乎總是會和另一個字同時出現,從不在其他場合中使用。
光看文本片段內部的凝合程度還不夠,我們還需要從整體來看它在外部的表現。考慮“被子”和“輩子”這兩個片段。我們可以說“買被子”、“蓋被子”、“進被子”、“好被子”、“這被子”等等,在“被子”前面加各種字;但“輩子”的用法卻非常固定,除了“一輩子”、“這輩子”、“上輩子”、“下輩子”,基本上“輩子”前面不能加別的字了。“輩子”這個文本片段左邊可以出現的字太有限,以至於直覺上我們可能會認為,“輩子”並不單獨成詞,真正成詞的其實是“一輩子”、“這輩子”之類的整體。可見,文本片段的自由運用程度也是判斷它是否成詞的重要標准。如果一個文本片段能夠算作一個詞的話,它應該能夠靈活地出現在各種不同的環境中,具有非常豐富的左鄰字集合