03.07.2013 Views

最小编辑距离算法

最小编辑距离算法

最小编辑距离算法

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>最小编辑距离算法</strong><br />

Minimum Edit Distance<br />

詹卫东<br />

北京大学中文系


编辑距离<br />

编辑前字符串 s<br />

编辑后字符串 t<br />

编辑操作p:插入、删除、替换<br />

源文:She is a star with the theatre company.<br />

机器译文:她是与剧院公司的一颗星。<br />

参考译文:她 是 剧团 的 明星。<br />

编辑距离:6<br />

删除次数(4次): 与 公司 一 颗<br />

替换次数(2次): 剧院 剧团 星 明星<br />

“编辑距离”定义为<br />

“编辑操作的次数”<br />

计算机器译文<br />

跟正确答案之<br />

间的距离


原始串 s o t<br />

目标串 s t o p<br />

插入操作的权值<br />

(insertCost):1<br />

删除操作的权值<br />

(deleteCost):1<br />

替换操作的权值<br />

(substituteCost):2<br />

如何计算最小编辑距离<br />

s o t 编辑操作1<br />

s t o t (1.插入,1分,累计1分)<br />

s t o p (2.替换,2分,累计3分)<br />

编辑距离:3<br />

s o t 编辑操作2<br />

s t t (1.替换,2分,累计2分)<br />

s t o (2.替换,2分,累计4分)<br />

编辑距离:5<br />

s t o p (3.插入,1分,累计5分)


最小编辑距离计算:动态规划<br />

D(0, 0) = 0<br />

D(i, 0) = insertCost * i<br />

D(0, j) = deleteCost * j<br />

i, 目标串字符位置<br />

j, 原始串字符位置<br />

D(i-1, j) + insertCost( target i )<br />

D(i, j) = min D(i-1, j-1) + substituteCost( source j , target i )<br />

D(i, j-1) + deleteCost( source j )<br />

substituteCost<br />

insertCost = 1<br />

deleteCost = 1<br />

= 0 if target[i] = source[j]<br />

= 2 otherwise


<strong>最小编辑距离算法</strong>描述<br />

function Min-Edit_Distance (target, source)<br />

n = length(target);<br />

m = length(source);<br />

create distance matrix d[n,m];<br />

d[0,0]=0;<br />

d[0,1]=1,… d[0,m]=m;<br />

d[1,0]=1,…d[n,0]=n;<br />

for each i from 1 to n do<br />

for each j from 1 to m do<br />

d[i, j] = min( d[i-1, j] + insertCost(targeti)), d[i-1, j-1] + substituteCost(sourcej, targeti), d[i, j-1] + deleteCost(sourcej)); return d[n,m];


source : s o t<br />

target : s t o p<br />

n = length (target)<br />

m = length (source)<br />

Create matrix d [n, m];<br />

最小编辑距离计算示例<br />

i=0 j=0<br />

d[0,0] = 0;<br />

d[0,1] = 1; … ; d[0,m] = m;<br />

d[1,0] = 1; … ; d[n,0] = n;<br />

j<br />

3<br />

2<br />

1<br />

0<br />

#<br />

t<br />

o<br />

s<br />

#<br />

0<br />

s<br />

1<br />

t<br />

2<br />

o p<br />

3 4<br />

i


source : s o t<br />

target : s t o p<br />

n = length (target)<br />

m = length (source)<br />

Create matrix d [n, m];<br />

最小编辑距离计算示例<br />

i=1 j=1<br />

d[1,1] = min<br />

j<br />

3<br />

2<br />

1<br />

0<br />

#<br />

t<br />

o<br />

s<br />

#<br />

0<br />

d[0,1]+insert(t[1]) = 2<br />

d[0,0]+substitute(s[1],t[1]) =0<br />

d[1,0]+delete(s[1]) = 2<br />

0<br />

s<br />

1<br />

t<br />

2<br />

o p<br />

3 4<br />

= 0<br />

i


source : s o t<br />

target : s t o p<br />

n = length (target)<br />

m = length (source)<br />

Create matrix d [n, m];<br />

最小编辑距离计算示例<br />

i=1 j=2<br />

d[1,2] = min<br />

j<br />

3<br />

2<br />

1<br />

0<br />

#<br />

t<br />

o<br />

s<br />

#<br />

0<br />

d[0,2]+insert(t[1]) = 3<br />

d[0,1]+substitute(s[2],t[1]) =3<br />

d[1,1]+delete(s[2]) = 1<br />

1<br />

0<br />

s<br />

1<br />

t<br />

2<br />

o p<br />

3 4<br />

= 1<br />

i


source : s o t<br />

target : s t o p<br />

n = length (target)<br />

m = length (source)<br />

Create matrix d [n, m];<br />

最小编辑距离计算示例<br />

i=1 j=3<br />

d[1,3] = min<br />

j<br />

3<br />

2<br />

1<br />

0<br />

#<br />

t<br />

o<br />

s<br />

#<br />

0<br />

d[0,3]+insert(t[1]) = 4<br />

d[0,2]+substitute(s[3],t[1]) =4<br />

d[1,2]+delete(s[3]) = 2<br />

2<br />

1<br />

0<br />

s<br />

1<br />

t<br />

2<br />

o p<br />

3 4<br />

= 2<br />

i


source : s o t<br />

target : s t o p<br />

n = length (target)<br />

m = length (source)<br />

Create matrix d [n, m];<br />

最小编辑距离计算示例<br />

i=2 j=1<br />

d[2,1] = min<br />

j<br />

3<br />

2<br />

1<br />

0<br />

#<br />

t<br />

o<br />

s<br />

#<br />

0<br />

d[1,1]+insert(t[2]) = 1<br />

d[1,0]+substitute(s[1],t[2]) =3<br />

d[2,0]+delete(s[1]) = 3<br />

2<br />

1<br />

0<br />

s<br />

1<br />

1<br />

t<br />

2<br />

o p<br />

3 4<br />

= 1<br />

i


source : s o t<br />

target : s t o p<br />

n = length (target)<br />

m = length (source)<br />

Create matrix d [n, m];<br />

最小编辑距离计算示例<br />

i=2 j=2<br />

d[2,2] = min<br />

j<br />

3<br />

2<br />

1<br />

0<br />

#<br />

t<br />

o<br />

s<br />

#<br />

0<br />

d[1,2]+insert(t[2]) = 2<br />

d[1,1]+substitute(s[2],t[2]) =2<br />

d[2,1]+delete(s[2]) = 2<br />

2<br />

1<br />

0<br />

s<br />

1<br />

2<br />

1<br />

t<br />

2<br />

o p<br />

3 4<br />

= 2<br />

i


source : s o t<br />

target : s t o p<br />

n = length (target)<br />

m = length (source)<br />

Create matrix d [n, m];<br />

最小编辑距离计算示例<br />

i=2 j=3<br />

d[2,3] = min<br />

j<br />

3<br />

2<br />

1<br />

0<br />

#<br />

t<br />

o<br />

s<br />

#<br />

0<br />

d[1,3]+insert(t[2])=3<br />

d[1,2]+substitute(s[3],t[2])=1<br />

d[2,2]+delete(s[3])=3<br />

2<br />

1<br />

0<br />

s<br />

1<br />

1<br />

2<br />

1<br />

t<br />

2<br />

o p<br />

3 4<br />

= 1<br />

i


source : s o t<br />

target : s t o p<br />

n = length (target)<br />

m = length (source)<br />

Create matrix d [n, m];<br />

最小编辑距离计算示例<br />

i=3 j=1<br />

d[3,1] = min<br />

j<br />

3<br />

2<br />

1<br />

0<br />

#<br />

t<br />

o<br />

s<br />

#<br />

0<br />

d[2,1]+insert(t[3])=2<br />

d[2,0]+substitute(s[1],t[3])=4<br />

d[3,0]+delete(s[1])=4<br />

2<br />

1<br />

0<br />

s<br />

1<br />

1<br />

2<br />

1<br />

t<br />

2<br />

2<br />

o<br />

3<br />

= 2<br />

p<br />

4<br />

i


source : s o t<br />

target : s t o p<br />

n = length (target)<br />

m = length (source)<br />

Create matrix d [n, m];<br />

最小编辑距离计算示例<br />

i=3 j=2<br />

d[3,2] = min<br />

j<br />

3<br />

2<br />

1<br />

0<br />

#<br />

t<br />

o<br />

s<br />

#<br />

0<br />

d[2,2]+insert(t[3])=3<br />

d[2,1]+substitute(s[2],t[3])=1<br />

d[3,1]+delete(s[2])=3<br />

2<br />

1<br />

0<br />

s<br />

1<br />

1<br />

2<br />

1<br />

t<br />

2<br />

1<br />

2<br />

o<br />

3<br />

= 1<br />

p<br />

4<br />

i


source : s o t<br />

target : s t o p<br />

n = length (target)<br />

m = length (source)<br />

Create matrix d [n, m];<br />

最小编辑距离计算示例<br />

i=3 j=3<br />

d[3,3] = min<br />

j<br />

3<br />

2<br />

1<br />

0<br />

#<br />

t<br />

o<br />

s<br />

#<br />

0<br />

d[2,3]+insert(t[3])=2<br />

d[2,2]+substitute(s[3],t[3])=4<br />

d[3,2]+delete(s[3])=2<br />

2<br />

1<br />

0<br />

s<br />

1<br />

1<br />

2<br />

1<br />

t<br />

2<br />

2<br />

1<br />

2<br />

o<br />

3<br />

= 2<br />

p<br />

4<br />

i


source : s o t<br />

target : s t o p<br />

n = length (target)<br />

m = length (source)<br />

Create matrix d [n, m];<br />

最小编辑距离计算示例<br />

i=4 j=1<br />

d[4,1] = min<br />

j<br />

3<br />

2<br />

1<br />

0<br />

#<br />

t<br />

o<br />

s<br />

#<br />

0<br />

d[3,1]+insert(t[4])=3<br />

d[3,0]+substitute(s[1],t[4])=5<br />

d[4,0]+delete(s[1])=5<br />

2<br />

1<br />

0<br />

s<br />

1<br />

1<br />

2<br />

1<br />

t<br />

2<br />

2<br />

1<br />

2<br />

o<br />

3<br />

= 3<br />

3<br />

p<br />

4<br />

i


source : s o t<br />

target : s t o p<br />

n = length (target)<br />

m = length (source)<br />

Create matrix d [n, m];<br />

最小编辑距离计算示例<br />

i=4 j=2<br />

d[4,2] = min<br />

j<br />

3<br />

2<br />

1<br />

0<br />

#<br />

t<br />

o<br />

s<br />

#<br />

0<br />

d[3,2]+insert(t[4])=2<br />

d[3,1]+substitute(s[2],t[4])=4<br />

d[4,1]+delete(s[2])=4<br />

2<br />

1<br />

0<br />

s<br />

1<br />

1<br />

2<br />

1<br />

t<br />

2<br />

2<br />

1<br />

2<br />

o<br />

3<br />

= 2<br />

2<br />

3<br />

p<br />

4<br />

i


source : s o t<br />

target : s t o p<br />

n = length (target)<br />

m = length (source)<br />

Create matrix d [n, m];<br />

最小编辑距离计算示例<br />

i=4 j=3<br />

d[4,3] = min<br />

j<br />

3<br />

2<br />

1<br />

0<br />

#<br />

t<br />

o<br />

s<br />

#<br />

0<br />

d[3,3]+insert(t[4])=3<br />

d[3,2]+substitute(s[3],t[4])=3<br />

d[4,2]+delete(s[3])=3<br />

2<br />

1<br />

0<br />

s<br />

1<br />

1<br />

2<br />

1<br />

t<br />

2<br />

2<br />

1<br />

2<br />

o<br />

3<br />

= 3<br />

3<br />

2<br />

3<br />

p<br />

4<br />

i


最小编辑距离计算示例<br />

s o t 编辑操作①<br />

s t o t (1. 插入t,1分,累计1分)<br />

s t o p (2. t替换p,2分,累计3分)<br />

s o t 编辑操作②<br />

s t (1. 删除o,1分,累计1分)<br />

s t o (2. 插入o,1分,累计2分)<br />

s t o p (3. 插入p,1分,累计3分)<br />

s o t 编辑操作③<br />

s t o t (1. 插入t,1分,累计1分)<br />

s t o p t (2. 插入p,1分,累计2分)<br />

s t o p (3. 删除t,1分,累计3分)<br />

j<br />

3<br />

2<br />

1<br />

0<br />

#<br />

t<br />

o<br />

s<br />

#<br />

0<br />

2<br />

1<br />

0<br />

s<br />

1<br />

1 ② 2<br />

④ ①<br />

2 1<br />

1<br />

t<br />

2<br />

2<br />

o<br />

3<br />

3<br />

③<br />

2<br />

3<br />

p<br />

4<br />

s o t 编辑操作④<br />

s t o t (1. 插入t,1分,累计1分)<br />

s t o (2. 删除t,1分,累计2分)<br />

s t o p (3. 插入p,1分,累计3分)<br />

i


最小编辑距离计算练习<br />

• intention execution<br />

i n t e n t i o n<br />

e x e c u t i o n<br />

s s s s s<br />

2 2 2 2 2 = 10<br />

i n t e n * t i o n<br />

* e x e c u t i o n<br />

d s s s i<br />

1 2 2 2 1 = 8


最小编辑距离计算练习<br />

n<br />

o<br />

i<br />

t<br />

u<br />

c<br />

e<br />

x<br />

e<br />

#<br />

9<br />

8<br />

7<br />

6<br />

5<br />

4<br />

3<br />

2<br />

1<br />

0<br />

#<br />

8<br />

7<br />

6<br />

7<br />

6<br />

5<br />

4<br />

3<br />

2<br />

1<br />

i<br />

7<br />

8<br />

7<br />

8<br />

7<br />

6<br />

5<br />

4<br />

3<br />

2<br />

n<br />

8<br />

9<br />

8<br />

7<br />

8<br />

7<br />

6<br />

5<br />

4<br />

3<br />

t<br />

9<br />

10<br />

9<br />

8<br />

7<br />

6<br />

5<br />

4<br />

3<br />

4<br />

e<br />

10<br />

11<br />

10<br />

9<br />

8<br />

7<br />

6<br />

5<br />

4<br />

5<br />

n<br />

11<br />

10<br />

9<br />

8<br />

9<br />

8<br />

7<br />

6<br />

5<br />

6<br />

t<br />

10<br />

9<br />

8<br />

9<br />

10<br />

9<br />

8<br />

7<br />

6<br />

7<br />

i<br />

9<br />

8<br />

9<br />

10<br />

11<br />

10<br />

9<br />

8<br />

7<br />

8<br />

o<br />

8<br />

9<br />

10<br />

11<br />

12<br />

11<br />

10<br />

9<br />

8<br />

9<br />

n


参考文献<br />

• Daniel Jurafsky & James H. Martin, 2000,<br />

Speech and Language Processing: An<br />

Introduction to Natural Language<br />

Processing, Computational Linguistics,<br />

and Speech Recognition, Chapter 5,<br />

section 5.6, pp153-156, Prentice-Hall Inc..

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!