编辑距离(edit distance)
做语音识别算法工程师好几年,最近才弄清楚wer与插入错误,删除错误和替换错误的统计算法,真是惭愧。
编辑距离,又称Levenshtein Distance,是一位俄罗斯的科学家Vladimir Levenshtein 在1965年在1965年提出来的。编辑距离指的是在两个字符串S1和S2 之间,将S1转换为S2所需要的最少编辑操作次数。
字符编辑操作有且仅有三种:
- 插入(Insertion)
- 删除(Deletion)
- 替换(Substitution)
编辑距离的算法公式:
我们将两个字符串 a,b 的编辑距离表示为,其中
和
分别对应字符串a,b的长度。两个字符串 a,b 的编辑距离即可用如下的数学语言表示:
是指字符串a的前
个字符和字符串b的前
个字符之间的编辑距离。这里的
的上限是
的长度
。注意,字符串的第一个字符的index从 1 开始。
当,表示字符串a或者b有一个是空字符串,所以,将a转化成b就需要
次编辑。
当, 表示a和b都不是空字符串,a和b的编辑距离等于三种情况下编辑距离的最小值。其中,
表示插入编辑,(个人理解:
从末尾删除一个字符后的
和
的编辑距离只需做一次插入操作就和
相等)
表示删除编辑,
且
表示替换编辑,
且
表示跳过不做编辑
算法举例:
a: "This great machine can recognize speech"
b: “This machine can wreck a nice beach”
1. 首先列一个表格,表格的长度和宽度分别等于|a|+2和|b|+2,行列开头分别填充一个0.
0 | this | machine | can | wreck | a | nice | beach | |
0 | ||||||||
this | ||||||||
great | ||||||||