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