# 第 21 章 拼音输入法的数学原理

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

拼音输入法的优点：

1. 不需要专门学习；
2. 输入自然，不会中断思维，也就是说找每个键的时间非常短。
3. 因为编码长，有信息冗余，容错性好。如果把字换成词，每个汉字的信息嫡将会减少。如果能更多地利用上下文相关性，当输入一半的时候，可能已经看到自己要找的字了。

## 拼音转汉字的算法

输入法就是将拼音串变为汉字串的转换器。一个拼音可以对应多个汉字，把一个拼音对应的汉字从左到右连起来，就是一张有向图，它被称为网格图或篱笆图。

从第一个汉字到最后一个汉字可以对应很多很多句子，每一个句子和图中的一条路径一一对应。拼音输入法就是要根据上下文在给定拼音条件下找到一个最优的句子（可以参考隐含马尔可夫，前后汉字关系可以只考虑二阶关系，求出概率最大的句子）。

## 个性化的语音模型

每个人的输入习惯不同，可以找到大量符合用户经常输入的内容和用语习惯的语料，训练出一个用户特定的语言模型，步骤如下：

1. 将训练语言模型的文本按照主题分成很多不同的类别，对于每个类，找出它们的特征向量。
2. 统计某个人输入的文本，得到他输入的词的特征向量![Y](https://www.zhihu.com/equation?tex=Y) 。
3. 计算![Y](https://www.zhihu.com/equation?tex=Y)和每个分类特征向量的余弦相似度，并选择前![K](https://www.zhihu.com/equation?tex=K)个和![Y](https://www.zhihu.com/equation?tex=Y)距离最近的类对应的文本，作为这个特定用户的语言模型训练数据。
4. 训练出用户特定的语言模型![M\_1](https://www.zhihu.com/equation?tex=M_1)。大部分情况下，![M\_1](https://www.zhihu.com/equation?tex=M_1)对这个用户的输入比通用模型![M\_0](https://www.zhihu.com/equation?tex=M_0) 要好。但是相对于偏僻的内容，![M\_1](https://www.zhihu.com/equation?tex=M_1)覆盖语言较少，效果就不如![M\_0](https://www.zhihu.com/equation?tex=M_0)了。所以最好是综合二者（线性关系）。

## 小结

汉字的输入过程本身就算人和计算机的通信，好的输入法会自觉或者不自觉地遵守通信的数学模型。
