黃國(guó)棟,徐久珺,馬傳香,2
(1.湖北大學(xué)計(jì)算機(jī)與信息工程學(xué)院, 湖北 武漢 430062; 2.湖北省高校人文社科重點(diǎn)研究基地(績(jī)效評(píng)價(jià)信息管理研究中心),湖北 武漢 430062)
語(yǔ)法糾錯(cuò)要求對(duì)于一個(gè)可能含有語(yǔ)法錯(cuò)誤的句子,自動(dòng)檢測(cè)并糾正句子中出現(xiàn)的錯(cuò)誤.下面是一個(gè)語(yǔ)法糾錯(cuò)的示例:
輸入:零晨1點(diǎn)才到.
輸出:凌晨1點(diǎn)才到.
將含有錯(cuò)誤的句子看作源句子,將改正的句子作為目標(biāo)句子,語(yǔ)法糾錯(cuò)任務(wù)可以被看作機(jī)器翻譯任務(wù).機(jī)器翻譯通常采用Encoder-Decoder結(jié)構(gòu),機(jī)器翻譯發(fā)展早期廣泛采用RNN作為Encoder-Decoder的網(wǎng)絡(luò)結(jié)構(gòu),RNN使用序列信息,能夠把握字詞間的長(zhǎng)距離依賴關(guān)系,但是不能并行化處理.CNN可以捕捉局部上下文信息,并且可以并行計(jì)算,但長(zhǎng)距離特征捕獲能力較弱.并且兩者都認(rèn)為句子中每個(gè)字詞具有同等重要性,無(wú)法進(jìn)行有選擇性的關(guān)注.基于self-attention機(jī)制的Transformer模型[1]可以使得源序列和目標(biāo)序列中的每一個(gè)詞和序列中其他詞計(jì)算相似度并提取必要的關(guān)聯(lián)特征,而且可以并行計(jì)算,在機(jī)器翻譯任務(wù)中取得了最佳性能.所以本研究選擇Transformer模型作為語(yǔ)法糾錯(cuò)模型.
但基于機(jī)器翻譯的中文語(yǔ)法糾錯(cuò)模型所需的平行語(yǔ)料過(guò)少,導(dǎo)致模型無(wú)法充分訓(xùn)練,首先引用Zhao和Wang提出的動(dòng)態(tài)掩蔽方法[2],不需要增加訓(xùn)練集就可以獲得更多的平行語(yǔ)料.其次,隨著基于Transformer雙向編碼器表征(BERT)[3]的發(fā)展,許多自然語(yǔ)言處理任務(wù)的性能都得以改善,Kaneko等[4]證明了BERT有利于提高英語(yǔ)語(yǔ)法糾錯(cuò)任務(wù)的性能,按照Wang和Kurosawa等的方法[5],利用BERT來(lái)初始化Transformer的encoder使得模型的性能獲得進(jìn)一步提升.
常見(jiàn)的文本糾錯(cuò)方法有:基于規(guī)則的糾錯(cuò)方法、基于統(tǒng)計(jì)的糾錯(cuò)方法和基于神經(jīng)網(wǎng)絡(luò)的糾錯(cuò)方法.早期,針對(duì)文本糾錯(cuò)問(wèn)題,通常采用基于規(guī)則的方法[6-7],這種方法只能修改特定的錯(cuò)誤類型,這對(duì)于語(yǔ)法多變的中文語(yǔ)法糾錯(cuò)取得的效果尤其不好.基于統(tǒng)計(jì)的糾錯(cuò)方法通常含有N-gram[8]和統(tǒng)計(jì)機(jī)器翻譯方法.N-gram通常結(jié)合混淆集使用,可以很好地解決拼寫(xiě)錯(cuò)誤.Brockett等[9]首次提出將語(yǔ)法糾錯(cuò)任務(wù)看作統(tǒng)計(jì)機(jī)器翻譯任務(wù).Junczys-Dowmunt等[10]開(kāi)發(fā)的結(jié)合了大規(guī)模平行語(yǔ)料Lang-8的統(tǒng)計(jì)機(jī)器翻譯架構(gòu)Moses[11].Felice等[12]將基于規(guī)則、統(tǒng)計(jì)機(jī)器翻譯和語(yǔ)言模型結(jié)合的方法可以糾正多種類型的錯(cuò)誤.
如今,深度學(xué)習(xí)技術(shù)已經(jīng)被廣泛應(yīng)用到語(yǔ)法糾錯(cuò)任務(wù)中.有道團(tuán)隊(duì)[13]采用組合模型,將語(yǔ)法糾錯(cuò)分為三步:首先,使用SIGHAN 2013 CSC Datasets中提供字音、字形相似表召回候選,基于N-gram模型解決表面錯(cuò)誤(如拼寫(xiě)錯(cuò)誤);其次,將語(yǔ)法糾錯(cuò)視為機(jī)器翻譯任務(wù),用Seq2Seq模型解決語(yǔ)法錯(cuò)誤,最后將上述模型組合得到最優(yōu)糾錯(cuò)候選并通過(guò)N-gram選擇困惑度最低的作為糾錯(cuò)結(jié)果.阿里團(tuán)隊(duì)[14]融合了基于規(guī)則的模型、基于統(tǒng)計(jì)的模型(使用了LM+噪聲信道模型+beam search挑選候選解)以及基于神經(jīng)機(jī)器翻譯模型(encoder-decoder各兩層LSTM),若模型輸出結(jié)果不同,則針對(duì)沖突應(yīng)用5種解決方案,選出最優(yōu)的結(jié)果最為糾錯(cuò)結(jié)果.北京語(yǔ)言大學(xué)團(tuán)隊(duì)[15]將分詞后的輸入都利用Subword算法[16]拆分子詞單元,并考慮到語(yǔ)法糾錯(cuò)大多數(shù)與臨近詞有關(guān),而CNN能夠更好的捕捉臨近詞的關(guān)系,使用了基于CNN的Seq2Seq單一模型.王辰成等[17]提出一種動(dòng)態(tài)殘差結(jié)構(gòu),動(dòng)態(tài)結(jié)合不同神經(jīng)模塊的輸出來(lái)增強(qiáng)模型捕獲語(yǔ)義信息的能力,并結(jié)合單語(yǔ)料腐化的方法獲得更多平行語(yǔ)料.孫邱杰等[18]利用BART噪聲器[19]來(lái)破壞源句子來(lái)提高模型的泛化能力.Zheng等[20]將語(yǔ)法糾錯(cuò)視作序列標(biāo)注問(wèn)題,利用長(zhǎng)短時(shí)記憶網(wǎng)絡(luò)結(jié)合條件隨機(jī)場(chǎng)進(jìn)行語(yǔ)法錯(cuò)誤診斷.
使用基于深度學(xué)習(xí)技術(shù)的方法受限平行語(yǔ)料庫(kù)的大小,目前廣泛使用的數(shù)據(jù)量最大的Lang-8數(shù)據(jù)集也僅包含120萬(wàn)條數(shù)據(jù),無(wú)法滿足參數(shù)比較多的中文語(yǔ)法糾錯(cuò)模型,有效的數(shù)據(jù)增強(qiáng)方法可能大幅度提高模型的性能.另外,經(jīng)過(guò)大規(guī)模語(yǔ)料預(yù)訓(xùn)練過(guò)的BERT模型,提取其參數(shù)來(lái)初始化模型可能比隨機(jī)初始化獲得的效果更好.
2.1 用BERT的參數(shù)初始化Transformer的EncoderTransformer模型是一種基于多頭注意力機(jī)制的序列生成模型.模型將輸入序列用詞嵌入編碼并與位置編碼相加作為輸入,編碼器將輸入編碼為含有整個(gè)輸入語(yǔ)義信息的高維隱含語(yǔ)義向量,解碼器從中解碼隱含語(yǔ)義向量,并通過(guò)softmax函數(shù)得到輸出.其中,編碼器由多個(gè)相同層組成,每層包含兩個(gè)子層:Multi-head Attention和Feed Forward,解碼器也是多個(gè)相同層組成,每層包含三個(gè)子層: Multi-head Attention、Feed Forward以及Masked Multi-head Attention.
(1)
其中,p是在[0,1]區(qū)間均勻分布產(chǎn)生的隨機(jī)數(shù),f是替換函數(shù).
圖1 訓(xùn)練中生成噪聲句對(duì)
不同的替換函數(shù)對(duì)模型性能的影響不同,按照Z(yǔ)hao等[2]的做法,介紹5種不同的替換策略:
1)填充替換:源句中每個(gè)字符都有一定的概率δ被替換成填充符號(hào)“pad”,通過(guò)減少錯(cuò)誤的重復(fù),從而減少模型對(duì)特定字符的依賴,提高模型的性能.
2)隨機(jī)替換:源句中每個(gè)字符都有一定的概率δ被隨機(jī)替換成詞匯表V中的字符.被選中的字符以1/|V|的概率從詞匯表中均勻采樣,其中|V|是V的大小.采用隨機(jī)替換方法讓產(chǎn)生的源句更接近真實(shí)源句.
3)詞頻替換:通常,語(yǔ)法錯(cuò)誤傾向于將高頻詞誤認(rèn)為低頻詞.因此,頻率較高的詞應(yīng)該更頻繁地出現(xiàn)在源句中作為替換.具體做法是統(tǒng)計(jì)目標(biāo)句中每個(gè)字符出現(xiàn)的頻次,將字符作為鍵,頻次作為值,保存在字典中,構(gòu)建詞頻字典,并根據(jù)詞頻進(jìn)行替換.例如:“凌”出現(xiàn)3次,“晨”出現(xiàn)2次,則詞頻字典為:{‘凌’:3,‘晨’:2},則被選中字符被替換成“凌”的概率是0.6,被替換成“晨”的概率是0.4.
4)同音替換:漢字中存在大量同音字,它們同音但不同形、不同義.使用pypinyin2獲取字符對(duì)應(yīng)的拼音,然后根據(jù)拼音對(duì)目標(biāo)句中的字符分類.將拼音作為鍵,同音字作為值,構(gòu)建同音字典,再統(tǒng)計(jì)同音字中每個(gè)字出現(xiàn)的次數(shù)構(gòu)建同(c)中的詞頻字典,把詞頻字典作為值更新同音字典,得到每種拼音類型單詞的頻次.訓(xùn)練時(shí),按一定概率δ選擇要替換的單詞,并獲取這個(gè)單詞的拼音,根據(jù)拼音的頻次進(jìn)行同音替換.例如:拼音為“l(fā)ing”的“凌”出現(xiàn)了3次,“零”出現(xiàn)了2次,構(gòu)建的同音字典為{‘ling’:{‘凌’:3,‘零’:2}},則被選中的拼音為“l(fā)ing”的字被替換成“凌”的概率為0.6,被替換成“零”的概率為0.4.
5)混合替換:每一輪訓(xùn)練過(guò)程中,按同樣的概率選擇以上4種方案或者空方案,得到更加多樣的噪聲對(duì).本研究選擇此方案作為數(shù)據(jù)增強(qiáng)方法.
完整的語(yǔ)法糾錯(cuò)模型流程如圖2所示.
圖2 中文語(yǔ)法糾錯(cuò)流程圖
為驗(yàn)證本研究提出的方法的有效性,在NLPCC2018共享任務(wù)2提供的Lang-8數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn).實(shí)驗(yàn)環(huán)境如表1所示.
表1 實(shí)驗(yàn)環(huán)境
3.1 數(shù)據(jù)集及預(yù)處理Lang-8數(shù)據(jù)集中的平行語(yǔ)料是從lang-8.com網(wǎng)站收集的[21].lang-8.com是一個(gè)語(yǔ)言學(xué)習(xí)平臺(tái),平臺(tái)中的文章由以漢語(yǔ)作為第二語(yǔ)言的學(xué)生撰寫(xiě)并由中文母語(yǔ)人士校對(duì).數(shù)據(jù)集中一個(gè)不正確的句子可能包含多個(gè)更正版本,本研究將源語(yǔ)句和每個(gè)更正的語(yǔ)句一一結(jié)合來(lái)構(gòu)建平行語(yǔ)料,得到了120萬(wàn)個(gè)句子對(duì)作為訓(xùn)練集.由于官方?jīng)]有提供驗(yàn)證集,按照前人的工作[22],從訓(xùn)練集中隨機(jī)獲取5 000條句子對(duì)作為驗(yàn)證集.測(cè)試集是從北大漢語(yǔ)學(xué)習(xí)者語(yǔ)料庫(kù)中提取的2 000個(gè)句子,該語(yǔ)料庫(kù)是由外國(guó)大學(xué)生撰寫(xiě)的論文組成.另外,需要使用NLPCC2018提供的PKUNLP工具包對(duì)模型的輸出作分詞處理以供評(píng)估使用.所有數(shù)據(jù)統(tǒng)計(jì)如表2所示.
表2 數(shù)據(jù)集統(tǒng)計(jì)
3.2 參數(shù)設(shè)置Transformer模型超參數(shù)設(shè)置如下:編碼器和解碼器都由6個(gè)相同層組成,多頭自注意力層有8個(gè)注意力頭,前饋網(wǎng)絡(luò)維度為2 048,源端和目標(biāo)端的詞向量維度都是512.在編碼器和解碼器上應(yīng)用dropout操作,概率為0.1.模型采用Adam優(yōu)化器,初始學(xué)習(xí)率為2,β設(shè)置為(0.9,0.98).使用Noam的學(xué)習(xí)率衰減方案,warmup_steps設(shè)置為4 000,添加ε為10-9的標(biāo)簽平滑.Batch_Size設(shè)置為128.選擇驗(yàn)證集困惑度最低的模型作為最佳模型.數(shù)據(jù)增強(qiáng)策略中δ設(shè)置為0.3.
3.3 評(píng)價(jià)指標(biāo)本研究使用MaxMatch scorer[23]作為評(píng)估模型.模型計(jì)算源句和模型更正后的句子之間所有可能的短語(yǔ)級(jí)編輯序列,并找到與標(biāo)準(zhǔn)編輯序列重疊程度最高的編輯序列,利用這個(gè)編輯序列{e1,…,en}和標(biāo)準(zhǔn)編輯序列{g1,…,gn} 計(jì)算準(zhǔn)確率P、召回率R和F0.5值.公式計(jì)算如下:
(2)
(3)
(4)
其中ei和gi的交集定義為:ei∩gi={e∈ei|?g∈gi,match(g,e)}.
中文語(yǔ)法糾錯(cuò)任務(wù)選擇F0.5作為評(píng)價(jià)指標(biāo)是因?yàn)樵撊蝿?wù)更加看重編輯的準(zhǔn)確性而不是更多的編輯數(shù)量,所以把準(zhǔn)確率權(quán)重設(shè)定為召回率的兩倍[17].
3.4 實(shí)驗(yàn)結(jié)果及分析表3展示了在Lang-8數(shù)據(jù)集上做的四組實(shí)驗(yàn)結(jié)果以及在NLPCC2018共享任務(wù)2中表現(xiàn)最好的三個(gè)團(tuán)隊(duì)的結(jié)果.第一組實(shí)驗(yàn)僅用Transformer模型,F0.5得分為21.18,這與NLPCC2018中表現(xiàn)優(yōu)異的系統(tǒng)存在很大差距.第二組實(shí)驗(yàn)利用BERT初始化Transformer的Encoder部分,可以看到,F0.5相比于第一組實(shí)驗(yàn)提升了1.08.第三組實(shí)驗(yàn)使用動(dòng)態(tài)掩蔽的數(shù)據(jù)增強(qiáng)方法,F0.5獲得了很大的提升,達(dá)到了30.08,超過(guò)了NLPCC2018共享任務(wù)2中獲得第一的有道系統(tǒng).將兩者結(jié)合以后,F0.5達(dá)到最高的31.12,超過(guò)了BLCU的集成模型.這些實(shí)驗(yàn)結(jié)果表明了本研究方法在語(yǔ)法糾錯(cuò)任務(wù)上的有效性.
表3 Lang-8數(shù)據(jù)集實(shí)驗(yàn)結(jié)果
另外,表4展示了利用本研究不同的替換函數(shù)對(duì)語(yǔ)法糾錯(cuò)模型性能的影響.從表4中的準(zhǔn)確率、召回率和F0.5可以看出每一種替換方法對(duì)模型的性能都有提升.通過(guò)在每一輪訓(xùn)練中引入替換函數(shù),減少了特定的字詞及語(yǔ)法錯(cuò)誤的依賴,有利于避免同樣的訓(xùn)練語(yǔ)料重復(fù)可能帶來(lái)的過(guò)擬合問(wèn)題.其中,混合替換的準(zhǔn)確率和F0.5最高,分別為36.87和31.12;詞頻替換的召回率最高,為19.80,但準(zhǔn)確率最低,為27.17,說(shuō)明采用高頻詞作為替換有利于模型找出錯(cuò)誤,卻會(huì)降低模型的準(zhǔn)確率;中文文本中,同音字(近音字)出錯(cuò)占字詞錯(cuò)誤情況的77%[24],同音替換更符合真實(shí)的字詞錯(cuò)誤.模型的表現(xiàn)相比其他替換方式卻不佳,可能是由于同音字的數(shù)量有限,導(dǎo)致產(chǎn)生不同的訓(xùn)練語(yǔ)料較少;結(jié)合表3和表4可以發(fā)現(xiàn),本研究方法的召回率高于其他模型,準(zhǔn)確率卻比ALiGM、BLCU和BLCU(ensemble)要差,可能是因?yàn)閯?dòng)態(tài)替換過(guò)程產(chǎn)生過(guò)多的選詞錯(cuò)誤從而使模型將非選詞錯(cuò)誤改錯(cuò)而導(dǎo)致的.
表4 不同替換方法對(duì)模型性能的影響
本研究將中文語(yǔ)法糾錯(cuò)任務(wù)視作機(jī)器翻譯任務(wù),構(gòu)建了以Transformer為基線模型的中文語(yǔ)法糾錯(cuò)模型,利用預(yù)訓(xùn)練模型學(xué)習(xí)到的參數(shù)來(lái)初始化Encoder部分的參數(shù),并結(jié)合動(dòng)態(tài)掩蔽的數(shù)據(jù)增強(qiáng)方法,解決訓(xùn)練所需的平行語(yǔ)料不足的問(wèn)題,大幅提升了基線語(yǔ)法糾錯(cuò)模型的性能.利用BERT初始化雖然能提高模型的性能,但是破壞了BERT的預(yù)訓(xùn)練表征,沒(méi)有充分發(fā)揮BERT的性能.如何在中文語(yǔ)法糾錯(cuò)領(lǐng)域更好地利用BERT是我們下一步需要探索的.