最小編輯距離
一 概念
編輯距離(Edit Distance),又稱Levenshtein距離,是指兩個字串之間,由一個轉成另一個所需的編輯操作次數。最小編輯距離,是指所需最小的編輯操作次數。
編輯操作包含:插入、刪除和替換三種操作。
二 最小編輯距離解法-動態規划解法
動態規划的核心思想是:將待求解的問題分解為若干個子問題(階段),按順序求解子階段,前一子問題的解,為后一子問題的求解提供了有用的信息。在求解任一子問題時,列出各種可能的局部解,通過決策保留那些有可能達到最優的局部解,丟棄其他局部解。依次解決各子問題,最后一個子問題就是初始問題的解。
由於動態規划解決的問題多數有重疊子問題這個特點,為減少重復計算,對每一個子問題只解一次,我們將其不同階段的不同狀態保存在一個二維數組中。
最小編輯距離算法偽代碼:
輸入:字符串1-str1 字符串2-str2
輸出:最小編輯距離
實質問題:
求解動態規划矩陣。假設我們以str1為主串(即對str1進行操作)
算法:
-
假設str1=ABCD str2=ACD;len1=str1的長度,len2為str2的長度。
-
建立矩陣:
#
A
B
C
D
#
A
C
D
-
初始化:
#
A
B
C
D
#
0
1
2
3
4
A
1
C
2
D
3
-
三種編輯操作對應着矩陣的三種走法:
矩陣方向 |
編輯操作 |
計算公式 |
向右走: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中應用:即兩個字符串的相似計算函數可用於下面的任務。
-
拼寫糾錯(Spell Correction):又將每個詞與詞典中的詞條比較,英文單詞往往需要做詞干提取等規范化處理,如果一個詞在詞典中不存在,就被認為是一個錯誤,然后試圖提示N個最可能要輸入的詞——拼寫建議。常用的提示單詞的算法就是列出詞典中與原詞具有最小編輯距離的詞條。
-
命名實體抽取(Named Entity Extraction):由於實體的命名往往沒有規律,如品牌名,且可能存在多種變形、拼寫形式,這樣導致基於詞典完全匹配的命名實體識別方法召回率較低,為此,我們可以使用編輯距離由完全匹配泛化到模糊匹配,先抽取實體名候選詞。
-
實體共指(Entity Coreference):通過計算任意兩個實體名之間的最小編輯距離判定是否存在共指關系。
-
字符串核函數(String Kernel):最小編輯距離作為字符串之間的相似度計算函數,用作核函數,集成在SVM中使用。