中文输入纠错任务整理
說明
最近根據需要整理了一下關于中文輸入糾錯相關的內容,特此記錄一下。
1. 中文輸入糾錯任務定義
1.1. 任務定義
任務定義:中文拼寫任務指的是對于自然語言在使用的過程中出現的問題進行自動的識別和糾正。
中文輸入糾錯任務主要有兩個子任務,分別為錯誤識別和錯誤修正。錯誤識別的任務是指出錯誤出現的句子位置,錯誤修正就是在識別的基礎上自動更正。
1.2. 同英文糾錯任務的區別
中文糾錯相比于英文糾錯來說,主要困難來源于中文的語言特性:中文的詞邊界以及中文龐大的字符集。
中文的詞邊界,嚴格來講,中文是沒有詞邊界的。由于中文沒有詞的明確間隔且每個詞的長度非常短。因此,在中文輸入糾錯的過程中,必須考慮上下文的因素,例如一個長短語或者一個句子,不能單純針對一個詞做糾錯。一般來講,拼寫錯誤的出現會導致分詞結果的不同。
中文龐大的字符集,根據調查,百分之九十的英文拼寫錯誤和正確的編輯距離為1,編輯距離小于等于2的基本已經包括全部的拼寫錯誤情況。因此,由于英文的字符集只有26個字母,英文拼寫錯誤可以轉化為字符級別的錯誤進行建模。但是中文的常用字符集就達到5000以上。
由于中文的語言特性,兩種語言的錯誤類型也是不同的。英文的修改操作包括插入、刪除、替換以及移動(移動指兩個字母交換順序等),而對于中文來說,因為每一個中文漢字都可獨立成詞,因此插入、刪除和移動的錯誤只是作為語法錯誤。由于大部分的用戶均為母語用戶且輸入法的存在,語法錯誤的情況比較少。因此,中文輸入糾錯主要集中在替換錯誤上。
2. 中文輸入糾錯評測
中文輸入糾錯的評測數據主要包括SIGHAN Bake-off 2013/2014/2015這三個數據集,均是針對繁體字進行的糾錯。其中,只有SIGHAN Bake-off 2013是針對母語使用者的,而另外兩個是針對非母語使用者。這里主要羅列一下常用的評測指標。在錯誤識別子任務中,常用的評測指標有:
- FAR(錯誤識別率):沒有筆誤卻被識別為有筆誤的句子數/沒有筆誤的句子總數
- DA(識別精準率):正確識別是否有筆誤的句子數(不管有沒有筆誤)/句子總數
- DP(識別準確率):識別有筆誤的句子中正確的個數/識別有筆誤的句子總數
- DR(識別找回率):識別有筆誤的句子中正確的個數/有筆誤的句子總數
- DF1(識別F1值):2 * DP * DR/ (DP + DR)
- ELA(錯誤位置精準率):位置識別正確的句子(不管有沒有筆誤)/句子總數
- ELP(錯誤位置準確率):正確識別出筆誤所在位置的句子/識別有筆誤的句子總數
- ELR(錯誤位置召回率):正確識別出筆誤所在位置的句子/有筆誤的句子總數
- ELF1(錯誤位置準確率):2*ELP*ELR / (ELP+ELR)
在錯誤糾正任務中,常用的評測指標為:
- LA位置精確率:識別出筆誤位置的句子/總的句子
- CA修改精確率:修改正確的句子/句子總數
- CP修改準確率:修改正確的句子/修改過的句子
3. 中文輸入糾錯主要框架
中文輸入糾錯的文章很多,但是從整體的思路來看,大部分是可以統一在一個框架之下。首先,給中文糾錯任務一個形式化的定義:給定一個自然語言句子S,找出其中出錯的漢字或詞語c,并給出修改意見。中文糾錯大致可作為一個兩階段建模:
- 構造糾正候選實體。這一階段的主要目的就是利用一種或多種策略(某種規則或者模型)構建對于原句的修改候選,每一個候選均是對可能存在錯誤的一處或多處漢字進行替換后的結果。這一階段是整個模型召回率的保證,同時也是一個模型的上限。
- 候選實體評分函數。這一階段的主要目的就是在上一階段的基礎上,利用某種評分函數(編輯距離、LM等)或者分類器(LR、SVM等)結合局部乃至全局的特征進行一個排序的工作,最終排序最高的糾正候選作為修改結果。
大部分的模型基本上可以劃分為這兩部分,也有部分模型將兩部分聯合起來建模,在逐個構造候選的同時進行評分和篩選,本質上也可以屬于這個框架的。
4. 候選生成的主要方法
4.1. 利用困惑集直接替換
首先介紹困惑集(confuse set)。困惑集是在中文輸入糾錯當中較為關鍵的數據之一,用于存儲每個漢字可能被混淆的錯別詞的可能。困惑集的數據格式是key-value格式,key為中文中的常用漢字,value為漢字可能的錯誤形式。
這里的錯誤形式主要分為兩大類,分別是發音混淆或者是形狀混淆。應拼音輸入和五筆輸入帶來的錯誤。發音混淆是最為主要的一種方式,其比例可達70%左右,發音混淆有四種錯誤類型,分別為相同讀音、相同音節不同音調、相似音節相同音調、相似音節不同音調。形狀混淆一般來說簡單的根據五筆碼的編輯距離計算就可以得到。困惑集的質量很大程度上決定了中文糾錯的上限。
直接利用困惑集替換主要有兩種策略,全部替換和單字替換。
- ?全部替換:假設句子中每一個字都是錯誤的,利用構造集逐個替換每一個漢字,生成所有可能的組合,利用二元語言模型評估,取概率最大的作為正確答案[1]。這種方式可以遍歷大多數的可能,但是缺點在于性能問題和FAR太低。
- ?單字替換:假設句子中的每一個單字都是錯誤的,即對于分詞之后每個單個的字利用困惑集進行替換,再進行選擇[2]。這種方式在錯誤發現任務上取得了很好的召回率,但是其他方面的效率不高(把大量正常句子也當成有筆誤的了)
4.2. 利用困惑集有選擇替換
上述兩種方式,對于單字的替換策略過于簡單,雖然可以取得比較好的召回率,但是會將大量的正常句子修改且性能太差。為了解決上述的問題,主要有三種方式,一種是利用規則來減少替換的字數,一種是利用詞表模板或語言模型過濾正確的表達,第三種是利用模型生成修正候選。
4.2.1. 利用規則的方法
文獻[7]首先利用CRF進行文本分詞,隨后利用一系列規則進行困惑集的替換。
4.2.2. 利用詞表或語言模型的方法
這種方法主要有兩種思路,一種是過濾掉那些正確的部分,減少替換的次數;還有一種是對于一些常見的錯誤,構建模板或詞表,遇到之后直接替換,避免替換的產生。
文獻[9]利用新聞語料數據集TWWaC 訓練漢字級別的ngram模型(n為2,3,4),選取出現次數超過10詞的作為有效序列。隨后通過分詞找到單詞組成的序列,并檢查這些序列是否在詞典中或者在ngram出現過,如果沒有,那么對該序列的單字進行替換。
文獻[3]采用了兩種替換方式,一種是利用未登錄詞識別,找到無意義的單音節詞素,利用困惑集進行替換;另一種是利用谷歌1T一元數據構造修正詞表,利用糾錯詞對直接進行拼寫糾錯。該方法實施的原因是谷歌1T一元數據中包含了很多拼寫錯誤,具體步驟為:
文獻[6]通過語料統計的方式構造一部分高可信度模板,利用模版過濾一部分正確的序列,只對剩余的部分進行替換工作。主要維護三類數據,模板、長詞詞表、常用錯誤詞表。具體操作如下:
在排除之后,再進行連續單字的處理工作,通過替換連續單字序列中的每個單字,如果生成的序列在詞表或者在Google Web 1T語料統計得到的ngram超過一定頻率,那么作為候選生成。
文獻[5]對困惑集做了擴充,并對每一個拼寫錯誤構建倒排索引,拼寫錯誤為索引詞,潛在正確結果為檢索內容,對于每個潛在正確內容,利用漢字出現的頻率進行排名。預測同時,在監測階段維護一個錯詞修正表,每次替換之后不在詞表的詞均加入錯詞表,最終找到正確結果的詞加入正確詞表,每次結束之后構建錯詞修正表。如果下次預測到的時候直接利用錯詞修正表進行調整。(這篇文章的效果很不錯,但是論文比較短,寫的很籠統,而且后續也沒什么改進研究,一直沒有特別讀懂)
4.2.3. 利用模型生成的方法
模型生成的好處在于模型生成的過程中基本考慮了每種可能,利用其評分函數可以在生成候選實體的過程中進行預先篩選。
目前效果比較好的方式主要有HMM和基于圖理論的方法。利用SMT進行生成的方式效果沒有上兩種好。
雖然模型比較多,但是我認為其總體思路還是一個信道噪聲模型,假設有錯的句子為S,糾錯的句子為C,那么基本表達式為
從公式中可以看出,決定一個候選是否是正確修正的本質上是兩個模型,一個是候選C的語言模型,還有一個是條件概率模型,論文中常常稱為錯誤模型(error model)。錯誤模型的計算是不同論文主要的區別,因為只考慮替換錯誤,這里可以理解為一個對齊之后的字符錯誤模型。
文獻[4]利用HMM的思想進行糾錯候選生成。其認為傳統的HMM在拼寫任務上有如下兩個問題:首先是一階馬爾科夫無法建模長距離的依賴關系;另一個是太多的候選實體會降低模型的性能且給后續的模型帶來干擾。
本文的錯誤模型利用編輯距離估計,語言模型利用LM計算。在具體操作中,首先去除原句中不屬于中文的部分,隨后將原來的句子根據標點符號進行分割形成子句,子句是本文處理的主要單位。構造一個優先隊列,將子句表示為單字的形式,從第一個字開始替換,替換后的句子作為候選,根據信道噪聲模型計算評分并加入優先隊列,如果優先隊列滿了,那么去掉其中評分最低的,如此往復。具體流程如圖1。
具體的計算公式為:
本工作還有一個亮點是利用之前的數據集構造困惑集的字對和詞對用于候選生成。在編輯距離當中,這里統計主要是替換字的來源,例如發音相似、形狀相似或者是來自于詞表,不同的來源會有不同的權重。利用這樣的方式完成糾錯候選實體的生成。
文獻[11]利用圖模型來進行糾錯候選的生成。利用困惑集替換目前的每一個字(替換之后的長度必須在人工制定的一個區間內,換句話說,替換之后必須成一個詞),得到拓展后的節點集合。邊的權重由替換概率(原始漢字同困惑集漢字的相似程度)和這個詞的條件概率(由語言模型計算)。
但是,這種方式對于連續兩個字以上都是錯誤的情況是無法解決的,為了解決這一情況,在第一步的集合基礎上添加所有兩個字組成的詞的替換(根據性能和統計的結果,2個以上連續錯誤的比較少)。通過上述的步驟,就將糾錯問題轉化為一個最短路徑問題。在語句前后添加開頭結尾標記,計算從開頭到結尾的最短路徑,選擇最優的前幾條作為最優糾錯候選。
文獻[7]考慮利用SMT進行糾錯工作,因為中文糾錯不需要調序,因此這里不需要考慮對齊模型,只需要計算翻譯模型和翻譯后的語言模型。由于需要的訓練預料較多,本文通過對訓練的700個句子進行隨機替換構造了2百萬個句子對,利用IBM4模型進行訓練。
5. 候選排序的主要方法
5.1. 利用語言模型進行排序
文獻[11]提出了兩種候選評分的方式,一種是利用句子的困惑度進行評分(更關注整體),另一種是利用MI進行過濾(更關注局部是
否符合)。
ΔMI=max(MI(ci?1,c′i)?MI(ci?1,ci),MI(c′i,ci+1)?MI(ci,ci+1))
通過實驗驗證,兩種過濾方式的效果基本一致。
文獻[9]則是利用翻譯模型的推斷部分進行評分。翻譯模型分為兩部分,一部分是翻譯模型還有一部分是語言模型。對于翻譯模型,錯誤序列到正確序列的翻譯概率公式為
tp=log(freq(trans)freq(trans)?freq(candi))?γ
其中,trans代表候選修正,candi代表錯誤的序列,這里取的是兩個序列在語料中出現的頻率。γ代表更正漢字的來源(兩種,音似或者形似)。
文獻[7]利用前向算法加字符級別的語言模型進行最優的選擇,語言模型的階數為5。
文獻[1, 2, 3, 5, 6]只是單純的利用全句的語言模型進行排序。
5.2. 利用LR/SVM進行排序
文獻[7]利用SVM的置信度評分進行排序,這里將原任務轉化為一個二分類問題。對于每個位置的漢字,如果候選和原句不同,那么從輸出候選和原句中抽取出相應位置的這些漢字組成漢字列表。由SVM對每個漢字進行評分.
主要的特征
- 基本上下文字符級別特征:去上下文為3的窗口,分別構建一元、二元特征
- PMI特征:計算待識別漢字同上下文為2的窗口內每個字符的PMI特征
- 詞典/語言模型特征:識別字序列是否在字典中或者ngram列表中
文獻[4]同文獻[7]不同之處在于文獻[4]是以一個句子為單位進行評分,一個句子中可能有多處修改。為了加快效率,設置了兩輪排序算法:第一輪算法使用LR模型,采用簡單易獲取的特征進行預測,選取最優的前20個進入第二輪;第二輪使用SVM模型,采用全部的特征,最終選出前5個候選。
第一階段的特征包括:
- LM特征:
- 候選句的LM概率
- 原句的LM概率
- 字典特征:
- 短語數
- 成語個數
- 短語比例
- 成語比例
- 短語或成語的長度
- 編輯距離特征:
- 同音詞替換個數
- 近音詞替換個數
- 近形詞替換個數
- 替換總個數
- 分詞特征:
- 單個漢字成詞個數
- 利用最大正向匹配的分詞數
- 利用CKIP算法的分詞個數
在第二階段的特征會添加一下需要耗時的特征,具體包括:
- 搜索引擎特征:
- 修正部分在標題中出現的個數
- 修正部分在正文中出現的個數
- 翻譯特征(利用微軟Web N-Gram服務計算LM概率)
- 候選句翻譯成英文后的LM概率
- 原句翻譯成英文后的LM概率
將屬于同一個句子的子句的Top5匯總,組成一個完成句子的候選集合。之后主要有三步:首先,對每個子句進行過濾,如果原始子句跟得分最高的子句的語言模型概率非常接近,那么保留原始子句;隨后,剩余的候選實體按照在排序第二階段得分和替換類型權重(困惑字對、同音、形近等)的線性組合進行排序,選擇得分最高的作為最終修正;最后,利用全局特征進行篩選,如果一個子句錯誤超過2個,子句丟棄,一個長句有超過三個子句出錯,那么長句不作修改。
6. 其他方法
文獻[8]利用計算詞向量CBOW中的假設,將CBOW應用到錯誤識別子任務當中。首先訓練一個字符級別的詞向量,對于一個待糾錯的句子,對每一個字符進行判定,看給定上下文該詞的條件概率是否超過一定閾值,如果沒有超過,那么判定有錯。其主要的缺點在于CBOW對于在語料中出現較少的字符判斷準確度不高且只測試了一個句子只有一個錯誤的情況。
文獻[10]利用最大熵分類進行錯誤的識別,但是不能進行改進。
文獻[12]構建一個詞網格解碼模型用于糾錯任務,該模型將糾錯和分詞兩個任務聯合進行,同時提出一種從語料中自動構建訓練樣例的方法。文獻[12]的糾錯任務主要分為兩部分,一部分是詞圖生成,還有一部分是詞圖解碼。
- 詞圖生成:詞圖是由字符組成,一個字符一個節點,為每個字符找到替換候選;根據詞典,將可以合并的字符進行合并;除了多音節詞匯,部分單音節詞匯也會加入到詞圖,為了降低復雜度,只添加高頻的單音節詞匯。
- 詞圖解碼:詞圖解碼是為了找一條最優的路徑,這里的最優指的是分詞結果和轉化概率的聯合最優,最優的評分函數為
W??=argmaxW∈L(S)P(S|W)λP(W)1?λ
前一部分為錯誤模型,后一部分為語言模型,L(S)代表所有可能的路徑。語言模型的計算比較簡單,錯誤模型的計算則可以轉化為計算每個字符的條件概率,字符條件概率為
perr為一個可調超參數,代表任意字符被誤寫的概率。兩個頻率通過拼寫錯誤語料產生。在解碼的過程中,采用前向算法和后向算法共同計算的方式,每個節點的評分由其前向后向算法之和計算得到。取每個位置得分最高的N個節點。
本文另一個亮點在于從語料中自動構建訓練樣例的方法,這里利用的語料為Google Web 1T語料,統計詞級別ngram(n為1到5)的頻率。算法主要基于兩個假設。
- 假設一是如果一個ngram不在詞典中,那么有可能是拼寫錯誤。利用假設一可以找到大量的錯誤正確候選對。
- 假設二是如果詞的上下文相近,那么詞具有相似的含義。計算錯誤正確候選對中兩個詞的上下文詞向量,保留相似度高的作為高可信度修正對。
利用生成的候選對,本文做了兩件事情。首先根據錯誤概率的公式計算每個字符被寫錯的概率分布;另一件是構造一個常用錯誤詞表,作為糾錯系統的最后一個處理流程進行補充。
7. 影響中文糾錯效果的因素
首先來分析在SIGHAN2013數據集上幾個比較好的論文的各項評分(最好的兩項標黑)。這里需要說明,文獻[4]沒有在2013數據集的數據,但是根據在2014數據集的數據對比,文獻[4]的總體效果應該略好于文獻[11],也是可以考慮的方式。
上表所示為錯誤識別率的相關情況,FAR為錯誤識別率即將正確的句子錯誤修改的概率,可以看到圖模型和SMT的效果比較好。DF1為錯誤識別的F1值,可見圖模型和用多種錯誤識別可以更好的識別出錯誤的句子。
上表展示的是對于具體錯誤位置識別的準確率。從F1值可以看出,圖模型和SMT的效果顯著高于其他模型效果。
上表展示對于錯誤修正的情況,維護錯誤詞表的方式效果比較好。(注:文獻5感覺沒有看的太明白,大家有興趣可以看看)。我個人認為,文獻[11]針對數據集做了大量人為的優化,因此它指標高并不能說明問題 。文獻[5]應該也是進行了一定的人工規則制定。文獻[9]和文獻[12]也取得不錯的效果,其中沒有人工規則的添加。
綜上所述,影響糾錯效果的主要有如下幾點:
- 糾錯集:糾錯集主要影響召回率,糾錯首先需要的就是構建一個好的困惑集,使其盡可能小但是包涵絕大多數情況。
- 語言模型:在糾錯任務中,常常使用兩種語言模型,一種是基于字符級別的,主要用于錯誤的發現,一般字符級別的階數在1到5之間。還有一種是詞級別的,主要用于排序階段。
- 詞表:詞表主要用于判斷替換字符之后是否可以成詞,詞表最好是比較大的常用詞表加上需要應用的領域詞表。
- 語料:根據文獻[12]提供的方式,確實可以利用大規模的互聯網語料估計錯誤拼寫,而且語料也應用于語言模型的生成。
- 從模型選擇上,SMT更適合用于評分階段,圖模型是一個比較好的分詞同糾錯一起完成的模型(其思想類似于文獻[4]的候選生成過程),SVM也是評分階段的常用手段。
參考文獻
[1] Yu He and Guohong Fu. 2013. Description of HLJU Chinese spelling checker for SIGHAN Bakeoff 2013. In Proceedings of the 7th SIGHAN Workshop on Chinese Language Processing. 84–87.
[2] Chuanjie Lin and Weicheng Chu. 2013. NTOU Chinese spelling check system in SIGHAN Bake-off 2013. In Proceedings of the 7th SIGHAN Workshop on Chinese Language Processing. 102–107.
[3] Yuming Hsieh, Minghong Bai, and Kehjiann Chen. 2013. Introduction to CKIP Chinese spelling check system for SIGHAN Bakeoff 2013 evaluation. In Proceedings of the 7th SIGHAN Workshop on Chinese Language Processing. 59–63.
[4] Zhang, S., Xiong, J., Hou, J., Zhang, Q., & Cheng, X. 2015. HANSpeller++: A Unified Framework for Chinese Spelling Correction. ACL-IJCNLP 2015, 38.
[5] Jui-Feng Yeh, Sheng-Feng Li, Mei-Rong Wu, Wen-Yi Chen, and Mao-Chuan Su. 2013. Chinese word spelling correction based on N-gram ranked inverted index list. In Proceedings of the 7th SIGHAN Workshop on Chinese Language Processing. 43–48.
[6] Tinghao Yang, Yulun Hsieh, Yuhsuan Chen, Michael Tsang, Chengwei Shih, and Wenlian Hsu. 2013. Sinica- IASL Chinese spelling check system at SIGHAN-7. In Proceedings of the 7th SIGHAN Workshop on Chinese Language Processing. 93–96.
[7] Liu, X., Cheng, F., Duh, K. and Matsumoto, Y., 2015. A Hybrid Ranking Approach to Chinese Spelling Check. ACM Transactions on Asian and Low-Resource Language Information Processing, 14(4), p.16.
[8] Guo, Z., Chen, X., Jin, P. and Jing, S.Y., 2015, December. Chinese Spelling Errors Detection Based on CSLM. In Web Intelligence and Intelligent Agent Technology (WI-IAT), 2015 IEEE/WIC/ACM International Conference on (Vol. 3, pp. 173-176).
[9] Hsunwen Chiu, Jiancheng Wu, and Jason S. Chang. 2013. Chinese spelling checker based on statistical machine translation. In Proceedings of the 7th SIGHAN Workshop on Chinese Language Processing.49–53.
[10] Dongxu Han and Baobao Chang. 2013. A maximum entropy approach to Chinese spelling check. In Proceedings of the 7th SIGHAN Workshop on Chinese Language Processing. 74–78.
[11] Zhao, H., Cai, D., Xin, Y., Wang, Y. and Jia, Z., 2017. A Hybrid Model for Chinese Spelling Check. ACM Transactions on Asian and Low-Resource Language Information Processing (TALLIP), 16(3), p.21.
[12] Hsieh, Y.M., Bai, M.H., Huang, S.L. and Chen, K.J., 2015. Correcting Chinese spelling errors with word lattice decoding. ACM Transactions on Asian and Low-Resource Language Information Processing, 14(4), p.18.
總結
以上是生活随笔為你收集整理的中文输入纠错任务整理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022年软件评测师考试大纲
- 下一篇: win10如何安装IIS