中文語法糾錯全國大賽獲獎分享:基於多輪機制的中文語法糾錯
中文語法糾錯任務旨在對文字中存在的拼寫、語法等錯誤進行自動檢測和糾正,是自然語言處理領域一項重要的任務。同時該任務在公文、新聞和教育等領域都有著落地的應用價值。但由於中文具有的文法和句法規則比較複雜,基於深度學習的中文文字糾錯在實際落地的場景中仍然具有推理速度慢、糾錯準確率低和假陽性高等缺點,因此中文文字糾錯任務還具有非常大的研究空間。
達觀資料在CCL2022漢語學習者文字糾錯評測比賽的賽道一中文拼寫檢查(Chinese Spelling Check)任務中取得了冠軍,賽道二中文語法糾錯(Chinese Grammatical Error Diagnosis)任務中獲得了亞軍。本文基於賽道二中文語法糾錯任務的內容,對比賽過程中採用的一些方法進行分享,並介紹比賽採用的技術方案在達觀智慧校對系統中的應用和落地。賽道一中文拼寫檢查的冠軍方案會在後續的文章分享。
本次中文語法糾錯任務是對給定的句子輸出可能包含的錯誤位置、錯誤型別和修正答案,而最終的評測指標是假陽性、偵測層、識別層、定位層和修正層這五個維度指標的綜合結果。而且本次評測任務使用的資料是漢語學習者的寫作內容,與母語寫作者相比漢語學習者的資料本身就具有句子流暢度欠佳、錯誤複雜度較高等情況。因此,本次評測的難度在於對於漢語學習者的書寫內容既要保證檢錯和糾錯的準確率和召回率,還要保證正確句子不能進行修改操作以降低模型的假陽性。本文主要從資料和模型兩方面來分享本次比賽中採用的模型和策略。
資料分析
本次評測中,官方提供了CGED的歷年比賽資料(41,239條)和Lang8資料(1212,457條)供模型訓練,同時提供了3767條評測資料用以驗證模型的效果和效能。為了解資料的錯誤分佈以及資料的質量,我們首先對評測資料進行了分析。CGED-21驗證集中的錯誤分佈情況如圖1所示,由此可以看出資料集中佔絕大多數的均為用詞錯誤,其次為缺失錯誤,而亂序錯誤的佔比最少。
圖1 驗證集錯誤佔比統計圖
同時在資料測驗的過程中還發現了CGED和Lang8資料集中存在的一些資料問題。
具體問題如下所示:
-
源句子與目標句子完全不相關;
-
目標句子是對源句子的批註;
-
源句子中存在錯誤編輯距離較大的情況;
-
資料集中末尾處存在多字的缺失錯誤
對此,我們也摘錄了資料集中存在的一些問題的樣例資料;由樣例資料可知,不管採用哪種模型,資料中包含的這些錯誤均會導致模型產生一些錯誤的特徵對映,從而影響模型的效能。因此在構建語法糾錯模型之前首先需要對資料進行清洗,去除質量較差的句子。在本次比賽中,資料預處理是利用編輯距離、字數差異和糾正字數等多個維度的評估來實現的。
表1 資料中的錯誤樣例資料
糾錯策略
本次評測任務中的語法錯誤可以分為拼寫錯誤、語法錯誤和符號錯誤。其中拼寫錯誤包括形似音近錯誤,而語法錯誤則主要包括用詞錯誤、缺失、亂序和冗餘。這些錯誤型別具有差異性和多樣性,利用單個模型難以覆蓋所有的錯誤型別;因此,比賽中採用序列的多階段中文語法糾錯方法來解決中文文字中存在的各種錯誤。
01 拼寫糾錯模型
對於拼寫糾錯任務,我們是從資料和模型兩個維度來進行解決的。資料方面,首先收集了不同來源的混淆集詞典並對其進行整合和擴充,然後基於混淆集和微信新聞語料生成了包含不同錯誤模式的大規模語料來對模型進行訓練。模型方面是利用MDCSpell[2]來實現拼寫糾錯任務。進一步地,我們發現檢錯和糾錯模組可以直接使用BERT輸出的語義特徵資訊,而不需要捨棄CLS和SEP。而且這樣還能保證兩個模組的輸出維度相同更方便特徵資訊的融合。
圖2 拼寫糾錯模型結構圖
此外,拼寫糾錯模型的定位是解決資料中存在的形似音近問題,而且整個流程還後接了語法糾錯模型,所以拼寫糾錯模型只需要保證糾錯的準確率高而誤召回低。因此在推理階段,拼寫糾錯模型還利用閾值對模型的輸出進行判別以確定是否接受當前的糾錯結果。
02 語法糾錯模型
拼寫糾錯模型只能解決資料中存在的形似音近錯誤,因此我們基於序列到編輯的Seq2Edit模型來完成剩餘的錯誤型別的糾正。Seq2Edit是目前最優的語法糾錯模型,它透過預訓練模型獲得輸入句子的語義特徵編碼,然後透過全連線層預測句子中對應的每個句子的編輯標籤,該模型對應的解碼空間為插入、刪除、替換、保持和移動五種編輯操作。而且該模型還透過多工的方式引入了檢錯模組,以便利用檢錯的輸出資訊增強模型的糾錯效果。該語法糾錯的模型結構和解碼流程如下圖所示:
圖3 語法糾錯流程圖
原始Seq2Edit模型是透過刪除和插入兩種操作來解決句子中的亂序錯誤,但是由於模型的訓練和推理階段存在暴露偏差,故對於連續字元的缺失錯誤,模型可能因缺少上下文特徵資訊即使透過多個輪次也無法進行糾正。例如下表中的亂序錯誤,當對一側進行刪除操作之後,而缺少了大量的上下文資訊故模型無法對另一側的插入操作進行補齊。而且模型將亂序錯誤看作冗餘和缺失兩種錯誤的集合也會導致模型對刪除操作的置信度偏高。但是透過引入移動編輯操作的方法能夠較好地解決亂序的問題。
表2 原始Seq2Edit模型對亂序錯誤的糾錯能力
在推理階段,為了在輸出的標籤空間中搜尋出一條最優的解碼路徑,我們利用區域性路徑解碼方法對區域性的移動編輯操作確定一條和為0的相對路徑,並透過自適應閾值的方法對不同編輯操作、不同的詞性和詞頻確定不同的修改接受閾值,由此提高模型的糾正準確率並解決模型的過度糾正等問題。
03 模型整合
不同的模型學習到的語義特徵資訊存在一些差異,因此將多個差異較大而效能略差的模型正確的組合能夠極大地提升模型的效能。本次評測中,我們對不同預訓練模型訓練的糾錯模型進行加權整合以提升模型的準確率。此次參與模型整合的有Bert、MacBert和StructBert這3個預訓練模型訓練的6個Seq2Edit模型。
04 資料增強榜單
在實驗分析的過程中,我們發現模型對多字詞的缺失和句子不同位置的錯誤的糾錯能力不同,並且當前的資料集未能覆蓋絕大多數的錯誤,因此存在OOV的問題。所以我們利用資料生成的策略來解決因OOV導致的模型無法對錯誤進行糾正的問題。本次比賽中,拼寫糾錯和語法糾錯兩個任務都用到了資料增強技術,且均使用微信公眾號語料作為種子資料。對於資料增強,我們基於字和詞兩個維度進行資料擴充,並維護了生僻詞表、詞頻表、鍵盤佈局相鄰表、形近混淆集和音近混淆集以保證生成的句子符合中文的語用頻率和分佈規律。
資料增強的流程如下所述:
(1)資料預處理:對句子進行預處理並掩碼掉非中文字元、人名和地名等字元位置;
(2)取樣設錯位置:確定對句子進行設錯操作的字元位置;
(3)取樣設錯型別:確定當前字元位置的設錯型別;
(4)取樣設錯操作:針對步驟(3)中的設錯型別確定設錯的操作,一般來說不同的設錯型別對應的設錯操作也不盡相同,冗餘操作的設錯操作包括重複當前字詞、隨機插入和按鍵盤佈局相鄰表等方式插入;用詞錯誤的替換策略包括形似混淆集、音似混淆集和隨機替換
針對拼寫糾錯任務形似字錯誤:音似字錯誤:詞近似錯誤的比例為0.4:0.4:0.2;而語法糾錯的比例是亂序錯誤:缺失錯誤:冗餘錯誤:用詞錯誤分別0.05:0.1:0.15:07
05 其他策略
-
困惑度策略:困惑度可以用來評估句子的流暢程度,因此比賽中還透過困惑度對多個模型的輸出進行評估並選擇困惑度最低的糾錯句子作為最優解。
-
成語糾錯:中文中的成語俗語是約定俗成的,因此我們維護了成語俗語規則表,利用規則匹配到疑似成語錯誤,並對修改前後的句子進行困惑度計算以確定是否接受對句子錯誤的修改。
實驗結果
在本次比賽的過程中,我們首先對比了基於Seq2Seq的模型和基於Seq2Edit模型的基準模型效果,然後選擇了Seq2Edit模型作為本次比賽的基本框架。由該賽道的評測指標可知,本次比賽不僅考察模型的糾錯能力,還考察模型正確區分句子對錯的能力;因此我們訓練了不同效能的多個模型並透過模型整合和困惑度來選擇最優結果;不同模型的模型效果對比如下表所示。由表中資料可知,基於Seq2Seq的模型的檢錯能力較好,但同時模型引入了較高的誤召回,從而使得假陽性的指標偏高;而基於Seq2Edit的方法更能夠權衡精確率和召回率,使得模型在評測資料上取得更好的結果。同時透過對比可知,利用拼寫糾錯模型預先糾正用詞錯誤,然後再對其他錯誤進行糾錯,能夠提升模型的效果。
表3 不同模型的效果對比
技術落地方案
達觀智慧校對系統依託於自然語言處理和光學字元識別等技術,實現了不同格式的輸入文字的自動校對。該系統涵蓋了內容糾錯、格式糾錯和行文規則糾錯等針對不同應用場景下的糾錯模組,其中內容糾錯模組包括拼寫糾錯、語法糾錯、領導人糾錯、符號糾錯和敏感詞檢測等多種校對模組。目前達觀智慧校對系統已支援公文領域、金融領域和通用領域的文字校對任務,並且可針對不同領域的校對需求為客戶提供定製化的解決方案。
達觀智慧校對系統的如圖4所示,其核心模組主要是文件解析和智慧糾錯。其中智慧糾錯模組基於預訓練模型、序列標註、語言模型和知識蒸餾等技術不斷提升中文文字糾錯的精度和速度。同時達觀智慧校對系統也在不斷探索新的技術以更好地實現領域遷移和無痛解鎖更多的應用場景。
圖4 達觀智慧校對系統
總結展望
對比本次比賽和實際糾錯工作中的技術落地點可知中文語法糾錯的相關研究距離工程落地還有一定的差距。
工程應用中的一些難點在於:
-
模型複雜度較高,推理速度慢
-
真實的糾錯資料較為稀缺,尤其是母語者的錯誤資料
-
糾錯模型容易出現過度糾正的情況,即模型的假陽性偏高
-
現有的模型往往無法覆蓋常識、知識型的錯誤
參考: 1. http://cuge.baai.ac.cn/#/ccl_yaclc 2. Chenxi Zhu, Ziqiang Ying, Boyu Zhang, and Feng Mao. 2022. MDCSpell: A Multi-task Detector-Corrector Framework for Chinese Spelling Correction. In Findings of the Association for Computational Linguistics: ACL 2022, pages 1244–1253, Dublin, Ireland. Association for Computational Linguistics.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69997703/viewspace-2929145/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 語法糾錯的研究現狀
- 基於機器學習的糾錯系統技術 - 智慧文字糾錯 API機器學習API
- NLP實踐!文字語法糾錯模型實戰,搭建你的貼身語法修改小助手 ⛵模型
- 基於OCR進行Bert獨立語義糾錯實踐
- 你的英語不行!微軟亞研自動語法糾錯系統達到人類水平微軟
- 錯字修改 | 佈署1箇中文文文字拼蟹糾錯模型模型
- Lumen 表單校驗配置 validation 的中文 (多語言) 錯誤語
- 量子糾錯碼——Clifford group
- 量子糾錯碼——Stabilizer codes
- 校驗碼&糾錯碼
- SCoRe: 透過強化學習教導大語言模型進行自我糾錯強化學習模型
- 自然語言處理(NLP)- 一個英文拼寫糾錯系統自然語言處理
- python實現查詢糾錯Python
- Java基礎語法:運算子、包機制、JavaDocJava
- java基礎語法(三十九)—反射機制(二)Java反射
- navicat 建立事件報語法錯誤事件
- elasticsearch拼寫糾錯之Term SuggesterElasticsearch
- 海明校驗碼檢錯和糾錯的工作原理
- 關於python操作帶有中文檔名報錯的解決辦法Python
- U-net基礎入門(包括糾錯過程)
- pycharm改變語法錯誤的顏色PyCharm
- 亞馬遜aws文件語法錯誤亞馬遜
- RS編碼和糾錯演算法演算法
- Go語言錯誤處理機制Go
- Dart語法篇之基礎語法(一)Dart
- 多項式與點值的雙射 與 Reed–Solomon 編碼糾錯.
- 基礎語法
- 多分類學習及糾錯輸出碼
- 02 - 03 Dart語法精講-基礎語法Dart
- python基礎語法—語句Python
- Python的基礎語法Python
- Scala 的基礎語法
- JavaSE的基礎語法Java
- Dart的基礎語法Dart
- 透過全新學習和推斷機制提升seq2seq 模型的語法改錯效能模型
- mysql8.0 部分sql語法報錯問題MySql
- 淺談Kotlin語法篇之基礎語法(一)Kotlin
- 帶讀 |《Go in Action》(中文:Go語言實戰) 語法和語言結構概覽(三)Go