簡與美(2)

腦中的數學是抽象的,手中的數學是簡單的。
 
接着談中文分詞。
 
我們已經討論了詞典的一種快速查詢結構:雙數組trie樹。這種結構只需要通過簡單的幾次數學計算就可以完成查詢,不需要做任何的拷貝和字符串比較。這種結構比較適合於詞典不用經常變化的情況,因爲這種結構的更新是非常麻煩的,他需要對全局結構進行調整,並且隨着詞典詞數量的增加,調整的時間會越來越長。但是一般的詞典都不需要經常更新。
 
對於那種需要經常更新的詞典,比如現在的網絡搜索,經常需要加入新詞、熱門詞到詞典中。這個時候,可以採用另外一種數據結構,叫做patricia tree的樹結構,這種結構引入了位運算避免進行字符串比較,並且他是一顆完全樹,插入刪除和查詢的複雜度都爲O(log(n)),如果對首字索引進行hash散列,降低樹的深度,這種算法的時間是可以接受的。
 
patricia樹暫且按下不表,因爲我後面的系統會倚重於這種數據結構,留待以後討論,可以有更深的體會。
 
我們從頭來談談中文分詞,雖然中文分詞已經有十幾年的發展,也有不少成熟的技術,但是設計一個具有一定工業強度的分詞系統仍然不是那麼容易,因爲這其中涉及的技術點是蠻多的,有些點還比較抽象。
 
中文分詞可以大致分爲三個階段,第一階段是對字串進行粗分,這個階段根據不同的方法可能會產生較多粗分結果,形成一個粗分結果集,最後從這個集合中選擇一個相對最好的結果;第二個階段進行排歧、未登錄詞識別(人名、地名等);最後一個階段是進行詞性標註。
 
這三個階段不一定按照明顯的先後次序,也可能是交叉和反覆融合的。爲了討論方便,我按照這三個階段來分別論述。
 
未登錄詞識別和詞性標註需要藉助一種統計模型--隱馬爾科夫模型,需要較大的篇幅,後續會分幾次進行論述。
 
下面介紹一種基於統計模型的字串粗分方案。這種方案比較其他方案有比較明顯的優勢--準確率高。
 
字串粗分的目標是:快速(粗分結果集儘量小)、高召回率(儘可能的涵蓋正確的結果,一般要求保留較多結果集)。這兩個目標是矛盾的,這就需要平衡。實際情況也確實是這樣,漢語的組詞種類相當多,一個字串完全可能有多種切分結果,最好的選擇切分方法是根據上下文判斷,但是機器是不理解上下文的,那麼我們就必須使用機器可以理解的方法去選擇一些最可能的粗分結果,把這些結果交給後續階段來進一步處理。
 
能夠讓機器理解的方法一般有兩種。
一種是基於規則,即按照一些制定的判斷規則來選擇結果,比如最大匹配切分方法和最短路徑方法,最大匹配依賴的規則是遇到組合詞匹配最長的詞,這就使得結果只有一個,但是召回率很低,如果這個結果是錯的,後面階段處理是找不回正確結果的,最短路徑方法依賴的規則是使切分出來的詞數最少,這符合漢語自身的規律,但是對於有多條最短路徑的情況,只能選擇一條,並且這種選擇是不合理的。
另一種是基於統計,根據一些詞頻之類的統計數據,尋找概率最大的切分方案。這要藉助於大量已標記的切分語料庫的支持,用語料庫訓練統計模型。
還有一種方法叫做全切分,通過查詢詞典,把字串中所有可能的詞語找出來,並列出所有可能的切分結果,將優選排錯的任務完全交給後面的階段,避免粗分階段出錯。但是大部分的結果對於切分是沒有意義的,而且隨着字串長度增加,切分結果數量呈指數級上升。這種方法實用性不強。
 
而我們這裏要討論的是一種融合了最短路徑和全切分並且是基於統計模型的方法--N-最短路徑方法。他的思路是儘量減少切分出來的次數,這和最短路徑是一致的,同時要儘可能的包含最終結果,這和全切分是一致的。
 
N-最短路徑方法的基本思想我先描述一下,時間比較晚了,下一篇再繼續詳細論述吧。
N-最短路徑的基本思想是:根據詞典,找出字串中所有可能的詞,構造一個詞語切分有向無環圖,每個詞對應圖中的一條有向邊,並賦給相應的邊長(權值)。然後針對這個切分圖,在起點到終點的所有路徑中,求出長度值按照升序排序的第1、第2、...、第N的路徑集合作爲相應的粗分結果集,如果兩條或兩條以上的路徑長度相等,那就長度並列第i,都要列入粗分結果集,最後的結果集>=N。
 
待續...
發佈了30 篇原創文章 · 獲贊 1 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章