2022蜜度中文文本智能校對冠軍方案分享

作者:章嶽,文章摘自Datawhale

近期參加了2022 蜜度中文文本智能校對大賽,經過2個(ge) 月的比賽,在600餘(yu) 名參賽者中取得了第一名的成績,相關(guan) 技術也已在釘釘文檔等產(chan) 品落地應用借此機會(hui) ,筆者想和大家分享下對中文文本糾錯任務的一些看法。

2022文本智能校對冠軍(jun) 方案!已落地!

0. 團隊介紹

筆者所在的團隊是蘇州大學-阿裏達摩院聯隊,成員包括章嶽、蔣浩辰、章波、包祖貽四位,指導老師是李正華和李辰老師。

團隊成員擁有自然語言處理方向的豐(feng) 富研究經驗,特別是對中英文的拚寫(xie) 、語法糾錯有長期的研究和積累,相關(guan) 研究成果已經在自然語言處理頂級學術會(hui) 議EMNLP、NAACL等發表, 獲得過CGED、CTC等糾錯評測的多次冠軍(jun) ,並持續將研究成果開源開放,如MuCGEC數據集和模型庫等。除了科研成果外,我們(men) 也將相關(guan) 技術落地應用,為(wei) 釘釘文檔、阿裏郵箱等多款產(chan) 品提供文本糾錯功能。

2022文本智能校對冠軍(jun) 方案!已落地!

1. 任務簡介

中文文本糾錯任務作為(wei) 中文自然語言處理的一項較為(wei) 重要的下遊任務,在搜索、教育、新聞等領域都有著落地的價(jia) 值。在英文上,文本糾錯任務已經得到了廣泛的研究,已有Grammarly等成熟的文本糾錯工具。而由於(yu) 中文的複雜性與(yu) 自由性,中文文本糾錯的研究距離實際落地使用還有很大的距離,因此仍有著廣闊的研究空間。

中文文本糾錯任務的形式非常簡單:給定一個(ge) 中文句子,糾正其中可能含有的各種類型的錯誤,包括但不限於(yu) 拚寫(xie) 、語法和語義(yi) 錯誤。比如下麵的例子:

{ "source": "精娘啤酒+漢堡,這對CP磕了磕了!", "target": "精釀啤酒+漢堡,這對CP磕了磕了!", "type": "negative", "id": 2600372 },

雖然形式簡單,但該任務難點眾(zhong) 多,比如:

1)訓練數據稀缺:真實的糾錯訓練數據相較於(yu) 其他常見的生成任務(如機器翻譯、摘要等)難獲得很多,首先是語病在日常文本中非常稀疏,其次需要標注者擁有良好的語文背景;

2)中文表達靈活:不像英語等語言有著大量易於(yu) 糾正的詞形錯誤(單複數、人稱、時態),中文的表達博大精深,很多錯誤非常隱晦且難於(yu) 修改,需要豐(feng) 富的語法知識,現階段的模型很難處理。

與(yu) 傳(chuan) 統的中文糾錯評測(NLPCC18,CGED係列)不同,本次賽事評測主要麵向的是漢語母語者文本,更貼近真實場景。經過對主辦方提供的開發集進行仔細觀察後,我們(men) 總結了本次數據的一些特點:

  • 文本來自於互聯網,主題多樣,包括科技、教育、新聞等主題。
  • 數據中命名實體多(如地名、人名、賬號名)、口語化、成語多、句子較長等,加大了糾錯的難度。
  • 常見錯誤類型:拚寫錯誤(高頻)、字詞冗餘(高頻)、字詞缺失(中頻)、字詞誤用(低頻)、語義錯誤(句式雜糅等,低頻)。

此外,本次評測,主辦方僅(jin) 提供了約3000條真實數據用於(yu) 模型訓練,因此合適的數據增強策略顯得尤為(wei) 重要。

2. 模型策略

常見的中文文本錯誤,大致可以分為(wei) 三類:拚寫(xie) 錯誤、語法錯誤(比如詞序,詞語誤用)和語義(yi) 錯誤(比如句式雜糅和語義(yi) 重複)。

由於(yu) 這三類錯誤的差異較大,我們(men) 在以往的實踐中發現很難用一個(ge) /一種模型就能較好地解決(jue) 所有類型的錯誤,因此我們(men) 使用了一個(ge) 三段式流水線糾錯的係統,如下圖所示:

2022文本智能校對冠軍(jun) 方案!已落地!

2.1 拚寫糾錯

針對拚寫(xie) 錯誤,我們(men) 使用了基於(yu) BERT的序列標注模型加以解決(jue) 。當將BERT應用到拚寫(xie) 糾錯任務時,我們(men) 利用BERT獲取句子中每個(ge) 字符的語義(yi) 向量表示,將其傳(chuan) 入一個(ge) 全連接分類器,輸出端的詞表為(wei) 常見字符。

我們(men) 也額外嚐試了其他最新中文拚寫(xie) 糾錯模型(如Realise[1]等),發現在同等數據量下,考慮了字音字形等多模態信息的拚寫(xie) 糾錯模型確實能獲得更好的性能。但複雜的模型往往需要更大的訓練/推理開銷,而我們(men) 發現在scaling up訓練集規模後,單純的BERT模型也可以取得非常優(you) 異的效果。因此為(wei) 了加速訓練,我們(men) 仍然隻使用了最簡單的BERT+Softmax的範式。

在模型訓練方麵,我們(men) 采用了基於(yu) 混淆集生成的大規模人造語料預訓練加小規模真實數據微調的方法。此外,我們(men) 發現:Google提供的BERT官方詞表中缺失了一些常見的中文標點和漢字,這可能導致一些常見詞無法生成。因此我們(men) 又挑選了一部分常用標點、漢字(主要來自中文Gigaword和Wikipedia)對其進行了補全。

在解碼方麵,我們(men) 發現模型可能會(hui) 出現不恰當的修改,甚至會(hui) 改變句子原義(yi) 。針對上述問題,我們(men) 在模型解碼時引入字音字形信息和混淆集信息作為(wei) 約束,使得模型在每個(ge) 位置不但要考慮候選字生成的概率,也要考慮是否和原字匹配。具體(ti) 做法是:模型最終選取結果的依據是BERT輸出得分和字符相似度得分的加權和。

2.2 語法糾錯

語法糾錯方麵,我們(men) 使用了序列到編輯(Sequence-to-Edit,Seq2Edit)和序列到序列(Sequence-to-Sequence,Seq2Seq)兩(liang) 類模型,並且采用編輯級別投票的方式對二者進行集成。相關(guan) 模型的代碼已經開源在:

https://github.com/HillZhang1999/MuCGEC

2022文本智能校對冠軍(jun) 方案!已落地!

2.2.1 Seq2Edit

基於(yu) Seq2Edit的語法糾錯模型已經被廣泛應用在中英文語法糾錯任務中,特點是速度快(非自回歸),修改精度高。本次評測,我們(men) 使用了Grammarly開源的GECToR[2]。

GECToR模型本質上是一個(ge) 序列標注模型,它的解碼空間是插入、刪除、替換等編輯操作。通過並行預測編輯並將其應用於(yu) 原句子,GECToR模型能夠完成長度可變的語法糾錯。上述過程也可以多輪迭代進行,從(cong) 而進一步提升修改效果。

2.2.2 Seq2Seq

基於(yu) Seq2Seq的模型采用了目前最常用的Transformer結構,目標是直接將病句“翻譯”為(wei) 正確句子。特別地,我們(men) 使用了預訓練語言模型對Seq2Seq模型進行初始化。

本次評測中,我們(men) 使用了複旦開源的Chinese-BART-Large模型[3],並對其進行了適配和優(you) 化(主要是融入了一些外部知識,相關(guan) 工作會(hui) 在近期開源),發現Seq2Seq模型由於(yu) 能夠充分利用語言模型知識、修改靈活,在中文糾錯任務上表現得尤為(wei) 優(you) 異。

在相同訓練設置下,我們(men) 發現Seq2Seq大約優(you) 於(yu) Seq2Edit結構5個(ge) F值,但Seq2Edit模型推理速度約為(wei) Seq2Seq模型的20倍以上。

我們(men) 最近也上傳(chuan) 了一個(ge) 可供測試的Seq2Seq中文糾錯demo,效果還是不錯的:

https://modelscope.cn/models/damo/nlp_bart_text-error-correction_chinese/summary

2.2.3 模型集成

我們(men) 在之前的研究中發現[4],Seq2Edit和Seq2Seq模型針對不同類型的錯誤有著各自的長處,因此集成二者能夠取得非常優(you) 異的效果。在本次評測中,我們(men) 使用一套自適應閾值的編輯級別集成方式,具體(ti) 的流程為(wei) :

  1. 采用編輯抽取工具[5],將所有糾錯編輯以及錯誤類型抽取出來;
  2. 對於每種類型的編輯,設置一個閾值,如果做出編輯的模型個數超過該閾值,則保留此編輯;
  3. 將保留的編輯,重新映射到原句中,得到糾錯結果。

實際比賽中,我們(men) 集成了6個(ge) Seq2Seq和6個(ge) Seq2Edit模型,每個(ge) 模型通過替換隨機種子得到。針對一些模型本身糾錯精確度較高的錯誤類型,如拚寫(xie) 錯誤和詞序錯誤,我們(men) 會(hui) 降低集成的閾值來提升召回度;

而對於(yu) 一些精確度較低的錯誤類型,比如詞語缺失類錯誤,我們(men) 會(hui) 提升集成的閾值。我們(men) 發現,最近NAACL22[6]的一篇文章和我們(men) 的思路相近,不過他們(men) 使用了一個(ge) 邏輯回歸模型來學習(xi) 這一閾值,效果理論上應該會(hui) 更優(you) 。

此外,我們(men) 發現,單個(ge) 模型很容易對命名實體(ti) 進行誤糾,例如人名、地名等,但是集成模型可以很好地緩解這一現象,因為(wei) 模型對於(yu) 命名實體(ti) 的修改往往很不確定,導致這些修改較容易在集成時被過濾掉。

實際評測中,我們(men) 發現該集成方法可以提升性能接近10個(ge) F1值。

2.3 語義錯誤

我們(men) 通過網絡爬蟲爬取了互聯網上大量的語義(yi) 錯誤相關(guan) 問題,如:“大約...左右是病句嗎”,抽取出其中的語義(yi) 錯誤模板並擴充為(wei) 正則表達式形式“大約.*左右”。

我們(men) 為(wei) 此類模板定義(yi) 了兩(liang) 種簡單的修改方式,刪除左側(ce) 詞語和刪除右側(ce) 詞語,並且利用預訓練語言模型來自動確定修改動作,最後積累了1000餘(yu) 個(ge) 模板。相關(guan) 模板和方法詳細介紹已經開源在:

GitHub - HillZhang1999/gec_error_template: Automatically Mining Error Templates for Grammatical Error Correction

2.4 後處理Trick

此外,通過對本次評測數據的觀察,我們(men) 也額外提出了一些後處理的小Tricks,如:

  • 結果統一為簡體;
  • 過濾掉非中文修改,如英文和標點的修改;
  • 成語詞表:遍曆當前句子中的ngram短語片段,如果其同音詞在成語詞典中,則替換為同音成語(大約提升1個點);
  • 長文本切分:長文本先切為短句,糾錯後合並。

3. 數據策略

本次評測,主辦方僅(jin) 提供了3000條真實數據用於(yu) 訓練,即便加入開發集的4000條數據,總共也不過7000條訓練數據。對於(yu) data-hungry的生成模型來說,這些數據很明顯是不夠的,因此我們(men) 也在數據增強、清洗等方麵進行了一些嚐試。

3.1 數據增強

現階段,文本糾錯任務上的主流數據增強方式有兩(liang) 種:基於(yu) 規則和基於(yu) 反向翻譯(Back-Translation)。在我們(men) 之前的實踐中,發現反向翻譯的方法可以在中文上取得不錯的效果,但是其不可控並且需要訓練正反兩(liang) 個(ge) 模型,開銷很大,因此我們(men) 著重探索了基於(yu) 規則的數據增強方式。

3.1.1 單語語料

首先,我們(men) 需要挑選用於(yu) 加噪的單語語料。在本次評測的早期,我們(men) 在開發集上評估了團隊之前積累的係統,發現了幾個(ge) 有趣的現象:

  • 領域差異:用風格、分布不一致的單語語料(如維基百科語料)做數據增強,效果差強人意;
  • 語料的時效性問題:我們最早嚐試用一份大約7年前采集的互聯網語料作數據增強,發現訓練出來的模型,對本次評測數據裏的一些新詞、流行語很容易誤糾,比如將”黃碼“修改為”皇馬“,這是因為幾年前的語料中幾乎不存在”黃碼“這個詞語。

因此,我們(men) 選用了悟道語料[7]作為(wei) 本次評測加噪的單語語料,這份數據集采集自互聯網,主題多樣且采集時間很接近,能夠取得很好的效果。

3.1.2 加噪方式

我們(men) 首先對原句子進行分詞,然後對每10個(ge) 詞的片段隨機挑選1個(ge) 位置植入錯誤,這主要是為(wei) 了保留錯誤位置的上下文語義(yi) ,以及更符合漢語母語者文本錯誤稀疏的特點。加噪過程中,采樣的具體(ti) 概率分布依據從(cong) 比賽開發集中統計得到的近似分布確定。

具體(ti) 加噪操作如下表所示:

2022文本智能校對冠軍(jun) 方案!已落地!

其中,需要適用到以下詞表/混淆集資源,比如:

  • 混淆集:詞級別同音混淆集、字級別音近混淆集和字級別形近混淆集。詞級別同音混淆集的構建方法為:從語料中獲得所有中文詞語,並根據拚音是否相同對它們進行歸類,與此同時篩除低頻詞。字級別音近混淆集的構建方式與詞級別同音混淆集類似,但考慮了模糊音(如“zhang”和“zang”),並且過濾了生僻字。字級別形近混淆集的構建方法,主要依據的是FASpell工具中字形相似度計算模塊,保留了字形相似程度在0.8以上的字符,並過濾了生僻字。此外,我們也使用了一些開源混淆集對上述各混淆集進行擴充。
  • 真實分布:我們從主辦方開源的真實數據、二語者真實數據(如Lang8、HSK、MuCGEC)中,采集了替換、添加編輯的映射及其概率分布;
  • 近義詞:近義詞方麵,我們使用了大詞林、Hownet等中文語義知識庫。

我們(men) 發現,一份能夠基本覆蓋測試集錯誤映射的詞表/混淆集,對於(yu) 係統性能非常重要。因此,開發糾錯係統離不開資源構建等工程性工作。

3.2 迭代式數據清洗

我們(men) 發現,由於(yu) 單語語料采集自互聯網,本身就含有比例不低的各類文本錯誤,可能對訓練模型的結果產(chan) 生影響,因此我們(men) 使用了一種非常簡單的迭代式數據清洗方案。具體(ti) 的做法是:

  1. 對於單語語料X,我們先加噪生成偽數據Y,利用平行數據(X, Y)訓練得到模型S;
  2. 然後利用模型S對於X進行推理,得到糾正後結果X‘,此時仍然對X加噪得到偽數據Y’,利用平行數據(X‘, Y’)訓練新模型S‘;
  3. 反複迭代上述過程,直到獲得最終模型S_final。

上述做法的好處有兩(liang) 點,一個(ge) 是能不斷緩解原始單語數據中潛在噪音的影響,另一個(ge) 就是相當於(yu) 在做自知識蒸餾;實踐中我們(men) 發現上述方法(3次迭代)能夠提升模型性能2-3個(ge) 點。

4. 結果

參數設置上,我們(men) 對各模型的學習(xi) 率、Dropout率、Batch-size等參數進行了網格搜索。

拚寫(xie) 糾錯模型方麵,我們(men) 采用約2億(yi) 自造的偽(wei) 數據(第3節方法,僅(jin) 替換)進行預訓練,然後用主辦方提供的100萬(wan) 偽(wei) 語料過濾的拚寫(xie) 錯誤進行微調,最後用主辦方提供的真實數據過濾的拚寫(xie) 錯誤進行精調;

語法糾錯模型方麵,我們(men) 采用約1億(yi) 自造的偽(wei) 數據(第3節方法)進行預訓練,然後用主辦方提供的100萬(wan) 偽(wei) 語料進行微調,最後用主辦方提供的真實數據進行精調;

拚寫(xie) 糾錯和Seq2Edit模型,使用了阿裏的StructBERT以及哈工大的MacBERT、PERT作為(wei) Encoder,經線下測試效果優(you) 於(yu) 原始BERT和RoBERTa,因為(wei) 上述三模型在預訓練時均更貼近糾錯任務(StructBERT和PERT植入了亂(luan) 序噪聲,MacBERT考慮了詞義(yi) )。最後決(jue) 賽也是取得了不錯的成績:

2022文本智能校對冠軍(jun) 方案!已落地!

5. 總結與思考

本次比賽,雖然我們(men) 的係統取得了不錯的成績,但中文糾錯現有的研究距離真實的落地要求仍然相距甚遠。這裏簡單總結下這個(ge) 任務的難點與(yu) 後續可能的研究方向。

  • 領域遷移:在中文上,不同領域文本之間的錯誤分布、語言風格相距甚遠。二語者與母語者文本可以看做是不同領域,互聯網語料和學術文獻也可以看做是不同領域,甚至10年前的文本和今年的文本也可以看做是不同領域。在一個領域表現優異的係統在更換領域後效果往往下降嚴重。因此,如何高效、低成本地進行領域遷移值得研究。
  • 數據:中文上,真實的糾錯數據非常稀缺。一方麵需要學術界/工業界貢獻真實的數據(我們最近在天池上開放了一個新數據集,歡迎大家來打榜),另一方麵如何自動生成更貼近人類寫作時自然產生的語病文本,是一個非常重要的研究方向。這方麵近期的研究有利用MT模型自動生成糾錯語料[8]等。另外,我們發現,當偽數據級別達到億級後,繼續擴大數據規模對於糾錯性能提升微乎其微。而研究在數據增強時植入更豐富的錯誤模式,可能是緩解這一現象的方法之一。
  • 模型結構:Seq2Edit模型雖然非自回歸,速度快,但是受製於輸出時缺少依賴,並且編輯空間無法覆蓋所有修改動作,因此模型性能上限受到製約。Seq2Seq模型能夠進行任意的修改,但模型結構較為heavy,輸出時需要過度copy,存在一定的浪費,速度較慢。如何設計出更適合語法糾錯任務的模型結構,也是一個有挑戰的研究方向。
  • 知識驅動:中文上,相當一部分錯誤需要豐富的語言學知識(如句法)和邏輯知識先驗,而現有的模型即便經過預訓練,對於此類錯誤的修改能力也是非常弱的。為模型融入語言學知識,可能對複雜錯誤的修改有幫助。此外,超大模型(如清華最近提出的GLM-130B)可能對這些複雜錯誤具備一定的zero-shot修改能力,值得探索。

參考資料匯總

  1. https://github.com/DaDaMrX/ReaLiSe
  2. https://github.com/grammarly/gector
  3. https://huggingface.co/fnlp/bart-large-chinese
  4. Yue Zhang, Zhenghua Li, Zuyi Bao, Jiacheng Li, Bo Zhang, Chen Li, Fei Huang, and Min Zhang. 2022. MuCGEC: a Multi-Reference Multi-Source Evaluation Dataset for Chinese Grammatical Error Correction. In Proceedings of the 2022 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, pages 3118–3130, Seattle, United States. Association for Computational Linguistics.
  5. https://github.com/HillZhang1999/MuCGEC/tree/main/scorers/ChERRANT
  6. Muhammad Qorib, Seung-Hoon Na, and Hwee Tou Ng. 2022. Frustratingly Easy System Combination for Grammatical Error Correction. In Proceedings of the 2022 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, pages 1964–1974, Seattle, United States. Association for Computational Linguistics.
  7. https://data.wudaoai.cn/home
  8. Sun, Xin, Tao Ge, Shuming Ma, Jingjing Li, Furu Wei, and Houfeng Wang. "A Unified Strategy for Multilingual Grammatical Error Correction with Pre-trained Cross-Lingual Language Model." arXiv preprint arXiv:2201.10707 (2022).

【競賽報名/項目谘詢+微信:mollywei007】

上一篇

A-Level如何選課才最適合目標專業的申請?

下一篇

英鎊匯率下降是留學的好時機嗎?

你也可能喜歡

  • 暫無相關文章!

評論已經被關(guan) 閉。

插入圖片
返回頂部