1. 程式人生 > >斯坦福大學自然語言處理第五課“拼寫糾錯(Spelling Correction)”

斯坦福大學自然語言處理第五課“拼寫糾錯(Spelling Correction)”

今天在我愛機器學習上正好看到這篇文章,和我們現在做的中文拼寫檢查關係密切,就轉過來了,需要細細地看一遍。

一、課程介紹

斯坦福大學於2012年3月在Coursera啟動了線上自然語言處理課程,由NLP領域大牛Dan Jurafsky 和 Chirs Manning教授授課:

以下是本課程的學習筆記,以課程PPT/PDF為主,其他參考資料為輔,融入個人拓展、註解,拋磚引玉,歡迎大家在“我愛公開課”上一起探討學習。

二、拼寫糾錯(Spelling Correction)

1)任務定義

拼寫糾錯(Spelling Correction),又稱拼寫檢查(Spelling Checker),往往被用於字處理軟體、輸入法和搜尋引擎中,如下所示:

拼寫糾錯一般可以拆分成兩個子任務:

  • Spelling Error Detection:按照錯誤型別不同,分為Non-word Errors和Real-word Errors。前者指那些拼寫錯誤後的詞本身就不合法,如錯誤的將“giraffe”寫成“graffe”;後者指那些拼寫錯誤後的詞仍然是合法的情況,如將“there”錯誤拼寫為“three”(形近),將“peace”錯誤拼寫為“piece”(同音),將“two”錯誤拼寫為“too”(同音)。
  • Spelling Error Correction:自動糾錯,如把“hte”自動校正為“the”,或者給出一個最可能的拼寫建議,甚至一個拼寫建議列表。

2)Non-word拼寫錯誤

  • Spelling error detection:任何不被詞典所包含的word均被當作spelling error,識別準確率依賴詞典的規模和質量。
  • Spelling error correction:查詢詞典中與error最近似的word,常見的方法有Shortest weighted edit distance和Highest noisy channel probability。

3)Real-word拼寫錯誤

  • Spelling error detection:每個word都作為spelling error candidate。
  • Spelling error correction:從發音和拼寫等角度,查詢與word最近似的words集合作為拼寫建議,常見的方法有Highest noisy channel probability和Classifier。

4)基於Noisy Channel Model的拼寫糾錯

Noisy Channel Model即噪聲通道模型,或稱信源通道模型,這是一個普適性的模型,被用於語音識別、拼寫糾錯、機器翻譯、中文分詞、詞性標註、音字轉換等眾多應用領域。其形式很簡單,如下圖所示:

噪聲通道試圖通過帶噪聲的輸出訊號恢復輸入訊號,形式化定義為:

應用於拼寫糾錯任務的流程如下:

noisy word(即splling error)被看作original word通過noisy channel轉換得到,現在已知noisy word(用x表示)如何求得最大可能的original word(用w表示),公式如下:

P(w)為先驗概率,P(x|w)為轉移概率,二者可以基於訓練語料庫建立語言模型和轉移矩陣(又稱error model,channel model)得到。

下面通過一個Non-word spelling error correction的例子加以解釋:

給定拼寫錯誤“acress”,首先通過詞典匹配容易確定為“Non-word spelling error”;然後通過計算最小編輯距離獲取最相似的candidate correction,需要特別說明的是,這裡的最小編輯距離涉及四種操作:

據統計,80%的拼寫錯誤編輯距離為1,幾乎所有的拼寫錯誤編輯距離小於等於2,基於此,可以減少大量不必要的計算。

通過計算最小編輯距離獲取拼寫建議候選集(candidate w),此時,我們希望選擇概率最大的w作為最終的拼寫建議,基於噪聲通道模型思想,需要進一步計算P(w)和P(x|w)。

通過對語料庫計數、平滑等處理可以很容易建立語言模型,即可得到P(w),如下表所示,計算Unigram Prior Probability(word總數:404,253,213)

接下來,可以基於大量<misspelled word x=x1 x2 x3 ... xm, correct word w=w1 w2 w3 ... wn>pair計算del、ins、sub和trans四種轉移矩陣,然後求得轉移概率P(x|w):

計算P("acress"|w)如下:

計算P(w)P(“acress”|w)如下:

“across”相比其他candidate可能性更大。

上面建立語言模型時採用了unigram,也可以推廣到bigram,甚至更高階,以較好的融入上下文資訊。

如句子“a stellar and versatile acress whose combination of sass and glamour…”,計算bigram為:

P(actress|versatile)=.000021   P(whose|actress) = .0010

P(across|versatile) =.000021   P(whose|across) = .000006

則聯合概率為:

P(“versatile actress whose”) = .000021*.0010 = 210 x10-10

P(“versatile across whose”)  = .000021*.000006 = 1 x10-10

“actress”相比“across”可能性更大。

5)Real-word拼寫糾錯

Kukich(1992)指出有25%~40%的拼寫錯誤都屬於Real-word型別,與Non-word型別相比,糾錯難度更大,因為句子中的每個word都被當作待糾錯物件。通常,解決方法分兩步:

例如,給定句子S=w1,w2,w3,…,wn,為每個wi生成candidate set,如下:

  • Candidate(w1) = {w1, w’1 , w’’1 , w’’’1 ,…}
  • Candidate(w2) = {w2, w’2 , w’’2 , w’’’2 ,…}
  • ... ...
  • Candidate(wn) = {wn, w’n , w’’n , w’’’n ,…}

最後,選擇概率最大的序列W為自動糾錯後的句子,與中文分詞、音字轉換等應用相同,可以表示成詞網格形式,轉化為HMM的解碼過程:

為了簡化起見,一般規定一個句子中最多有一個word存在splling error(事實上,所出現的情況也的確如此)。

6)應用

實際的拼寫糾錯系統一般會遵守如下HCI(Human Computer Interface)準則:

根據應用場景不同(Domain Sensitivity),需要對語言模型進行特別的處理,如:

除了字面上的拼寫錯誤,還有可能同音導致,所以,有些系統將“error model”轉化為“Phonetic error model”解決拼寫糾錯問題。

另外,鍵盤上臨近的按鍵更容易引入spelling error pair,據此可以對轉移矩陣進行加權。

我們還可以將拼寫糾錯問題轉化為分類問題,通過構建訓練語料庫,抽取features,訓練分類模型,預測新例項等一系列過程解決,如下:

三、參考資料