黃改娟, 王匆匆, 張仰森,2
(1. 北京信息科技大學 智能信息處理研究所 北京 100101; 2. 網(wǎng)絡(luò)文化與數(shù)字傳播北京市重點實驗室 北京 100101)
隨著人們從紙質(zhì)書寫轉(zhuǎn)變?yōu)殒I盤輸入,寫作效率不斷提升,但產(chǎn)生的中文文本錯誤影響了人們對語言的理解效率。在中文文本錯誤中,雖然大多數(shù)人能根據(jù)自己的經(jīng)驗去推測原來正確文本的含義,但是對于那些剛開始學習漢字的人群以及對文字準確度要求很高的出版社來說,這種細微的錯誤不僅體現(xiàn)了人們對工作的態(tài)度,還體現(xiàn)出人們對文字的重視程度。因此,中文文本的糾錯不但具有豐富的需求背景,而且它還是自然語言處理領(lǐng)域中重要的基礎(chǔ)問題。目前,依靠人工糾錯文本不但費時費力,還可能導致二次錯誤。實現(xiàn)中文文本的自動糾錯將會節(jié)約編輯或?qū)徃迦说臅r間,從而實現(xiàn)更精準的人工文本糾錯,對教育出版行業(yè)以及辦公自動化將產(chǎn)生深遠影響。在文本錯誤類型的分類上,當前研究者們主要從字詞的拼寫錯誤、詞語搭配不當以及文本語義準確度入手,文本的自動糾錯方法則是基于N元文法、散串和語義檢測的糾錯方法。本文模擬人工糾錯時的閱讀過程,提出了基于動態(tài)文本窗口的文本自動檢錯算法。此外,在已有詞典的基礎(chǔ)上,使用基于最小編輯距離并具有權(quán)重動態(tài)分配功能的糾錯算法體現(xiàn)了糾錯詞語選取的合理性。
中文文本錯誤類型可分為字詞層面的錯誤[1]、語法層面的錯誤、語義層面的錯誤。在這三個層面中,字詞層面最為基礎(chǔ),語法層面其次,語義層面最接近語言的思維表達形式。另外,這三個層面的聯(lián)系可體現(xiàn)為:字詞層面錯誤會導致整個詞語的詞性變動或者產(chǎn)生錯詞,從而使語句在語法層面不符合語法規(guī)則,進而引起語義模糊的問題。因此,字詞層面的錯誤也會牽扯到語法和語義層面,可見字詞層面的糾錯是文本糾錯的基礎(chǔ)。文獻[2]將字詞層面的錯誤分為錯字、多字和漏字三類。此后,文獻[3]定義了“真多字詞錯誤”和“非多字詞錯誤”?!罢娑嘧衷~錯誤”的定義源自于語句的分詞結(jié)果中沒有任何錯詞,但是這些詞語會與相鄰詞語產(chǎn)生搭配不當?shù)年P(guān)系;“非多字詞錯誤”即分詞結(jié)果中包含了由單字組成的詞語所引起的文本錯誤。
1.2.1基于N元文法的文本糾錯 基于N元文法的糾錯方法根據(jù)Markov隨機過程理論,針對字詞的參數(shù)空間過大而產(chǎn)生的數(shù)據(jù)稀疏問題[4]簡化N的大小,即當前狀態(tài)僅與前面有限數(shù)量的狀態(tài)有關(guān),以此類推,判斷整個語句的通順程度。由于中文句子的書寫規(guī)范常常受字詞之間搭配習慣的影響[5],因此基于N元文法的糾錯方法主要利用了字詞的前后接續(xù)程度[6]、互信息[7]、共現(xiàn)頻率[8]等文本的相關(guān)信息提供糾錯建議。
1.2.2基于散串的文本糾錯 散串是指文本經(jīng)分詞后連續(xù)出現(xiàn)的零散字符串,文獻[9]把散串區(qū)間作為錯誤的初始范圍。文獻[10]統(tǒng)計了基于散串的查錯效果,指出錯誤文本被分詞后所產(chǎn)生的單字、雙字以及多字串的概率為90.3%。文獻[11]使用散串糾錯文本,糾錯過程分為錯誤定位和錯誤矯正兩步。錯誤定位采用了統(tǒng)計字詞搭配度和統(tǒng)計句子語法架構(gòu)的方法定位錯誤位置,其中統(tǒng)計搭配度的錯誤定位方法主要針對五筆字型和拼音兩種類型的輸入法,統(tǒng)計語法架構(gòu)的錯誤定位方法則是將統(tǒng)計法獲取的錯誤位置再使用語法規(guī)則進行精準定位。錯誤矯正則采用傳統(tǒng)的人機交互法,由系統(tǒng)提供候選糾錯詞供用戶選擇。
1.2.3基于語義檢測的文本糾錯 文本語義錯誤的自動糾錯屬于文本糾錯研究領(lǐng)域較難解決的問題[11]。在語義錯誤查找方面,一般方法是通過詞語搭配知識庫進行查錯。文獻[12]統(tǒng)計了大量語義搭配實例,并構(gòu)建語義搭配規(guī)則庫用以檢查語義級錯誤。文獻[13]首先以《現(xiàn)代漢語實詞搭配詞典》和知網(wǎng)為基礎(chǔ)建立了語義搭配知識庫,然后結(jié)合證據(jù)理論解決了糾錯詞選取的模糊性問題。文獻[14]認為,真詞錯誤存在的原因主要是詞語語義表達不符合詞語搭配習慣,因此提出了專門面向真詞錯誤的易錯詞集、在特定詞語語境下詞語的泛化模型和常用語言模型結(jié)合詞語使用規(guī)則的真詞錯誤自動糾錯方法。
人們在閱讀文本時,注意力的視野集中范圍是不斷向后移動的,尤其是在精讀的情況下大都在看文本中的幾個字,有時還會向前面觀察一遍再聯(lián)系后面的文字體會文本的語義。依據(jù)這種閱讀特點,首先采用動態(tài)文本窗口的方法來模擬人們在閱讀時注意力的變化范圍,然后在此范圍中,從中心向前展開計算文本搭配的合理程度,再將文本窗口不斷地向后移動以檢測后面的文本。在文本查錯過程中,距離更近的字詞則是依靠縮小窗口的方法檢測字詞方面的正誤。隨著窗口的縮小,文本里真正的錯誤又可能是由后面文本所導致的,于是采用拓展窗口的方法確定具體錯誤的位置。
2.2.1動態(tài)文本窗口 假設(shè)文本語句可被T={c1,c2,…,ci,…,cn-1,cn}表示為一種文本的窗口,語句長度為N,最小為1。以某個字ci(i=1,2,…,n)為中心,在它左右相鄰的n個字符上建立一個寬度為2n-1的動態(tài)文本窗口,表示為Winn(ci)={ci-n+1,…,ci-1,ci,ci+1,…,ci+n-1}。當ci的i=0時,Winn(ci)={ci,ci+1,…,ci+n-1};當ci的i=n時,Winn(ci)={ci-n+1,…,ci-1,ci}。
2.2.2動態(tài)窗口縮小 當窗口大小從N縮小為N-1時,表示為Winn-1(ci)={ci-n+2,…,ci-1,ci,ci+1,…,ci+n-2}。當ci的i=0時,Winn-1(ci)={ci,ci+1,…,ci+n-2};當ci的i=n時,Winn-1(ci)={ci-n+2,…,ci-1,ci}。
2.2.3動態(tài)窗口后移 窗口為N,中心字符為ci時,窗口后移表示為令ci=ci+1。
2.2.4動態(tài)窗口拓展 窗口為N,中心字符為ci時,經(jīng)拓展后的窗口表示為WinnExt(ci)={ci-1,ci,ci+1,ci+2}。
2.2.5動態(tài)窗口包含文字的前項概率 窗口為N,中心字符為ci時,ci的前項概率表示為
式中:N(ci-n+1,…,ci-1,ci)表示在訓練語料中字符串{ci-n+1,…,ci-1,ci}出現(xiàn)的次數(shù);N(xi-n+1,…,xi-1,xi)為任意n長度的字符串{xi-n+1,…,xi-1,xi}在訓練語料中出現(xiàn)的次數(shù)。
2.2.6動態(tài)窗口包含文字的后項概率 窗口為N,中心字符為ci時,ci的后項概率表示為
式中:N(ci,ci+1,…,ci+n-1)表示在訓練語料中字符串{ci,ci+1,…,ci+n-1}出現(xiàn)的次數(shù);N(xi,xi+1,…,xi+n-1)為任意n長度的字符串{xi,xi+1,…,xi+n-1}在訓練語料中出現(xiàn)的次數(shù)。
基于動態(tài)窗口的文本查錯算法的具體步驟如下。
Step 1: 將文本分句,去除標點及特殊符號。
Step 2: 若仍有句子未被檢測,算法繼續(xù)。否則,算法結(jié)束。
Step 3: 以待查字符c為中心,構(gòu)造大小為3的動態(tài)文本查錯窗口Win3(ci)={c-2,c-1,c,c1,c2}。
Step 6: 如果左側(cè)相鄰字符串{c-2,c-1,c}存在易混淆詞庫中,則選擇易混淆詞集處理,然后轉(zhuǎn)向Step 5。否則,轉(zhuǎn)向Step 7。
Step 7: 使用大小為2的窗口檢查{c-2,c-1}是否存在錯誤。如果是,則輸出錯誤字符,轉(zhuǎn)向Step 8。否則,轉(zhuǎn)向Step 10。
Step 10: 縮小查錯文本窗口大小為2,Win2(ci)={c-1,c,c1},重復Step 11~14。
聚類詞的概念是把近義詞、同義詞和一些可以互換使用的字詞作為同一個詞來對待。將這類可以在同樣語境下使用的詞語當作同一種詞,不但符合文本的常用表達方式,而且減少了查錯模型因數(shù)據(jù)稀疏而導致的誤報率。表1列出了部分聚類詞。聚類詞庫的使用方法為:假設(shè)待檢測動態(tài)文本窗口的文本出現(xiàn)次數(shù)小于常用文本閾值,并且該動態(tài)文本窗口內(nèi)的文本包含某些在聚類詞庫的詞語,于是將詞庫中與待檢測詞語聚為一類的詞在當前窗口內(nèi)文本語境下所出現(xiàn)的概率累加到待檢測動態(tài)文本窗口,然后再次檢測此處動態(tài)文本窗口內(nèi)是否包含錯誤。
表1 部分聚類詞Table 1 Partial clustering words
圖1 基于權(quán)重動態(tài)分配的糾錯策略示意圖Figure 1 Schematic diagram of error correction strategy based on dynamic weight allocation
考慮到語料庫中99.48%的字為常用中文字符,約有3 700多個,因此本文構(gòu)建了基于常用高頻字集的候選糾錯詞集。假設(shè)動態(tài)文本窗口的大小N,考慮到計算糾錯詞集所需的時間復雜度和空間復雜度較高,因此設(shè)定動態(tài)文本窗口長度為3,采取促使局部文本出現(xiàn)概率最大化的方式獲取糾錯詞。在糾錯詞集的權(quán)重分配方面,采用動態(tài)文本窗口內(nèi)疑似錯誤和前后文本的詞語組合長度作為糾錯詞的權(quán)重,建立基于最小編輯距離的糾錯詞集。圖1為基于權(quán)重動態(tài)分配的糾錯策略示意圖。首先對文本中的疑似錯誤詞語建立相應(yīng)的糾錯詞集,然后計算每個糾錯詞與系統(tǒng)詞典的最小編輯距離,將系統(tǒng)詞典中與糾錯詞編輯距離最小的系統(tǒng)詞的長度作為糾錯建議的權(quán)重。
基于糾錯詞權(quán)重動態(tài)分配的糾錯算法的具體步驟如下。
Step 1: 設(shè)動態(tài)窗口的文本為T={…,c-2,c-1,c0,c1,c2,…},系統(tǒng)詞典為D。
從日常報紙雜志的100篇文章中收集了500個人工校對好的標準句子,其中包含220個文本錯誤。表2為多種文本檢錯策略的實驗結(jié)果。當僅使用窗口大小為3的檢錯方案時,檢測文本錯誤的召回率為68.2%,準確率為58.5%。當添加窗口縮小策略改進檢錯方案后,檢錯的召回率下降了8.2%,準確率提高了12.4%。主要原因是對文本采取更加細粒度的檢錯方案降低了原本較大窗口產(chǎn)生的文本數(shù)據(jù)稀疏的出現(xiàn)概率。當使用添加窗口縮小和窗口拓展策略的檢錯方案時,檢錯的準確率又上升了13.7%。主要原因是窗口下文的內(nèi)容也被轉(zhuǎn)移進來,相當于進一步考慮了上下文的語句搭配合理度。最后,綜合前兩種策略和聚類詞平滑策略后,檢錯的準確率再次上升了3.3%,F(xiàn)值達到77.9%。實驗結(jié)果表明,基于動態(tài)窗口的文本查錯算法在很大程度上提高了文本自動檢錯的效率和可行性。
表2 多種文本檢錯策略的實驗結(jié)果Table 2 Experiment results of multiple strategies for error detection
在本文構(gòu)建的數(shù)據(jù)集下比較了三種自動糾錯方法,分別為本文的基于權(quán)重動態(tài)分配的糾錯模型、傳統(tǒng)的黑馬校對系統(tǒng)以及文獻[15]所提出的權(quán)重均分的糾錯模型,通過人工鑒定這些方法所生成的糾錯建議的合理度,并統(tǒng)計合理糾錯建議的數(shù)量,糾錯性能結(jié)果比較如表3所示??梢钥闯?,傳統(tǒng)的黑馬校對系統(tǒng)首先檢測出178個文本錯誤,被人工鑒定為合理的糾錯建議有169個;文獻[15]模型檢測出170個文本錯誤,被人工鑒定為合理的糾錯建議有155個;本文模型發(fā)現(xiàn)了193個文本錯誤,被人工鑒定為合理的糾錯建議有177個,糾錯準確率最高且耗用資源比最低,其中糾錯準確率達到78.1%,比黑馬校對系統(tǒng)和文獻[15]模型分別提升了9.7%和15.8%,在實際應(yīng)用上表現(xiàn)良好。
表3 糾錯性能結(jié)果比較Table 3 Comparison on error correction performance results
本文以動態(tài)文本窗口對人們閱讀文本時的注意力集中范圍進行建模,實現(xiàn)了注意力集中范圍的放大與縮小,并以中文詞語的構(gòu)詞長度自動分配糾錯建議的權(quán)重,實現(xiàn)了文本自動糾錯模型。雖然目前的文字編輯工作中使用文本自動糾錯技術(shù)能有效地降低一些文本錯誤所產(chǎn)生的不良影響,但是在文本的自動查錯與糾錯方面仍然需要進行更加深入的研究。在檢錯時,一方面還可以考慮語法和語義知識,另一方面還需要考慮語義知識庫的建立與使用方法。除了基于知識庫的方法外,還可以建立自動獲取錯誤文本特征的模型。糾錯建議生成方法可以全面地從篇章、段落、整句上使用自然語言推理技術(shù)推理出原文內(nèi)容,這樣能更加體現(xiàn)出糾錯方法的科學性。