一、定义最小编辑距离
1、最小编辑距离的用途
- 拼写矫正
- 用户输入graffe,那么哪一个是最接近的?graf?graft?grail?还是giraffe
- 计算生物学
- 用来校准核酸序列
- 校准(alignment)结果
- 用来校准核酸序列
- 同时也用于机器翻译,信息抽取等领域
2、编辑距离
两个字符串间最小的编辑距离就是将其中一个变成另外一个时需要的最小的编辑操作次数(操作包含插入、删除、替代)。
举例而言,当两个字符串是intention和execution的时候,操作如下:其中d表示删除操作,s表示替代操作,i表示插入操作
- 当每个操作的代价为1时,两者的距离为5
- 当替代操作代价为2,其他保持不变时,两者的距离为8(Levenshtein)
在计算生物学中的例子,原始序列:
校准序列:(要么用字母校准,要么用空缺校准)
NLP的编辑距离还可以用来评价机器翻译(machine translation)和演讲识别(speech recognition)
还可以用于命名实体抽取和实体指代。
3、如何找到最小编辑距离
从最初的字符串到最后的字符串的路径(一系列的编辑操作)
- 原始状态:需要转换的单词
- 操作:插入、删除、替代
- 目标状态:我们想要得到的单词
- 路径代价:我们需要最小化的目标(操作的次数)
从最初的字符串到最后的字符串的路径其实是很多的,我们不需要关注所有,只需要关注最短的路程。
4、定义最小编辑距离
- 对于两个字符串
- X的长度是n
- Y的长度是m
- 我们定义D(i,j)
- X[1…i]和Y[1…j]之间的距离
- i.e X的前i个字符和Y的前j个字符
- X和Y的编辑距离是D(n,m)
二、如何计算最小编辑距离
1、动态规划算法
- 对D(n,m)进行列表式计算(tabular computation),通过整合子问题的解决方案来解决问题
- 自下而上
- 对很小的i,j计算D(i,j)
- 基于之前计算的比较小的值来计算更大的D(i,j)
- i.e 对i(0<i<n)和j(0<j<m)来计算D(i,j)
2、定义最小编辑距离(Levenshtein)
-
例子:
三、计算对应的回溯(backtrace for computing aligents)
- 单纯编辑距离的计算是不够的
- 我们需要得到两个字符串中相互对应的字符
- 我们解决这个方法的手段是利用指针进行回溯
- 当我们进入到一个格子(如上图的表格)的时候,我们需要记得前一个格子(利用指针)
- 当我们到达右上角的时候
- 就从右上角开始回溯,来找到对应的字符
包含指针之后,整体算法调整如下:
- 就从右上角开始回溯,来找到对应的字符
- 算法复杂度
- 时间复杂度:O(nm)
- 空间复杂度:O(nm)
- 回溯:O(n+m)
四、加权编辑距离
1、 为什么要对计算进行加权?
- 拼写错误:有些单词更容易拼错
- 生物:某些删除和插入更加容易发生
2、 加权编辑距离算法
- 单纯编辑距离的计算是不够的
五、计算生物学中的最小编辑距离
1、进行序列对应的原因
- 比较不同的生物的基因和部位
- 组合片段获得DNA
- 比较以找出基因突变
2、NLP和计算生物学的不同
- NLP讨论的是距离的最小化和权重
- 计算生物学讨论的是最大化的相似度和得分(socre)
3、Needleman-Wunch 算法
4、基础算法的变动
-
在基因片段的开始和结束对不上是很有可能的,因此不应该对这两种情况进行惩罚。
- 改变一:初始化
- 改变二:termination
- 改变一:初始化
-
对应位置问题(local alignment problem):两个字符串可能是在他们的中部才有相似的部分。比如
- 变化一:初始化
- 变化二:迭代部分
- 变化三:termination
如果要找最佳的位置对应(local alignment),找到Fopt(公式如下)并回溯就可以了
如果要找得分大于t的位置对应(local alignment),就找到满足F(i,j)>t的F(i,j)然后进行回溯。这里存在的一个问题是,可能会出现重叠的位置对应(local alignment),如下图。
举例子而言:
可以找到两个最大的位置对应(local alignment),一个是:
还有一个是:
- 变化一:初始化