对用户建模:Minuum键盘背后的算法

简介: 当你开创一种新的键盘输入技术时,在交互设计以及后台算法方面,都有大量工作要做。你只需用一用,就能完全理解我们的键盘设计,而使得这种单行输入法可行的真实“魔力”在于驱动它的统计算法。I如果你还没见过或用过Minuum键盘,简单说,这项设计就是把传统的键盘压缩成仅仅一行,使得只要环境允许,在任何地方使用单行输入法成为可能。

当你开创一种新的键盘输入技术时,在交互设计以及后台算法方面,都有大量工作要做。你只需用一用,就能完全理解我们的键盘设计,而使得这种单行输入法可行的真实“魔力”在于驱动它的统计算法。I


如果你还没见过用过Minuum键盘,简单说,这项设计就是把传统的键盘压缩成仅仅一行,使得只要环境允许,在任何地方使用单行输入法成为可能。

image.png

将键盘如此压缩之后,我们马上不得不面对一个基本事实:人类输入是不准确的,而且打字速度越快越不准确。我们并不试图提高用户输入的准确性,而是坦然接受纰漏。


只有同时使用自动更正和歧义消除技术,这种想法才能奏效。“自动更正”是指你输入错了需要纠正,而“歧义消除”承认人类的交互行为从根源上带有模糊性,并利用对语言的理解来减少它。试想一下,这就像语音识别:在一个嘈杂的酒吧里,你朋友们的谈话对错不是问题;人类语言总是模棱两可的,而环境的嘈杂肯定无益于理解。你听懂了谈话,全是因为你对他们的话题具备先验知识。


让我们进入贝叶斯统计的奇妙世界吧!

Minuum将两个因素结合起来判定单词,一个是空间模型(spatial model),它能知道你敲击键盘的精确度(我们进行了用户研究来加以度量),另一个是语言模型,它明白你想要使用哪个单词(我们是从现实生活中大量的文本中建立起这个模型)。假设你在键盘上敲击了五次,有点像是敲了个“hello”,我们就用下面这个贝叶斯方程来测试究竟它有多像你所想要输入的“hello”:

image.png

让我们把这个方程分成几个部分:以给定的键盘敲击为前提,你想要输入的单词是“hello”的概率与空间项与语言项之积成正比。空间项给出你按了一串键是想打出“hello”这个单词的可能性;语言项给出你曾经输入“hello”的概率。


Minuum所做的就是找到使p(word|taps)最大的单词。在上例中,Minuum会算出单词“hello”的得分。要找到那个最佳的单词,Minuum会将这个分数与其他单词的得分(同法所得)作比较。对给定的单词,你的击键位置与之越接近,这个单词的空间项值越高;一个单词在英语(或者是法语、德语、意大利语、西班牙语,只要你将其激活)中越是常见,语言项值就越大。


简单的空间模型

Minuum使用的空间模型真心不简单(请记得空间模型表示人们心中所想与键盘所打有多接近)。这个模型能处理多种误输入,如多打或少打字母。但是,简单模型将按键的概率密度视为以目标字母为中心的高斯分布,它的效果出奇的好。

image.png

这表示,如果你是想打一个“t”,那么“t”键的概率就是最大的,但是你按下了旁边“v”或“g”键的概率仍然相当可观。


简单的语言模型

最简单的语言模型就是计算词频。找一个语料库(corpus),计算每个单词出现了多少次。


Word Frequency
if 1,115,786
IV 5335

要比较两个可能的单词,如“if”和“Ⅳ”,根据上表,键入的是“if”的可能性高出是“Ⅳ”的可能性约200倍。

这个简单模型和简单的空间模型一样,在实际运行中表现优异。更多的改进可以利用上下文,比如紧挨当前条目的上一词。

Word(s) Frequency
what if 13,207
what of 1,380

短语“what if”比“what of”更常见约十倍,因此,即使“if”与“of”都是非常常见的单词,当前文是“what”时,我们可以肯定的推断“if”就是你想输入的单词。


单词对应高维空间中的点

每当我可以用几何形式将难题描述出来,我就能透彻地理解它。对于消歧难题,我的直觉理解突然顿悟,只要我们能洞悉:单词对应高维空间中的点,而打字就是搜索这些点的过程。不信?听我解释。


Minuum键盘是呈一条直线排列,所以你手指的敲击位置可以用一个数字表示,例如在下图中,敲击“q”键可以记为0至0.04间的一个数字,而按下“p”键可以用0.98至1间的数字表示。

image.png

字母闭联集,从0.0至1.0

两个字母的单词,需要击键两次,所以可以用一对数字来表示。单词“an”,如果输入准确无误,表示为{0.06,0.67},而单词“if”表示为{0.83,0.40}。下图显示了一些常见两字母单词在“单词”空间中的位置。

image.png

对于更长的单词,处理的逻辑一模一样:”and“表示为{0.06,0.67,0.29},”minuum“表示为{0.79, 0.83, 0.67, 0.71, 0.71, 0.79}。不幸的是,维数超过三,可视化就难得多了。


用户敲击的顺序在单词空间中也对应一个点,我们可以称其为输入点。一个单词离输入点越近,它在上文贝叶斯方程的空间项中就会得到更高的分数。奇怪的是,无论你想输入的是什么,它都和你在此空间中实际输入很”接近“。


就让我们来可视化几个单词吧!

我们可以生成一张全图,上面是位列Minuum建议榜首的两字母单词,这些单词都是基于所有可能的输入组合;图中,单词越是常见,它占有的面积越大。鼠标滑过该图,你可以看到程序建议的其他候选替换词。

image.png

用户之前输入了单词”what“,按下上面的上下文键,可以看到当我们使用更好的语言模型来分析时发生了什么。很明显,当我们考虑到上下文时,输入的更有可能是”if“,而不太可能建议替换为”in“,因为”what if“比起”what of“更常见,而”what in“没有”what I‘m“常见。1


统计建模使界面更友好

所有这些复杂的计算使得Minuum可以摆脱传统键盘的一些局限(单行键盘输入法甚至在1吋的屏幕上运行良好)。


这意味着什么呢?只有了解用户,界面才会更友好!谷歌即时搜索之所以厉害,在于它在你敲了两个键之后就知道你要找什么。苹果Siri也离不开复杂的语言建模。Minuum结合使用人类输入的空间和语言模型,可以简化键盘。如果你正在设计一个复杂的界面,好好考虑一下该怎么对用户行为建模以简化所需的交互行为吧。


不考虑上下文,”if“这个单词占有面积很小,周围的单词”it“和”of“占主导地位。这是使用QWERTY布局键盘的副作用。如果不考虑加入学习曲线,我们可以将键盘重新布局,让”i“和”o”还有”f“和”t“键离得很远!我们确实这样做了:马上就有论文发表出来。顺便说一句,这也是为什么Dvorak布局键盘在高歧义场合极为不利于使用;Dvorak键盘上所有的元音字母挨在一起,歧义显著增加。在直觉上,它改变了单词空间,让很多常见词互相紧邻。

相关文章
|
15天前
|
算法
基于模糊控制算法的倒立摆控制系统simulink建模与仿真
本课题针对倒立摆模型,使用MATLAB2022a进行模糊控制器Simulink建模,通过调整小车推力控制摆角,实现系统的稳定。倒立摆作为非线性控制的经典案例,利用模糊控制策略提高了系统的鲁棒性和自适应性,确保了小车在特定位置的稳定停留。
|
4月前
|
算法
基于MPPT最大功率跟踪算法的涡轮机控制系统simulink建模与仿真
**摘要:** 本课题构建了基于Simulink的涡轮机MPPT控制系统模型,采用爬山法追踪最大功率点,仿真展示MPPT控制效果、功率及转速变化。使用MATLAB2022a进行仿真,结果显示高效跟踪性能。MPPT算法确保系统在不同条件下的最优功率输出,通过调整涡轮参数如转速,匹配功率-转速曲线的峰值。该方法借鉴自光伏系统,适应涡轮机的变速操作。
|
1月前
|
算法 安全
分别使用OVP-UVP和OFP-UFP算法以及AFD检测算法实现反孤岛检测simulink建模与仿真
本课题通过Simulink建模与仿真,实现OVP-UVP、OFP-UFP算法及AFD检测算法的反孤岛检测。OVP-UVP基于电压幅值变化,OFP-UFP基于频率变化,而AFD则通过注入频率偏移信号来检测孤岛效应,确保电力系统安全稳定运行。系统使用MATLAB 2013b进行建模与仿真验证。
|
4月前
|
传感器 算法
基于MPPT最大功率跟踪算法的风力机控制电路simulink建模与仿真
**摘要:** 本课题利用MATLAB2022a的Simulink进行风力机MPPT控制电路仿真,关注风力机转速、功率参数及CP效率。MPPT确保风力机在不同风速下优化运行,捕捉最大功率。风力机将风能转化为电能,功率与风速、叶片及发电机特性相关。MPPT算法动态调整参数以保持在最大功率点,常见算法如扰动观察法。仿真包含风速、转速、功率测量及控制算法模块,设计时需综合考虑传感器精度、抗干扰及控制器性能,适应不同风力机和发电机需求。
|
5月前
|
算法
基于LQR控制算法的电磁减振控制系统simulink建模与仿真
该文主要介绍了基于LQR控制算法的电磁减振控制系统在MATLAB2022a中的Simulink建模与仿真。文章展示了系统仿真输出的控制器收敛曲线,并提供了相关图像来解释系统原理。LQR算法通过优化二次成本函数实现振动抑制,尤其适用于电磁减振系统,利用电磁执行机构动态调整力,高效抑制振动。文中附有关键模型和原理图。
|
5月前
|
算法
使用链式栈,实现十进制转八进制:键盘输入一个十进制数,经过链式栈的相关算法,输出八进制数
使用链式栈,实现十进制转八进制:键盘输入一个十进制数,经过链式栈的相关算法,输出八进制数
|
6月前
|
算法
R语言实现 Copula 算法建模依赖性案例分析报告
R语言实现 Copula 算法建模依赖性案例分析报告
|
6月前
|
算法
Copula 算法建模相依性分析股票收益率时间序列案例
Copula 算法建模相依性分析股票收益率时间序列案例
|
6月前
|
算法
R语言实现 Copula 算法建模相依性案例分析报告
R语言实现 Copula 算法建模相依性案例分析报告
|
机器学习/深度学习 算法
【数学建模】逻辑回归算法(Logistic Resgression)
【数学建模】逻辑回归算法(Logistic Resgression)
121 0