1. 程式人生 > >用正向和逆向最大匹配演算法進行中文分詞(續)

用正向和逆向最大匹配演算法進行中文分詞(續)

一、結果分析:

        1.程式執行結果,如下圖所示:


        2.總體分析。
        (1)正向和逆向匹配都正確的句子數目為 1731,佔句子總數的39.0%
        (2)正向最大匹配完全正確的句子數目為 1917,佔句子總數的43.2%
        (3)逆向最大匹配完全正確的句子數目為 1982,佔句子總數的44.7%
        (4)至少有一種方法分析正確的句子數為 2168,佔句子總數的48.9%
        3.逆向最大匹配比正向最大匹配的準確率和召回率都高。
        4.錯誤分析
        (1)未登入詞導致的錯誤佔大部分,約70%左右,是導致分詞錯誤的主要因素。
        (2)面對交集型歧義,正向最大匹配比逆向最大匹配更容易出錯。
        (3)面對組合型歧義,正向最大匹配和逆向最大匹配都無能為力。


二、主要問題分析:
        1.準確率為什麼低於召回率;
        二者的計算公式如下:
                準確率 = 切分正確的詞 / 切分得到的詞數
                召回率 = 切分正確的詞 / 準確的詞數
        從上述公式來看,他們的區別在於分母。通過對切分錯誤的漢字串的分析,發現未登入詞在其中佔了相當大的比例,大概四分之三左右。演算法對於未登入詞的處理方式是:將它們按照單字進行切分,這樣勢必導致切分出來的詞的數量比真實值偏大。雖然也存在一些組合型歧義問題使切分出來的詞的數量傾向於減少,但是這種情形較少,只佔所有錯誤漢子串的十分之一左右。因此從總體上來看,實際切分得到的詞的數目會比真實的詞的數目要大,所以最終得到的準確率低於召回率。

        2.逆向匹配的準確率和召回率為什麼高於正向匹配?
        逆向切分的錯誤較少。錯誤分三類:未登入詞、組合型歧義、交集型歧義。其中未登入詞對於兩種切分方式來說是差不多的,組合型歧義也是相差無幾。主要的區別在於交集型歧義問題,對於漢字串ABC,正向切分得到AB /C,逆向切分得到A/BC。在實際應用中,大多數的交集型歧義傾向於切分為A/BC這種形式。因此,正向匹配的錯誤數量相對來說較高。至於為什麼漢語的交集型歧義傾向於切分為A/BC這種形式,那可能涉及到語言學的知識了。

        3.錯誤分詞的主要問題什麼?主流的解決辦法是什麼?
        從分詞的結果來看,錯誤主要分為三類:
        (1)組合型歧義,該切分而未切分的詞。正向切分中大概佔13.8%,逆向切分中大概佔14.2%。
        某些漢字串,它本身是詞,切開來也是詞,這就造成了組合型歧義。比如:比如“就是”,它本身是一個詞,其中的“就”和“是”也都可以單獨作為一個詞。
        組合型歧義同最大匹配的原則是相矛盾的。最大匹配法的實質是要求切分出來的詞的數量儘可能地少,而組合型歧義切分問題的存在,卻要求考慮將這樣的詞再切分一次的可能性。如果不利用句法以及更高層面上的知識,組合型歧義切分是很難解決的。要利用上下文的語境資訊進行識別。

         (2)交集型歧義。正向切分中大概佔16.5%,逆向切分中大概佔13.8%。
        交集型歧義切分是指,一個漢字串中包含ABC三個子串,AB和BC都是詞,到底應該切分為A/BC還是AB/C。按照最大匹配切分方式,正向切分得到AB /C,逆向切分得到A/BC。因此,對同一個漢字串同時進行正向切分和逆向切分,可以檢查出一部分交集型歧義,但是未必能發現所有的交集型歧義。
        解決交集型歧義,可以用統計學的手段計算出可能性最大的一種切分方式。可以利用最大概率法,基於支援向量機的方法,最大熵模型。
        這兩種歧義的區別為:交集型歧義的問題在於在哪裡切分,組合型歧義的問題在於該不該切。

        (3)未登入詞。正向切分中大概佔69.66%,逆向切分中大概佔72.01%。
        即詞典中不存在的詞。一些未登入詞是比較生僻的、不常用的詞,如糌粑。還有一些是專有名詞、人名、地名等。
        未登入詞識別的基本方法主要採用的是:基於規則的方法和統計與規則相結合的方法。從目前的研究來看,多是對人名、地名、機構名等進行單獨的識別研究。基於統計的方法是根據統計得到的各類用字的頻度,加入構詞可信度等概念進行識別。統計與規則相結合的方法是根據未登入詞的用字規律和上下文特徵,觀察未登入詞與標誌位置的關係以及單詞的左右結構,總結出適合絕大多數未登入詞的識別規則,將規則應用於漢語文字的處理過程,從而識別未登入詞。


相關推薦

正向逆向匹配演算法進行中文

一、結果分析:         1.程式執行結果,如下圖所示:         2.總體分析。         (1)正向和逆向匹配都正確的句子數目為 1731,佔句子總數的39.0%         (2)正向最大匹配完全正確的句子數目為 1917,佔句子總數的43

熵模型進行中文

        本文運用字標註法進行中文分詞,最大熵模型方面使用開源的張樂博士的最大熵模型工具包(Maximum Entropy Modeling Toolkit for Python and C++)。使用的中文語料資源是SIGHAN提供的backoff 2005語料,

逆向匹配演算法之python實現

1.執行環境 python 3.6.4 2.思路 大致思路與正向相同,可參考我的上一篇部落格。 3.程式碼實現 import codecs #獲得分詞字典,儲存為字典形式 f1 = codecs.open('./corpus/WordList.txt', 'r', encodi

中文逆向匹配演算法(2016年)

逆向最大匹配演算法,中文分詞機械化分詞中最基本的演算法,也是入門級別的演算法。但是,在機械化分詞方面的效果,表現卻很好。尤其是在大文字的時候,一次取較多詞語進行匹配,因為大文字匹配成詞的概率遠遠高於小文字,所以會有很好的表現。下面的程式碼,來自IK分詞的一部分原始碼包,201

基於Tire樹概率法的中文功能的Java實現

對於分詞系統的實現來說,主要應集中在兩方面的考慮上:一是對語料庫的組織,二是分詞策略的制訂。 1.   Tire樹 Tire樹,即字典樹,是通過字串的公共字首來對字串進行統計、排序及儲存的一種樹形結構。其具有如下三個性質: 1)      根節點不包含字元(或漢字),除根節

正向匹配演算法實現之python實現

1.python 版本:python 3.6.4 2.思路: s1.匯入分詞詞典,儲存為字典形式dic,匯入停用詞詞典stop_words,儲存為字典形式,需要分詞的文字檔案cutTest.txt,儲存為字串chars s2.遍歷分詞詞典,找出最長的詞,長度為max_chars s3

詞法分析-中文技術-正向匹配法與逆向匹配

Long Time No See... 最近深受痛苦的折磨,這一年來所有的事跌宕起伏,如同一瞬,一個個打擊接踵而至,從年初的各種擦邊掛,到各種失敗,各種放棄,似乎沒有發生一個順心的事,不知道從什麼時候起戾氣變得越來越重,更無與人說。不管如何,“盡吾志也而不能至者,可以無悔矣,其孰能譏之乎?”……

演算法:正向匹配演算法

正向最大匹配演算法 正向最大匹配演算法(FMM)是一種基於詞典的分詞方法,同樣的基於詞典的方法還有逆向最大匹配法(RMM),ngram法.FMM故名思意,左向右掃描尋找詞的最大匹配,是一種貪心的思想。

中文正向匹配演算法

中文分詞目前可以分為“規則分詞”,“統計分詞”,“混合分詞(規則+統計)”這三個主要流派。這次介紹下基於規則的分詞,其是一種機械的分詞方法,主要通過維護詞典,在切分語句時,將語句的每個字串與詞表中的詞逐一進行匹配,找到則切分,否則不予切分。 正向最大匹配演算法

基於詞典的正向匹配演算法優先匹配

public Set<String> matchChinese(String text, Set<String> dictionary, int maxLength) { //text:待匹配文字 dictiona:詞典

中文--逆向匹配

res 最長 java 搜索字符串 name ++ san imp 匹配 上一篇文章中介紹了正向最大匹配。能夠看到有時候效果不是非常好。這裏在介紹一種逆向最大匹配的算法。詞典和匹配的字符串都和上一篇文章同樣 僅僅是本算法是從後到前搜索字符串。然後找到最長的

MLE極大似然估計EM期望演算法

         EM的意思是“Expectation Maximization”,在我們上面這個問題裡面,我們是先隨便猜一下男生(身高)的正態分佈的引數:如均值和方差是多少。例如男生的均值是1米7,方差是0.1米(當然了,剛開始肯定沒那麼準),然後計算出每個人更可能屬於第一個還是第二個正態分佈中的(例如

演算法記事本#NLP-1】匹配演算法

> **本文地址**: # \#NLP-1 最大匹配演算法(MM) **最大匹配演算法**(Maximum Matching)被用於對一個**文段**進行**詞語劃分**(Word Segmentation)。 > ## 注意 > 這是**詞元化(Tokenization)演算法** > 此方法*

雙向匹配演算法——基於詞典規則的中文(Java實現)

目錄 一、中文分詞理論描述 二、演算法描述       1、正向最大匹配演算法       2、反向最大匹配演算法       3、雙劍合璧 三、案例描述 四、JAVA實現完整程式碼 五、組

請使用迭代查詢一個list中值,並返回一個tuplePython

from collections import Iterable, Iterator def g(): yield 1 yield 2 yield 3 print('Iterable? [1, 2, 3]:', isinstance(

熵模型進行字標註中文Python實現

        同前面的那篇文章一樣(參見:最大熵模型進行中文分詞),本文運用字標註法進行中文分詞,分別使用4-tag和6-tag對語料進行字標註,觀察分詞效果。前面的文章中使用了模型工具包中自帶的一個樣例進行4-tag中文分詞,但由於其選取的特徵是針對英文詞性標註開發

linux文件句柄數量總結轉載

指定 which 非root cti 文件打開 可能 查看 mit value   最近部署上線的一個引擎,啟動之後內存、日誌顯示一切正常,但是外部無法進行引擎訪問。幾經周折,在同事的協助下,找出了問題:root用戶的open files為1024,引擎啟動時,1024個文

CocosCreatorPomelo編寫多人在線實時聊天室----基礎知識環境安裝

shu 以及 pan 信息 ast pre alt web 技術 客戶端:Cocos Creator 1.6.2服務器端:Pomelo 2.2.5源碼地址:https://github.com/foupwang/CocosCreatorChatForPomelo.git 本

給出n個學生的考試成績表,每條記錄由學號、姓名分數名次組成,設計演算法完成下列操作: 1設計一個顯示對學生資訊操作的選單函式如下所示: *************************

給出n個學生的考試成績表,每條記錄由學號、姓名和分數和名次組成,設計演算法完成下列操作: (1)設計一個顯示對學生資訊操作的選單函式如下所示: *************************        1、錄

短路dijkstra演算法詳解:dijkstra圖解

本人小白,如果有寫的不恰當的地方,還請大家指出,共同進步學習。 ---------------------------------------------------------------------------------------------------------