這裏的歧義是指:一樣的一句話,可能有兩種或者更多的切分方法,這些切分結果,有的正確,有的不正確。java
消除歧義的目的就是從切分結果中挑選切分正確的。git
假設咱們要切分句子:結婚的和還沒有結婚的,使用逆向最大匹配和正向最大匹配算法的結果以下:github
逆向最大匹配:[結婚, 的, 和, 還沒有, 結婚, 的] 正向最大匹配:[結婚, 的, 和尚, 未結, 婚, 的]
再好比,這幾塊地面積還真不小:算法
逆向最大匹配:[這, 幾塊, 地, 面積, 還真, 不小] 正向最大匹配:[這, 幾塊, 地面, 積, 還真, 不小]
這裏就出現了歧義現象,這種歧義現象稱爲交集型歧義。spa
交集型歧義的特色是,其中的一個字既能夠和前面的字結合成詞,也能夠和後面的字結合成詞,如上面所說的「和還沒有"中尚就是這樣的字,既能夠和前面的字結合成「和尚」也能夠和後面的字結合成「還沒有」。還有「地面積」中的面,既能夠是地面,也能夠是面積。code
那麼咱們該選擇哪個分詞結果呢?內存
咱們能夠利用ngram模型來消除歧義,咱們看第一個例子的分詞過程:get
初始化bigram bigram初始化完畢,bigram數據條數:1519443 利用bigram爲逆向最大匹配算法的分詞結果進行評分: 二元模型 結婚:的 得到分值:16.970562 二元模型 和:還沒有 得到分值:2.0 二元模型 還沒有:結婚 得到分值:1.4142135 二元模型 結婚:的 得到分值:16.970562 逆向最大匹配:[結婚, 的, 和, 還沒有, 結婚, 的] : ngram分值=37.35534 利用bigram爲正向最大匹配算法的分詞結果進行評分: 二元模型 結婚:的 得到分值:16.970562 二元模型 的:和尚 得到分值:3.0 正向最大匹配:[結婚, 的, 和尚, 未結, 婚, 的] : ngram分值=19.970562 最大分值:37.35534, 消歧結果:[結婚, 的, 和, 還沒有, 結婚, 的]
接着看第二個例子:it
利用bigram爲逆向最大匹配算法的分詞結果進行評分: 二元模型 地:面積 得到分值:1.7320508 逆向最大匹配:[這, 幾塊, 地, 面積, 還真, 不小] : ngram分值=1.7320508 利用bigram爲正向最大匹配算法的分詞結果進行評分: 正向最大匹配:[這, 幾塊, 地面, 積, 還真, 不小] : ngram分值=0.0 最大分值:1.7320508, 消歧結果:[這, 幾塊, 地, 面積, 還真, 不小]
這裏要解釋的是,ngram中的n>1,咱們這裏取2(bi),咱們看到bigram中數據的條數有1519443,bigram須要從人工標註的語料庫中提取,提取方法參考word分詞項目,bigram中的數據格式以下:io
結婚:登記 91 結婚:的 288 地:面積 3 和:還沒有 4 還沒有:結婚 2 的:和尚 9
表示的含義是在人工標註的語料庫中,結婚這個詞後面跟着登記這個詞的出現次數是91次,結婚這個詞後面跟着的這個詞的出現次數是288次。
若是ngram中的n爲3,則數據格式以下:
結婚:的:事情 3 結婚:的:人 4 結婚:的:信念 2 結婚:的:決定 13
表示的含義和bigram一致。
經過分析bigram和trigram,咱們知道,在ngram中,n越大,消歧的效果就越好,可是數據也越大,耗費的內存就更多了。
利用ngram模型來消除歧義,依賴人工標註的語料庫,利用了統計學的大數定律,這種方法的缺點在於沒法處理少見的語言現象,以及沒法處理樣本覆蓋不到的狀況。