您的位置:首页 > 其它

读数学之美——统计语言模型(马尔科夫)

2015-06-13 10:03 239 查看
因为在学校做的东西用到了HSMM(隐式半马尔科夫模型),所以对马尔科夫也算是不少接触,但在看吴军的《数学之美》之后,我才知道马尔科夫在输入法等软件上的应用。

翻译软件、搜索引擎、输入法软件,这些都是我们常常使用到的工具。有没有好奇过百度、谷歌是怎么把英文翻译成中文的?我们在打字的时候,输入前面的字,输入法是如何联想到后面的字的(而且正确率居然还这么高)?

对于翻译软件,也许会觉得:是不是计算机理解了我输进去的英文的含义,然后再翻译成中文的?

一开始科学家们也是这么想的,他们花了大量的时间来让计算机理解人类语言,事实证明,效果并不好。

于是,一个新的想法就出现了。也许计算机根本就不需要理解人类语言,它只要能够给出正确的结果就好了。看起来有点不可思议,好像不太可行吧,不过事实上就是这样。(这让我想到我上大学之后,很多课都没有理解过老师在讲些什么,只要考试前刷一刷历年题,会考试就好了。)

就像不理解上课内容,通过考前刷题来考试一样。计算机也通过对大量的语言资料进行分析,通过统计分析,来估计我们接下来要输些什么,输入法联想就这么出现了。

还是有点抽象对不对?现在我们来想象一下下面的这个场景:

假设我们自己就是一个输入法软件。这个时候用户输入了一个字——“睡”,我们来大胆联想一下他下一个字会输入什么。

我猜这个时候大家的答案都一样,下一个他很可能输入——“觉”。

为什么我们会觉得他下一个字很可能输入的是——“觉”呢?因为我们在日常生活中发现,在“睡”这个字后面跟的一般都是“觉”。
现在的输入法软件就是这么做的:他搜集很多语言资料,发现在“睡”这个字后面,出现的下一个字很可能是“觉”,于是就把“觉”作为联想词呈现出来。

具体是怎么做的呢?

假设计算机现在了很多很多语言资料,它把其中出现的所有“睡”字及其它之后的那一个字找出来,当语料非常多的时候,根据大数定律,我们可以得到:





这里的

为“睡”,

为“觉”。

代表在预料中,“睡觉”两个字连续出现的次数;

代表“睡”出现的次数。

计算机对于“睡”之后出现的每一个字计算一次这个条件概率,再比较所有条件概率的大小,根须条件概率的大小排序,就可以给出在“睡”之后,应该联想出来的字。

以上就是统计语言模型的基本原理。那么问题来了:

1.为什么只考虑



的条件概率,不多往前考虑几个字呢?

以上其实是马尔科夫模型。它服从马尔科夫假设:在已知现在的条件下,它的将来不依赖于它以往的过去。

听起来有点抽象,上概率表达:





我们也可以提高该模型的阶次:





但是我们不能一直一直把阶次增加下去,因为对于实用性来说,阶次的增加会导致计算时间的增长。

并且马尔科夫模型存在一个局限性,即使我们不断的增加阶次,对于跨度太大的关系,它也是cover不到的。这种情况可用长程依赖性来解决(这是个坑!加粗来提醒我填!!)。

2.对于零概率问题

对于某些

可能会出现概率为0的情况。这种情况,我们可以基于Zipf定律和古德-图灵估计来解决。

Zipf定律是指:出现一次的词数量比出现两次的多,出现两次的比出现三次的多。

古德-图灵估计是指:对于在语料中没有出现的词,我们不能认为它的概率为0,因此我们从概率的总量中,分配一个很小的比例给予这些没有出现的词。

所以,我们选择把一些出现频度较小的词的概率分配一点给没有出现的词。对于频度较大的词,它出现的频率即为它的概率。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: