中文(語音結果)的文本糾錯綜述 Chinese Spelling Check

中文的文本糾錯,應用場景很多,諸如輸入法糾錯、輸入預測、ASR 後糾錯等等。這邊簡單梳理下對於這個任務的調研結果。

綜述中很多內容參考了 hqc888688 的這篇博客,非常感謝。


1. 問題分析

1.1 definition

中文文本糾錯,常見類型包括:

  1. 諧音字詞糾錯,如 配副眼睛-配副眼鏡
  2. 混淆音字詞糾錯,如 流浪織女-牛郎織女
  3. 字詞順序顛倒糾錯,如 伍迪艾倫-艾倫伍迪
  4. 字詞補全,如 愛有天意-假如愛有天意
  5. 形似字糾錯,如 高梁-高粱
  6. 中文拼音推導,如 xingfu-幸福
  7. 中文拼音縮寫推導,如 sz-深圳
  8. 語法錯誤,如 想象難以-難以想象

當然,針對確定場景,這些問題並不一定全部存在,比如輸入法中需要處理1234,搜索引擎需要處理1234567,ASR 後文本糾錯只需要處理12,其中5主要針對五筆或者筆畫手寫輸入等。

1.2 features

paper 上方案大多是基於英文糾錯的,但中英文糾錯區別還是蠻大的。瞭解清這些區別,有利於我們進行算法選型和調優工作。

邊界詞

由於中文不存在詞邊界,一方面導致糾錯時必須考慮上下文,另一方面拼寫錯誤也會導致分詞結果變化。

這就要求儘量基於字符進行建模,保證召回。

字符集

英文拼寫錯誤通常與正確拼寫的編輯距離在1-2,且由於英文字符集僅有26個,可以簡單地針對字符級別的錯誤進行建模。可是中文常用字符集約7000。

這就要求具體計算過程中非常注意效率。

錯誤類型

英文拼寫錯誤通常爲 insert、delete、substitute 和 ,而由於中文字符通常可以單獨成詞,insert、delete、transposite 則體現在了中文的語法錯誤,通常的拼寫錯誤主要集中於 transposite。

這就要求距離計算中充分優化超參,以突顯某些操作的重要性。

session 信息

交互環境可以提供大量參考信息,如領域、候選詞表、熱度詞表等。

這就要求要充分利用 session 信息,並提供多級算法。

1.3 evaluation

評測數據

中文輸入糾錯的評測數據主要包括 SIGHAN Bake-off 2013/2014/2015 這三個數據集,均是針對繁體字進行的糾錯。其中,只有 SIGHAN Bake-off 2013 是針對母語使用者的,而另外兩個是針對非母語使用者。

訓練數據

雖然沒有公開訓練數據,但在明確特定場景下糾錯任務的 Features 後,我們很容易根據正確文本,通過增刪改構造大量的訓練樣本。

評價指標

雖然文本糾錯具體會分爲錯誤識別和錯誤修正兩部分,並分別構造評價指標。但考慮到端到端任務,我們評價完整的糾錯過程:

  • 該糾的,即有錯文本記爲 P,不該糾的,即無錯文本記爲 N
  • 對於該糾的,糾對了,記爲 TP,糾錯了或未糾,記爲 FP
  • 對於不該糾的,未糾,記爲 TN,糾了,記爲 FN。

通常場景下,差準比查全更重要,FN 更難接受,可構造下述評價指標:

1Fβ=2P+1R\frac{1}{F_\beta}=\frac{2}{P}+\frac{1}{R},其中 P=TPTP+FPP=\frac{TP}{TP+FP}R=TPTP+2FNR=\frac{TP}{TP+2FN}

2. 主流技術

中文本糾錯的 paper 很多,整體來看,可以統一在一個框架下,即三大步:

  • 錯誤識別

    該階段主要目的在於,判斷文本是否存在錯誤需要糾正,如果存在則傳遞到後面兩層。

    這一階段可以提高整體流程的效率。

  • 生成糾正候選

    該階段主要目的在於,利用一種或多種策略(規則或模型),生成針對原句的糾正候選。

    這一階段是整體流程召回率的保證,同時也是一個模型的上限。

  • 評價糾正候選

    該階段主要目的在於,在上一階段基礎上,利用某種評分函數或分類器,結合局部乃至全局的特徵,針對糾正候選進行排序,最終排序最高(如沒有錯誤識別階段,則仍需比原句評分更高或評分比值高過閾值,否則認爲不需糾錯)的糾正候選作爲最終糾錯結果。

大部分的模型基本上可以劃分爲這三階段,大多模型省略第一階段,認爲所有文本都默認需要糾正,部分模型會將三階段聯合建模,在逐個構造候選的同時進行評分和篩選,本質上都屬於這個框架。

2.1 錯誤識別的主要方法

  • [10] 利用最大熵分類進行錯誤識別。
  • [8] 基於字符級別的詞向量。給定待糾錯的句子,對每個字符進行判定,看給定上下文時該字符的條件概率是否超過一定閾值,如果沒有超過,那麼判定有錯。
  • [13] 使用雙向字符級 N-gram LM,對句子裏的字符打分,得分低的地方視爲待糾錯位置。將待糾錯位置與上下文組合進行詞典查詞,當所有組合在詞典中都查找不到,則將其視爲錯字。

2.2 生成糾正候選的主要方法

困惑集,是中文文本糾錯任務中較爲關鍵的數據之一,用於存儲每個字詞可能被混淆的錯別字詞的可能。困惑集的數據格式是 key-value 格式,key 爲中文中的常用字詞,value 爲該字詞可能的錯誤形式。key 可以僅基於字符,也可以包含詞語。通常一個 key 對應多個 value。

錯誤形式,主要分爲兩大類,分別是發音混淆或者是形狀混淆。形狀混淆,通常是五筆輸入筆畫輸入手寫輸入帶來的錯誤。發音混淆最爲常見,可分爲相同讀音、相同音節不同音調、相似音節相同音調、相似音節不同音調。

困惑集的質量很大程度上決定了中文糾錯的上限。

利用困惑集進行直接替換

  • [1] 假設句子中每個字符都存在錯誤,利用困惑集逐個替換每個字符,生成所有可能的糾正組合。這種方式可以保證召回,但效率和FN不理想。
  • [2] 假設句子中每個單字都存在錯誤,即先分詞然後針對單個字符的詞,利用困惑集逐個替換,生成所有可能的糾正組合。同樣效率不高。

利用困惑集和規則進行有選擇替換

  • [7] 在分詞後利用一系列規則進行困惑集的替換。針對單字詞,將困惑集中的所有可能替換均加入候選;針對多字詞,若該詞不在詞表中,嘗試對每個漢字進行替換,若替換後詞出現在詞表,則加入候選;針對多字詞,若該詞在詞表中,不做任何處理。

利用困惑集和詞表或語言模型進行有選擇替換

這類方法主要有兩種思路:一是過濾掉正確的部分,減少替換的次數;一是對於常見的錯誤構建模板或詞表,遇到之後直接替換,避免替換的產生。

  • [9] 訓練字符級別的 N-gram 模型,選擇頻數超過閾值的爲有效序列。對文本分詞後得到單詞組成的序列,檢查這些序列是否在詞表或者 N-gram 中出現過,如沒有,則對該序列的單字進行替換。
  • [3] 利用未登錄詞識別,找到無意義的單音節詞素,利用困惑集進行替換
  • [3] 由於谷歌1T一元數據中包含了很多拼寫錯誤,可以利用其構造修正詞典,利用糾錯詞對直接進行拼寫替換。具體步驟爲:對1T一元數據中出現頻率低的詞用困惑集替換,如果新的詞頻率很高,則作爲糾錯詞對候選;計算每一個糾錯詞對中兩個詞在另一個大語料上的頻數,如果 原詞頻數 / 修改詞頻數 < 0.1,那麼將糾錯詞對寫入修正詞典。
  • [6] 統計語料構造高可信度模板,利用模版過濾一部分正確的序列,只對剩餘的部分進行替換工作。主要維護三類數據,模板、長詞詞表、常用錯誤詞表。
  • [5] 對困惑集進行擴充,並對每一個拼寫錯誤構建倒排索引,拼寫錯誤爲索引詞,潛在正確結果爲檢索內容,對於每個潛在正確內容,利用漢字出現的頻率進行排名。預測同時,在監測階段維護一個錯詞修正表,每次替換之後不在詞表的詞均加入錯詞表,最終找到正確結果的詞加入正確詞表,每次結束之後構建錯詞修正表。如果下次預測到的時候直接利用錯詞修正表進行調整。

利用模型生成

模型生成的糾錯候選,基本上可以考慮所有的可能,並且利用其本身的評分函數,可以在生成糾錯候選的過程中進行預篩選。

目前效果比較好的方式有 HMM 和 基於圖理論 的方法,而利用 SMT 進行生成的效果沒有這兩種好。

雖然方式比較多,但都可以看做基於貝葉斯的信道噪聲模型:

T^=argmaxp(ST)p(T)p(S)=argmaxp(ST)p(T)\hat{T}=argmax{\frac{p(S|T)p(T)}{p(S)}}=argmax{p(S|T)p(T)}

可見,生成一個糾錯候選的決定因素有兩個,一個是候選 T 的語言模型,一個是條件概率模型也稱爲 error model。不同類型方法的主要區別就在於錯誤模型。如果只考慮替換錯誤,從而理解爲一個對齊之後的字符錯誤模型。

  • [4] 利用 HMM 思想進行糾錯候選生成,其中錯誤模型利用 LD 估計。不過 HMM 模型很大一個問題是其一階馬爾科夫性無法建模長距離依賴。
  • [11] 利用圖模型進行糾錯候選生成。利用困惑集替換目前的每一個字得到拓展後的節點集合。邊的權重由替換概率(原始漢字同困惑集漢字的相似程度)和這個詞的條件概率(由語言模型計算)得到。並且提供瞭解決連續兩個字以上都是錯誤而無法解決的問題的方法。
  • [7] 利用 SMT 進行糾錯工作。由於中文糾錯不需要調序,因此這裏不需要考慮對齊模型,只需要計算翻譯模型和翻譯後的語言模型。

2.3 評價糾正候選的主要方法

利用語言模型進行評價

  • [11] 利用句子的困惑度進行評分,更關注句子整體
  • [11] 利用互信息進行評分,更關注局部,如 MI=max(MI(ci1,c^)MI(ci1,ci),MI(c^i,ci+1)MI(ci,ci+1))△MI = max(MI(c_{i-1},\hat{c}) - MI(c_{i-1},c_i), MI(\hat{c}_{i},c_{i+1})-MI(c_{i},c_{i+1}))
  • [9] 利用 SMT 的預測部分進行評分。
  • [7] 利用前向算法加字符級別的語言模型進行評分。
  • [1, 2, 3, 5, 6] 只是單純的利用全句的語言模型進行排序。

利用分類器進行評價

  • [7] 將原任務轉化爲一個二分類問題,利用 SVM 的置信度評分進行排序。對於每個位置的字符,如果候選和原句不同,則從候選與原句中抽取出相應位置的這些字符組成列表。由 SVM 對每個字符對進行評分,主要特徵包括:基本的上下文字符級別特徵,PMI特徵,詞典/語言模型特徵。
  • [4] 則是以一個整句爲單位進行評分。設置了兩輪排序,第一輪採用簡單易獲取的特徵搭配 LR,進行初篩;第二輪採用全部的特徵搭配 SVM。特徵們包括 LM 特徵、字典特徵、LD 特徵、分詞特徵,業務特徵等。

2.4 其他

自動機

自動機可以實現高效的字符匹配過程。其中,Levenshtein自動機通過構建一個有限狀態自動機,可以準確識別出和某個目標單詞相距在給定編輯距離內的所有字符串集合。

這可以實現快速的候選生成,作爲困惑集的補充。

統計信息

在糾錯時,除了 Ngram 信息,還有下述統計信息可以作爲特徵使用:互信息,共現詞,拼音的混淆規則、穩定度、相似度,N-gram 距離(Solr 在用方案)。

2.5 總結

影響糾錯效果的主要因素有如下幾點:

  • 困惑集:主要影響召回率,糾錯首先需要的就是構建一個好的困惑集,使其儘可能小但是包涵絕大多數情況。
  • 語言模型:在糾錯任務中,常常使用兩種語言模型,一種是基於字符級別的,主要用於錯誤的發現,一般字符級別的階數在1到5之間。還有一種是詞級別的,主要用於排序階段。
  • 詞表:詞表主要用於判斷替換字符之後是否可以成詞,詞表最好是比較大的常用詞表加上需要應用的領域詞表。
  • 語料:根據 [12] 提供的方式,確實可以利用大規模的互聯網語料估計錯誤拼寫,而且語料也應用於語言模型的生成。

從模型選擇上,SMT 更適合用於評分階段,圖模型是一個比較好的分詞同糾錯一起完成的模型,SVM也是評分階段的常用手段。

3. 實踐

下面,以語音控制系統 ASR 產生的的中文文本爲例,進行文本糾錯,簡單描述下主要思路。

3.1 收集先驗知識

詞表
  • 領域類別詞表
  • 意圖類別詞表
  • 領域內實體詞表
語言模型
  • 利用領域內和通用語料,生成 N-gram 語料。
  • 注意平滑。
困惑集
  • 收集字符、詞級別的困惑集
  • 根據詞表生成困惑集
糾錯對照表
  • 常用 易錯字詞-正確字詞 對照表
  • 收集,並利用 [3] 生成
  • 該數據在糾錯中具有高優先級
熱詞信息
  • 利用日誌信息,生成關鍵詞的熱度信息
訓練數據
  • 利用領域內和通用語料,隨機產生錯誤(同音字、諧音字、字詞亂序、字詞增刪等),構造訓練樣本

3.2 任務目標

  • 該場景下僅處理如下類型問題:諧音糾錯,混淆音糾錯,亂序糾錯,字詞補全。

  • 支持同時處理上述錯誤類型,當同時處理時,優先順序爲:諧音糾錯,混淆音糾錯,亂序糾錯,字詞補全。

  • 引入熱詞幹預、糾錯對照表干預

  • 充分利用 session 信息。

    在確定領域前,主要處理諧音糾錯,混淆音糾錯,可用資源有領域類別詞表、意圖類別詞表、基於通用語料的其他先驗。

    在確定領域後,主要處理字詞補全、亂序糾錯、諧音糾錯,混淆音糾錯,可充分利用領域內先驗。

3.3 算法流程

錯誤識別
  • 基於字向量使用 Self-attention 針對每個字符的二分類判別器

  • 基於字符的雙向 N-gram LM

  • 分詞後,針對單字詞,認爲有錯;針對多字詞,若該詞不在詞表中,認爲有錯

  • 對於出現在糾錯對照表中的認爲有錯

  • 根據 session 信息,高效利用字典信息

生成糾正候選
  • 對於認爲有錯的字詞利用困惑集進行逐一替換,生成糾正候選
  • 基於拼音利用編輯距離自動機生成候選
  • 利用 HMM、圖模型、Seq2Seq 生成
  • 根據 session 信息,高效利用字典信息
評價糾正候選
  • 利用多類統計特徵,訓練判別模型
  • 熱詞具有較高優先級
  • 如果候選句子中沒有分數比原句更高或者與原始評分相比得分不高於閾值的,則認爲原句沒有錯誤。否則,得分最高的候選句即作爲糾錯結果輸出。

References

[0] hqc888688, https://blog.csdn.net/hqc888688/article/details/74858126
[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.
[13] Yu J, Li Z. Chinese spelling error detection and correction based on language model, pronunciation, and shape[C]//Proceedings of The Third CIPS-SIGHAN Joint Conference on Chinese Language Processing. 2014: 220-223.
[14] Lin C J, Chu W C. A Study on Chinese Spelling Check Using Confusion Sets and? N-gram Statistics[J]. International Journal of Computational Linguistics & Chinese Language Processing, Volume 20, Number 1, June 2015-Special Issue on Chinese as a Foreign Language, 2015, 20(1).
[15] Chen K Y, Lee H S, Lee C H, et al. A study of language modeling for Chinese spelling check[C]//Proceedings of the Seventh SIGHAN Workshop on Chinese Language Processing. 2013: 79-83.
[16] Zhao J, Liu H, Bao Z, et al. N-gram Model for Chinese Grammatical Error Diagnosis[C]//Proceedings of the 4th Workshop on Natural Language Processing Techniques for Educational Applications (NLPTEA 2017). 2017: 39-44.
[17] Zheng B, Che W, Guo J, et al. Chinese Grammatical Error Diagnosis with Long Short-Term Memory Networks[C]//Proceedings of the 3rd Workshop on Natural Language Processing Techniques for Educational Applications (NLPTEA2016). 2016: 49-56.
[18] Xie P. Alibaba at IJCNLP-2017 Task 1: Embedding Grammatical Features into LSTMs for Chinese Grammatical Error Diagnosis Task[J]. Proceedings of the IJCNLP 2017, Shared Tasks, 2017: 41-46.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章