Edit Distance

本篇内容将讲述Edit Distance(编辑距离),具体包括4个方面:

  1. Defining Minimum Edit Distance

  2. Computing Minimum Edit Distance

  3. Backtrace for Computing Alignments

  4. Weighted Minimum Edit Distance

Definition of Minimum Edit Distance

Minimum Edit Distance是用于衡量从字符串x变到y所需的基本操作的步数,基本操作包括:

  • Insertion(插入)
  • Deletion(删除)
  • Substitution(替换)

Edit Distance_第1张图片

如上图所示,d代表删除操作,s代表替换操作,i代表插入操作。(为了简单起见,后面的Edit Distance 简写为ED)
如果每种操作的cost为1,那么ED = 5.
如果s操作的cost为2(即Levenshtein Distance),ED = 8.

Computing Minimum Edit Distance

如何找到两个strings的minimun edit distance呢?把一个string转换为另一个string可以有很多种方法(或者说“路径“)。
对于两个字符串,X的长度为nY的长度为m,定义D(i,j)X的前i个字符与Y的前j个字符之间的距离,XY的距离可以用D(n,m)表示。容易想到,这个问题是具有重复子问题和最优子结构性质的,动态规划就可以大展身手了。
算法过程如下图所示(采用Levenshtein Distance即替换的成本为2):
Edit Distance_第2张图片

下图是对字符串 INTENTION 和 EXECUTION执行动态规划过程形成的表。
Edit Distance_第3张图片
容易看出, INTENTION 和 EXECUTION之间的Minimum Edit Distance为8

Backtrace for Computing Alignments

利用动态规划算法求得Minimum Edit Distance后,可以通过Backtrace ED的计算过程得到两个字符串之间的编辑过程。D(i,j)的取值来源有三种,D(i-1,j)D(i,j-1)D(i-1,j-1),下表通过添加箭头的方式显示出整个过程(下面的阴影表示的只是一种路径)
Edit Distance_第4张图片
实现寻找路径的思想也很简单,在计算ED的时候给每个单元格定义一个指向标志,指向当前单元格来源LEFT/DOWN/DIAG

Adding Backtrace to Minimum Edit Distance
Edit Distance_第5张图片

算法的时间复杂度和空间复杂度均为O(nm)

Weighted Minimum Edit Distance

在拼写中,某些字母更容易出错(键盘布局),或者一些删除、插入操作更频繁,可以在计算ED时加入权重
Edit Distance_第6张图片
上图所示的混淆矩阵,数值代表被误写的可能性

Weighted Minimum Edit Distance
Edit Distance_第7张图片

你可能感兴趣的:(自然语言处理)