拼音输入法

来源:互联网 发布:网络爬虫 apk 编辑:程序博客网 时间:2024/04/30 14:07

输入法输入汉字的快慢取决于 对汉字编码的平均长度,也就是 击键次数 乘以 寻找这个键所需要的时间。

对汉字的编码分为两部分:对拼音的编码和消除歧义性的编码

最终选择拼音输入法,原因有三个优点,可以让他输入速度并不慢:

1、不需要专门学习

2、输入自然,不会中断思维,也就是找每个键的时间非常短

3、编码长,有信息冗余量,容错性好

 然后要解决的问题是。排除一音多字的歧义性。

 

对常见的字用较短的编码对不常见的字用较长的编码,这样平均起来每个汉字的编码长度可以缩短。我们假定每一个汉字的频率是
p1, p2, p3, ..., p6700
它们编码的长度是
L1, L2, L3, ..., L6700
那么,平均编码长度
p1×L1 + p2×L2 + ... + p6700×L6700
香农第一定理指出:这个编码的长度的最小值是汉字的信息熵,也就是说任何输入方面不可能突破信息熵给定的极限。当然,香农第一定理是针对所有编码的,不但是汉字输入编码的。这里需要指出的是,如果我们将输入法的字库从二级国标扩展到更大的字库 GBK,由于后面不常见的字频率较短,平均编码长度比针对国标的大不了多少。让我们回忆一下汉字的信息熵(见
http://www.googlechinablog.com/2006/04/4.html),
H = -p1 * log p1 - ... - p6700 log p6700。

我们如果对每一个字进行统计,而且不考虑上下文相关性,大致可以估算出它的值在十比特以内,当然这取决于用什么语料库来做估计。如果我们假定输入法只能用 26 个字母输入,那么每个字母可以代表 log26=4.7 比特的信息,也就是说,输入一个汉字平均需要敲 10/4.7= 2.1 次键。
如果我们把汉字组成词,再以词为单位统计信息熵,那么,每个汉字的平均信息熵将会减少。这样,平均输入一个字可以少敲零点几次键盘。不考虑词的上下文相关性,以词为单位统计,汉字的信息熵大约是8比特作用,也就是说,以词为单位输入一个汉字平均只需要敲 8/4.7=1.7 次键。这就是现在所有输入法都是基于词输入的内在原因。当然,如果我们再考虑上下文的相关性,对汉语建立一个基于词的统计语言模型(见
http://www.googlechinablog.com/2006/04/blog-post.html),我们可以将每个汉字的信息熵降到 6 比特作用,这时,输入一个汉字只要敲 6/4.7=1.3 次键。如果一种输入方法能做到这一点,那么汉字的输入已经比英文快的多了。

但是,事实上没有一种输入方法接近这个效率。这里面主要有两个原因。首先,要接近信息论给的这个极限,就要对汉字的词组根据其词频进行特殊编码。事实上像王码这类的输入方法就是这么做到,只不过它们第一没有对词组统一编码,第二没有有效的语言模型。这种编码方法理论上讲有效,实际上不实用。原因有两个,第一,很难学;第二,从认知科学的角度上讲,人一心无二用,人们在没有稿子边想边写的情况下不太可能在回忆每个词复杂的编码的同时又不中断思维。我们过去在研究语言识别时做过很多用户测试,发现使用各种复杂编码输入法的人在脱稿打字时的速度只有他在看稿打字时的一半到四分之一。因此,虽然每个字平均敲键次数少,但是打键盘的速度也慢了很多,总的并不快。这也就是为什么基于拼音的简单输入法占统治地位的原因。事实上,汉语全拼的平均长度为 2.98,只要基于拼音的输入法能利用上下文彻底解决一音多字的问题,平均每个汉字输入的敲键次数应该在三次左右,每分钟输入 100 个字完全有可能达到。

另外一个不容易达到信息论极限的输入速度的原因在于,这个理论值是根据一个很多的语言模型计算出来的。在产品中,我们不可能占有用户太多的内存空间,因此各种输入方法提供给用户的是一个压缩的很厉害的语音模型,而有的输入方法为了减小内存占用,根本没有语言模型。拼音输入法的好坏关键在准确而有效的语言模型。另一方面,由于现有输入方法离信息论给的极限还有很大的差距,汉语输入方法可提升的空间很大。

 

输入法(拼音转汉字)和寻找最短路径一样,都是动态规划。

 

个性化的语言模型:

训练一个个性化的语言模型,并且要处理好它和通用语言模型的关系。

训练一个一元模型不需要太多数据,经验做法:用户词典,是一个小规模的一元模型加上非常小量的N元组。

更好的训练个性化的语言模型,需要用到余弦定理和文本分类技术。

最好的办法是 综合 通用模型 和 个性化模型。使用最大熵的简化模型:线性插值的模型

新的组合模型不确定性小,是更好的模型。

 

转自《数学之美》