
參與任務(wù)
【資料圖】
本次中文拼寫檢查的任務(wù)是檢測并糾正中文文本中的拼寫錯誤(Spelling Errors)。拼寫任務(wù)包括:音近,形近,音形兼近。特點是錯誤內(nèi)容與被替換內(nèi)容長度相同,這也意味著輸入語句與輸出語句的長度相同。
圖1音近字錯誤示例
在上述圖1描述的案例中,輸入句中的“干”是一處近音字的錯誤使用,應(yīng)被替換為正確的“趕”,從而得到輸出句子。圖2多字錯誤示例
這種任務(wù)在實際應(yīng)用中會遇到一些困難。1. OOV(out of vocabulary)的問題會嚴重影響模型效果。首先,模型不可能糾錯出沒有在訓(xùn)練中見過的表達方式;其次,模型會由于在訓(xùn)練中沒有見過相關(guān)實體而將他們錯糾。2. 如上圖2所示,當一個句子存在多處錯誤(糊涂兩個字都錯了),糾錯時會受到上下文的影響,也就是受到其他錯誤的影響導(dǎo)致難以糾錯成功。
糾錯系統(tǒng)
DATAGRAND如圖3所示,糾錯系統(tǒng)顧名思義是以一個系統(tǒng)流程的方式進行糾錯任務(wù)。我們的系統(tǒng)為串聯(lián)式,共有五個步驟。首先,我們對基礎(chǔ)模 型進行預(yù)訓(xùn)練和微調(diào),然后進行多輪糾錯式推理,第三步是使用訓(xùn)練好的困惑度模型進行誤召回檢查,第四步則是使用實體糾錯方法對于相關(guān)實體再次審核,最后使用精度很高但召回較低的Ngram語言模型進行再一次的補充。詳細內(nèi)容的介紹將會在該模塊下逐一展開。圖3拼寫糾錯方案流程圖
拼音編碼基礎(chǔ)模型
DATAGRAND圖4拼音編碼模型結(jié)構(gòu)
不同于常規(guī)的BERT模型,這次工作中,我們加強了模型對屬于文本拼音的識別,這樣可以針對性地面對近音字問題。如圖4所示,除了常規(guī)的Embedding Layer,也就是字符的編碼外,我們還加入了拼音輸入。我們借鑒了DCN (Wang et al., 2021)中采用的編碼方法,每一個拼音組合首先會被編碼成一個獨一無二的整數(shù),輸入模型中。而后,將拼音經(jīng)過Convolutional layer后的矩陣與文本經(jīng)過Embedding Layer之后的矩陣相加,再輸入到Attention中,以此強化拼音編碼在模型中的權(quán)重。不同于DCN中只在Embedding階段將拼音編碼與字符編碼相組合,我們借鑒了DeBERTa (He et al., 2020)中所提及的Disentangled attention方法,此過程將在每一次的Transformer encoder中進行重復(fù)。 在模型訓(xùn)練方面,我們借鑒cbert (Liu et al., 2021)中文拼寫檢查模型,在大規(guī)模語料中進行訓(xùn)練和微調(diào),對于無標注數(shù)據(jù)則采用混淆集自動生成數(shù)據(jù)的方法進行構(gòu)造。cbert是基于混淆集構(gòu)造的bert模型,由于我們需要大量未標注數(shù)據(jù)來擴大模型訓(xùn)練的數(shù)據(jù)量,使用混淆集來生成糾錯錯誤對變得尤為關(guān)鍵。而cbert所表述的方法與我們的要求一致,所以我們采用了該方法。 在除了拼音編碼的部分之外,模型其余構(gòu)造和base bert (Devlin et al., 2019)的結(jié)構(gòu)相同。共有12個transformer層,hidden units的大小為768,attention head共有12個。而輸出層則是拼接了一個輸入維度為768,輸出維度為單詞數(shù)量的全連接層。最終再使用Softmax計算出每個備選單詞的概率。多輪糾錯系統(tǒng)
DATAGRAND圖5多輪糾錯方案模型結(jié)構(gòu)
在中文拼寫檢查領(lǐng)域,解決同一句話存在多個錯誤的問題一直是一項重要的挑戰(zhàn)。其原因是存在錯誤的上下文會對預(yù)測產(chǎn)生影響。在之前的工作中,CRASpell (Liu et al., 2022)通過在訓(xùn)練時隨機在錯字周圍生成新的錯字來模擬單句多錯字的環(huán)境,但這種方法也會對數(shù)據(jù)的真實分布產(chǎn)生影響。一般的Transformer類糾錯模型,會在每個位置返回其概率最大的字,如果存在多個錯字,也將一并返回。而我們對此提出了多輪糾錯的方法。如上圖5所示,具體來說,如果一句話中存在多個錯誤,在模型預(yù)測階段,我們每次只選取預(yù)測錯誤概率最高的字,將其更正后放回原句,再進行第二輪的糾錯,直到不再出現(xiàn)新的錯誤的句子。
圖6多輪糾錯-每一輪糾錯結(jié)果示例
以上方圖6為例,第一輪糾錯模型將“珈”糾錯成“蒻”字,在第二輪再把“草頭弱”糾錯成“咖”,最后由于“咖”對于上下文的補充,本來無法糾出的“琲”也被以非常高的概率成功糾錯成“啡”。該方法將所有單句多錯字問題轉(zhuǎn)換成了單句單錯字問題,使得訓(xùn)練與預(yù)測的任務(wù)更具有一致性,分布更加統(tǒng)一,并且沒有丟棄任何輸入信息。
困惑度減少誤召回
DATAGRAND誤召回問題同樣是中文拼寫檢查中面臨的挑戰(zhàn)。由于糾錯任務(wù)本質(zhì)是選取位置上概率最高的字,所以會不時出現(xiàn)”用正確的字替換正確的字“的情況。我們通過對比句子修改前后的困惑度來減少誤召回的情況 (Bao, 2021)。
該方法主要由以下幾個步驟組成:
針對一句話,將每個字依次。例如:我在吃飯。將被MASK成四個sequence:在吃飯,我吃飯,我在飯,我在吃。
將上述四個句子經(jīng)過tokenizer編碼后輸入進模型。
返回所有字符對于原字的預(yù)測概率。一整句話也就變成:
為這組概率計算一個整體分數(shù):
故此,socre較大的句子較socre較小的句子更為不通順。
圖7句子困惑度示例
上述圖7中的例子顯示,模型將“我知道他很忙,沒有時間跟我聯(lián)系。”誤糾成“我知道他很忙,沒有時間跟我練習。”,由于輸入句本身就是通順的句子,所以困惑度并未因此上升,這個誤召回的情況也就可以被成功減少。該方法對于糾錯的整體性有著針對性的提高,會減少出現(xiàn)句子部分糾錯正確但未全部糾錯正確的情況,弊端是對于字符級別的糾錯性能可能帶來損失。
實體糾錯
DATAGRAND當錯字出現(xiàn)在諸如人名、地名、作品名的實體上時往往常規(guī)的糾錯模型方案很難達到優(yōu)異的表現(xiàn),因為糾錯模型的學習任務(wù)里不包含辨識實體的能力,而語料也不能覆蓋所有可能的實體名,所以不免會出現(xiàn)在實體上的錯糾或漏糾。
圖8實體糾錯示例
以上方圖8為例,第一條樣例是把日本的地名[繩文杉]錯糾成[繩文彬],這是因為模型不具備繩文杉是個地名的知識,而[文彬]的字詞組合在模型輸出中概率更高;第二條樣例是漏糾了[格得戰(zhàn)記]的錯誤,正確的作品名是[格德戰(zhàn)記],這是因為模型學習語料中沒有覆蓋這個作品名稱。為了解決實體誤糾、漏糾的問題,我們訓(xùn)練了命名實體識別模型,模型結(jié)構(gòu)是以Bert base (Devlin et al., 2019)加CRF的序列標注模型。預(yù)測時將實體詞典和命名實體識別模型進行一定策略排布。Ngram糾錯方法
DATAGRANDNgram方法采用無監(jiān)督方式糾錯,即通過無標注語料訓(xùn)練n元語言模型,使用n元語言模型進行錯誤檢測與糾正,通常認為ngram糾錯方式在準確率方面效果一般,但結(jié)合過濾策略可在一定程度上提升準確率,即增強語義信息方面的檢測,解其余方式帶來的誤糾。n元語言模型,一個語言模型構(gòu)建字符串的概率分布P(W),假設(shè)P(W)是字符串作為句子的概率,則概率由下邊的公式計算: 其中Wi表示句中第i個詞。P(W4|W1W2W3)表示前面三個詞是W1W2W3的情況下第四個詞是W4的概率。W1W2W3…Wi-1稱作歷史,如果W共有5000個不同的詞,i=3的時候就有1250億個組合,但是訓(xùn)練數(shù)據(jù)或已有語料庫數(shù)據(jù)不可能有這么多組合,并且絕大多數(shù)的組合不會出現(xiàn),所以可以將W1W2W3…Wi-1根據(jù)規(guī)則映射到等價類,最簡單的方式就是取Wi之前n-1個歷史,根據(jù)馬爾科夫假設(shè),一個詞只和他前面n-1個詞相關(guān)性最高,這就是n元語言模型: 我們在無監(jiān)督數(shù)據(jù)集中訓(xùn)練出該模型,并用比較高的閾值嚴格過濾結(jié)果,起到少召回的效果,在糾錯系統(tǒng)的最終步驟完成對結(jié)果的補足。數(shù)據(jù)集生成
DATAGRAND由于先前提到的out of vocabulary對于糾錯任務(wù)的嚴重影響,我們需要模型在盡可能大的數(shù)據(jù)集中進行訓(xùn)練。由此,需要使用混淆集在無標注數(shù)據(jù)下自動生成訓(xùn)練集。所有用到的混淆集和數(shù)據(jù)生成的代碼均在項目文件中開源。我們使用的混淆集具體說明如下。
數(shù)據(jù)生成
DATAGRAND針對未標注數(shù)據(jù)集,我們采用如下方法進行自動糾錯對的生成。
使用分詞算法將原句子進行分詞處理。
使用序列標注模型對所有詞語進行屬性標注
對被序列標注模型所標注出的人名,地名類詞語(如xx酒店,xx公司)進行不設(shè)錯處理,即不會被替換為錯字。同樣被過濾的還有非中文詞和停用詞。
隨機按比例抽取字詞進行改動。如該詞在混淆集中,15%不改動,15%概率隨機改動,70%概率在混淆集中隨機抽取改動。如該詞不在混淆集中則不改動。
混淆集
DATAGRAND關(guān)于近音字,在使用混淆集進行過濾任務(wù)時,我們采用以下算法進行近音字判定:考慮所有的多音字情況,當A字與B字所含拼音字母的差異小于2個,即判定為近音字。在使用混淆集進行生成任務(wù)時,則采用儲備的混淆集直接進行替換。 而關(guān)于近形字,由于先前對驗證集數(shù)據(jù)的分析,我們認為絕大多數(shù)的錯誤都是音近或音近形近的錯誤,所以在使用混淆集進行生成任務(wù)時,我們沒有使用形近字混淆集。而在過濾任務(wù)時則采用儲備的形近字混淆集進行過濾實驗結(jié)果
DATAGRAND依照比賽的要求,我們使用F1作為驗證模型效果的指標,其中包括糾錯F1和檢測F1,并且分為句子和字詞兩個級別,其數(shù)據(jù)將以省略百分號(*100)的形式呈現(xiàn)。以下表1為模型在YACLC-CSC的測試集上的表現(xiàn)。值得注意的是,字詞級別的Correlation F1只檢查被模型檢測到的錯誤,而不是所有錯誤。舉例來說,假設(shè)模型只修改了一處錯誤,且修改正確,字詞級別的Correlation F1將是100。表1各個方案實驗結(jié)果對比
在如上表格中,Baseline是官方提供的基線模型;PYbert為加入拼音編碼的基礎(chǔ)模型;Multi-round為多輪糾錯方法;Fluent為困惑度檢測方法;NER為實體糾錯方法;Ngram為Ngram糾錯方法。 在上述所有方法中,多輪糾錯方法會增加召回數(shù)量,找到部分原先無法糾錯的案例。困惑度檢測則會減少召回的數(shù)量,將部分錯誤糾正的句子刪除,但同時也會損失少量正確的句子。實體糾錯方法則是針對所有實體進行再一次審查,將未正確糾錯的實體正確糾錯,將錯誤糾錯的實體刪除,準確率較高。最后,Ngram方法將補充未找到的案例,其召回數(shù)量很低(在該1100個句子的案例中只召回88條),所以不會刪除錯誤召回。此方法的使用順序大體基于模型的準確率(precision)。準確率較高而召回率(recall)較低的方法將放置于系統(tǒng)尾部,保證其輸出的結(jié)果被刪改的概率更低。如圖所示,基礎(chǔ)的拼音模型在經(jīng)過生成數(shù)據(jù)的預(yù)訓(xùn)練和其余的微調(diào)過后,效果對比基線模型有大幅提升。而后,系統(tǒng)的每一個步驟都對Correlation F1的提升起到了幫助。技術(shù)落地方案
DATAGRAND圖9 達觀智能校對系統(tǒng)演示達觀智能校對系統(tǒng)依托于自然語言處理和光學字符識別等技術(shù),實現(xiàn)了不同格式的輸入文本的自動校對。該系統(tǒng)涵蓋了內(nèi)容糾錯、格式糾錯和行文規(guī)則糾錯等針對不同應(yīng)用場景下的糾錯模塊,其中內(nèi)容糾錯模塊包括拼寫糾錯、語法糾錯、領(lǐng)導(dǎo)人糾錯、符號糾錯和敏感詞檢測等多種校對模塊。目前達觀智能校對系統(tǒng)已支持公文領(lǐng)域、金融領(lǐng)域和通用領(lǐng)域的文本校對任務(wù),并且可針對不同領(lǐng)域的校對需求為客戶提供定制化的解決方案。系統(tǒng)概覽如上圖9所示。
本文的方法主要應(yīng)用在文本糾錯系統(tǒng)內(nèi)容糾錯中,包含別字糾錯和別詞糾錯。除此之外,達觀文本糾錯系統(tǒng)還支持語法糾錯,包括缺字,漏字,亂序,搭配錯誤等,可以進行輸入句與輸出句不同長度的糾錯。糾錯系統(tǒng)還針對公文等相關(guān)領(lǐng)域有增強策略。如領(lǐng)導(dǎo)人姓名,語錄,行政區(qū)錯誤等。除了對文字內(nèi)容的糾錯檢測,糾錯系統(tǒng)對文本格式也能進行修正,包括抬頭錯誤,文種錯誤,抄送機關(guān)錯誤等。總結(jié)
DATAGRAND文本提出了一種針對于中文拼寫檢查任務(wù)的糾錯系統(tǒng),并對其主要包含的五個部分進行了詳細描述。并給出了該系統(tǒng)所進行的實驗。在模型方面,我們提出了將拼音編碼進Transformer Encoder的模型結(jié)果;針對于單句多錯情況的多輪糾錯方法;更加考慮句子整體性的混淆度檢查方法;針對實體錯誤的實體糾錯方法等。在數(shù)據(jù)方面,我們針對多音字進行數(shù)據(jù)增強,通過混淆集在巨量語料中自動生成正確-錯誤句子對。我們對于該系統(tǒng)進行了相關(guān)實驗,驗證了每個部分的有效性。并且介紹了模塊在實際落地產(chǎn)品中的應(yīng)用。標簽: 拼音編碼 語言模型 模型結(jié)構(gòu)