stanford NLP学习笔记3:最小编辑距离(Minimum Edit Distance)
I. 最小编辑距离的定义
最小编辑距离旨在定义两个字符串之间的相似度(word similarity)。定义相似度可以用于拼写纠错,计算生物学上的序列比对,机器翻译,信息提取,语音识别等。

编辑距离就是指将一个字符串通过的包括插入(insertion),删除(deletion),替换(substitution)的编辑操作转变为另一个字符串所需的最少编辑次数。比如:

如果将编辑操作从字符放大到词,那就可以用于评估集齐翻译和语音识别的效果。比如:

还可以用于实体名称识别(named entity recognition)和实体共指(entity corefernce)

如何寻找最短的编辑路径(所有寻找所有编辑结果的可能星代价太大也没必要):动态编程法
若字符串X长度为n,字符串Y长度为m,定义X和Y之间的编辑距离为D(n,m)。计算原理很简单:利用从底向顶的方式,计算D(n,m)可以建立在D(n-1,m-1)的基础上,并一次类推向上直至D(0,0)。初始和迭代条件入下:D(i, 0)就是将X中所有i个字符删除即可,因此其值就是i。同理D(0, j)为插入j个字符。

计算Intention和execution之间距离的距离矩阵如下:

PS:关于编辑距离的实现代码可以看码农场大神的这篇博客
II. 回溯比对(backtrace)
很多情况下只是记录编辑距离是不够的,需要将两列字符串的进行一一对应的具体位置信息(比如拼写纠错)。因此会用一个指针来记录位置信息用于回溯。由于需要求的是最短编辑距离,在每一次编辑操作的格子将其指向前一次操作时的最小的编辑距离的格子即可,最终变可以获得比对的具体对应信息。


该算法的复杂度:很明显时间和空间复杂度为O(nm);而做多需要(m+n)个backtrace指针来记录。
III. 加权编辑距离(weighted edit distance)
加入加权的原因是是由于不同情况的插入,替换,删除的可能性是不同的。比如在拼写纠错的时候有些位置的字母打错成某个字母的可能性比其他字母要高;在DNA序列中,有些碱基的缺失和替换可能性也要比其他的高。如下就是各字母间打错的次数:

具体计算而言,在上述原理的基础上加入每一步编辑操作具体的权值即可。

IV. 计算生物学中的最短编辑距离
由于当代计算生物学主要数据就是各种DNA和RNA序列的碱基信息,且比对是大部分分析的基础,因此最短编辑距离对计算生物学而言意义十分重要。
计算生物学在比对的时候通常用相似度(similarity)来代替距离来作为评估标准,因此对之前的算法稍做调整使之最大化相似度:Needleman-wunsch algorithm

变体. 由于测序特性,对序列头和尾的gap序列的比对不做惩罚是相当合理的,即在初始状态,for all i,j; F(i, 0)=0; F(0, j)=0。 终止状态,Fopt = MAX(MAXi F(i,N), MAXj F(M,j))。

局部比对
寻找X,Y的相似度最高的子序列,因此可以不光是开头结尾的gap,序列前后部的差异很大的序列也可以不用管。这个算法叫做Smith-Waterman algorithm,目标就是舍弃那些比对相似度很差的区域,关注于高度相似的区域。

如果当前位置之前的序列比对得分低于0了,说明前面的序列比对情况很糟糕,那么就从这个位置开始重新开始比对,前面的序列就放弃不管了。
终止情况:

局部比对实例
X=ATCAT, Y=ATTATC, m=1(匹配得分),d=-1(发生替换/删除/插入的得分)


传送门:https://www.youtube.com/watch?v=Q0TGn4wkuoE
stanford NLP学习笔记3:最小编辑距离(Minimum Edit Distance)的更多相关文章
- Stanford NLP学习笔记:7. 情感分析(Sentiment)
1. 什么是情感分析(别名:观点提取,主题分析,情感挖掘...) 应用: 1)正面VS负面的影评(影片分类问题) 2)产品/品牌评价: Google产品搜索 3)twitter情感预测股票市场行情/消 ...
- Stanford NLP学习笔记1:课程介绍
Stanford NLP课程简介 1. NLP应用例子 问答系统: IBM Watson 信息提取(information extraction) 情感分析 机器翻译 2. NLP应用当前进展 很成熟 ...
- Stanford NLP 学习笔记2:文本处理基础(text processing)
I. 正则表达式(regular expression) 正则表达式是专门处理文本字符串的正式语言(这个是基础中的基础,就不再详细叙述,不了解的可以看这里). ^(在字符前): 负选择,匹配除括号以外 ...
- Minimum edit distance(levenshtein distance)(最小编辑距离)初探
最小编辑距离的定义:编辑距离(Edit Distance),又称Levenshtein距离.是指两个字串之间,由一个转成还有一个所需的最少编辑操作次数.许可的编辑操作包含将一个字符替换成还有一个字符. ...
- 编辑距离(Minimum Edit Distance)
编辑距离(Minimum Edit Distance,MED),也叫 Levenshtein Distance.他的含义是计算字符串a转换为字符串b的最少单字符编辑次数.编辑操作有:插入.删除.替换( ...
- 字符串编辑距离(Edit Distance)
一.问题描述定义字符串编辑距离(Edit Distance),是俄罗斯科学家 Vladimir Levenshtein 在 1965 年提出的概念,又称 Levenshtein 距离,是指两个字符串之 ...
- Leetcode之动态规划(DP)专题-72. 编辑距离(Edit Distance)
Leetcode之动态规划(DP)专题-72. 编辑距离(Edit Distance) 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可 ...
- Stanford NLP 课程笔记之计算字符串距离
在自然语言处理任务中,有时候需要计算两个字符串之间的相似度,也可以称作是两者之间的距离,用最小编辑距离表示. 最小编辑距离用{Insertion,Deletion,Substitution}这三种操作 ...
- Stanford Corenlp学习笔记——词性标注
使用Stanford Corenlp对中文进行词性标注 语言为Scala,使用的jar的版本是3.6.0,而且是手动添加jar包,使用sbt添加其他版本的时候出现了各种各样的问题 添加的jar包有5个 ...
随机推荐
- Java 网络爬虫获取网页源代码原理及实现
Java 网络爬虫获取网页源代码原理及实现 1.网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成.传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL ...
- Android DownloadProvider学习 (二)
DownloadManager.Request用来请求一个下载,DownloadManager.Query用来查询下载信息,这两个类的具体功能会在后面穿插介绍.DownloadManager的源码可见 ...
- C++继承,多重继承,虚继承的构造函数以及析构函数的调用顺序问题
#include <iostream> using namespace std; class A{ int data_a; public: A(){ data_a = ; cout < ...
- public/private/protected访问控制权限的区别
//public/private/protected访问控制权限的区别//时间:2016/8/16 //(一)修饰成员: //public: 在类内.类外都能使用 . //protected: 在类内 ...
- Loadrunner进行接口自动化测试
我们以测试豆瓣api获取图书信息的接口为例 接口的信息如下: 接口ip:https://api.douban.com/v2/book/:id 接口返回值:status=200 返回数据: { - (图 ...
- jquery时间控件datepicker
配置文件 $("#joinedTime").datepicker({ inline: true, yearRange: "1996:2016", showBut ...
- 几种Position属性的用法
几种Position常见的属性就是一下几种: 1.static:默认值.没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明). 2.re ...
- 关于history.js的使用
项目地址: https://github.com/browserstate/history.js 做wap端的时候,有些时候一个页面里有很多小页面或者标签,希望刷新浏览器或者按返回键的时候,能够被当成 ...
- UVa 221城市正视图(离散化)
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- compile vim with lua & python support
vim在macosx 10.9默认没有带lua和python支持,因为装的有些插件是lua写的,有些是python写的,运行不起来,于是决定自己编译一个,下载vim源码,执行以下命令就可以编译vim: ...