王匆匆 張仰森 黃改娟
(北京信息科技大學智能信息處理研究所 北京 100101) (網絡文化與數字傳播北京市重點實驗室 北京 100101)
中文語句的自動糾錯任務目前主要圍繞著字詞錯誤、搭配錯誤、語法及語義錯誤方面展開研究[1]。雖然語義錯誤的糾錯普遍需要語義搭配知識庫,但是語義搭配知識的提取方法普遍從語法搭配的角度或語句的表面層次提取搭配知識,進而不能從表述形式較為復雜的中文句子中提取出準確的語義搭配知識,這種現象造成了知識庫在全面性、準確性和靈活性沒有達到文本糾錯的目的[2]。如果從語義搭配知識庫角度解決中文文本語義糾錯問題,那么文本錯誤檢測就相當于基于知識庫對文本內容的合理性進行打分,文本糾錯相當于基于知識庫和待檢測語句的上下文對錯誤的文本內容進行推理所產生可接受糾錯結果。基于知識庫和推理的方法看似完美,可是這種方法對于機器處理文本糾錯問題而言可行性較低。原因在于如果將具有語義推理能力的知識圖譜所存儲的語義知識庫應用到中文語句的推理中,正確的文本會滿足推理過程,而對錯誤文本的糾錯建議生成會受到知識容量和質量的限制,尤其是面對中文文本的數據量大的現象,這將會存在糾錯模型缺乏大量訓練數據的問題。鑒于上述分析,本文認為文本糾錯任務需要從大規模的中文語料中學習出一套糾錯機制,于是提出了一種基于注意力機制與端到端的中文文本糾錯方法。
在文本糾錯模型的選取層面,基于深度學習的自然語言處理模型目前主要從循環神經網絡向詞語位置編碼加語句內容的方向轉變[4],端到端學習的思想已經被廣泛利用到機器翻譯、智能問答等領域[5]。本文將端到端的思想和方法應用到中文文本的自動糾錯工作中,使用基于詞語位置編碼向量加語句內容向量的模型生成中間語句的語義向量,然后對語義向量進行解碼生成糾錯后的句子。在語義向量的編碼與解碼過程中,本文使用了注意力機制發現文本詞語的潛在依賴關系及語義特征,避免了循環神經網絡及其變體只將兩個單向的隱藏節點合并輸出所引起的語義關系弱及單項語義編碼的問題。如表1所示,文本糾錯任務的特點是訓練語料中原語句與目標語句之間的詞語重復率達到80%之上,即糾錯后的句子復制了許多原句子中正確的部分。鑒于此,本文通過增加一個句子成分不改變的機制使端到端的糾錯模型更加貼近糾錯任務的場景。另外,本文基于大規模無標注的中文語料提出一種平行糾錯語料的構建方法,為解決缺乏糾錯語料的問題提供了一種思路。

表1 訓練語料中原語句與目標語句包含字的重復率
本文的主要貢獻有以下三方面:① 提出了一個用于文本糾錯神經網絡架構,該架構能夠直接從待校對語句中復制原本正確的詞語和超出詞典范圍的詞語;② 使用大規模非標注數據預訓練了基于復制機制的糾錯模型,緩解了文本糾錯工作缺乏語料的問題;③ 在NLPCC2018的中文糾錯測試集上取得最好的結果。
文獻[6]結合HowNet義原知識庫與中文語料庫,使用雙層LSTM網絡構建語義搭配關系錯誤預測模型,然后基于詞語之間的互信息、詞語義原之間的聚合度提供糾錯建議。基于LSTM網絡的語義糾錯模型會將錯誤信息與前面信息參與語義計算,這影響語義錯誤檢測模型學習待檢測句子全局信息的能力。文獻[6]的糾錯模型僅僅從詞語義原和語句層面上獲取的糾錯建議,沒有完全符合待檢測句子的語境。文獻[7]提出了基于易混淆詞語集與序列標注任務的中文文本糾錯算法,通過引入待校對詞語上下文和基于易混淆詞集的糾錯詞集的方法對語義錯誤進行自動糾錯。由于該方法受限于訓練語料數量較少,不能對語句進行語義表征層面上的糾錯。文獻[8]使用基于RNN和端到端模型的機器翻譯模型對中文語句中的錯別字進行糾錯,實驗表明基于單純基于RNN的神經機器翻譯模型處理文本糾錯的效果較差,仍需要結合N-gram模型,主要原因在于基于RNN的自然語言處理模型的梯度消失和詞語依賴強度弱的問題,本質上該模型仍是一個馬爾可夫決策模型。目前的注意力機制能夠發現中文詞語之間的依存關系,改善自動糾錯效果。
文獻[9]主要通過5-gram評分選取五個小模型所產生文本糾錯的最優結果作為糾錯建議。文獻[10]使用了基于規則的統計模型、基于統計機器翻譯糾錯模型和基于LSTM的翻譯模型,將兩個基于字與詞的統計機器翻譯糾錯結果和四個神經機器翻譯的結果分別進行低級合并,最后將基于規則、統計和神經網絡的結果通過沖突算法對多個糾錯結果進行高級結合得到糾錯結果。文獻[11]使用的是基于卷積神經網絡的端到端糾錯模型,通過卷積神經網絡計算循環神經網絡產生的語義編碼向量的注意力然后解碼出糾錯結果。這三種糾錯模型都通過使用一個更大的中文語言模型取得了較好的結果
早期的英文文本糾錯建立了具體的錯誤類型分類,然后將錯誤類型的分類進行融合,并建立了相應的語法糾正方法,之后文本的語法錯誤糾正利用了統計機器翻譯模型與大規模的糾錯語料取得良好效果。文獻[12-13]指出了錯誤分類與機器翻譯方法的弊端,統計機器翻譯(SMT)模型雖然能夠記住一些短語所在的糾錯語句,但是不能生成一些從未被訓練的文本內容。目前基于神經機器翻譯的校對方法在英文語法錯誤校對任務中展現出強大的語法錯誤校對能力。文獻[14]針對語法錯誤檢測建立了一個基于神經網絡的序列標注模型,該模型對詞語的正誤進行標注,然后使用標注結果的特征,重新排列Nbest假設。文獻[15]提出了一個協調詞語與字母級別信息的混合神經網絡模型。文獻[16]使用了一個多層卷積的端到端模型,該糾錯模型超越了所有之前基于神經網絡與統計方法的糾錯系統。而文獻[17]則是基于序列到序列的架構和推理機制糾錯語法錯誤。文獻[18]嘗試使用RNN與Transformer端到端模型并取得了更好的糾錯結果。
基于神經網絡的機器翻譯模型在文本糾錯任務上已經取得了實質上的提升[18]。翻譯模型通過將待檢測句子作為源句子并將文本糾錯后的語句作為目標句子,學習了源句子到目標句子之間的對應關系。本文將中文文本糾錯任務當作是一個翻譯工作。具體而言,本文研究的目標是讓神經網絡學習平行糾錯語料的正誤語義對應關系,并將錯誤語句翻譯成正確語句。但是不同于傳統的機器翻譯任務,中文糾錯任務不但包含了多種錯誤類型,而且使用的糾錯平行語料中會存在語料稀疏的問題。傳統的中文糾錯任務主要處理冗余、缺字、用字不當和位置錯誤四種錯誤類型,本文沒有具體區分各種錯誤類型,而是使用了兩種注意力機制,即編碼解碼注意力機制和復制注意力機制學習糾錯任務。糾錯模型的基礎架構使用了基于注意力機制的Transformer[4]架構,它包含了多個對輸入的源句子進行編碼的模塊。其中每個模塊都是用了多頭自注意力機制從原句子中獲取帶有詞語位置信息的語義向量,然后通過前向傳播層輸出語義向量的隱藏狀態。基礎模型的解碼器也是使用了多模塊、多頭注意力機制,使用前向傳播網絡對隱藏狀態進行解碼。
基礎架構的目標是預測在一個序列y1,y2,…,yT在t位置的字,在給定源句子x1,x2,…,xN的前提下:
(1)
(2)
pt(w)=softmax(Ltrght)
(3)

(4)
文獻[19]在文本摘要任務上和文獻[20]在語義解析任務上證明了復制機制是有效的,因此本文添加了在文本糾錯上的復制機制,增強了糾錯模型從源句子復制正確詞語的能力。

(5)

圖1 復制機制架構
該架構通過目標隱藏狀態的概率分布作為一個基礎模型。在源句子上的復制因子是通過計算一個新的注意力分布,該注意力分布是基于編碼的隱藏狀態與當前解碼的隱藏狀態計算得出的,復制的注意力也是用相應的編碼與解碼機制。
(6)
(7)
(8)

(9)

當缺乏大量訓練數據時,預訓練在很多任務中被證明是非常有用的。因此,本文使用了部分預訓練的方法在參數初始化的時候從輸入中抽取特征[21]。考慮到BERT模型使用了一個預訓練雙向Transformer模型在當前許多NLP任務中取得了最優表現,它預測了15%被遮住的單字,而不是重建整個輸入句子,并降噪了隨機抽取的15%的字符,在隨機抽取的15%詞語中,其中80%被替換為MASK,10%被替換為隨機的詞,10%沒有被改變。受BERT的和自動降噪編碼方法的啟發,本文在降噪非標注的大規模中文語料的基礎上預訓練基于復制機制的糾錯模型。實驗對含有錯誤的句子的數據生成步驟如下:(1) 刪除一個字符的概率為10%;(2) 增加一個字符的概率為10%;(3) 使用字典中任意一個字符替換字概率為10%;(4) 重新排列字的順序,通過對每個原始字的位置編碼增加一個標準差為0.5的正態分布權重,然后將新的位置編碼從小到大排序,提取出原始位置編碼列表的索引位置作亂序后的字排列。
使用上述的文本錯誤生成方法所產生的錯誤句子與原句子配對,這在某種程度上可以算作一條糾錯語料,因為該錯誤語句與人為錯誤語句都是由字的增、刪、替換和重新排列操作所造成的。
在NLP任務中,預訓練模型能夠提升下游任務的表現,如Word2Vec[22]、GloVe[23]和ELMo[24]等。借鑒文獻[25]的方法,本文預訓練了基于復制機制的端到端糾錯模型的解碼器。首先,使用預訓練參數初始化糾錯模型的解碼器,然后隨機初始化其他參數。因為在編碼器與解碼器之間使用了連續的字嵌入,除了編碼器、編碼與解碼間的注意力和復制注意力之間的參數,其余的參數都能被預訓練。
本文使用了2016年—2018年的CGED中文語法錯誤診斷數據集、SIGHAN2014、SIGHAN2015、NLPCC2018語法糾錯數據集、LANG-8和中文維基百科作為并行訓練語料,將NLPCC2018的中文語法錯誤糾錯任務測試集作為測試語料。表2和表3列出了本文使用的數據集信息。

表2 訓練語料

表3 測試語料
本文在公共的端到端工具Fairseq上使用了已經實現的Transformer模型,并將字嵌入和隱藏層維度設為512,編碼器與解碼器層數為6,注意力模塊為8。在內部的層次前向傳播網絡使用了4 096維度。設置Dropout為0.2,這個模型總共有97 MB的參數。
在優化神經網絡方面,使用Nesterovs[26]加速梯度下降法,學習率為0.002,衰減率為0.5,動量為0.99,最小學習率為0.000 4。
本文也使用了加權極大似然估計方法縮放平衡因子Λ以改變詞的損失[18]。訓練文本糾錯模型和預訓練模型的區別在于,當預訓練降噪自編碼模型時設置Λ=3,糾錯時Λ∈[1,1.8],在解碼時,設置beamsize為12。
文本糾錯任務的目標是改正句子中的錯誤字,模型將錯誤語句的編輯與標準編輯集合的匹配程度作為評價依據。評價指標包括準確率(Precision)、召回率(Recall)及F0.5。假設e是模型對錯誤文本糾錯建議的集合,ge是該錯誤文本的標準的糾錯建議集合,具體的計算方式如下:
(10)
(11)
(12)
式中:|ei∩gei|表示模型針對句子糾錯建議集合與標準糾錯建議集合的匹配數量。gi表示句子i中的全部錯誤組成的集合,具體計算式為:
|ei∩gei|={e∈ei|?g∈gi,match(e,g)}
(13)
語法糾錯任務選擇F0.5作為評價指標而非F1值的原因在于,對于模型糾正的錯誤中,糾錯的準確性大于糾錯建議數量,所以將準確率的權重定為召回率的兩倍大小,以期得到一個更加優質的糾錯模型。
多任務學習主要通過聯合訓練多種相關的任務解決問題,實驗證明多任務學習在許多任務中都有優勢,如計算機視覺[27-28]與NLP[29-30]任務。本文探索了兩種不同的任務對于語法糾錯模型以提高其表現。
3.4.1字級別的標注任務

(14)
通過字級別的標注任務明顯地增強了編碼器關于輸入字的正確性,也有助于解碼器的識別。
3.4.2句子級別復制工作
句子級別的復制工作的動機是使模型在輸入句子是正確的情況下加強糾錯建議從輸入句子復制字詞的比例。訓練時將同樣數量的正確句子對與修改過的句子對送入模型。當輸入正確句子時,移除了解碼器對編碼器的注意力向量。沒有了編碼解碼之間的注意力,原本正確句子生成工作會變得很困難,但是經過模型的復制部分將會被正確的句子加強。
表4對比了基于神經網絡機器翻譯的糾錯模型、基于統計和神經機器翻譯的糾錯模型、序列到序列糾錯模型及本文的模型用于中文語義糾錯得到準確率、召回率與F0.5值。

表4 糾錯模型對比實驗結果(%)
本文的復制增強型架構在使用與訓練參數的情況下相較神經機器翻譯模型[9]準確率提升了7.24百分點,并超過了文獻[10]方法1.48百分點,說明了本文復制增強性架構對比傳統的Transformer在糾錯任務上使用的復制注意力機制學習了文本的正確部分與錯誤部分的區分特征,并且本文模型在召回率比傳統的LSTM的糾錯模型提高了11.35百分點,表明了糾錯模型中注意力機制的重要性,避免了LSTM的語義長期依賴較弱的弊端。文獻[11]所提出的模型雖然架構較為原始,但是它們集成了四個糾錯模型的結果并使用了字節對編碼算法降低生詞的困擾,在準確率上超過了本文復制增強型模型4.15百分點,表明了未登錄詞和適量的增加模型參數量對糾錯任務的提升較明顯。但是當使用降噪自動編碼的方法后,模型學習了更多中文語料中的錯誤詞語特征和糾錯建議生成特征,在NLPCC2018數據集上的F0.5為42.64%,在召回率和準確率上都超過了文獻[9]所提供的方法。綜上,無論是傳統的Transformer還是本文模型,都能在召回率上超過RNN及一系列變體網絡,可見注意力機制和基于詞語位置編碼的語義編碼模型是目前糾錯任務不可缺少的一部分。
表5對比了基于復制機制和降噪自動編碼Tansformer模型處理冗余、缺字、用字不當和位置錯誤四種錯誤類型的表現。實驗數據集采用了具有錯誤類型標注的2016年—2018年的CGED中文語法錯誤診斷測試集。

表5 四種錯誤類型實驗結果(%)
從表5可知,本文模型處理用字不當和位置錯誤的準確率比另兩種錯誤更高,但提升量均在2百分點以內。用字不當錯誤的準確率較高,可能是因為相較其他錯誤類型,該錯誤提供了較多的可被模型利用的錯誤信息。而冗余字的錯誤準確率最低,則可能是由于冗余字所提供的錯誤信息相較其他錯誤類型更加繁雜,干擾了模型的糾錯準確率。此外,在召回率和F0.5值上,本文模型表現出較為平穩的實驗數據。
3.6.1復制機制消融實驗結果
下面通過實驗比較在文本糾錯任務上本文的復制機制與自注意力機制對Transformer結構糾錯結果的影響。如表6所示,復制增強型的模型將F0.5分數從29.91%提高到37.31%,增加了8.3百分點。提升的原因在于基礎模型把超出字典的字預測成一個未登錄標記UNK,但是在復制增強型模型上將未識別的字直接復制到所生成的句子中。

表6 消融實驗結果(%)
復制機制被廣泛用于處理未登錄字,實驗通過忽略所有的未登錄字來驗證復制是否真正地復制了那些不知道的字。從表6可知,即使忽略未登錄字帶來了提升,復制模型仍然相較于基礎模型在F0.5分數上提升了7.54百分點,并且大多數是通過增加精確率提升的。
3.6.2預訓練消融實驗結果
從表6可知,通過預訓練部分解碼器,F0.5分數從40.70%提升到41.84%,相較于未預訓練的方式提高了1.14百分點,當降噪自動編碼器全部預訓練參數時,模型F0.5分數從40.70%提升到49.56%。
為了進一步調查預訓練參數的優勢,本文展示了早期是否含有降噪解碼預訓練參數的性能改善情況在表7。結果顯示,如果使用標注訓練數據一輪后的參數微調模型,預訓練模型F0.5分數比未預訓練模型從25.32%提升到35.06%。即使沒有微調,預訓練模型可以得到F0.5分數為25.32%。這證明了預訓練帶給模型比隨機參數更好的初始參數。

表7 NLPCC2018測試集預訓練測試結果(%)
3.6.3句子級別的復制任務消融結果
為了證實增加句子級別的復制任務對正句子與錯誤句子的識別情況,本文創建了一個正確句子集通過挑選維基百科中的500個句子,挑選NLPCC2018測試集中的數據生成一個錯誤句子集。之后計算了兩個測試集的平衡因子的平均值。在增加句子級別的復制工作中,復制因子對于正確句子集和錯誤句子集分別是0.44和0.45。通過增加句子級別的復制任務,平衡因子的值分別為0.81和0.57。這意味著81%的最終分數來自于正確的復制句子集,但在錯誤句子集上僅有57%的分數。因此,通過增加句子級別的復制工作,模型學習了如何區分正確句子與錯誤句子。
為了分析復制注意力與編碼解碼注意力的差異,圖2和圖3可視化了復制注意力分布和編碼解碼注意力分布。復制注意力的權重更加偏向于下一個字,使語句順序變得準確。而編碼解碼注意力更加偏向于其他字,例如,相近的字或者句子的尾部。正如文獻[30]所解釋的,這意味著生成部分試圖去發現更長距離的依賴關系并且更加關注于全局信息。通過從自動生成工作中分離復制工作,模型的生成部分能夠聚焦于創造性的工作。

圖2 復制注意力分布

圖3 編碼解碼注意力分布
本文對于中文文本糾錯任務提出了一種基于復制機制的糾錯架構,通過直接復制未改變的詞語和超出所輸入原句子的詞典的詞語提升了端到端模型的能力,并使用大規模非標注的數據和降噪自動編碼器完全預訓練了復制機制的架構。此外,在多任務學習方面引入了兩個額外的任務。實驗結果表明,本文方法超過了其他中文文本糾錯方法。