因为在学校做的东西用到了HSMM(隐式半马尔科夫模型),所以对马尔科夫也算是不少接触,但在看吴军的《数学之美》之后,我才知道马尔科夫在输入法等软件上的应用。
翻译软件、搜索引擎、输入法软件,这些都是我们常常使用到的工具。有没有好奇过百度、谷歌是怎么把英文翻译成中文的?我们在打字的时候,输入前面的字,输入法是如何联想到后面的字的(而且正确率居然还这么高)?
对于翻译软件,也许会觉得:是不是计算机理解了我输进去的英文的含义,然后再翻译成中文的?
一开始科学家们也是这么想的,他们花了大量的时间来让计算机理解人类语言,事实证明,效果并不好。
于是,一个新的想法就出现了。也许计算机根本就不需要理解人类语言,它只要能够给出正确的结果就好了。看起来有点不可思议,好像不太可行吧,不过事实上就是这样。(这让我想到我上大学之后,很多课都没有理解过老师在讲些什么,只要考试前刷一刷历年题,会考试就好了。)
就像不理解上课内容,通过考前刷题来考试一样。计算机也通过对大量的语言资料进行分析,通过统计分析,来估计我们接下来要输些什么,输入法联想就这么出现了。
还是有点抽象对不对?现在我们来想象一下下面的这个场景:
假设我们自己就是一个输入法软件。这个时候用户输入了一个字——“睡”,我们来大胆联想一下他下一个字会输入什么。
我猜这个时候大家的答案都一样,下一个他很可能输入——“觉”。
为什么我们会觉得他下一个字很可能输入的是——“觉”呢?因为我们在日常生活中发现,在“睡”这个字后面跟的一般都是“觉”。现在的输入法软件就是这么做的:他搜集很多语言资料,发现在“睡”这个字后面,出现的下一个字很可能是“觉”,于是就把“觉”作为联想词呈现出来。
具体是怎么做的呢?
假设计算机现在了很多很多语言资料,它把其中出现的所有“睡”字及其它之后的那一个字找出来,当语料非常多的时候,根据大数定律,我们可以得到: