基於信息熵的分詞及新詞發現(二)統計學意義下的詞語構成

要想從一段文本中抽出詞來,我們的第一個問題就是,怎樣的文本片段纔算一個詞?

1、出現頻數超過某個閾值的片段,作爲該語料中的詞彙輸出。片段長度爲爲超參數。

2、光是出現頻數高還不夠,一個經常出現的文本片段有可能不是一個詞,而是多個詞構成的詞組。在人人網用戶狀態中,“的電影”出現了 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 倍。計算結果表明,“電影院”更可能是一個有意義的搭配,而“的電影”則更像是“的”和“電影”這兩個成分偶然拼到一起的。可以想到,凝合程度最高的文本片段就是諸如“蝙蝠”、“蜘蛛”、“彷徨”、“忐忑”、“玫瑰”之類的詞了,這些詞裏的每一個字幾乎總是會和另一個字同時出現,從不在其他場合中使用。

以天龍八部中的喬峯爲例,如果我們希望它是一個詞語,那麼#(喬峯)/ #(喬)/#(峯) 的值就越大。理想情況,“喬峯”出現了100次,“喬”出現了100次,“峯”出現了100次,則比值爲1/100。以“的喬”爲例,“的喬”出現了50次,“的”出現了10000次,“喬”出現了100次,比值爲1/20000,故不爲一個詞語。(三)中的代碼我們就使用這個邏輯來計算內部凝固程度。設定閾值min_support,要求可以組成詞語的比值大於該閾值。同理,當爲三個字的時候,比如 慕容復,需要判斷 慕容復出現次數和慕容*復的比值,以及慕*容復的比值,只有兩個比值都大於閾值的時候,該三字詞語才稱爲詞語。以此類推。

3、光看文本片段內部的凝合程度還不夠,我們還需要從整體來看它在外部的表現。考慮“被子”和“輩子”這兩個片段。我們可以說“買被子”、“蓋被子”、“進被子”、“好被子”、“這被子”等等,在“被子”前面加各種字;但“輩子”的用法卻非常固定,除了“一輩子”、“這輩子”、“上輩子”、“下輩子”,基本上“輩子”前面不能加別的字了。“輩子”這個文本片段左邊可以出現的字太有限,以至於直覺上我們可能會認爲,“輩子”並不單獨成詞,真正成詞的其實是“一輩子”、“這輩子”之類的整體。可見,文本片段的自由運用程度也是判斷它是否成詞的重要標準。如果一個文本片段能夠算作一個詞的話,它應該能夠靈活地出現在各種不同的環境中,具有非常豐富的左鄰字集合和右鄰字集合。

一個文本片段的自由運用程度定義爲它的左鄰字信息熵和右鄰字信息熵中的較小值。

過程:

我們把文本中出現過的所有長度不超過 d 的子串都當作潛在的詞(即候選詞,其中 d 爲自己設定的候選詞長度上限 ),再爲出現頻數、凝固程度和自由程度各設定一個閾值,然後只需要提取出所有滿足閾值要求的候選詞即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章