編者按 :大資料時代下各種文字資訊爆炸,傳統的文字分析處理工作逐漸被計算機取代。文字資料量越大,其中所包含的錯誤的總數也越多,透過校對工作來糾正文字中的錯誤顯得尤其重要。傳統的校對主要依賴人工,透過人來發現和糾正文字中的錯誤,人工校對效率低、強度大、週期長,顯然已經不能滿足目前文字快速增長的需求,智慧校對系統在這個背景下應運而生。 伴隨著機器學習和自然語言處理技術的發展,使用演算法模型解決文字校對問題成為可能。智慧校對系統的研發,極大地減輕了審校人員的工作負擔,讓從前繁重的工作模式變得簡單、輕鬆和高效。本文將從校對中遇到的技術問題出發,帶領各位讀者瞭解業界校對的技術方法,以及百分點認知智慧實驗室在校對演算法方面的技術原理和實踐經驗。
本文作者:易顯維 蘇海波
一、校對系統的意義及難點
1. 校對系統意義
文字校對系統的研發成功有著重要的現實意義:
(1)文字自動校對能大大降低人工校對的成本,提高校對效率和質量。
(2)文字校對使得資訊檢索變得準確高效,只有正確的文字輸入才能有效提高資訊檢索能力。
(3)具有廣泛的應用領域和重要應用價值,可以用於文字編輯審稿、智慧寫作、智慧搜尋、智慧問答系統等領域。
(4)文字校對是很多自然語言處理任務的基礎,例如文字來源於OCR或者語音系統識別之後的結果,就需要先透過校對演算法將其轉化為正確的輸入文字,才能進行後續的自然語言處理分析。
2. 校對系統的難點
文字自動校對是自然語言處理的主要應用領域之一,也是自然語言處理領域的研究難題。難點主要體現在:
(1)真實錯誤樣本分佈未知。該問題和其他自然語言處理問題或者模式識別問題有很大差異。其他自然語言處理任務都有客觀存在的對應關係,即模型是靠識別固定的模式得到答案。但是在文字校對中,是從錯誤的句子或者詞語出發找到正確的句子和詞語,並不存在客觀的對應關係,只能說不同的校對工作者會得出不同的答案,該答案的最終判定和校對工作者的文化水平和知識結構相關。由於是“錯”找“對”,所以一個正確的字可能由於使用者輸入習慣不同產生不同的錯誤字,線上真實生產環境中的錯誤樣本資料集中,錯字到對字的分佈規律隨時都會發生變化,這讓基於獨立分佈假設的機器學習在這個問題上遇到了挑戰。
(2)領域範圍廣。由於公司業務服務於各行各業,所以校對中遇到的輸入文字含有各個領域的專有名詞,需要大量的專業知識詞典用於糾正來自不同行業的輸入使用者的輸入錯誤。另外在不同的專業領域內,語料的字元分佈差異很大,訓練模型時較難找到輸入訓練語料的分佈平衡性,即不同來源的語料應該分別輸入多少到模型中進行訓練。
(3)效能要求高。具體體現在召回率、準確率、模型推理速度。召回率是校對系統效能的主要評測依據,用於描述在真實發生的錯誤中有多少錯誤能夠透過演算法找出來。準確率是良好客戶體驗的重要保證,試想一個準確率低通篇都是誤報的系統必將極大地影響使用者使用時的感受和降低使用者使用的效率。模型推理速度快是系統服務客戶的重要要求,如果校對模型的速度慢,對於線上使用校對服務的使用者,體驗就會特別差。
3. 校對系統解決的問題
上文描述了文字校對演算法的難點,接下來我們將校對演算法要解決的問題可以簡單地分為以下幾個方面:
(1)錯別字:這個月衝值有優惠嗎?我這個月重置了話費?請幫我查木月的流量;
(2)字詞插入錯誤:《手機早晚日報》具體如何訂閱和收費;
(3)字詞刪除錯誤:為什麼我的卡又無緣無故的扣掉幾塊錢;
(4)詞性搭配錯誤:他很興致的回答了問題->他很有興致的回答了問題(副詞不能接名詞);
(5)關聯詞搭配錯誤:只有提高經濟實力,我們就能富國強民(“只有”只能搭配“才”, 不能搭配“就”);
(6)句型錯誤:透過這次學雷鋒活動,使我們受到了很大的教育(缺主語);
(7)語義搭配錯誤:漫天飛雪,他戴著帽子和皮靴出門了(皮靴不能戴);
(8)標點符號錯誤。
由於漢字是象形文字,要將漢字這種字符集非常大的文字錄入到計算機,需要人為設計的編碼來表示,具體表現為各種輸入法。常用的輸入法主要是漢語拼音輸入法和五筆輸入法。
例如在漢語拼音輸入法中,一個拼音對應多個同音或者近音字,輸入過程中會因為粗心導致輸入錯誤,這就成了漢語錯字的主要來源。另外漢字中還有很多漢字形狀相近或者寫法相似,這表現為在五筆輸入法中可能相近的漢字表示為同一編碼,這造成了另外一個錯字主要來源,即形近錯別字。還有意義相近的漢字或漢語詞語,被誤用的成語習語也是校對任務中的高頻錯誤。
二、業界主流解決方案
雖然國內關於中文文字校對的研究起步較晚,但目前不少的大學、科研機構和公司都已經開始投入資源來研究中文文字校對的相關技術和解決方案。他們大多采用的是字、詞級別上的統計方法,也有一些語義級層面的探討。
1. 解決思路
1.1 規則的思路
將中文文字校對分為兩個步驟來解決:錯誤檢測和錯誤改正。
錯誤檢測:透過分詞工具對中文進行分詞,由於句子中含有錯別字,所以分詞的過程中會有切分錯誤的情況,透過散串來完成錯誤檢測,形成錯誤位置候選。
錯誤改正:遍歷所有疑似錯誤的位置,使用音近、形近詞典來替換原詞,透過語言模型計算新句子的困惑度,透過排序得到最優糾正詞。
1.2 深度模型的思路
為了減少規則方法中的人工知識庫構建成本,採用端到端的深度模型來完成錯誤句子到正確句子的改正是一個看似不錯的解決方案。常用的模型有BERT的MLM任務,Seq2Seq的翻譯任務。他們的本質都是利用深度模型的強擬合能力,對文字進行向量表徵,使得在特定上下文語境中,相對正確的字或詞的排序儘量靠前。
2. 學術界方案介紹
2.1 HANSpeller++
HANSpeller框架分為檢測和糾錯兩部分,主要包含兩個工作:對輸入句子生成候選集和對候選集進行排序。框架流程圖如下所示。
圖1. HANSpeller框架圖
在資料處理階段,透過將長句子根據標點切分為短句,並且去掉非漢字內容,基於SIGHAN-2013、SIGHAN-2014資料集構建混淆集。在候選生成階段,利用混淆集生成相應的候選集。根據同音、近音、形近等特徵篩選候選集,保留權重較高的候選。權重計算方法如下,其中P(c)表示在c這個字元可能出錯的機率,edit_dist表示編輯距離:
在候選結果排序階段,透過初篩、精篩和排序三個步驟完成。初篩時用到的特徵有n-gram特徵、詞典統計特徵、編輯距離特徵以及分詞特徵,利用這些特徵進行邏輯迴歸分類預測。精篩時,用外部依賴資料、搜尋引擎的搜尋結果和英文翻譯結果進行篩選。兩次篩選後,保留最有可能的top5候選結果。最後採用ngram語言模型進行最終排序。
2.2 FASPell
傳統的中文拼寫糾錯主要存在兩個問題,糾錯平行語料不足和混淆集不夠充分。
FASPell提出了一種解決中文拼寫錯誤的新正規化,拋棄了傳統的混淆集轉而訓練了一個以BERT為基礎的深度降噪編碼器DAE(denoising autoencoder)和以置信度-字音字形相似度為基礎的解碼器CSD(confidence-similaritydecoder),可以有效緩解以上兩點不足。模型架構及用例展示如下圖:
圖2. FASPell框架圖
具體來說,利用預訓練模型使用DAE來對BERT進行預訓練,mask句子中每個位置的字元獲取候選集,透過上下文置信度資訊,和字元相似度構建了一個解碼器CSD去對句子中的每一個字元的候選集進行篩選。
對BERT的預訓練策略與原始的BERT預訓練方法一致,對句子按15%的機率進行掩碼。在微調階段,對存在錯誤的句子採用兩種方式進行FINE-TUNE:①給定句子,將其中的錯誤字全部使用這個字本身進行掩碼,並將預測目標設定為正確字。②對部分正確的字也使用字本身進行掩碼,並將預測目標設為字本身。
FASPell透過上下文的confidence score和字音的similarity score聯合打分進行過濾。在SIGHAN13、14、15資料集上的實驗,糾錯均達到SO他的效果。
2.3 MacBERT:MLM as correction BERT
MacBERT對BERT的改進工作分為三個方面:①使用全詞掩蔽和N-Gram掩蔽策略來選擇候選tokens進行掩蔽,從單字元到4字元的掩蔽百分比為40%、30%、20%、10%。②使用意思相近的單詞來替換[MASK] token掩蔽的單詞,從而緩解預訓練任務與下游微調任務不一致情況。③使用ALBERT提出的句子順序預測(SOP)任務替換BERT原始的NSP任務,透過切換兩個連續句子的原順序建立負樣本。
Macbert在多項中文任務中的良好表現顯示了特定預訓練策略的重要性,而且該模型在校對任務中也有不錯的效果。
2.4 SpellGCN
基於深度學習的預訓練模型往往是建立在字詞級別的語言建模上,而中文文字校對需要考慮字音字形等特徵,而不僅僅是語義層面特徵。為了充分利用錯別字中的拼音相似和字形相似的特徵,前文所述的FASPell的做法是在後處理階段利用這些特徵資訊作為排序依據。而SpellGCN的做法是在預訓練階段將字音字形特徵進行融合,使得大規模的無監督預訓練過程和中文的校對任務特徵能有效結合。模型架構圖如下。
SpellGCN的突出特點在於透過構建圖神經網路的方式,構建了拼音相似圖和字形相似圖。透過卷積操作和注意力機制來實現字音字形的特徵動態提取。在經過圖卷積和注意力合併的操作後,SpellGCN能夠捕獲字元相似性的知識。
圖3. SpellGCN模型框架
2.5 PLOME
中文糾錯主要有近音錯誤和形近錯誤兩個型別錯誤。PLOME為騰訊在ACL會議上提出的建模漢字在發音和字形上的相似性預訓練模型。該預訓練模型模型架構如下:
圖4. PLOME框架圖
為了建模漢字在發音和字形上的相似性,模型中引入了兩個GRU子網路分別計算漢字的拼音向量和筆畫向量,下圖展示了這兩個子網路的計算過程。模型的編碼層和BERT base結構完全相同。
圖5. PLOME中的GRU建模字音和字形
三、檢錯-糾錯技術方案
我們的校對技術方案不同於許多“端到端”的校對方法,為了保證校對的高準確率,整體主要分為兩步,即檢錯步和糾錯步。檢錯步,目的是檢測出文章所存在的錯誤位置,糾錯步,旨在將檢錯步的檢錯結果予以矯正,其中檢錯步過程尤為重要,決定著系統整體召回和準確的上限。
基礎字詞錯主要可以劃分為兩種,一種是真詞錯誤,即詞與詞之間的錯誤,例如“截止”->“截至”,“可以”->“刻意”,其次是非詞錯誤,即由字錯誤從而導致詞錯誤,例如“要求”->“邀求”,“秸稈”->“秸杆”。透過我們對真實錯誤分析後發現,單字真詞錯誤和非詞錯誤幾乎佔據大部分錯誤樣本,其中同音,近音,形近錯誤佔據大多數。
1. 基於有監督學習的混淆集構建方法
由於真實的錯誤樣本十分匱乏,在檢錯模型的訓練設計中,我們主要採用人造錯誤樣本來訓練。然而,現有模型的學習能力都是有限的,錯誤空間不可無序擴張。由上述內容可知,人造錯誤樣本的設計必須儘可能擬合真實的錯誤情況,錯誤型別應儘量滿足同音,近音,形近的要求,針對此要求,我們設計了一種基於機器學習的人造混淆方法。
步驟一:收集真實錯誤
收集錯別字-建議混淆對,並統計其頻率,篩選高頻錯誤混淆對(語料中錯誤頻率大於50為高頻錯誤)並人工校對得到真實錯誤分佈的混淆集。例子如下:
表1. 混淆集真實錯誤分佈
步驟二:構造漢字混淆對特徵
此步驟的任務定義為,選取漢字集合C,有任意的漢字Ca和漢字Cb,且CaC,CbC,構建GetFeature函式,使得GetFeature(Ca,Cb)的返回結果為Ca和Cb的混淆特徵。
對每個漢字混淆對構建如下特徵:
表2. 漢字混淆對的特徵集合
特徵描述和其構造方法如下:
最長拼音字元子串佔比:此特徵主要描述兩個字在拼音拼寫上的相似的程度。
聲母是否相同:此特徵主要衡量兩個字聲母是否相同。
韻母是否相同:此特徵主要衡量兩個字韻母是否相同。
字型結構是否相同:中文漢字屬於象形文字,每個字都其字型結構。此特徵主要描述兩個字在字形上是否相似。
最長筆畫字元子串佔比:此特徵主要描述兩個字在字形上是否相似。
混淆對“白-百”示例特徵如下:
表3. 示例的特徵取值
步驟三:用混淆對特徵構造混淆集
依靠步驟一中獲得的真實使用者錯誤分佈資料集,和步驟二中的特徵。利用機器學習對特徵和錯誤分佈之間的關係進行建模,其中真實使用者錯誤的混淆對為正例,其它則為負例。機器學習模型訓練完成後,對窮舉的每個漢字混淆對特徵進行預測。預測結果為正例的則加入混淆集合中。具體流程如下:
圖6. 混淆集構建流程圖
2. 檢錯和糾錯技術方案
由於校對問題是從“錯誤”的文字去找到“正確”的文字,所以存在訓練的樣本是是不充分的。舉例說明,訓練樣本中存在“住”到“主”的錯誤對,但是真實錯誤中可能出現“柱”到“主”的情況,為了能夠找到“主”字潛在的混淆集,所以採用了從已有混淆集挖掘潛在相似字的機器學習方法。
基於上述構建的混淆集產生的樣本,我們構建如下模型訓練方案。
檢錯步訓練:利用人造錯誤樣本,將bert預訓練模型用於sequence classification的二分類任務。其中負例為無錯,正例為有錯。
糾錯步訓練:利用人造錯誤樣本,將bert預訓練模型用於LM任務,其中只對檢錯有效的地方計算loss。不用MLM任務的原因是,原字雖為錯字,但是對正確字的預測過程具有啟發資訊,所以不用MASK token來替代原字。
圖7. 檢錯-糾錯訓練整體流程圖
整體系統推理過程如下:
第一步:利用上述檢錯步訓練後的bert對文章進行檢錯。
第二步:基於第一步檢錯結果,利用上述糾錯步訓練的bert對錯誤位置進行糾錯。
圖8. 檢錯-糾錯推理過程示意圖
3. 生成對抗方法在預訓練模型中的應用
經過研究,我們可以將業界的演算法基本分為以下兩種技術路線:
(1)端到端的機器翻譯方法;
(2)檢錯、召回和排序方法。
端到端的機器翻譯方法存在的問題是需要大量的樣本來訓練模型,並且模型解釋性差、不可以定向最佳化,所以我們採用了第二種方式。但是第二種方式同樣存在著一些弊端:
(1)模型之間互相獨立,pipeline傳遞誤差。
(2)召回策略不充分,各種人工召回策略並不足以召回正確的字。
(3)檢錯效果存在效能天花板,影響到後續模型的表現。
(4)排序效果不佳,正確的字不一定能夠透過預訓練模型排到錯誤的字的前面。
為了解決以上的問題,我們提出了一種基於生成對抗網路預訓練模型的校對演算法。
構建模型如下:
圖9. 對抗訓練的原理示意圖
取生成對抗網路的Discriminator負責檢錯任務,Generator負責LM任務,其中Generator由於和Discriminator共享Embedding,我們只需要取得Generator底層若干transformer即可,最大程度複用並節省模型引數。此方法將檢錯模型和召回模型合為一體,由於生成對抗預訓練的方法使得模型在預訓練階段就具有了判別輸入語句錯誤的位置的能力,所以只需要提供大量未標記語料和少量標記語料即可完成訓練。
4. 實驗效果
根據構建的測試集,我們評測了本技術方案的效果,準確率在70%以上,召回率在75%以上,千字平均耗時在2s左右。
總結
本文介紹了文字校對技術所解決的問題和存在的難點,還講解了業界的演算法模型,並分析了當前各種方法可能存在的一些問題。為了解決這些問題,我們提出了兩點改進:
(1)透過建模少量真實混淆集,對所有漢字進行相似度排序的方法預測真實生產環境中可能存在的混淆集,使得標記資料的成本大為降低。
(2)使用生成對抗網路的訓練方法訓練預訓練模型,使得檢錯和召回模型能夠共享權值和同步訓練,讓模型在預訓練階段具有一定的檢錯和召回能力。
上述兩點改進提升了校對演算法的準確率和召回率,在實際使用中取得了不錯的效果,提升了使用者使用文字校對系統的體驗。
參考資料
[1] Xiong J , Qiao Z , Zhang S , et al. HANSpeller: A UnifiedFramework for Chinese Spelling Correction[C]// 臺灣計算語言學學會。臺灣計算語言學學會, 2015:1-21.
[2] Hong Y , Yu X , He N , et al. FASPell: A Fast, Adaptable,Simple, Powerful Chinese Spell Checker Based On DAE-Decoder Paradigm[C]//Proceedings of the 5th Workshop on Noisy User-generated Text (W-NUT 2019).2019.
[3] Cui Y , Che W , Liu T , et al. Revisiting Pre-Trained Modelsfor Chinese Natural Language Processing[J]. 2020.
[4] Shulin Liu, Tao Yang, Tianchi Yue, FengZhang, Di Wang PLOME: Pre-training with Misspelled Knowledge for ChineseSpelling Correction.2021
[5] Xingyi Cheng∗ Weidi Xu∗ Kunlong ChenShaohua Jiang Feng Wang Taifeng Wang Wei Chu Yuan Qi .SpellGCN: IncorporatingPhonological and Visual Similarities into Language Models for Chinese SpellingCheck.2020
[6] 劉亮亮.江蘇人民出版社.《漢語文字自動校對研究》