输入法背后隐藏了这么多机器智能?!谷歌首席科学家为你解释

「机器人圈」导览:很多人都用过智能输入法,但很少有人关注过,背后蕴藏的机器智能。本文编译自Google Research Blog,这篇文章以谷歌的智能输入法Gboard为例,详细阐述了其中暗藏的智能技术,作者是语音与键盘团队的首席科学家Françoise Beaufays,以及语音和语言算法团队首席科学家Michael Riley。

我相信,在智能的时代,大多数人每天都会在移动设备键盘上花费大量时间:撰写电子邮件、发短信、参与社交媒体等。可是,大家有没有注意到,移动键盘仍然很繁琐,甚至有些难以处理。用户在移动设备上的打字速度平均要比在物理键盘慢35%。为了改变这一点,我们最近为Gboard for Android提供了许多令人兴奋的改进,致力于创建一个智能机制的愿景——能够以任何你选择的语言来提供建议和纠正错误,从而实现更快的输入。

在认识到移动键盘将触摸输入转换为文本的方式类似于语音识别系统将语音输入转换为文本的方式后,我们就利用我们在语音识别上的经验来探索我们的愿景。

首先,我们创建了强大的空间模型,将原始触摸点的模糊序列映射到键盘上的键,就像声学模型将声音对应到语音单元的顺序一样。

第二,我们构建了一个基于有穷状态转换器(FST)的强大核心解码引擎,以确定给定输入触摸序列的最有可能的单词序列。凭借其在数学形式和语音应用程序上的广泛成功,我们知道FST解码器具有很好的灵活性,而这是支持各种复杂键盘输入行为和语言特性所需要的。而在本篇文章中,我们将详细介绍这两个系统的发展。

神经空间模型

我们通常把移动键盘输入的错误归因于“胖手指打字”(或在滑动打字中跟踪空间相似的单词,如下所示)以及认知和运动误差(表现为拼写错误、字符插入、删除或互换等)。智能键盘需要去解决这些问题,并且能够快速准确地预测期望的单词。因此,我们为Gboard构建了一个空间模型,用于在字符级别处理这些错误,将屏幕上的触摸点映射到实际键中。

两个空间相似的词:“Vampire”和“Value”的平均滑动轨迹

直到最近,Gboard使用高斯模型来量化敲击相邻键的概率,用基于规则的模型来表示认知和运动错误。这些模型简单且直观,但并不允许我们直接优化那些与更好的打字质量相关的指标。根据我们在语音搜索声学模型方面积累的经验,我们用以连接时态分类(CTC)标准训练的单个、高效的长短期记忆网络(LSTM)替代了高斯和基于规则的模型。

然而,实际训练这个模型比我们预期的要复杂得多。虽然声学模型是从人类转录的音频数据进行训练的,但是不能轻易地转录数百万的触摸点序列和滑移痕迹。 所以团队利用用户交互信号,例如用自动修正和建议选择来作为消极和积极的半监督学习信号,从而形成丰富的训练集和测试集。

对应于单词“could”的原始数据点(左),以及每个采样方差的归一化采样轨迹(右)。

我们使用从语音识别文献获得的大量技术来迭代NSM模型,使其足够小且足够快从而可以在任何设备上运行。TensorFlow用于训练数百种模型,优化键盘上显示的各种信号:完成、建议、滑移等。经过一年多的工作,所产生的模型比初始化模型快6倍,小10倍,而且在脱机数据集上中,它们的错误自动更正减少了约15%,错误解码的手势减少了10%。

有穷状态转换器(Finite-State Transducers)

虽然NSM使用空间信息来帮助确定什么被敲击或滑动,但还有一些额外的限制——词汇和语法——这还是可以承受的。词库告诉我们语言中出现了什么单词,而概率语法告诉我们什么单词可能跟随在其他单词的后面。为了对这些信息进行编码,我们使用有穷状态转换器。FST一直是Google语音识别和合成系统的关键组成部分。它们提供了一种原则性的方式来表示自然语言处理中使用的各种概率模型(词库,语法,规范化等)以及在操纵,优化,组合和搜索模型中所需的数学框架。

在Gboard中,key-to-word转换紧凑地代表键盘词库,正如下图所示。它编码从键序列到单词的映射,而且允许替代键序列和可选空格。

该转换沿着从起始状态(粗体1)到最终状态(双圆形状态0和1)的路径编码“I”,“I’ve”,“If”。 每个弧用一个输入键(“:”之前)和一个对应的输出字(在“:”之后)标记,其中ε编码空符号。“I’ve”中的撇号可以省略。用户有时会跳过空格键。为了说明这一点,转换中的单词之间的空格键空间是可选的ε和空格后弧允许接受多个单词。

概率的n-gram转换器用于表示键盘的语言模型。模型中的状态代表一个(上限为)n-1个单词的上下文,并且离开该状态的一个弧被标记有一个后继单词以及其跟随该上下文的概率(从文本数据估计)。这些,以及那个给出关键触摸序列的可能性(滑移类型中的离散点击项或连续手势)的空间模型被组合在一起并用集束搜索来进行探索。

通用FST原则,诸如流式传输,动态模型支持等,为构建新的键盘解码器带来了很大的帮助,但还需要添加一些新的功能。当你说话的时候,你不需要解码器来完成你的话,或者在保存你的几个音节之后猜测你会说些什么;但是当你输入时,你会感激单词完成和预测所带来的帮助。此外,我们希望键盘提供无缝多种语言支持,如下所示。

在Gboard中进行三种语言输入

让我们的新解码器运行是一项复杂的工作,但FST本质上有很多益处。例如,支持印地语等语言的音译只需通用解码器的简单扩展。

音译模型

在许多具有复杂脚本的语言中,已经开发了罗马字母系统,以将字符映射成拉丁字母,这通常是根据其语音发音执行的。例如,拼音“xièxiè”对应汉字“谢谢”(“thank you”)。拼音键盘允许用户在QWERTY布局上方便地输入单词,并将它们自动“翻译”到目标脚本中。同样,一个音译印地语键盘允许用户输入“दांत”(牙齿)“daanth”。而如果说拼音是一个达成共识的罗马字母系统,那印地语音译就相对模糊了。例如“daant”将是“दांत”的有效替代方案。

用于印地语的音译输入

正如我们有从字母序列到单词(词库)的转换映射以及为单词序列提供概率的加权语言模型自动机,我们也为拉丁语键序列和目标脚本符号序列构建了22种印度语的加权转换映射。一些语言有多个书写系统(例如Bodo可以写在孟加拉文或梵文的脚本中),因此在音译和本机布局之间,我们在短短几个月内就建立了57种新的输入法。

FST解码器的一般性质可以让我们利用我们所做的所有工作来支持完成,预测、滑动打字以及许多UI功能,而无需附加的工作,从而使我们能够从一开始就向印度用户提供丰富的体验。

更智能的键盘

总而言之,我们最近的工作将解码延迟降低了50%,将必须由用户手动更正的字数减少了10%以上,从而使我们能够为印度的22种官方语言提供音译支持,并启用了许多新功能,而这些你可能已经注意到了。

虽然我们希望这些最近的变化能够改善你的打字体验,但我们认识到,设备上打字绝对不能全部解决。Gboard仍然可以提出似乎不那么直观,或低效用的建议,手势仍然可以为那些人类永远不会选择的单词解码。但是,我们转向强大的机器智能算法这一行为已经为我们开辟了新的空间,而我们也正在积极探索为全球用户提供更有用的工具和产品。

这项工作由Cyril Allauzen、Ouais Alsharif、Lars Hellsten、Tom Ouyang、Brian Roark和David Rybach在语音数据操作团队的帮助下完成。特别感谢Johan Schalkwyk和Corinna Cortes的支持。

作者:Françoise Beaufays,Michael Riley

来源:Google Research Blog

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据