【NLP_Stanford課堂】最小編輯距離


一、什么是最小編輯距離

最小編輯距離:是用以衡量兩個字符串之間的相似度,是兩個字符串之間的最小操作數,即從一個字符轉換成另一個字符所需要的操作數,包括插入、刪除和置換。

每個操作數的cost

  1. 每個操作數的cost一般是1
  2. 如果置換的cost是2,而插入和刪除的cost是1,我們稱之為Levenshtein 距離。

作用

  1. 計算衡量機器翻譯和語音識別的好壞:將機器得到的字符串與專家寫的字符串比較最小編輯距離,以一個單詞為一個單位。
  2. 命名實體識別和鏈接:比如通過計算最小編輯距離,可以判定IBM.Inc和IBN非常相似,只有一個單詞不同,所以認為這是指向同一個命名實體。

二、如何找到最小編輯距離

實質:尋找一條從“開始字符串”到“最終字符串”的路徑(一個操作序列)

具體過程

  • 初始狀態:機器翻譯出來的單詞
  • 操作:插入、刪除、置換
  • 黃金狀態:我們盡力希望得到的單詞
  • 路徑花費:操作數目,要求最小化
  • 實例:

    單詞intention通過刪除i可以得到ntention,通過插入e可以得到eintention,通過將i換成e可以得到entention。以上從intention到葉子節點的任意一個單詞經過的操作數就是一條路徑。

  • 可以發現枚舉出所有可轉變成的單詞的花費是十分巨大的,我們不可能用枚舉遍歷的方式來尋找一條最短路徑,一種解決方法是:使用剪枝
  • 每層中有很多路徑被剪枝了,只在每一層中保留最短的那條路徑

定義

  • 設有兩個字符串:X和Y。其中X長度為n,Y長度為m
  • 定義D(i,j),表示
    • X[1..i]和Y[]1..j]之間的編輯距離,
    • 從而X和Y之間的編輯距離為D(n,m)

 三、如何計算中間距離D(n,m)

基准方法:動態規划從i=0,j=0

具體算法:

初始X的長度為i,則Y的長度為0時,需要在Y中插入i個字符才能使Y變成X,所以D(i,0)=i;同理X的長度為0,Y的長度為j時,需要刪去j個字符才能使Y變成X,所以D(0,j)=j.

環條件:三個式子分別對應在i-1的基礎上刪除一個字符使之變成j、在j-1的基礎上插入1個字符使之變成i和置換這三個操作,其中若X(i)=Y(j),則無需置換,所以cost等於1,否則需要各在i-1和j-1上插入一個字符,cost等於2

計算實例:

四、如何回溯計算兩個字符串之間對齊的字符

在上一步計算矩陣的過程中,加入方向,具體可參考《算法導論》中的尋找最長公共子序列

計算實例:

五、帶權重的最短距離

權重:指插入、刪除和置換三種操作有不同的權重,不再簡單都認為cost是1

原因:

  1. 拼寫校正:有些單詞通常更容易被拼錯,比如根據統計e非常容易被拼錯成a
  2. 生物學:某幾種插入或刪除更容易出現

經過調整的算法如下:

注:使用Levenshtein距離

 六、計算生物學上的最小編輯距離(相似度)

問題:找到以下兩個序列中的對齊序列,其可能是核苷酸或者蛋白質的結構

要求得到以下對齊序列:

在NLP上,我們稱之為最小距離,而在計算生物學上,我們稱之為相似度

算法:Needleman-Wunsch 算法

其中d表示插入和刪除的cost,s表示置換的positive value

1. 變形一

特殊情況:兩個字符串的頭尾沒有對齊,只有中間一部分重合

具體可能有兩種情形:

要求:檢測重疊部分中的相似度,即重疊檢測問題

算法:

注:調整算法開始的起點和終點

2. 變形二

要求:要求找到兩個字符串中相似度最大的序列,可以有多個,即局部對齊問題

實例:要求找到以下cccggg的部分

算法:Smith-Waterman算法

 

計算實例:

結果:

其中找到兩個最大局部對齊序列

一是ATCAT和ATTAT的相似度為3,其中A與A相等,得一分;T與T相等,得一分;T與C不相等,要刪除,所以減一分;A與A相等,得一分;T與T相等,得一分

二是ATC和ATC的相似度也為3。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM