zoukankan      html  css  js  c++  java
  • 拼音输入法的数学原理

    拼音输入法的数学原理


    声明:引用请注明出处http://blog.csdn.net/lg1259156776/


    引言

    过去的25年里,中文输入法经历从自然音节编码输入,到偏旁笔画拆字输入,再回归自然音节输入的过程。和任何事物的发展一样,这个螺旋式的回归不是简单的重复,而是一种升华。[摘自吴军的数学之美]


    输入法

    输入法需要解决两个问题:一是对拼音编码(或者是拆分偏旁的编码);二是消除歧义性的编码。只有两个方面都缩短时,汉字的输入才能变快。早期的输入法只重视了第一部分,过分追求最短编码,而忽略了消除歧义性的编码。比如采用拼音输入首字母的方法对汉字进行编码,这样虽然单个汉字的编码缩短了不少,但是有大量的重复编码,即一个编码对应n多个汉字,为了找到相应的汉字需要翻好多页,这样的输入法是不可能输入很快的。而中间发展的五笔输入法,通过偏旁笔画拆分能够很好地消除奇异性,也就是说编码的重复性低,但是对于输入人员的要求比较高,首先得记忆复杂的编码,其次还得思考输入汉字如何进行拆分,如果拆分错误,找来找去还找不到对应的汉字,这样就使得输入效率变低。也许对于专业人士,可能具有良好的演示效果,但是对于这种大众化的应用,最好还是编码越简单越自然越好。

    ps:在我们老家,还有好多人都不太懂拼音输入,更别提五笔输入了。所以,大众化的应用最好还是简单有效的好。

    研究表明,脱稿打字会严重中断思维,如果一个输入法中断了人们的思维过程,就和人的自然行为不相符合。认知科学已经证明,人一心无二用。如果要求再输入汉字的时候还要去中断思维去想待输入汉字的编码按键,这样就很容易导致思维中断,这样的输入法的认可度也就会很低。所以,这也是后期输入法回归到自然全拼音节编码输入的原因。这个时期的编码输入与早期的拼音编码输入是不同的,考虑的本质是不一样的。早期采用拼音输入是还没有找到复杂的编码方式,而后期的回归是处于“自然”输入的考虑。两者有本质的差别。


    汉字输入需要敲多少次键

    统计一下汉字的信息熵,GB2312简体中文字符集一共有6700多个常用汉字,用键盘上的26个字母对汉字进行编码。可以统计一下每个汉字的使用相对频率,可以计算出它的信息熵,香农第一定理指出了,对于一个信息,任何编码的长度都不小于它的信息熵。因此,可以在不考虑上下文相关性,大致可以估算出信息熵在10个比特以内。而输入法只能用26个字母进行输入,每个字母可以代表log264.7比特,其实也就是26个字母的最大信息熵,26i=1126log1264.7,这样输入一个汉字平均需要敲键盘10/4.72.1次。现在是以单字作为统计,如果以词为单位统计信息熵,在没有考虑上下文信息情况下,这样每个汉字的平均信息熵就会减少,汉字的信息熵大约8比特。以词为单位输入一个汉字平均只需要敲击1.7次键盘。这就是现在所有输入法都是基于词输入的根本原因。如果考虑到上下文的信息,对汉语建立一个基于词的统计语言模型,这样输入一个汉字只要敲击6/4.7=1.3次键。如果一个中文输入法能够做到这一点,就比英文输入快多了。


    拼音转汉字的算法

    类似地图上的最短路径规划,采用动态规划。实际上输入法是一个将拼音串转变为汉字串的转换器。每个拼音对应多个汉字,把一个拼音串对应的汉字从左到右连起来,就构成了一张有向图。选取具有最大概率的路径,通过取对数取反,就转变为了选取最短路径的算法。而拼音串到汉字串的转移概率可以采用马尔可夫模型的一步转移概率来解决。

    个性化的语言模型

    现在的输入法都不是一个静态的,指的是所有的语料在安装好输入法应用后就不变了。实际上像微软、搜狗等输入法都具有学习用户输入习惯的功能,比如输入一个不常用的词,第一次输入时还需要往后翻好几页才能找到这个词,但是随着该词的输入次数增多,输入法就能学习到用户的输入个性,当再次输入时,该不常用的词的排名就会靠前。

    实际上为用户定制个性化的语言模型是在客户端的一种不错的尝试。个性化的出发点是不同人平时写的东西主题不同,由于文化的差异,用词习惯不同,说话和写作的水平不同,因此对于消除歧义的多个词的排名顺序也就应当不一样,因此也应该各有各的语言模型。

    例如搜狗输入法就有个性化的定制,比如对于某些主题、专业词汇等,如医学词汇,物理化学等。用户在安装应用时可以选择自己的常用输入主题,从而实现个性化的定制。

    最后,通用语言模型+个性化用户定制的模型相结合,能够实现很高的输入效率。


    2015-9-23 艺少

  • 相关阅读:
    怎么查看京东店铺的品牌ID
    PPT编辑的时候很卡,放映的时候不卡,咋回事?
    codevs 1702素数判定2
    codevs 2530大质数
    codevs 1488GangGang的烦恼
    codevs 2851 菜菜买气球
    hdu 5653 Bomber Man wants to bomb an Array
    poj 3661 Running
    poj 1651 Multiplication Puzzle
    hdu 2476 String Painter
  • 原文地址:https://www.cnblogs.com/huty/p/8519129.html
Copyright © 2011-2022 走看看