NLP-最小編輯距離

最小編輯距離算法

概念

  編輯距離(Edit Distance,又稱Levenshtein距離,是指兩個字串之間,由一個轉成另外一個所需的編輯操做次數。最小編輯距離,是指所需最小的編輯操做次數。數組

  編輯操做包含:插入、刪除和替換三種操做。函數

最小編輯距離解法-動態規劃解法

  動態規劃的核心思想是:將待求解的問題分解爲若干個子問題(階段),按順序求解子階段,前一子問題的解,爲後一子問題的求解提供了有用的信息。在求解任一子問題時,列出各類可能的局部解,經過決策保留那些有可能達到最優的局部解,丟棄其餘局部解。依次解決各子問題,最後一個子問題就是初始問題的解。spa

  因爲動態規劃解決的問題多數有重疊子問題這個特色,爲減小重複計算,對每個子問題只解一次,咱們將其不一樣階段的不一樣狀態保存在一個二維數組中。3d

 

最小編輯距離算法僞代碼:blog

輸入:字符串1-str1 字符串2-str2 字符串

輸出:最小編輯距離it

實質問題:io

求解動態規劃矩陣。假設咱們以str1爲主串(即對str1進行操做)table

算法:

  1. 假設str1=ABCD str2=ACDlen1=str1的長度,len2str2的長度。
  2. 創建矩陣:
     

    #

    A

    B

    C

    D

    #

             

    A

             

    C

             

    D

             

     

    #表示在串前能夠插入任何字符。
  3. 初始化:
     

    #

    A

    B

    C

    D

    #

    0

    1

    2

    3

    4

    A

    1

           

    C

    2

           

    D

    3

           
  4. 三種編輯操做對應着矩陣的三種走法:

矩陣方向

編輯操做

計算公式

向右走:Right

刪除

向下走:Down

插入

對角線:Diagonal

替換|匹配

 

循環計算整個矩陣

 

#

A

B

C

D

#

0

1

2

3

4

A

1

0

1

2

3

C

2

1

1

1

2

D

3

2

2

2

1

   

  5.  即爲最小編輯距離

應用

  最小編輯距離一般做爲一種類似度計算函數被用於多種實際應用中,詳細以下:(特別的,對於中文天然語言處理,通常以詞爲基本處理單元)

  • 生物領域中DNA分析:比較 DNA 序列並嘗試找出兩個序列的公共部分。若是兩個 DNA 序列有相似的公共子序列,那麼這些兩個序列極可能是同源的。在比對兩個序列時,不只要考慮徹底匹配的字符,還要考慮一個序列中的空格或間隙(或者,相反地,要考慮另外一個序列中的插入部分)和不匹配,這兩個方面均可能意味着突變(mutation)。在序列比對中,須要找到最優的比對(最優比對大體是指要將匹配的數量最大化,將空格和不匹配的數量最小化)。
  • NLP中應用:即兩個字符串的類似計算函數可用於下面的任務。
  1. 拼寫糾錯(Spell Correction):又將每一個詞與詞典中的詞條比較,英文單詞每每須要作詞幹提取等規範化處理,若是一個詞在詞典中不存在,就被認爲是一個錯誤,而後試圖提示N個最可能要輸入的詞——拼寫建議。經常使用的提示單詞的算法就是列出詞典中與原詞具備最小編輯距離的詞條。
  2. 命名實體抽取(Named Entity Extraction):因爲實體的命名每每沒有規律,如品牌名,且可能存在多種變形、拼寫形式,這樣致使基於詞典徹底匹配的命名實體識別方法召回率較低,爲此,咱們可使用編輯距離由徹底匹配泛化到模糊匹配,先抽取實體名候選詞。
  3. 實體共指(Entity Coreference):經過計算任意兩個實體名之間的最小編輯距離斷定是否存在共指關係。
  4. 字符串核函數(String Kernel):最小編輯距離做爲字符串之間的類似度計算函數,用做核函數,集成在SVM中使用。
相關文章
相關標籤/搜索