SMT 简要

 

// first of all, it has been a long time since I write my last blog.
.. so , let me tell you what i've done these dayz.
1 到北京了
2 报道了
3 感冒了
4 水土不服了
5 开始SMT了。

不多说, 转正题吧。

介绍一本自然语言处理中,统计机器翻译的入门workbook。
A statistical MT Tutorial Workbook-write by k. Knight.

详细并且风趣介绍了IBM1--IBM4的smt的机理。。。

想象一个frenhSentence.. -->F[]
    & englishSentence.. -->E[]

假设这是一对已经翻译好的,并且正确的句对。

it's all right if El != Fl...

从这样的一个句对中,我们可以得到什么信息?
加入你有一本英法词典, 你查阅之,发现了如下的东西
F[i]应当和E[j]进行匹配,或者说F[i]是E[j]解释道法语后短语中的一个word。all right?
那么,借助一个一惟的向量alignMent,简记a[LenOfFrenchSentence];
you may ask why the vector length is [LenOfFrenchSentence],
cause what we do is to translate a french sentence into an english one..
用这个a向量我们可以知道了这一对已知窜的 翻译过程中配对。

为什么要有这个a呢? 或许你可以把他想象成是从英语翻译到法语时候,或者反过来,应该遵守的某种语法规则。
虽然,这个规则会让你觉得牵强, 为什么一定是这样安排呢?
为什么只知道配对的一些数据, 就能体现语言中应遵循的语法规则?
嗯, 是这样的。 当我们烦于建立语法树, 而仅仅简单的从一堆已经有的样本里面去获取这些不是很准确的规则。难道不吸引人么?
至少我觉得,这很吸引人,因为我比较懒。而且我认为,数据和频率是非常美妙的东西。或许你看完这篇文章 你也会深有感触。

但先记住,a 代表对齐的向量。 a[j] 对应从1---〉 El的一个数。

接下来再想想从句对
F[1] F[2] ... F[ Fl = LenOfFrenchSentence];
E[1] E[2] ....E[ El = LenOfEnglishSentece].
中还能获得什么信息呢?
嗯, 在你拥有了aligment后,你可以知道更多有趣的东西
例如: 产能(fertility,原文是这个,意思为从1个英语单词能生成几个法语词)
我们记成n[E[i],x], 这里x可以表示从0--〉maxlen[maxlen你可以自己设置,但一般不超过25]。。。
只要统计下 i = a[j]。。代入上边, 就可以晓得了。。

还有就是,或许我们可以知道 一个翻译的概率 从此E[I]翻译到词F[J]的概率
记: t[E[I]][F[J]] (translate)..

先不考虑别的东西。就暂且这三个参数吧。。 接踵而至的, 我们来考虑怎么翻译一句法语到英文。。。
如果假想,你是一个记忆力超群,过目不忘的人。只要你看到一句法语窜,你就晓得你曾经看过的法英句对。
你就像一条影射及其,看到什么就吐出什么。
但考虑一个问题:
你看到了E,你第一印象想到了F1句,但你又响起来E句也曾经翻译到F2中过。

这就好比,虽然你学过英语,但并不是十分擅长写,所以一般过程是,你先想一句中文要表达的句子。
例如, 你想同你的mentor请假。你想说的第一句话是:
亲爱的导师大人,我已经咳嗽了好几天了。
于是你开始思考亲爱的 对应的英语用什么好点呢?
亲爱的: darling, dear, my love..
导师:teacher/ mentor, or someting else.
大人: bigman? ... kidding
...
ect.
所以上述你要挑选哪个词会合时点,在当前的句子里面。
于是我选择,我认为最好的合适的是:dear mentor, I got a cough for couple days. 你觉得怎么样?
俄`` 我自认为,应该没啥问题的。
好了
英文句1
英文句2
。。。
英文句n、
dear1 mentor2, I3 got4 a5 cough6 for7 couple8 days9.
亲爱的[1] 导师[2](大人)[0],我[3]已经[4]咳嗽[6]了好几天[89]了。
里面的[数]记录的就是a这个alignment向量。
个你是如何挑选觉得这个市最好, 而不是选择句1或者句2呢? 因为你觉得那样不合适。。
而不合适怎么体现出来呢? 需要从t[F[J]/E[I]]这个比例来看了,每次你都会选择一个是的组合起来比较恰当的句子。
可想而知,可以表示成一个公式

Chose E = E' which E' maxmize the probabilty: p(F|E')*P(E'). it's very intuitive, right?

怎么得到P(f|e);
由于有各种各样的aligment。 想象法文窜长度如果是l, 那么有(l+1)^m.. m是对应英文窜的长度。
因为每个法文窜中词都可能被分配到任意一个英文词E[i]上。。 是不是太大了,嗯,真的好大,要用程序每个句对全模拟下
是非常不现实的事情。所以最好还是放弃这种想法吧,行不行? 好吧,我接受这个提议,我放弃。
所以,不如我们来定义p(f|e)是怎么得到的
假设从f--〉e 有alignment已知的一个配对a
可以计算其概率为 p(f|e) = II t[e[a[i]]->f[i]] * II n(x|e[a[i]])..
x 为对应的这句话里面e[a[i]]的fertility。
t[e[a[i]]->f[i]]的概率可以实现从语料库中学习得来。
n[x|e[a[i]]也是一样的。
分别统计nc(0|e[a[i]]) ----> nc(1|e[a[i]]) => n[x|e[a[i]] = nc[x|e[a[i]]/ncTotal(nc[*|e[a[i]])
当然我们还得考虑出现这个alignment的概率的大小了。。
所以完整的应该是
p(f|e) = pr(a)* II t[e[a[i]]->f[i]] * II n(x|e[a[i]]).. [1]
p(e) = II p(e[i])[2]

得到公式[1]*[2], 来选择一个使其可能性最大的英文窜e。

how to compute pr(a) is a problem. simply you can fix it to 1/(1+l)^m..
and some algorithms also can help to get pr(a)..
for example : HMM. IBM1 and something else..
my next blog will tell more details and topics.

posted on 2010-09-08 13:46  amojry  阅读(271)  评论(0编辑  收藏  举报