语音识别:时间序列的匹配算法(Needleman-Wunsch 算法)
一、說明
? ? ? ? 如果存在這樣的語句:
- 武松攥緊拳頭,朝老虎的眼睛打去。
- 武松朝老虎打去”;
????????以上兩句話,雖長度不同,其意思是高度相似的。如果按照字符串匹配,將無法說明兩個句子意思一樣。那么字符串如何匹配才能說明它們是一樣的??Needleman-Wunsch 算法就是解決類似問題的一種。
????????Needleman-Wunsch 算法是一種在生物信息學中用于比對蛋白質或核苷酸序列的算法。它是動態規劃比較生物序列的首選應用之一。該算法由 Saul B. Needleman 和 Christian D. Wunsch 開發,并于 1970 年發表。該算法本質上將一個大問題(例如整個序列)劃分為一系列較小的問題,并使用小問題的解來找到較大問題的最優解。?
????????Needleman-Wunsch 算法有時也被稱為最優匹配算法或全局對齊技術。 Needleman-Wunsch 算法仍然廣泛用于優化全局對齊,特別是當全局對齊的質量至關重要時。該算法為每個可能的對齊分配一個分數,并找到所有可能的具有最高分數的對齊形式。
? ? ? ? 生物DNA匹配,必須遵守的規則是:從第一個序列的索引到另一個序列的索引的映射必須是單調遞增的,反之亦然,即如果? 是來自第一個序列的索引,那么不允許有另一個序列中的兩個索引 ,使得索引 與索引 匹配,?索引?與索引?匹配,反之亦然。
二、最大子串匹配算法
2.1最大子串匹配
例如,字符串A=kitten,字符串B=sitting ,那他們的最長公共子串為ittn ,最長公共子串長度為4。(注:最長公共子串不需要連續出現,但一定是出現的順序一致).
2.2 字符串和LSC
表示A是由這N個字符組成,;
,表示B是由這M個字符組成,.
2.3 LSC定義
定義1:LCS(A,B)表示字符串A和字符串B的最長公共子串的長度。
很顯然,?表示兩個字符串沒有公共部分。
定義2:其中.
對于有公式:
若,則
若,則
?
2.4 遞推原理
????????對于任意兩個字符串。這里使用兩個小 DNA 序列作為示例,如圖 1 所示,如兩段DNA片段:
????????? ? ? ? ? ? ? ?和? ? ? ? ????
? ? ? ?如何求它們的最大相似度?
三、運算步驟
3.1 第一步,建立結構表格
????????首先建立如圖一的得分矩陣。從第一列第一行的位置起始。計算過程從d 【0 , 0】開始,可以是按行計算,每行從左到右,也可以是按列計算,每列從上到下。當然,任何計算過程,只要滿足在計算d【 i , j】時d【 i-1 , j】、d 【i-1 , j-1】和d【 i, j-1】都已經被計算這個條件即可。在計算d【 i , j】后,需要保存d 【i , j】是從d【 i-1 , j】、d【 i-1 , j-1】或d【i, j-1】中的哪一個推進的,或保存計算的路徑,以便于后續處理。上述計算過程到d 【m , n】結束。
1) 選擇得分體系
????????接下來我們需要決定如何給每個獨立配對打分。從我們的序列中,你可能就能發現最好的序列配對之一:
GCATG-CU
G-ATTACA
我們可以看出每個位置配對都有三種可能情況:匹配, 不匹配與錯位(或插入):
- 匹配: 兩個字母相同
- 不匹配:兩個字母不相同
- 空缺位:一個字母與另一個序列中的間隔(空白)相匹配
????????
2)初始化表格
????????這三種得分情況有很多打分標準,從現在開始,我們將使用Needleman 和Wunsch創造的簡單體系來進行打分,即匹配得1分,不匹配得-1分,空缺位得-1分。
? ? ? ? 1)從第二行第二列的零開始。
? ? ? ? 2)逐行移動單元格,計算每個單元格的分數。
? ? ? ? 3)通過比較與單元格左側、頂部或左上角(對角線)相鄰的單元格的分數并添加匹配、不匹配或插入缺失的適當分數來計算分數。計算三種可能性中每一種的候選分數:
- 來自頂部或左側單元格的路徑代表一個 indel 配對,因此獲取左側和頂部單元格的分數,并將 indel 的分數添加到每個單元格中。
- 對角線路徑表示匹配/不匹配,因此取左上角對角線單元格的分數,如果行和列中的相應堿基(字母)匹配,則添加匹配分數,如果不匹配,則添加不匹配分數。
????????單元格的結果分數是三個候選分數中最高的。 鑒于第二行沒有“頂部”或“左上”單元格,只有左側的現有單元格可用于計算每個單元格的分數。因此,每次向右移動都會添加 -1,因為這表示對前一個分數的插入刪除。這導致第一行是 0、-1、-2、-3、-4、-5、-6、-7。這同樣適用于第一列,因為只能使用每個單元格上方的現有分數。因此結果表是:
| - | G | C | A | T | G | C | G | |
| - | 0 | -1 | -2 | -3 | -4 | -5 | -6 | -7 |
| G | -1 | |||||||
| A | -2 | |||||||
| T | -3 | |||||||
| T | -4 | |||||||
| A | -5 | |||||||
| C | -6 | |||||||
| A | -7 |
3.2 第二步,如何逐行填表
從第三行開始,進行實質匹配。第一項是行為G,列為G。
其中X如何填寫?該單元格具有三個可能的候選總和:
- 對角線左上角的鄰居得分為 0。G 和 G 的配對是匹配的,所以添加匹配的分數:0+1 = 1
- 頂部鄰居的得分為 -1,從那里移動代表一個插入缺失,因此添加插入缺失的得分:(-1) + (-1) = (-2)
- 左鄰居的得分也為 -1,代表一個插入缺失,也產生 (-2)。
最高的候選人是 1 并被輸入到單元格中:
因此出現一個公式:
?是最后分數;
是當前兩個字母是否匹配;
是當前cell的左側分數,上部分數,左上部分數;
在下一個示例中,X 和 Y 的對角線步長表示不匹配:
X填寫規則:
- Top: (?2)+(?1) = (?3)
- Left: (+1)+(?1) = (0)
- Top-Left: (?1)+(?1) = (?2)
最后取最大值:X = 0
Y填寫規則:
- Top: (1)+(?1) = (0)
- Left: (?2)+(?1) = (?3)
- Top-Left: (?1)+(?1) = (?2)
?最后取最大值:Y = 0
接著按上面同樣規律,填寫另一個:
最后,填寫的評分矩陣如下:
四、匹配鏈:追蹤箭頭回到原點
? ? ? ? 按照箭頭的方向標記從右下角的單元格返回到左上角的單元格的路徑。從這條路徑開始,序列由以下規則構成:
????????對角箭頭表示匹配或不匹配,因此列的字母和原始單元格的行的字母將對齊。
水平或垂直箭頭表示插入缺失。垂直箭頭將間隙(“-”)與行的字母(“side”序列)對齊,水平箭頭將間隙與列的字母(“top”序列)對齊。
????????如果有多個箭頭可供選擇,它們代表路線的一個分支。如果兩個或多個分支都屬于從右下角到左上角單元格的路徑,則它們是同樣可行的對齊。在這種情況下,請注意將路徑作為單獨的對齊候選。
????????按照這些規則,圖 1 中一種可能的對齊候選的步驟是:
匹配分數:將匹配路徑的所有分數累加,得到分數為6.
?
總結
以上是生活随笔為你收集整理的语音识别:时间序列的匹配算法(Needleman-Wunsch 算法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人工智能:自由能理论,AI未来的数学模型
- 下一篇: 图像处理:python实现canny算子