中文文本糾錯任務簡介

任務簡介

中文文本糾錯是針對中文文本拼寫錯誤進行檢測與糾正的一項工作,中文的文本糾錯,應用場景很多,諸如輸入法糾錯、輸入預測、ASR 後糾錯等等,例如:

  • 寫作輔助:在內容寫作平臺上內嵌糾錯模塊,可在作者寫作時自動檢查並提示錯別字情況。從而降低因疏忽導致的錯誤表述,有效提升作者的文章寫作質量,同時給用戶更好的閱讀體驗。


  • 公文糾錯:針對公文寫作場景,提供字詞、標點、專名、數值內容糾錯,包含領導人姓名、領導人職位、數值一致性等內容的檢查與糾錯,輔助進行公文審閱校對。


  • 搜索糾錯:用戶在搜索時經常輸入錯誤,通過分析搜索query的形式和特徵,可自動糾正搜索query並提示用戶,進而給出更符合用戶需求的搜索結果,有效屏蔽錯別字對用戶真實需求的影響。


  • 語音識別對話糾錯
    將文本糾錯嵌入對話系統中,可自動修正語音識別轉文本過程中的錯別字,向對話理解系統傳遞糾錯後的正確query,能明顯提高語音識別準確率,使產品整體體驗更佳


圖片來源---百度大腦AI開放平臺-文本糾錯:https://ai.baidu.com/tech/nlp_apply/text_corrector

中文拼寫常見錯誤類型

錯誤類型 示例
同音字相似錯誤 強烈推薦-牆裂推薦、配副眼睛-配副眼鏡
近音字相似錯誤 牛郎織女-流浪織女
字形相似錯誤 頑強拼搏-頑強拼博
詞序混亂 兩戶人家-兩家人戶
缺字少字 浩瀚星海-浩瀚星
中文全拼拼寫 天下-tianxia
中文首字母縮寫 北京-bj
中文簡拼 明星大偵探-明偵
語法錯誤 無法言說-言說無法

我們把中文常見錯誤總結分爲三類:
1、用詞錯誤,由於輸入法等原因導致的選詞錯誤,其主要表現爲音近,形近等;
2、文法/句法錯誤,該類錯誤主要是由於對語言不熟悉導致的如多字、少字、亂序等錯誤,其錯誤片段相對較大;
3、知識類錯誤,該類錯誤可能由於對某些知識不熟悉導致的錯誤,要解決該類問題,通常得引入外部知識、常識等。

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

主流技術

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


  • 錯誤識別

該階段主要目的在於,判斷文本是否存在錯誤需要糾正,如果存在則傳遞到後面兩層。這一階段可以提高整體流程的效率。

錯誤識別/檢測的目標是識別輸入句子可能存在的問題,採用序列表示(Transformer/LSTM)+CRF的序列預測模型,這個模型的創新點主要包括:
1、詞法/句法分析等語言先驗知識的充分應用;
2、特徵設計方面,除了DNN相關這種泛化能力比較強的特徵,還結合了大量hard統計特徵,既充分利用DNN模型的泛化能力,又對低頻與OOV(Out of Vocabulary)有一定的區分;
3、最後,根據字粒度和詞粒度各自的特點,在模型中對其進行融合,解決詞對齊的問題

  • 候選召回

候選召回指的是,識別出具體的錯誤點之後,需要進行錯誤糾正,爲了達到更好的效果以及性能,需要結合歷史錯誤行爲,以及音形等特徵召回糾錯候選。主要可分爲兩部分工作:離線的候選挖掘,在線的候選預排序。離線候選挖掘利用大規模多來源的錯誤對齊語料,通過對其模型,得到不同粒度的錯誤混淆矩陣。在線候選預排序主要是針對當前的錯誤點,對離線召回的大量糾錯候選,結合語言模型以及錯誤混淆矩陣的特徵,控制進入糾錯排序階段的候選集數量與質量。

該階段主要目的在於,利用一種或多種策略(規則或模型),生成針對原句的糾正候選。這一階段是整體流程召回率的保證,同時也是一個模型的上限。

  • 糾錯排序

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

中文文本糾錯評測

數據集

SIGHAN Bake-off 2013: [http://ir.itc.ntnu.edu.tw/lre/sighan7csc.html](http://ir.itc.ntnu.edu.tw/lre/sighan7csc.html)

SIGHAN Bake-off 2014 : [http://ir.itc.ntnu.edu.tw/lre/clp14csc.html](http://ir.itc.ntnu.edu.tw/lre/clp14csc.html)

SIGHAN Bake-off 2015 : [http://ir.itc.ntnu.edu.tw/lre/sighan8csc.html](http://ir.itc.ntnu.edu.tw/lre/sighan8csc.html)

中文輸入糾錯的評測數據主要包括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(錯誤位置準確率):2ELPELR / (ELP+ELR)
    在錯誤糾正任務中,常用的評測指標爲:

  • LA位置精確率:識別出筆誤位置的句子/總的句子

  • CA修改精確率:修改正確的句子/句子總數

  • CP修改準確率:修改正確的句子/修改過的句子

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

  • 應該糾錯的,即有錯文本記爲 P,不該糾錯的,即無錯文本記爲 N
  • 對於該糾錯的,糾錯對了,記爲 TP,糾錯了或未糾,記爲 FP
  • 對於不該糾錯的,未糾錯,記爲 TN,糾錯了,記爲 FN。
    通常場景下,差準比查全更重要,FN 更難接受,本來對了改成錯的這個更離譜,可構造下述評價指標:
    \frac{1}{F_{\beta}}=\frac{2}{P}+\frac{1}{R},其中P=\frac{TP}{TP+FP},R=\frac{TP}{TP+2FN}

相關方法

相關論文

整理來自:https://blog.csdn.net/qq_36426650/article/details/122807019

【1】DCSpell:A Detector-Corrector Framework for Chinese Spelling Error Correction(SIGIR2021)
【2】Tail-to-Tail Non-Autoregressive Sequence Prediction for Chinese Grammatical Error Correction(ACL2021)
【3】Correcting Chinese Spelling Errors with Phonetic Pre-training(ACL2021)
【4】PLOME:Pre-trained with Misspelled Knowledge for Chinese Spelling Correction(ACL2021)
【5】PHMOSpell:Phonological and Morphological Knowledge Guided Chinese Spelling Check(ACL2021)
【6】Exploration and Exploitation: Two Ways to Improve Chinese Spelling Correction Models(ACL2021)
【7】Dynamic Connected Networks for Chinese Spelling Check(2021ACL)
【8】Global Attention Decoder for Chinese Spelling Error Correction(ACL2021)
【9】Read, Listen, and See: Leveraging Multimodal Information Helps Chinese Spell Checking(ACL2021)
【10】SpellBERT: A Lightweight Pretrained Model for Chinese Spelling Check(EMNLP2021)
【11】A Hybrid Approach to Automatic Corpus Generation for Chinese Spelling Check(EMNLP2018)
【12】Adversarial Semantic Decoupling for Recognizing Open-Vocabulary Slots(EMNLP2020)
【13】Chunk-based Chinese Spelling Check with Global Optimization(EMNLP2020)
【14】Confusionset-guided Pointer Networks for Chinese Spelling Check(ACL2019)
【15】Context-Sensitive Malicious Spelling Error Correction(WWW2019)
【16】FASPell: A Fast, Adaptable, Simple, Powerful Chinese Spell Checker Based On DAE-Decoder Paradigm (2019ACL)
【17】SpellGCN:Incorporating Phonological and Visual Similarities into Language Models for Chinese Spelling Check (2020ACL)
【18】Spelling Error Correction with Soft-Masked BERT(ACL2020)

在OpenReview上提交至ARR2022的相關稿件有:
【1】Exploring and Adapting Chinese GPT to Pinyin Input Method 【PDF】
【2】The Past Mistake is the Future Wisdom: Error-driven Contrastive Probability Optimization for Chinese Spell Checking 【PDF】【Code】【Data】
【3】Sparsity Regularization for Chinese Spelling Check【PDF】
【4】Pre-Training with Syntactic Structure Prediction for Chinese Semantic Error Recognition【PDF】
【5】ECSpellUD: Zero-shot Domain Adaptive Chinese Spelling Check with User Dictionary【PDF】
【6】SpelLM: Augmenting Chinese Spell Check Using Input Salience【PDF】【Code】【Data】
【7】Pinyin-bert: A new solution to Chinese pinyin to character conversion task【PDF】

簡單總結一下目前CSC的方法:

  • 基於BERT:以爲CSC時是基於token(字符)級別的預測任務,輸入輸出序列長度一致,因此非常類似預訓練語言模型的Masked Language Modeling(MLM),因此現如今絕大多數的方法是基於MLM實現的。而在BERT問世前,CSC則以RNN+Decoder、CRF爲主;

  • 多模態融合:上文提到CSC涉及到字音字形,因此有一些方法則是考慮如何將Word Embedding、Glyphic Embedding和Phonetic Embedding進行結合,因此湧現出一些多模態方法;

最新技術

  • FASPell(愛奇藝)

技術方案 FASPell: A Fast, Adaptable, Simple, Powerful Chinese Spell Checker Based On DAE-Decoder Paradigm

code: https://github.com/iqiyi/FASPell

  • SpellGCN (阿里)

技術方案 SpellGCN: Incorporating Phonological and Visual Similarities into Language Models for Chinese Spelling Check

code: https://github.com/ACL2020SpellGCN/SpellGCN

  • Soft-Mask BERT (字節)

技術方案:Spelling Error Correction with Soft-Masked BERT

code: https://github.com/hiyoung123/SoftMaskedBert

  • Spelling Correction as a Foreign Language (ebay)

技術方案 Spelling Correction as a Foreign Language

中文糾錯的開源項目

pycorrector

https://github.com/shibing624/pycorrector

中文文本糾錯工具。支持中文音似、形似、語法錯誤糾正,python3開發。pycorrector實現了Kenlm、ConvSeq2Seq、BERT、MacBERT、ELECTRA、ERNIE、Transformer等多種模型的文本糾錯,並在SigHAN數據集評估各模型的效果。

correction

https://github.com/ccheng16/correction

大致思路:

  • 使用語言模型計算句子或序列的合理性
  • bigram, trigram, 4-gram 結合,並對每個字的分數求平均以平滑每個字的得分
  • 根據Median Absolute Deviation算出outlier分數,並結合jieba分詞結果確定需要修改的範圍
  • 根據形近字、音近字構成的混淆集合列出候選字,並對需要修改的範圍逐字改正
  • 句子中的錯誤會使分詞結果更加細碎,結合替換字之後的分詞結果確定需要改正的字
  • 探測句末語氣詞,如有錯誤直接改正

Cn_Speck_Checker

https://github.com/PengheLiu/Cn_Speck_Checker

  • 程序原理:
    • 使用了貝葉斯定理
    • 初始化所有潛在中文詞的先驗概率,將文本集(50篇醫學文章)分詞後,統計各個中文詞的出現頻率即爲其先驗概率
    • 當給定一待糾錯單詞時,需要找出可能的正確單詞列表,這裏根據字符距離來找出可能的正確單詞列表
    • 對構造出來的單詞做了一次驗證後再將其加入候選集合中,即判斷了下該詞是否爲有效單詞,根據其是否在單詞模型中

chinese_correct_wsd

https://github.com/taozhijiang/chinese_correct_wsd

  • 方法:
    • 用於用戶輸入語句的同音自動糾錯
    • 使用到了同義詞詞林

Autochecker4Chinese

https://github.com/beyondacm/Autochecker4Chinese

  • 方法:
    • 構造一個詞典來檢測中文短語的拼寫錯誤,key是中文短語,值是在語料庫中的頻率
    • 對於該字典中未出現的任何短語,檢測器會將其檢測爲拼寫錯誤的短語
    • 使用編輯距離爲錯誤拼寫的短語製作正確的候選列表
    • 對於給定的句子,使用jieba做分割
    • 在分段完成後獲取分段列表,檢查其中是否存在保留短語,如果不存在,那麼它是拼寫錯誤的短語

參考資料

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