參與任務(wù)?
中文拼寫檢查任務(wù)是中文自然語(yǔ)言處理中非常具有代表性和挑戰(zhàn)性的任務(wù),其本質(zhì)是找出文本段落中的錯(cuò)別字。這項(xiàng)任務(wù)在各種領(lǐng)域,如公文,新聞、財(cái)報(bào)中都有很好的落地應(yīng)用價(jià)值。而其任務(wù)的困難程度也賦予了它非常大的研究空間。達(dá)觀數(shù)據(jù)在CCL2022漢語(yǔ)學(xué)習(xí)者文本糾錯(cuò)評(píng)測(cè)比賽的賽道一中文拼寫檢查(Chinese Spelling Check)任務(wù)中取得了全國(guó)冠軍,賽道二中文語(yǔ)法糾錯(cuò)(Chinese Grammatical Error Diagnosis)任務(wù)中獲得了亞軍。本文基于賽道一中文拼寫檢查任務(wù)的內(nèi)容,對(duì)比賽過(guò)程中采用的一些方法進(jìn)行分享,并介紹比賽采用的技術(shù)方案在達(dá)觀智能校對(duì)系統(tǒng)中的應(yīng)用和落地。賽道二中文語(yǔ)法糾錯(cuò)的獲獎(jiǎng)方案已經(jīng)分享在達(dá)觀數(shù)據(jù)官方公眾號(hào)中。
本次中文拼寫檢查的任務(wù)是檢測(cè)并糾正中文文本中的拼寫錯(cuò)誤(Spelling Errors)。拼寫任務(wù)包括:音近,形近,音形兼近。特點(diǎn)是錯(cuò)誤內(nèi)容與被替換內(nèi)容長(zhǎng)度相同,這也意味著輸入語(yǔ)句與輸出語(yǔ)句的長(zhǎng)度相同。
圖1?音近字錯(cuò)誤示例
在上述圖1描述的案例中,輸入句中的“干”是一處近音字的錯(cuò)誤使用,應(yīng)被替換為正確的“趕”,從而得到輸出句子。
圖2多字錯(cuò)誤示例
這種任務(wù)在實(shí)際應(yīng)用中會(huì)遇到一些困難。1. OOV(out of vocabulary)的問(wèn)題會(huì)嚴(yán)重影響模型效果。首先,模型不可能糾錯(cuò)出沒(méi)有在訓(xùn)練中見過(guò)的表達(dá)方式;其次,模型會(huì)由于在訓(xùn)練中沒(méi)有見過(guò)相關(guān)實(shí)體而將他們錯(cuò)糾。2. 如上圖2所示,當(dāng)一個(gè)句子存在多處錯(cuò)誤(糊涂?jī)蓚€(gè)字都錯(cuò)了),糾錯(cuò)時(shí)會(huì)受到上下文的影響,也就是受到其他錯(cuò)誤的影響導(dǎo)致難以糾錯(cuò)成功。
糾錯(cuò)系統(tǒng)?
如圖3所示,糾錯(cuò)系統(tǒng)顧名思義是以一個(gè)系統(tǒng)流程的方式進(jìn)行糾錯(cuò)任務(wù)。我們的系統(tǒng)為串聯(lián)式,共有五個(gè)步驟。首先,我們對(duì)基礎(chǔ)模 型進(jìn)行預(yù)訓(xùn)練和微調(diào),然后進(jìn)行多輪糾錯(cuò)式推理,第三步是使用訓(xùn)練好的困惑度模型進(jìn)行誤召回檢查,第四步則是使用實(shí)體糾錯(cuò)方法對(duì)于相關(guān)實(shí)體再次審核,最后使用精度很高但召回較低的Ngram語(yǔ)言模型進(jìn)行再一次的補(bǔ)充。詳細(xì)內(nèi)容的介紹將會(huì)在該模塊下逐一展開。
圖3?拼寫糾錯(cuò)方案流程圖
拼音編碼基礎(chǔ)模型?
圖4?拼音編碼模型結(jié)構(gòu)
不同于常規(guī)的BERT模型,這次工作中,我們加強(qiáng)了模型對(duì)屬于文本拼音的識(shí)別,這樣可以針對(duì)性地面對(duì)近音字問(wèn)題。如圖4所示,除了常規(guī)的Embedding Layer,也就是字符的編碼外,我們還加入了拼音輸入。我們借鑒了DCN (Wang et al., 2021)中采用的編碼方法,每一個(gè)拼音組合首先會(huì)被編碼成一個(gè)獨(dú)一無(wú)二的整數(shù),輸入模型中。而后,將拼音經(jīng)過(guò)Convolutional layer后的矩陣與文本經(jīng)過(guò)Embedding Layer之后的矩陣相加,再輸入到Attention中,以此強(qiáng)化拼音編碼在模型中的權(quán)重。不同于DCN中只在Embedding階段將拼音編碼與字符編碼相組合,我們借鑒了DeBERTa (He et al., 2020)中所提及的Disentangled attention方法,此過(guò)程將在每一次的Transformer encoder中進(jìn)行重復(fù)。在模型訓(xùn)練方面,我們借鑒cbert (Liu et al., 2021)中文拼寫檢查模型,在大規(guī)模語(yǔ)料中進(jìn)行訓(xùn)練和微調(diào),對(duì)于無(wú)標(biāo)注數(shù)據(jù)則采用混淆集自動(dòng)生成數(shù)據(jù)的方法進(jìn)行構(gòu)造。cbert是基于混淆集構(gòu)造的bert模型,由于我們需要大量未標(biāo)注數(shù)據(jù)來(lái)擴(kuò)大模型訓(xùn)練的數(shù)據(jù)量,使用混淆集來(lái)生成糾錯(cuò)錯(cuò)誤對(duì)變得尤為關(guān)鍵。而cbert所表述的方法與我們的要求一致,所以我們采用了該方法。在除了拼音編碼的部分之外,模型其余構(gòu)造和base bert (Devlin et al., 2019)的結(jié)構(gòu)相同。共有12個(gè)transformer層,hidden units的大小為768,attention head共有12個(gè)。而輸出層則是拼接了一個(gè)輸入維度為768,輸出維度為單詞數(shù)量的全連接層。最終再使用Softmax計(jì)算出每個(gè)備選單詞的概率。
多輪糾錯(cuò)系統(tǒng)?
圖5?多輪糾錯(cuò)方案模型結(jié)構(gòu)
在中文拼寫檢查領(lǐng)域,解決同一句話存在多個(gè)錯(cuò)誤的問(wèn)題一直是一項(xiàng)重要的挑戰(zhàn)。其原因是存在錯(cuò)誤的上下文會(huì)對(duì)預(yù)測(cè)產(chǎn)生影響。在之前的工作中,CRASpell (Liu et al., 2022)通過(guò)在訓(xùn)練時(shí)隨機(jī)在錯(cuò)字周圍生成新的錯(cuò)字來(lái)模擬單句多錯(cuò)字的環(huán)境,但這種方法也會(huì)對(duì)數(shù)據(jù)的真實(shí)分布產(chǎn)生影響。一般的Transformer類糾錯(cuò)模型,會(huì)在每個(gè)位置返回其概率最大的字,如果存在多個(gè)錯(cuò)字,也將一并返回。而我們對(duì)此提出了多輪糾錯(cuò)的方法。如上圖5所示,具體來(lái)說(shuō),如果一句話中存在多個(gè)錯(cuò)誤,在模型預(yù)測(cè)階段,我們每次只選取預(yù)測(cè)錯(cuò)誤概率最高的字,將其更正后放回原句,再進(jìn)行第二輪的糾錯(cuò),直到不再出現(xiàn)新的錯(cuò)誤的句子。
圖6?多輪糾錯(cuò)-每一輪糾錯(cuò)結(jié)果示例
以上方圖6為例,第一輪糾錯(cuò)模型將“珈”糾錯(cuò)成“蒻”字,在第二輪再把“草頭弱”糾錯(cuò)成“咖”,最后由于“咖”對(duì)于上下文的補(bǔ)充,本來(lái)無(wú)法糾出的“琲”也被以非常高的概率成功糾錯(cuò)成“啡”。該方法將所有單句多錯(cuò)字問(wèn)題轉(zhuǎn)換成了單句單錯(cuò)字問(wèn)題,使得訓(xùn)練與預(yù)測(cè)的任務(wù)更具有一致性,分布更加統(tǒng)一,并且沒(méi)有丟棄任何輸入信息。
困惑度減少誤召回?
誤召回問(wèn)題同樣是中文拼寫檢查中面臨的挑戰(zhàn)。由于糾錯(cuò)任務(wù)本質(zhì)是選取位置上概率最高的字,所以會(huì)不時(shí)出現(xiàn)”用正確的字替換正確的字“的情況。我們通過(guò)對(duì)比句子修改前后的困惑度來(lái)減少誤召回的情況 (Bao, 2021)。
該方法主要由以下幾個(gè)步驟組成:
- 針對(duì)一句話,將每個(gè)字依次[MASK]。例如:我在吃飯。將被MASK成四個(gè)sequence:[MASK]在吃飯,我[MASK]吃飯,我在[MASK]飯,我在吃[MASK]。
- 將上述四個(gè)句子經(jīng)過(guò)tokenizer編碼后輸入進(jìn)模型。
- 返回所有[MASK]字符對(duì)于原字的預(yù)測(cè)概率。一整句話也就變成:[P1, P2, …, Pn]
- 為這組概率計(jì)算一個(gè)整體分?jǐn)?shù):
故此,socre較大的句子較socre較小的句子更為不通順。
圖7?句子困惑度示例
上述圖7中的例子顯示,模型將“我知道他很忙,沒(méi)有時(shí)間跟我聯(lián)系?!闭`糾成“我知道他很忙,沒(méi)有時(shí)間跟我練習(xí)?!?,由于輸入句本身就是通順的句子,所以困惑度并未因此上升,這個(gè)誤召回的情況也就可以被成功減少。該方法對(duì)于糾錯(cuò)的整體性有著針對(duì)性的提高,會(huì)減少出現(xiàn)句子部分糾錯(cuò)正確但未全部糾錯(cuò)正確的情況,弊端是對(duì)于字符級(jí)別的糾錯(cuò)性能可能帶來(lái)?yè)p失。
實(shí)體糾錯(cuò)?
當(dāng)錯(cuò)字出現(xiàn)在諸如人名、地名、作品名的實(shí)體上時(shí)往往常規(guī)的糾錯(cuò)模型方案很難達(dá)到優(yōu)異的表現(xiàn),因?yàn)榧m錯(cuò)模型的學(xué)習(xí)任務(wù)里不包含辨識(shí)實(shí)體的能力,而語(yǔ)料也不能覆蓋所有可能的實(shí)體名,所以不免會(huì)出現(xiàn)在實(shí)體上的錯(cuò)糾或漏糾。
圖8?實(shí)體糾錯(cuò)示例
以上方圖8為例,第一條樣例是把日本的地名[繩文杉]錯(cuò)糾成[繩文彬],這是因?yàn)槟P筒痪邆淅K文杉是個(gè)地名的知識(shí),而[文彬]的字詞組合在模型輸出中概率更高;第二條樣例是漏糾了[格得戰(zhàn)記](méi)的錯(cuò)誤,正確的作品名是[格德戰(zhàn)記](méi),這是因?yàn)槟P蛯W(xué)習(xí)語(yǔ)料中沒(méi)有覆蓋這個(gè)作品名稱。為了解決實(shí)體誤糾、漏糾的問(wèn)題,我們訓(xùn)練了命名實(shí)體識(shí)別模型,模型結(jié)構(gòu)是以Bert base (Devlin et al., 2019)加CRF的序列標(biāo)注模型。預(yù)測(cè)時(shí)將實(shí)體詞典和命名實(shí)體識(shí)別模型進(jìn)行一定策略排布。
Ngram糾錯(cuò)方法?
Ngram方法采用無(wú)監(jiān)督方式糾錯(cuò),即通過(guò)無(wú)標(biāo)注語(yǔ)料訓(xùn)練n元語(yǔ)言模型,使用n元語(yǔ)言模型進(jìn)行錯(cuò)誤檢測(cè)與糾正,通常認(rèn)為ngram糾錯(cuò)方式在準(zhǔn)確率方面效果一般,但結(jié)合過(guò)濾策略可在一定程度上提升準(zhǔn)確率,即增強(qiáng)語(yǔ)義信息方面的檢測(cè),解其余方式帶來(lái)的誤糾。n元語(yǔ)言模型,一個(gè)語(yǔ)言模型構(gòu)建字符串的概率分布P(W),假設(shè)P(W)是字符串作為句子的概率,則概率由下邊的公式計(jì)算:
其中Wi表示句中第i個(gè)詞。P(W4|W1W2W3)表示前面三個(gè)詞是W1W2W3的情況下第四個(gè)詞是W4的概率。W1W2W3…Wi-1稱作歷史,如果W共有5000個(gè)不同的詞,i=3的時(shí)候就有1250億個(gè)組合,但是訓(xùn)練數(shù)據(jù)或已有語(yǔ)料庫(kù)數(shù)據(jù)不可能有這么多組合,并且絕大多數(shù)的組合不會(huì)出現(xiàn),所以可以將W1W2W3…Wi-1根據(jù)規(guī)則映射到等價(jià)類,最簡(jiǎn)單的方式就是取Wi之前n-1個(gè)歷史,根據(jù)馬爾科夫假設(shè),一個(gè)詞只和他前面n-1個(gè)詞相關(guān)性最高,這就是n元語(yǔ)言模型:
我們?cè)跓o(wú)監(jiān)督數(shù)據(jù)集中訓(xùn)練出該模型,并用比較高的閾值嚴(yán)格過(guò)濾結(jié)果,起到少召回的效果,在糾錯(cuò)系統(tǒng)的最終步驟完成對(duì)結(jié)果的補(bǔ)足。
數(shù)據(jù)集生成?
由于先前提到的out of vocabulary對(duì)于糾錯(cuò)任務(wù)的嚴(yán)重影響,我們需要模型在盡可能大的數(shù)據(jù)集中進(jìn)行訓(xùn)練。由此,需要使用混淆集在無(wú)標(biāo)注數(shù)據(jù)下自動(dòng)生成訓(xùn)練集。所有用到的混淆集和數(shù)據(jù)生成的代碼均在項(xiàng)目文件中開源。我們使用的混淆集具體說(shuō)明如下。
數(shù)據(jù)生成?
針對(duì)未標(biāo)注數(shù)據(jù)集,我們采用如下方法進(jìn)行自動(dòng)糾錯(cuò)對(duì)的生成。
- 使用分詞算法將原句子進(jìn)行分詞處理。
- 使用序列標(biāo)注模型對(duì)所有詞語(yǔ)進(jìn)行屬性標(biāo)注
- 對(duì)被序列標(biāo)注模型所標(biāo)注出的人名,地名類詞語(yǔ)(如xx酒店,xx公司)進(jìn)行不設(shè)錯(cuò)處理,即不會(huì)被替換為錯(cuò)字。同樣被過(guò)濾的還有非中文詞和停用詞。
- 隨機(jī)按比例抽取字詞進(jìn)行改動(dòng)。如該詞在混淆集中,15%不改動(dòng),15%概率隨機(jī)改動(dòng),70%概率在混淆集中隨機(jī)抽取改動(dòng)。如該詞不在混淆集中則不改動(dòng)。
??混淆集??
關(guān)于近音字,在使用混淆集進(jìn)行過(guò)濾任務(wù)時(shí),我們采用以下算法進(jìn)行近音字判定:考慮所有的多音字情況,當(dāng)A字與B字所含拼音字母的差異小于2個(gè),即判定為近音字。在使用混淆集進(jìn)行生成任務(wù)時(shí),則采用儲(chǔ)備的混淆集直接進(jìn)行替換。而關(guān)于近形字,由于先前對(duì)驗(yàn)證集數(shù)據(jù)的分析,我們認(rèn)為絕大多數(shù)的錯(cuò)誤都是音近或音近形近的錯(cuò)誤,所以在使用混淆集進(jìn)行生成任務(wù)時(shí),我們沒(méi)有使用形近字混淆集。而在過(guò)濾任務(wù)時(shí)則采用儲(chǔ)備的形近字混淆集進(jìn)行過(guò)濾
實(shí)驗(yàn)結(jié)果?
依照比賽的要求,我們使用F1作為驗(yàn)證模型效果的指標(biāo),其中包括糾錯(cuò)F1和檢測(cè)F1,并且分為句子和字詞兩個(gè)級(jí)別,其數(shù)據(jù)將以省略百分號(hào)(*100)的形式呈現(xiàn)。以下表1為模型在YACLC-CSC的測(cè)試集上的表現(xiàn)。值得注意的是,字詞級(jí)別的Correlation F1只檢查被模型檢測(cè)到的錯(cuò)誤,而不是所有錯(cuò)誤。舉例來(lái)說(shuō),假設(shè)模型只修改了一處錯(cuò)誤,且修改正確,字詞級(jí)別的Correlation F1將是100。
表1?各個(gè)方案實(shí)驗(yàn)結(jié)果對(duì)比
在如上表格中,Baseline是官方提供的基線模型;PYbert為加入拼音編碼的基礎(chǔ)模型;Multi-round為多輪糾錯(cuò)方法;Fluent為困惑度檢測(cè)方法;NER為實(shí)體糾錯(cuò)方法;Ngram為Ngram糾錯(cuò)方法。在上述所有方法中,多輪糾錯(cuò)方法會(huì)增加召回?cái)?shù)量,找到部分原先無(wú)法糾錯(cuò)的案例。困惑度檢測(cè)則會(huì)減少召回的數(shù)量,將部分錯(cuò)誤糾正的句子刪除,但同時(shí)也會(huì)損失少量正確的句子。實(shí)體糾錯(cuò)方法則是針對(duì)所有實(shí)體進(jìn)行再一次審查,將未正確糾錯(cuò)的實(shí)體正確糾錯(cuò),將錯(cuò)誤糾錯(cuò)的實(shí)體刪除,準(zhǔn)確率較高。最后,Ngram方法將補(bǔ)充未找到的案例,其召回?cái)?shù)量很低(在該1100個(gè)句子的案例中只召回88條),所以不會(huì)刪除錯(cuò)誤召回。此方法的使用順序大體基于模型的準(zhǔn)確率(precision)。準(zhǔn)確率較高而召回率(recall)較低的方法將放置于系統(tǒng)尾部,保證其輸出的結(jié)果被刪改的概率更低。如圖所示,基礎(chǔ)的拼音模型在經(jīng)過(guò)生成數(shù)據(jù)的預(yù)訓(xùn)練和其余的微調(diào)過(guò)后,效果對(duì)比基線模型有大幅提升。而后,系統(tǒng)的每一個(gè)步驟都對(duì)Correlation F1的提升起到了幫助。
技術(shù)落地方案
圖9? 達(dá)觀智能校對(duì)系統(tǒng)演示
達(dá)觀智能校對(duì)系統(tǒng)依托于自然語(yǔ)言處理和光學(xué)字符識(shí)別等技術(shù),實(shí)現(xiàn)了不同格式的輸入文本的自動(dòng)校對(duì)。該系統(tǒng)涵蓋了內(nèi)容糾錯(cuò)、格式糾錯(cuò)和行文規(guī)則糾錯(cuò)等針對(duì)不同應(yīng)用場(chǎng)景下的糾錯(cuò)模塊,其中內(nèi)容糾錯(cuò)模塊包括拼寫糾錯(cuò)、語(yǔ)法糾錯(cuò)、領(lǐng)導(dǎo)人糾錯(cuò)、符號(hào)糾錯(cuò)和敏感詞檢測(cè)等多種校對(duì)模塊。目前達(dá)觀智能校對(duì)系統(tǒng)已支持公文領(lǐng)域、金融領(lǐng)域和通用領(lǐng)域的文本校對(duì)任務(wù),并且可針對(duì)不同領(lǐng)域的校對(duì)需求為客戶提供定制化的解決方案。系統(tǒng)概覽如上圖9所示。
本文的方法主要應(yīng)用在文本糾錯(cuò)系統(tǒng)內(nèi)容糾錯(cuò)中,包含別字糾錯(cuò)和別詞糾錯(cuò)。除此之外,達(dá)觀文本糾錯(cuò)系統(tǒng)還支持語(yǔ)法糾錯(cuò),包括缺字,漏字,亂序,搭配錯(cuò)誤等,可以進(jìn)行輸入句與輸出句不同長(zhǎng)度的糾錯(cuò)。糾錯(cuò)系統(tǒng)還針對(duì)公文等相關(guān)領(lǐng)域有增強(qiáng)策略。如領(lǐng)導(dǎo)人姓名,語(yǔ)錄,行政區(qū)錯(cuò)誤等。除了對(duì)文字內(nèi)容的糾錯(cuò)檢測(cè),糾錯(cuò)系統(tǒng)對(duì)文本格式也能進(jìn)行修正,包括抬頭錯(cuò)誤,文種錯(cuò)誤,抄送機(jī)關(guān)錯(cuò)誤等。
? ?總結(jié)? ??
文本提出了一種針對(duì)于中文拼寫檢查任務(wù)的糾錯(cuò)系統(tǒng),并對(duì)其主要包含的五個(gè)部分進(jìn)行了詳細(xì)描述。并給出了該系統(tǒng)所進(jìn)行的實(shí)驗(yàn)。在模型方面,我們提出了將拼音編碼進(jìn)Transformer Encoder的模型結(jié)果;針對(duì)于單句多錯(cuò)情況的多輪糾錯(cuò)方法;更加考慮句子整體性的混淆度檢查方法;針對(duì)實(shí)體錯(cuò)誤的實(shí)體糾錯(cuò)方法等。在數(shù)據(jù)方面,我們針對(duì)多音字進(jìn)行數(shù)據(jù)增強(qiáng),通過(guò)混淆集在巨量語(yǔ)料中自動(dòng)生成正確-錯(cuò)誤句子對(duì)。我們對(duì)于該系統(tǒng)進(jìn)行了相關(guān)實(shí)驗(yàn),驗(yàn)證了每個(gè)部分的有效性。并且介紹了模塊在實(shí)際落地產(chǎn)品中的應(yīng)用。
參考文獻(xiàn):
- Junshan Bao. nlp-fluency. https : / / github . com / baojunshan / nlp-fluency. 2021.
- Jacob Devlin et al. “BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding”. In: Proceedings of the 2019 Conferenceof the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, Volume 1 (Long and Short Papers). Minneapolis, Minnesota: Association for Computational Linguistics, June 2019, pp. 4171–4186. doi: 10.18653/v1/N19- 1423. url: https://aclanthology.org/N19-1423.
- DingminWang et al. “A Hybrid Approach to Automatic Corpus Generation for Chinese Spelling Check”. In: Proceedings of the 2018 Conferenceon Empirical Methods in Natural Language Processing (EMNLP). Brussels, Belgium, Nov. 2018.
- Pengcheng He et al. DeBERTa: Decoding-enhanced BERT with Disentangled Attention. 2020. doi: 10.48550/ARXIV.2006.03654. url: https://arxiv.org/abs/2006.03654.
- Piji Li and Shuming Shi. Tail-to-Tail Non-Autoregressive Sequence Prediction for Chinese Grammatical Error Correction. 2021. doi: 10.48550/ARXIV.2106.01609. url: https://arxiv.org/abs/2106.01609.
- Chao-Lin Liu et al. “Visually and Phonologically Similar Characters in Incorrect Simplified Chinese Words”. In: Coling 2010: Posters. Beijing, China: Coling 2010 Organizing Committee, Aug. 2010, pp. 739–747. url:https://aclanthology.org/C10-2085.
- Shulin Liu et al. “CRASpell: A Contextual Typo Robust Approach to Improve Chinese Spelling Correction”. In: Findings of the Association forComputational Linguistics: ACL 2022. Dublin, Ireland: Association forComputational Linguistics, May 2022, pp. 3008–3018. doi: 10 . 18653 /v1/2022.findings-acl.237. url: https://aclanthology.org/2022.findings-acl.237.
- Yuen-Hsien Tseng et al. “Introduction to SIGHAN 2015 Bake-off for Chinese Spelling Check”. In: Proceedings of the Eighth SIGHAN Workshop on Chinese Language Processing. Beijing, China: Association for Computational Linguistics, July 2015, pp. 32–37. doi: 10.18653/v1/W15-3106. url: https://aclanthology.org/W15-3106.1