尽管智能手机取得了成功并被广泛采用,但使用它们编写较长的文本仍然相当麻烦。正如人们所写的那样,语法错误通常会潜入文本中(在正式情况下尤其不受欢迎),并且在控制有限的小型显示器上纠正这些错误可能会很耗时。
为了解决其中的一些挑战,我们推出了直接内置于Pixel 6上的Gboard中的语法更正功能,该功能完全在设备上运行,以保护隐私,在用户打字时检测并建议更正语法错误。构建这样的功能需要解决几个关键障碍:内存大小限制、延迟要求和处理部分句子。目前,该功能能够纠正英语句子(我们计划在不久的将来扩展到更多语言),并且几乎可以在任何带有 Gboard 1的应用程序上使用。
Gboard 建议如何在用户键入时纠正不合语法的句子。
模型架构
我们训练了一个序列到序列的神经 络来获取输入句子(或句子前缀)并输出语法正确的版本——如果原始文本已经语法正确,则模型的输出与其输入相同,表示不需要更正。该模型使用混合架构,将Transformer 编码器与LSTM 解码器相结合,这种组合提供了质量和延迟的良好平衡。
移动设备受限于有限的内存和计算能力,这使得构建高质量的语法检查系统变得更加困难。我们使用一些技术来构建小型、高效且功能强大的模型。
通过采用这些技术,生成的模型仅占用 20MB 的存储空间,并在 Google Pixel 6 CPU 上在 22 毫秒内对 60 个输入字符进行推理。
训练模型
为了训练模型,我们需要<原始,校正>文本对形式的训练数据。
生成小型设备上模型的一种可能方法是使用与基于云的大型语法模型相同的训练数据。虽然这些数据产生了相当高质量的设备模型,但我们发现使用称为硬蒸馏的技术来生成与设备域更好匹配的训练数据会产生更好的质量结果。
硬蒸馏的工作原理如下:我们首先从公共 络上收集了数亿个英语句子。然后,我们使用基于云的大型语法模型为这些句子生成语法更正。然后,这个 < original , Corrected > 句子对的训练数据集用于训练可以纠正完整句子的较小的设备上模型。我们发现,与基于用于训练基于云的模型的原始数据构建的类似大小的设备上模型相比,从该训练数据集构建的设备上模型产生的建议质量明显更高。
然而,在根据这些数据训练模型之前,还有一个问题需要解决。为了使模型能够在用户键入时纠正语法(移动设备的一项重要功能),它需要能够处理句子前缀。虽然这可以在用户只输入句子的一部分时进行语法校正,但此功能在消息传递应用程序中特别有用,在这些应用程序中,用户通常会省略句子中的最后一个句点,并在他们完成输入后立即按下发送按钮。如果语法纠正只在完整的句子上触发,它可能会漏掉很多错误。
这就提出了如何确定给定句子前缀在语法上是否正确的问题。我们使用启发式来解决这个问题——如果一个给定的句子前缀可以完成以形成一个语法正确的句子,那么我们就认为它是语法正确的。如果不是,则认为它是不正确的。
用户到目前为止输入的内容 |
建议的语法修正 |
She puts a lot |
|
She puts a lot of |
|
She puts a lot of effort |
|
She puts a lot of effort yesterday |
Replace “puts” with “put in”. |
GEC 关于不完整的句子。有效的句子前缀没有更正。
我们创建了第二个数据集,适用于训练基于云的大型模型,但这次侧重于句子前缀。我们使用上述启发式方法生成数据,方法是从基于云的模型的训练数据集中获取 < original , correct > 句子对,并从中随机抽取对齐的前缀。
例如,给定 < original , correct > 句子对:
原句:She puts a lot of effort yesterday afternoon.
更正句:She put in a lot of effort yesterday afternoon.
我们可能会采样以下前缀对:
原前缀:She puts
更正前缀:She put in
原前缀:She puts a lot of effort yesterday
更正前缀:She put in a lot of effort yesterday
然后,我们使用神经语言模型(在本质上类似于SmartCompose使用的模型)将每个原始前缀自动补全为一个完整的句子。如果一个全句语法模型在整个句子中没有发现错误,那么这意味着至少有一种可能的方式来完成这个原始前缀而不会产生任何语法错误,因此我们认为原始前缀是正确的并输出 <原始前缀,原始前缀> 作为训练样例。否则,我们输出<原始前缀,更正前缀>。我们使用这些训练数据训练了一个基于云的大型模型,该模型可以纠正句子前缀,然后使用该模型进行硬蒸馏,生成新的<与设备上域更好匹配的 原始、更正>句子前缀对。
最后,我们通过将这些新的句子前缀对与完整的句子对相结合,构建了设备端模型的最终训练数据。然后,在此组合数据上训练的设备上模型能够纠正完整的句子和句子前缀。
设备上模型的训练数据是从基于云的模型生成的。 设备上模型的训练数据是从基于云的模型生成的。
结论
我们通过设计紧凑的模型架构并在训练期间通过硬蒸馏利用基于云的语法系统,构建了一个小型的高质量语法校正模型。这种紧凑的模型使用户能够完全在他们自己的设备上更正他们的文本,而无需将他们的击键发送到远程服务器。
致谢
我们非常感谢其他团队成员的重要贡献,包括 Abhanshu Sharma、Akshay Kannan、Bharath Mankalale、Chenxi Ni、Felix Stahlberg、Florian Hartmann、Jacek Jurewicz、Jayakumar Hoskere、Jenny Chin、Kohsuke Yatoh、Lukas Zilka、Martin Sundermeyer、 Matt Sharifi、Max Gubin、Nick Pezzotti、Nithi Gupta、Olivia Graham、Qi Wang、Sam Jaffee、Sebastian Millius、Shankar Kumar、Sina Hassani、Vishal Kumawat 和张元博、李云鹏、戴玉新。我们还要感谢 Xu Liu 和 David Petrou 的支持。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!