Python 将编辑距离表示为矩阵乘法

Python 将编辑距离表示为矩阵乘法,python,nlp,linear-algebra,edit-distance,Python,Nlp,Linear Algebra,Edit Distance,我在计算两个字符串之间的加权编辑距离时,使用了对Levenshtein距离的轻微修改,其中使用了上下文特定的编辑操作概率。与标准的Levenshtein只考虑最佳的编辑操作序列不同,这里,我感兴趣的是将一个字符串转换为另一个字符串的可能编辑操作序列的成本总和 对于两个字符串s1和s2,我有一个形状为len(s1)×len(s2)×3的代价张量,分别对应于删除和插入。为简单起见,两个字符串都以一个表示空字符串的技术开始符号开始 删除\u id=0 插入\u id=1 替换_id=2 α=np.零(

我在计算两个字符串之间的加权编辑距离时,使用了对Levenshtein距离的轻微修改,其中使用了上下文特定的编辑操作概率。与标准的Levenshtein只考虑最佳的编辑操作序列不同,这里,我感兴趣的是将一个字符串转换为另一个字符串的可能编辑操作序列的成本总和

对于两个字符串
s1
s2
,我有一个形状为
len(s1)
×
len(s2)
×3的代价张量,分别对应于删除和插入。为简单起见,两个字符串都以一个表示空字符串的技术开始符号开始

删除\u id=0
插入\u id=1
替换_id=2
α=np.零((len(s1),len(s2))
α[0,0]=1.0
对于t,在枚举(s1)中:
对于v,枚举(s2)中的_u:
如果v>=1:
alpha[t,v]+=成本[t,v,插入id]*alpha[t,v-1]
如果t>=1:
alpha[t,v]+=成本[t,v,删除id]*alpha[t-1,v]
如果v>=1且t>=1:
阿尔法[t,v]+=成本[t,v,替代品id]*阿尔法[t-1,v-1]
所有可能的概率之和以α[len(s1)-1,len(s2)-1]结束


嵌套for循环非常类似于矩阵乘法的定义。计算的矢量化可以加快速度,但我不知道如何使用矩阵乘法重新格式化。有什么想法吗?

只需提及上述代码中的一个快速缺陷:是否打算为单个元素添加多个元素,如果
v
t
均为真?否,条件不是相互排斥的。Levenshtein distance假设每个字符串都有一个您无法删除的技术开头(因此
t>=1
),无法插入其他位置(
v>=1
)在其他位置,所有三个操作都是可能的,并且要求其概率之和。