首页 > 开发 > Python > 正文

mmseg算法中的问题

2017-09-06 19:32:11  来源:网友分享

mmseg中复杂最大匹配算法没看明白,有人能用一个例子给我解释下吗?

解决方案

首先先定義 MMSEG 一個重要概念是 Chunk ,他是一個包含3個詞的詞塊。
MMSEG 算法是基於統計模型的,所以算法的規則也是來自於對語料庫的分析和歸納。

他有四大規則分別為:
規則 1 : 最大匹配 Maximum matching (取詞包含字數最多的chunk)
規則 2 : 最大平均詞彙長度 Largest average word length (取詞的平均字數最多的chunk)
規則 3 : 最小詞方差 Smallest variance of word lengths (取詞的方差最小的chunk)
規則 4 : 最大單字自由度 Largest sum of degree of morphemic freedom of one-character words

    (取詞頻自由度最大的chunk, 也就是chunk中的詞的詞頻取對數後的和,)

舉的例子比較快了解:
我們用 MMSEG 上的例子 "研究生命起源",但首先先釐清一點,切 Chunk 通常跟你自己的語料庫(詞典)有很大關係,不一定會切出跟下面一樣的 Chunk。

  1. 研 |究 |生 (length = 3)

  2. 研 |究 |生命 (length = 4)

  3. 研究 |生 |命 (length = 4)

  4. 研究 |生命|起 (length = 5)

  5. 研究 |生命|起源 (length = 6)

  6. 研究生|命 |起 (length = 5)

  7. 研究生|命 |起源 (length = 6)

之後依次使用上述四種規則匹配之-

依據規則 1,取length最大的 Chunk

  1. 研究 |生命|起源 (length = 6, average length = 2)

  2. 研究生|命 |起源 (length = 6, average length = 2)

依據規則 2,取average length最大的 Chunk

  1. 研究 |生命|起源 (length = 6, average length = 2, variance = 0 )

  2. 研究生|命 |起源 (length = 6, average length = 2, variance = 4/9)

依據規則 3,取variance最小的 Chunk

  1. 研究 |生命|起源 (length = 6, average length = 2, variance = 0 )

因為剩下一個 Chunk 所以規則 4 就不用再匹配了。
最終結果就是 "研究 | 生命 | 起源"

若需要用到規則 4 ,當中所謂的詞頻,是要你自己在你的辭典先定義辭典裡的每一個詞的在你的資料及的某個時間點知當時的詞頻。
例如 第5號 Chunk : "研究" 詞頻=3 , "生命" 詞頻=5 , "起源" 詞頻=7
取對數的和 = ln3+ln5+ln7
其他 Chunk 也用同樣的算法算出其對數和,
最後所以剩下的 Chunk 比對誰最大就取誰即可。

但是如果最後的匹配四個規則的結果得到不只一個 Chunk ,那麼 MMSEG 就失效了。