🚀火箭升空之时 When Rocket Launches
  • 开始计时
  • 三 (高中时期)
    • 青春
    • 拆手后,成功前
    • 缺失的父亲
    • 冬至
    • 所谓风度
    • 2012春节有感
    • 论爱情
    • 人性的分裂与回归
    • 门里门外
    • 雨感
    • 那些生命中重要的人们
    • 你失去什么,必将得到什么
    • 我们为什么活着
    • A Simple Life
    • 走路回家
    • 对于发动罢餐的倡议书
    • 毕业后的新生演讲
  • 二 (大学时期)
    • 还有16天啊。还有1个月啊。时间怎么过的那么慢呢。时间怎么过的那么快呢
    • 这一年很乱
    • 我在清华,过得很好
    • 冬至
    • 我在一个角落里,光明的角落里
    • 与郭家宝学长谈后感受
    • 交流琐记零——缘起
    • 交流琐记一——张广艳老师
    • 交流琐记二——邓俊辉老师
    • 乱吐一气
    • Good Luck To You
    • 春
    • 夏
    • 秋
    • 冬
    • 当夜色降临
    • 旅美日记一
    • 旅美日记二
    • 旅美日记三
    • 旅美日记四
    • 旅美日记五
    • 旅美日记末
    • 6月10日归家记
    • 提早知道的事实
    • 再给我点时间
    • 雷阵雨
  • 一 (博士时期)
    • 碎片
    • 矛盾
    • 猛然焦虑
    • 透视耳
    • “阵雨转多云,南风三级”
    • 时间
    • 医院琐事
    • 出院琐事
    • 第二人生
    • 下坠
    • 拾珠
    • 十年。
    • 学生时代的终结
  • 零(毕业至今)
    • 而那过去了的 就会成为亲切的怀恋
    • 长不大的人
    • 给兄弟张一鸣的婚礼致辞
    • 两本读不下去的书
    • 落叶
    • 换工记
  • 日记和其他
    • 日记:高中
    • 日记:大学
  • 微信公号归档(待补充)
    • 我想做的事
    • 人机交互科普集
      • 手机键盘是帮你怎么纠错的 [打字系列Vol.1]
      • 滑行输入是怎么工作的 [打字系列Vol.2]
      • 盲人是怎么用手机打字的 [打字系列Vol.3]
      • 十指打字一定比一指禅快吗?[打字系列Vol.4]
      • 想不到吧,emoji也可以说出来 [打字系列Vol.5]
      • 手写笔的不完全发展史[触屏系列 Vol.3]
      • 汉字输入法的不完全发展史 [打字系列Vol.6]
      • 手机屏幕是怎么判断你想点哪儿的?[触屏系列Vol.1]
      • 运动障碍者是怎么用触摸屏的 [触屏系列Vol.2]
      • 验证码是如何把盲人拒之门外的 [无障碍系列 Vol.1]
    • 科研相关
      • 怎么产生一个好的科研想法?
      • 一些老板和我的对话
      • 我是怎么做文献调研的
      • DrustZ的论文小课堂 [摘要Abstract]
      • DrustZ的论文小课堂 [引言Introduction]
      • DrustZ的论文小课堂 [相关工作Related Work]
      • DrustZ的论文小课堂[研究方法]
      • DrustZ的论文小课堂[结果部分Results]
      • DrustZ的论文小课堂[讨论与结论]
      • DrustZ的论文小课堂[番外篇:Rebuttal]
    • HCI PhD 申请的一些经验
    • 如何做一个帅气(划掉)的PhD
    • HCI PhD 找工作的一些经验(教职篇)
    • HCI PhD 找工作的一些经验(业界篇)
    • 游记
      • 7/5旅行日志-巴黎
      • [旅行日志] 7/6 - 巴黎
      • [旅行日志] 7/7 - 圣米歇尔山
      • [旅行日志] 7/9 香波尔城堡
      • [旅行日志] 7/10-7/12 尼斯
      • [旅行日志] 7/12-7-14阿维尼翁
      • [旅行日志] 7/14-7/16 尼姆和阿尔勒
      • [旅行日志] 7/16-7/20 阿斯佩谷
      • [旅行日志]7/22 - 7/24 弗莱堡
      • [旅行日志] 7/25 - 7/30 瑞士
      • [旅行日志] 7/31-8/3 伊斯坦布尔
      • [旅行日志] 8/4-8/6 卡帕多奇亚
      • [旅行日志] 8/7-8/10 费特希耶和棉花堡
      • [旅行日志] 8/10 - 8/13 雅典
      • [旅行日志] 8/13 - 8/17 圣托里尼
      • [旅行日志] 8/18 - 8/20 威尼斯
      • [旅行日志] 8/20 - 8/23 佛罗伦萨
      • [旅行日志] 8/24 - 8/30 罗马和那不勒斯
      • [旅行日志] 8/31 - 9/1 梅尔祖卡
      • [旅行日记] 9/2 - 9/3 马拉喀什
      • [旅行日志] 9/3-9/5 菲斯
      • [旅行日志] 9/5-9/6 卡萨布兰卡
      • [旅行日志] 9/6 - 9/9 开罗
      • [旅行日志] 9/9 - 9/12 卢克索
      • [旅行日志] 9/12 - 9/14 番外篇:各大机场
      • [旅行日志] 9/14-9/16 悉尼
      • [旅行日志] 9/17 - 9/23 墨尔本
      • 到陌生的小岛去
    • 周末推荐
  • 发射
由 GitBook 提供支持
在本页
  • # 一句话总结
  • # 目录
  • 简单方案:找词典
  • 进阶方案:引入空间模型
  • 扩展:中文输入
  • 硬核时刻:单词相似度

这有帮助吗?

  1. 微信公号归档(待补充)
  2. 人机交互科普集

手机键盘是帮你怎么纠错的 [打字系列Vol.1]

这是人机交互科普文章的第一篇,就以我研究的领域“文字输入”来打头阵。

试着在你的手机英文键盘上按下这几个键:h, e, k, k, o 再按空格,99%的情况下你会发现她被纠正成了hello。 智能纠错已经成为现代交流不可或缺的一部分,它是怎么工作的呢?

# 一句话总结

手机键盘会通过空间分布模型计算手指点击位置的概率,再通过查找词典的方法来提供纠错的建议。

# 目录

  • 简单方案:找词典

  • 进阶方案:引入空间模型

  • 扩展:中文输入

  • 硬核时刻:单词相似度

简单方案:找词典

看到hekko的时候,大多数人会想到hello,因为这个词很常见,而且和hekko很接近。手机键盘也是如此:在键盘里有一个词典,里面保存了许多拼写正确的单词以及它的使用频率。通过把词典里的词和打出来的词进行比较,键盘会找出最常见并且最接近的那个单词。词典往往是从很大的文本库里收集构建出来的,每一项包含单词以及它的使用频率(也就是这个单词总共在文本库里出现过几次)。比如我们把马宝国老师的话“这两个年轻人不讲武德,来骗,来偷袭,我六十九岁的老同志,这好吗?这不好” 当作文本库来制作一个词典,那么结果就是

词语
词频

这

3

来

2

两个

1

年轻人

1

(这里只列出词典前四项)

这句话里,“这”出现了三次,所以它的词频就是3,”年轻人“出现了一次,所以它的词频就是1。当然,键盘里的词库通常会用成千上万的文章(例如报纸,维基百科)作为文本库,基本上涵盖了我们日常要用到的词语。

当你打出一个单词序列hekko的时候,键盘会发现它不在词典里,于是从词典里找到和hekko拼写最靠近的单词(如何判断两个词接近请移步硬核时刻),比如hello, hero,gecko。假设hello的使用频率是50000(也就是hello在文本库里被使用了50000次),hero是3000,gecko是100,那么词典就会选择频率最高,也就是最常见的那个单词作为纠错的结果。

这时候或许有聪明的小朋友想到,没有必要每次都比较词典里的每一个词(比如我打hekko,那么wechat肯定不是我想打的词)。因为大部分时候大家打错都是因为手指点错了某一个键,比如hekko是把字母键l点成了k。这种错误往往会发生在相邻的键位上,因此每当手指按下一个键的时候,我们只需要寻找相邻键字母的单词就能解决大多数问题。比如手指在打k的时候,k周围的字母有i,o,j,l,m,那么我们只需要把k的位置替换成其他的四个字母,然后看一看词典里有没有对应的词,再根据频率选出最常用的就可以了。实际上,iOS最初的键盘就是这么设计的:

(尽管你看到的iOS的键盘是左边的样子,但是当你点击其中一个键,比如F的时候,键盘会把它周围所有可能的字母都考虑在内,来纠正手滑打错的问题。图摘自Creative Selection --- by Ken Kocienda)

是不是觉得很神奇?那么问题来了---请你按下这几个键:w,k,n。在按k的时候,你可以尝试往k键的左半边或者右半边按一下,会发现有时候建议的单词是win,有时候是won,这是为什么呢?

进阶方案:引入空间模型

如果你键盘的建议单词情况如上所述,那么可以肯定的是,它引入了一个空间模型。而更可能的是,当你点的k比较靠左时,键盘会建议win,如果点在了k键靠右的地方,键盘会建议won。空间模型指的是对于每一个键位,都对应了一个空间分布模型来计算一个点击位置的概率。简单来说,你的每一个点击都会产生一个概率分布:比如按在K字母的正中央,那么键盘可能认为点K的概率为99.9%,点JLMN为0.001%,更远一点的键则概率更小但大于零。但是如果按在K和L的中间,那么键盘可能认为点K的概率和L的概率都是45%。一般来讲,分布的空间模型是一个二维高斯模型,越靠近中心的点概率越大,远离中心的点概率会迅速减小。

(左边是二维高斯概率分布示意图,概率从中心向四周迅速减小。右边是人们在手机打字时点每一个按键的落点分布(the invisible keyboard),可以看到,越靠近每一个键的中心,落点就越多,越靠近边缘的地方落点越稀疏,所以我们可以用二维高斯分布作为键盘的空间模型。)

在你点击一系列键之后,键盘就会计算出每个点击对应字母的分布,再找到概率最大的字母序列。例如上面的例子,依次按下三个键w,k,n。因为每次都点在了按键内部,所以最为可能的序列就是wkn。然而wkn并不是一个拼写正确的单词,此时键盘就会在字典里查找可能的单词,然后锁定在与之最相近且常用的 win 和 won。当两个候选词词频相近时,就需要用空间的概率来决定改成哪一个单词。假如你点k时,落点靠左:

那么根据空间模型,字母i的概率要比字母o更大(落点距离I键的中心更近),因此会选择win作为改正单词。如果落点靠右:

由于落点更靠近O键的中心,这次字母o的概率要更大一些,因此会选择won作为改正单词。

扩展:中文输入

讲了半天英文,中文其实也是一样的道理。如果是拼音输入法的话,会首先根据手指的落点找到对应的字母,然后根据拼音找到对应的汉字。输入拼音的部分基本上和输入英文是相同的,那么有了拼音,输入法怎么找到最可能的汉字呢?

答案还是词频。也就是说,哪一个字、词最经常被用到,那么它就是最佳候选词。有的时候,单个词的词频不够,还需要用到不同词组合的频率。比如我们打laoshi,输入法很可能建议”老师“;但如果我们打laoshiren,“老实人”又会变成最可能的单词,因为“老师人”的组合要远远比“老实人”罕见。

硬核时刻:单词相似度

这里是硬核一点的知识,面向想要进一步了解的同学们:)

在词典法的解释中我们提到了单词之间要“接近”,也就是拼写要相似。但是如何具体的定义两个单词的相似度呢?计算机学科里面称之为“编辑距离”:将一个单词转化为另一个单词时所需要的最小编辑次数。编辑的操作可以是替换一个字符,插入一个字符,或者删除一个字符。

例如 hekko 与 hello 的编辑距离是 2,最少需要把两个k替换为l。hekko 和 hero 的编辑距离也是2:把第一个k替换为r,然后删掉第二个k。hekko和hi的编辑距离是 4,需要把e替换为i,然后删掉kko。所以比起hi,hello和hero更接近hekko。相似度的计算则需要用到一种叫做“动态规划“的算法,感兴趣的话可以在网上搜索,此不展开。


通过引入空间模型+词典词频的方法(专业上称后者为语言模型),我们基本上就可以解释智能纠错的原理啦。当然,真正用在你的手机键盘上的不只有纠错,还有单词补全(比如输入com会建议computer),但背后的思想基本是一致的。现在的键盘引入了更为复杂的空间模型和语言模型,也加入了个性化的词典来记住你所输入过的单词。当然,有时候智能纠错也会整出一些幺蛾子,比如输入法可能因为你经常打某个词而调高了它的频率,在某些时刻闹出笑话:

本文引用: [1] Ken Kocienda: Creative Selection, 2018 [2] Suwen Zhu, Tianyao Luo, Xiaojun Bi, Sh umin Zhai: Typing on an Invisible Keyboard, 2018

上一页人机交互科普集下一页滑行输入是怎么工作的 [打字系列Vol.2]

最后更新于1年前

这有帮助吗?