创新输入法:引领输入技术的未来潮流 [译]

Keyu Ding, Yongcan Wang, Zihang Xu, Zhenzhen Jia, Shijin Wang, Cong Liu, Enhong Chen

中国科学技术大学,认知智能国家重点实验室,科大讯飞研究院,中国科大讯飞 AI 研究院

摘要

自从 ChatGPT 面世以来,生成式模型在语言处理的诸多方面取得了突破性的进展,已经成为众多自然语言处理任务的首选方法。然而,这些模型在输入技术领域的潜力还远未被完全挖掘。当前很多基于神经网络的技术已经开始应用于中文输入法引擎的构建过程中。以往研究往往默认用户输入的拼音无误,只关注拼音转汉字(P2C)的转换任务,这远远不能满足用户的实际需要。而且,这些研究也未能有效利用用户反馈来改善模型并提供更为个性化的服务。

在我们的研究中,我们推出了一个创新的输入范式,名为 GeneInput。它利用提示指令来应对各种输入情境,并结合智能辅助输入功能,通过用户的实时反馈持续优化模型,为用户带来定制化的输入体验。我们的实验结果显示,GeneInput 在全键序列到字符转换(FK2C)任务上首次实现了业界领先水平。

我们还开发了一种新的奖励模型训练方法,不再依赖于繁杂的手工注释,并且在智能联想和对话辅助任务中的表现甚至超越了 GPT-4。GeneInput 不仅性能优越,而且在鲁棒性、扩展性和在线学习方面也都显示出了比传统输入法更加出色的能力。

1 引言

输入法的首要任务是让我们能够更加便捷地敲打文字。在亚洲的一些语言里,例如中文、日文和泰文,他们不使用我们常见的字母来书写,也就不能直接通过标准键盘输入。这时,用户就得依靠像搜狗输入法讯飞输入法谷歌输入法 这样的商业软件来输入文字。

拼音是中文官方认可的罗马字母拼写系统。在中国,最常用的键盘输入方式有两种:9 键键盘和 26 键键盘,而每种键盘都有各自的输入模式。在实际使用中,输入的情况可能千变万化。图 1 展示了输入中文句子“我爱自然语言处理”(即"I love natural language processing")时可能会用到的各种输入方式。这里列举了一些输入的示例:

用户拼音输入场景中的典型输入模式
用户拼音输入场景中的典型输入模式

图 1: 用户拼音输入场景中的典型输入模式

1). 26 键全拼输入法(如 "wo ai zi ran yu yan chu li")。2). 26 键简拼输入法(如 "w a z r y y c l")。以上两种拼音输入法均在先前的研究中有广泛探讨 Chen et al. (2015);Tan et al. (2022a);Xiao et al. (2022)。3). 9 键全拼输入法(如 "96'24'94'726'98'926'248'54'")。正如图 1 右上角展示的,9 键键盘将 26 个字母映射到 8 个按键上,每个按键代表三至四个拼音字母,这就造成了大量的同音字现象。4). 26 键混合简拼输入法(如 "wo ai zi ran y y c l"),它结合了全拼和简拼输入。在这个混合模式下,简拼可能出现在多个位置。5). 26 键带干扰的拼音输入法(如 "wo ai zhi rna yu uan chu li"),它模拟了用户实际输入过程中可能遇到的各类干扰,如拼音或数字序列。典型错误包括多按一个键(zi 变成 zzi)、漏按一个键(yan 变成 ya)、按键顺序颠倒(ran 变成 rna)以及按错键(yan 变成 uan)。除了键盘操作错误外,还包括由方言差异导致的,比如一些用户可能分不清某些声母和韵母。

除了我们已知的一些典型情形,实际上还有各种各样的噪声可能会出现,而且它们通常以难以预测的方式随机发生,总体上看却遵循着一种指数型增长的趋势。据我们所知,现有的研究还没有能够全面覆盖这么多实际输入场景的。传统的输入法一般把拼音到汉字(P2C)转换看作是一种序列标记的任务。早期,研究人员使用了 N-gram 模型,如 Bahl 等人在 1983 年的研究。但近些年来,RNN 模型如 Yao 等人(2018 年)、Wu 等人(2017 年)在这一领域已经取得了长足的进步。而如 BERT-CRF、GPT 这类预训练模型,代表了 Souza 等人(2019 年)和 Tan 等人(2022 年)的研究,它们也开始被应用于序列标记任务,比如命名实体识别和 P2C 转换,并且相比 RNN 获得了显著的性能提升。

AI 技术的突飞猛进也让输入法的功能远不止于 P2C 转换。正如图 2 所示,现在的输入法具备了智能联想、对话助手、文本纠正等新功能,这些都是为了提高我们的输入效率、乐趣以及准确性。

部分 AI 辅助输入场景
部分 AI 辅助输入场景

图 2: 部分 AI 辅助输入场景

不过,如图 3(a) 所展示的,传统的输入法在设计上还存在一些局限性:

  • 对于拼音输入中的噪声建模是一个挑战,因为之前的模型大多数情况下都默认拼音输入是准确无误的,

  • 辅助功能如智能联想、对话助手、文本纠正并没有形成一个统一的建模方法,这使得整个输入系统变得复杂而不稳定,

  • 无法有效地利用用户反馈进行在线优化,也难以产生真正个性化的输入体验。

随着人工智能生成内容(AIGC)的蓬勃发展,以 InstructGPT Ouyang et al. (2022) 和 GPT-4 OpenAI (2023) 为代表的模型展现了堪比人类的内容创造力,输入法引擎(IMEs)开始可能挣脱旧有模式的限制。现在我们可以将多种输入任务纳入到一个统一的文本生成框架中。基于这一点,我们提出了一种全新的生成性输入方法范式,并且这一范式具有如下几个优点:

  • 它能处理包含有拼音输入杂讯等多种输入序列,涵盖所有潜在的应用场景,

  • 它将各种任务融合到文本生成中,仅用一个模型就能搞定所有任务,极大地增强了系统的稳定性,

  • 它利用强化学习和对比学习技术,通过用户反馈来自我调整和优化,实现模型的自适应。

2 任务

我们选取了三个在输入法中极具代表性的任务进行研究。

  1. 全模式按键序列到字符(FK2C):这项任务是输入法的核心,它将用户敲打的按键序列转换成文字。传统的研究通常认为用户输入是已经处理过的拼音,并且直接将拼音转换成文字,简称 P2C。但实际上用户可能输入的是 26 键字母键盘序列或 9 键数字键盘序列,这些序列可能并不完全对应标准拼音,并且含有误差。同样的按键序列,可能因为不同输入模式而产生不同的结果,例如图 1 所展示的情形。因此,直接将按键序列转换成文字比传统 P2C 更具挑战性。

  2. 智能联想(IntelAssoc):这是一种常见的输入辅助功能,能根据用户已经输入的内容来预测接下来可能的句子,供用户选择,以此来提升输入效率。它是文本连续输入的典型例子,主要用于生成长度不定的文本。

  3. 会话辅助(ConvAssist):该任务主要是对用户的输入内容进行文本的润色,重新组织语句使其符合某些特定要求,比如更加幽默或是风趣,同时又不改变原本输入的意思。它涉及的是输入和输出文本长度大致相同的情形。

目前对输入法的研究通常只着眼于某一单独的功能。Cai et al. (2018) 提出了 KNPTC,这一方法能将字母邻位知识融合到神经机器翻译(NMT)中,以便更好地校正拼音输入错误。Zhang et al. (2018) 则是通过实时更新的字典来追踪用户的输入习惯。Huang et al. (2018) 将基于注意力机制的 NMT 模型与信息检索技术(IR)结合应用于拼音输入,增添了趣味性并可以根据用户需求进行定制。Huang and Zhao (2018) 则利用之前输入的句子作为额外上下文来学习,预测未完整拼音输入的字符序列。Tan et al. (2022a) 进一步利用中国版 GPT 对拼音输入法进行了改进,通过扩展上下文中的拼音信息,解决了拼音输入不完整的问题。这些研究大多集中在单一的拼音到汉字(P2C)输入模式,没有充分关注输入法的其他任务,无法完全满足实际应用需求。

3 模型

传统输入法(a)与 GeneInput 新范式(b)的对比。
传统输入法(a)与 GeneInput 新范式(b)的对比。

图 3: 传统输入法(a)与 GeneInput 新范式(b)的对比。

在这篇文章中,我们提出了一个全新的生成式建模方案——GeneInput。它旨在统一模拟输入法中的典型任务和不同输入模式,正如图3(b) 展示的那样。该方案应用了大语言模型(LLM),不仅能够处理多种有噪音的场景下的拼音解码任务,还能整合各种 AI 辅助输入功能,并且能够根据用户的反馈来自动进行调整和优化。此外,GeneInput 还能融合用户的历史输入数据,提供更为个性化的输入体验。

3.1 GENEINPUT

大语言模型(LLM)在许多任务上都展现了出色的成效。研究发现,LLM 能够通过不同的指令提示来区分不同的任务,这样一来就能够把多种任务融为一体地处理了。比如,Ouyang 及其同事(2022)和 OpenAI 团队(2023)的研究都支持这一发现。然而,据我们所知,还没有研究尝试用 LLM 来统一处理与输入法相关的任务。实际上,现有的 LLM 在处理这些输入法相关的任务时效果并不理想,甚至 GPT4(OpenAI,2023)在键转换(K2C)任务上的表现也远不如商用输入法。鉴于此,我们这项工作试图通过定制不同的指令提示,用 LLM 来统一模拟各种典型输入法任务。

为了能够统一模拟输入法在各种场景下的功能,我们根据第2节所介绍的三种典型输入法任务,设计了对应的指令提示,并对生成性大语言模型进行了精细的调整。如图4(a) 中展示的那样,模型会根据给定的任务描述 P 和输入 X 来预测对应的输出字符序列 Y=[y_1,...,y_n]Y=[y\_{1},...,y\_{n}]。模型训练的核心目标,就是要尽可能减少以下损失函数的值。

L=j=1nlogp(yjy<j,P,X) \displaystyle L=-\sum^{n}_{j=1}\log p\left(y_{j}|y_{<j},P,X\right)

具体地,智能联想任务中,输入 X 代表目前我们所输入的句子,而输出 Y 则是可能接续的下一句。在对话辅助任务里,输入 X 为用户最初输入的句子,而输出 Y 则是经过优化重述的版本。至于按键转汉字(K2C)任务,输入 X 是用户通过 26 键或 9 键输入法输入的键序列,输出 Y 则是匹配的汉字结果。我们为每项任务设计了详尽的任务描述 P,确保模型明确知晓每个任务的目标和需求,这样能够明确区分各项任务。鉴于全键模式的 K2C 任务更为复杂和有挑战性,我们对此进行了额外的扩展设计,详情请参阅第 3.2 节

这一结构既简洁又灵活,可以根据不同的任务需求调整模型中的任务描述、输入和输出。我们可以通过扩充输入信息,比如添加上下文内容或用户信息,来实现更准确的预测。对于一些更为复杂的任务,我们还可以在输出中加入一些关键的中间结果,以此降低建模难度。

3.2 从按键到文字的全方位转换技术

在输入法的世界里,将按键序列转换成我们所需文字的全方位转换是一项关键技术,它的输入方式错综复杂。过去的研究往往过于简化这一过程,比如 Tan 等人在 2022a 的研究中,就预设了用户的输入毫无错误,并将其预先分解为拼音,仅仅研究了标准拼音或简拼的情况。但现实使用中,用户输入的往往是带有杂讯的原始键盘序列,预测用户是否会采取特定的输入模式几乎是不可能的。因此,考虑到所有潜在的输入模式,为它们提供结果并对这些结果进行排序,对于提升输入法的性能至关重要。据我们所知,本篇论文首次尝试对输入法的所有输入模式进行统一建模,并直接对用户的原始输入进行处理。

输入法统一建模的结构(a)以及全面键转字模型(b)。
输入法统一建模的结构(a)以及全面键转字模型(b)。

图 4: 展示了输入法统一建模的结构(a)以及全面键转字模型(b)。

通常情况下,从按键序列到文字的过程可以分为两个步骤。首先,用户输入的键序列会被转换成对应的拼音分割结果,我们简称之为 "pyseg"。接着,根据这些拼音分段的不同,解码出相应的文本结果。比如当输入 "woban" 这一序列时,它可能对应于完整的拼音路径 "Wo’Ban",简拼路径 "W’O’B’A’N",或是其他可能的简拼 "Wo’Ba’N"。但对于九宫格输入法来说,这一过程更加复杂,因为一个按键可能对应多个字母。因此,在全方位转换技术中,拼音的分割和识别对于精确输入至关重要。

基于这点,我们的模型中加入了拼音分割这一关键中间步骤,并基于此开展全方位转换的建模工作。通过这样的方式,我们能够把输入和输出更好地对应起来,并加入约束条件以提升候选词的质量。

利用拼音分割进行复杂键控到字符(FK2C)建模

研究显示,对于一些复杂的问题,我们不能仅仅简单地将输入 x 直接对应到输出 y,引入中间步骤能显著提升长期记忆模型(LLM)Wei et al. (2022) 的效能。键控到字符(K2C)的任务不同于智能联想这样的开放式生成任务,它受到输入的严格约束,答案相对确定,评价标准也很客观,并且需要一个严谨的推理过程。因此,为了更好地融合多种模式的建模,我们引入了拼音分割预测这一任务。正如图  4 (b) 展示的,我们将拼音分割(pyseg)作为输出的一个延伸,并且利用它来统一不同场景下输入法的多种输入模式,提升对不同输入方式的建模能力。我们首先根据任务描述 P 和输入键序列 X=[x_1,...,x_m]X=[x\_{1},...,x\_{m}] 来预测可能的拼音分割 S=[s_1,...,s_n]S=[s\_{1},...,s\_{n}],接着利用这两个预测最终的文字输出 Y=[y_1,...,y_n]Y=[y\_{1},...,y\_{n}]。输出扩展后,我们采用的训练损失函数如下:

L_pysegs=i=1nlogp(sis_<i,P,X)\displaystyle L\_{pysegs}=-\sum^{n}_{i=1}\log p\left(s_{i} | s\_{<i},P,X\right)
L_words=j=1nlogp(y_jy_<j,S,P,X)\displaystyle L\_{words}=-\sum^{n}_{j=1}\log p\left(y\_{j} | y\_{<j},S,P,X\right)
L=λL_pysegs+L_words\displaystyle L=\lambda\cdot L\_{pysegs}+L\_{words}

在这个模型中,λ\lambda 是一个可以根据扩展输出部分的重要程度来调节的超参数。

基于拼音分割的全模式键控到字符对齐约束生成流程
基于拼音分割的全模式键控到字符对齐约束生成流程

图 5:  利用拼音分割进行的全模式键控到字符对齐约束生成流程

生成对齐约束

正如 图 1 展示的那样,与中文句子相对应的完整拼音或缩写拼音输入通常比较固定,因此它们之间的对齐关系相对明确。但是,随机缩写拼音的输入情况随着字符长度的增加呈现出指数级的增长,加之 9 键键盘上的多对一映射关系和可能的输入误差,这使得句子对应的输入变得更加复杂。所以,当我们对整个模型进行全面建模时,尤其是在输入和输出都较长的情况下,要直接将输出中的每个字母与输入的键位序列一一对应并非易事。然而,生成的中间结果 pyseg 能够与输入和输出形成一个较为清晰的对齐关系,这是为什么我们提出了一个基于 pyseg 桥接的对齐约束方法。这个对齐约束过程可以被划分为两个阶段:pyseg 到输入的对齐和输出到 pyseg 的对齐。

在 pyseg 到输入的对齐阶段,由于拼音分割只对原始输入进行了有限的空间划分,每一个拼音分割的结果都能唯一地追溯到一个特定的输入形式,且与原始输入保持一致。因此,我们可以将解码后的拼音分割映射回到 26 键或 9 键输入上,对比原始输入,从而排除那些与原始输入不符的拼音分割路径。s_is\_{i} 代表第 i 个产生的拼音,其对应的概率如下表所示。

p(si)=exp(g(si))P2I(s<jsj)νXexp(g(sj))\displaystyle p(s_{i})=\frac{exp(g(s_{i}))}{\sum_{P2I(s_{<j}s_{j})\in\nu_{X}}% exp(g(s_{j}))}

在这个背景下,g 代表了 softmax 函数前的逻辑值,ν_X\nu\_{X} 表示原始输入 X 的前缀子集,P2I() 是拼音到输入的映射函数。也就是说,当前解码的拼音分割路径应当能够追溯到输入 X 的一个前缀子集中,并且最终完整的拼音分割路径应当与输入 X 完全一致。如 图 5 所展示的,一个中间路径在第三步产生了一个拼音字符 "Ba"。在映射回去之后,这条拼音分割路径变成了 "wobaba",这并不属于输入 "woban" 的前缀子集。因此,我们可以判断这条路径是非法的。

输出与拼音分段的精准对齐 这里的核心思想是,与传统的按键序列生成的不确定匹配不同,我们的输出汉字序列 Y=[y1,...,yn]Y=[y_{1},...,y_{n}] 与拼音分段 S=[s1,...,sn]S=[s_{1},...,s_{n}] 实现了精确的一对一匹配。这意味着每一个汉字 yiy_{i} 的拼音都必须与其对应的拼音分段 sis_{i} 完全吻合,如果不是,就可能意味着输入存在错误,我们可以根据这种不匹配的程度对路径进行惩罚。通过比较生成汉字与其对应拼音分段的编辑距离,我们对那些不符合拼音分段的结果施加惩罚,从而避免汉字的过度校正或产生与输入毫无关联的结果。对于每一步的修正,我们有以下的惩罚系数公式。

εi=αnEditDist(si,C2P(yi,mode(si)))\displaystyle\varepsilon_{i}=\frac{\alpha}{n}EditDist(s_{i},C2P(y_{i},mode(s_{% i})))

这里的 n 表示与 sis_{i} 相关的输入数量,EditDistance(a, b) 代表 a 和 b 之间的编辑距离。C2P() 函数负责将生成的汉字转换成拼音,并根据 sis_{i} 的给定模式,选择对应的标准拼音或是简化拼音形式。而 α\alpha 是一个可调的超参数,用来设定惩罚力度的大小。

当我们将拼音分段对齐的约束条件引入之后,yiy_{i} 就代表了生成的第 i 个汉字,并且我们可以根据下面的公式计算它的相应概率。

p(yi)=(1εi)exp(g(yi))exp(g(yj)\displaystyle p(y_{i})=(1-\varepsilon_{i})\cdot\frac{exp(g(y_{i}))}{\sum exp(g% (y_{j})}

3.3 输入法的个性化调整

每个人敲击键盘时期待的回应都不尽相同。要怎么样才能通过额外的信息来提供定制化的反馈,并且更精确地迎合每次敲键的具体需求呢?这正是打造一个更懂用户、更人性化输入法体验的核心所在。

只要用户愿意并同意,GenInput 这款软件就能够轻松地利用用户以往的输入记录和个人信息,为用户带来更贴心的个性化输入体验。与那些复杂的编码方式不同,GPT 式的大语言模型(LLM)可以更容易地融合这类额外数据。我们所需要做的,就是在输入提示中加入用户以前的输入上下文或者是有关用户的特定信息,比如性别、年龄、职业和兴趣爱好等,这样就能扩展输入的信息了。对应的模型训练损失函数表现为:

L=n_j=1logp(y_jy_<j,P,E,X)\displaystyle L=-\sum^{n}\_{j=1}\log p(y\_{j} | y\_{<j},P,E,X)

这里的 E 就是我们提到的输入扩展信息,它可以是关于当前输入的背景信息,也可以是用户的个人资料信息,包括性别、年龄、职业、兴趣爱好,或者用户过去经常输入的内容列表。

3.4 结合人的反馈进行在线优化

在早期,我们改进输入法编辑器用的语言模型主要是依靠一套“先培训再微调”的传统方式,Radford 和 Narasimhan (2018) 有过详细讨论。这种方法要求拥有大量高品质数据、强大计算力和充裕时间,使得模型很难快速更新。而输入法这样的工具,由于人们在日常沟通中的用词习惯和风格经常变化,传统方法已经跟不上这种变化速度了。而 ChatGPT 背后的核心技术 RLHF(即通过人类反馈进行的强化学习),已经证明能有效使模型更加符合用户的使用习惯,Ouyang 等人 (2022) 的工作就是一个例证。因此,我们将 RLHF 应用在经过细致调校的大语言模型上,以确保它们在特定任务上的表现更加契合输入法用户的实际需求。我们在接下来的内容中把这一应用称作 RLHF-IME(输入法编辑器中的基于人类反馈的强化学习)。

研究表明,奖励模型至关重要,它在很大程度上决定了 RLHF 成功的极限,Zheng 等人 (2023) 的研究提供了证据。由于 Ouyang 等人 (2022) 的奖励模型训练涉及到大量专业标注人员,并且成本高昂,我们开发了一种全自动的标注方法,既节省成本又适用于更多的实际业务场景。针对输入法的文本特点,我们还设计了多种基于双系统标注的奖励模型训练方法并开始使用。

图 6 展示了包括自动数据产生、奖励模型训练和使用强化学习算法不断优化的 GeneInput 在内的整个人类反馈在线优化流程。

人类反馈在线优化流程图
人类反馈在线优化流程图

图 6: 人类反馈在线优化流程图

排名系统浅析

Ouyang 团队在 2022 年的研究(2022)让我们看到了利用人工标定的排名来培训奖励模型对于 LLM(大语言模型)输出非常有效。在自动化标记的道路上,我们看好通过分析海量用户选择答案的行为数据来抽取出整个用户群体的共同喜好,这将构成我们排序答案的标准。

我们设定了一个三个月的统计周期,在这个周期内,一个答案的标签得分是通过计算这个答案被选择的频次占其作为候选答案出现频次的百分比来确定的,详见方程 9。这里的 N_selectediN\_{selected}^{i} 指的是在当前统计周期内,某个答案被选中的次数。

labeli={0ifNselectedi=0,max(1,NselectediNprovidedi100)otherwise.\displaystyle label_{i}=\begin{cases}0&ifN_{selected}^{i}=0,\\ max(1,\frac{N_{selected}^{i}}{N_{provided}^{i}}*100)&otherwise.\end{cases}

在这种排名系统的框架下,我们有了一套新的奖励模型训练手段。

逐查询方式这种方法,是通过对同一个查询下不同答案的样本进行比较来执行的。如果在同一个问题下,根据用户的评分对答案进行排序,然后训练模型以评估答案质量是很有道理的;如果不这么做,仅仅比较分数就失去了意义。我们使用的损失函数基于公式 1112,其中 n 表示该查询下的答案总数,query_iquery\_{i} 是指第 i_thi\_{th} 个样本的查询内容,label_ilabel\_{i} 则代表该答案根据我们上述全自动化标记系统得到的人类偏好评分。

ld(i,j)=label_ilabel_j\displaystyle ld(i,j)=label\_{i}-label\_{j}
bt(i)=_j=1nI{query_i=query_j}I{ld(i,j)>0}1\displaystyle bt(i)=\sum\_{j=1}^{n}\mathbb{I}\{query\_i=query\_j\}\mathbb{I}\{ld(i,j)>0\}\cdot 1
LQW=1ni=1n1bt(i)j=1bt(i)lnσ[s(x,yi)s(x,yj)]ld(i,j)1\displaystyle\mathcal{L}_{\textrm{QW}}=-\frac{1}{n}\sum_{i=1}^{n}\frac{1}{bt(i% )}\sum_{j=1}^{bt(i)}\ln{\sigma[s(x,y_{i})-s(x,y_{j})]^{ld(i,j)^{-1}}}

二元分类系统浅谈

在输入法场景下的文本,因其情境变换多端且句子简短,使得对答案进行排序变得颇具挑战性,因为大部分答案在特定情景下都可能是正确的。拿智能推荐来说,当输入“我还没睡觉”时,系统可能给出“因为我还没做完作业”,“因为我还在加班”,或者“因为我喝了太多咖啡,现在失眠”等多个正确答案,不同用户可能会偏好不同的答案。不过,在面对一些明显不合适的答案时(比如“牛排配黑胡椒很匹配”这种回答),我们通常能够立即区别。基于这种现象,我们认为可以尝试将答案分为两大类:可能合理的答案和不合理的答案。在这套系统中,我们采用了一个全自动的标记方案,连续三个月内,用户选中的答案被标为正面答案,未被选中的则为负面。在此基础上,我们构建了各种奖励模型的训练方法,其中之一就是:

样本级别训练 是针对二元分类任务的,根据每个样本来训练模型判断当前答案是否正确。它使用的是二元交叉熵损失函数,就像方程 13 中展示的,其中 yiy_i 代表样本的真实类别,yi^\hat{y_i} 代表模型预测为正确类别的概率。

LSW=1ni=1n[yilogyi^+(1yi)log(1yi^)]\displaystyle\mathcal{L}_{\textrm{SW}}=-\frac{1}{n}\sum_{i=1}^{n}[y_i·\log% \hat{y_i}+(1-y_i)·\log(1-\hat{y_i})]

在进行类别细分训练时,我们希望让模型能够一眼辨别出正确与错误的答案。方法是把两种类别的样本作为一个整体来训练,确保模型给出的正确答案的评分要比错误的高。这一过程的损失函数,可以参考方程式 14,其中的 nnmm 代表正确答案和错误答案的样本数量,xx 是指提出的问题,s(x,y)s(x,y) 则是模型根据问题 xx 对答案 yy 打分的结果。

LCW=logσ(1ni=1ns(x,yi)1mj=1ms(x,yj))\displaystyle\mathcal{L}_{\textrm{CW}}=-\log{\sigma(\frac{1}{n}\sum_{i=1}^{n}s% (x,y_{i})-\frac{1}{m}\sum_{j=1}^{m}s(x,y_{j}))}

至于 Batch-Wise 方法,这是一种成对的训练手段。简单来说,就是在一个数据批次里,我们会把正确的答案和错误的答案一一对应起来,然后比较它们的模型评分差异,用这个差异来构建一个成对的训练损失。这个方法的一个特点是,它不强求每对答案的问题都要一样,因为在二元评分体系下,我们认为无论问题是什么,任何正确答案的得分都应该比错误的高。举个例子,在智能推荐任务中,模型会认为“早上好,吃早饭了吗?”([query="早上好 (Good morning)", answer="吃早饭了吗? (Have you had breakfast yet?)"])这个对话比“今天天气不错,衬衫的价格是九榜十五便士”([query="今天天气不错 (it’s a nice day)", answer="衬衫的价格是九榜十五便士 (the price of the shirt is nine pounds fifteen pence)"])更为合理。至于具体的损失函数计算,请查阅方程 15,其中的 n 和 m 分别代表在一个数据批次中的正确答案和错误答案的数量。

LCW=logσ(1ni=1ns(x,yi)1mj=1ms(x,yj))\displaystyle\mathcal{L}_{\textrm{CW}}=-\log{\sigma(\frac{1}{n}\sum_{i=1}^{n}s% (x,y_{i})-\frac{1}{m}\sum_{j=1}^{m}s(x,y_{j}))}

在自然语言处理的众多领域内,对比学习策略已被证明极其有效(Gao et al., 2021)。基于此,我们采纳了 Khosla 等人在 2020 年提出的监督对比学习方法(Khosla et al., 2020),并将其应用于奖励模型训练中。通过利用样本的分类信息作为指导,来区分正负示例,我们期待模型能通过比较正反两种示例,依据 Khosla 等人构建的损失函数来有效提升评估答案优劣的能力。

在后续的增强学习阶段,我们借鉴了 Ouyang 等人在 2022 年的研究(Ouyang et al., 2022),采用了 "ppo-ptx" 模型的训练方式,这种方式结合了 PPO 损失和预训练损失。训练时,我们利用基于以上方法训练出的奖励模型对由 Spark 精调生成的答案进行评分。这些奖励模型近似模拟人类的偏好,指引着生成型大语言模型优化的方向。

4 实验

4.1 实验设置

公开数据集

目前,公开数据集 PD/TP 是评估输入法中的拼音转换(P2C)效果的常用数据集。PD 数据集由 Yang 等人 (2012) 从 1992 到 1998 年《人民日报》的语料中提取而来;TP 数据集则由 Zhang 等人 (2017) 从 TouchPal 输入法的用户聊天记录中编制。每个数据集都包括了 2000 个测试样本,但只限于完整的拼音输入情况。

XF 数据集

为了填补在智能关联(IA)、会话辅助(CA)以及完整模式键入到字符(K2C)输入方法中可用的公开数据集的空白,我们创建了一个专门针对输入法任务的新数据集,命名为 XF 数据集。

SFT 数据集   我们独立构建了三个数据集:包含 800 万对对话情境的 IA 数据集,含有 600 万个场景的 CA 数据集,还有一个记录了 1200 万次输入的全模式 K2C 数据集。为了手动评估这些输入方法的效果,我们还特别制作了 1000 组智能关联测试和 1000 组会话辅助测试。我们还为了测试在 26 键和 9 键键盘下的全键入到字符(FK2C)任务的表现,设计了一个包含 57000 次测试的数据集,这些测试覆盖了从完整拼音到简写拼音,乃至包含各种打字错误的噪声输入的不同输入方式。

RM/RL 数据集   为了推进基于强化学习的输入法增强(RLHF-IME),我们构建了两个数据集群组,一个是用于训练奖励模型的数据集,另一个是在强化学习阶段使用的提示性数据集。

所有这些数据都是来自于真实用户在参与我们的用户改进计划时的行为记录,这些用户通过互联网招募而来。他们的任务很简单:在多个由模型生成的候选项中选择一个最满意的答案,就像日常使用中那样,而不需要对其他不理想的结果进行额外处理,更不用说进行详细的排名,如同 Ouyang et al. (2022) 中所做的那样。这种简化的数据标注过程不仅保证了数据的真实性和可靠性,而且大大提高了效率,显著降低了时间和成本的投入。

就像第 3.4 节提到的,无论是排名注释系统还是二元分类注释系统,我们都采用全自动方式为收集到的样本打上标签。鉴于这些数据源自众多真实用户的真实行为,我们有理由相信,基于这些数据训练出的模型能够高度贴合人类的输入偏好,并在 RLHF-IME 的过程中为 GeneInput 提供积极的指导作用。

关于我们的排名系统设计,我们本希望通过分析一个大型用户群体在回答选择时的统计概率,来揭示人们对机器生成答案的喜好,并据此来确定答案的排名。但是,因为参与改善对话助手程序的用户人数不多,依赖这种方式构建的答案排名就不能可靠地反映出大多数人的真实喜好。这样一来,基于这种排名训练出的奖励模型也难以有效地指导 GeneInput 模型朝着正确的方向进行优化。因此,在对话助手这一块,我们仅仅建立了基于简单的“是与不是”二元分类的数据集。

有关各数据集具体数字,可参看下表。

IntelAssocConvAssistFK2C
二分类排名二分类二分类排名
SFT
训练集8M6M12M
验证集100K100K100K
测试集2K2K57K
RM
训练集6.5M2.5M4.9M8.4M9.4M
测试集1.6M0.6M1.2M2.1M2.3M
RL
提示集4.1M1.9M4.0M

表 1: XF 数据集的详细统计。

评估指标

面对智能关联与对话辅助缺乏客观评价标准的问题,我们使用了一种人为的主观评价方法——MOS。在此方法中,每个模型生成两份测试案例,并由十位评审员分别对其进行独立评分。评分范围是 1 分(最差)到 5 分(最佳),各测试案例的平均分数合并后,得到模型在该任务上的最终评分。

在 K2C 任务的评估中,我们采用了 top-K 准确率(P@K),这是以往 P2C 任务中常用的指标 Tan et al. (2022a) Zhang et al. (2019),用于判断期望的结果是否位于生成结果的最优 K 项之中。由于我们主要关注输入法的首选和首屏显示结果,因此我们专注评估 top1 和 top5 的准确率。

鉴于有多种基于两个标注系统的奖励模型训练方法,我们设计了几种评估指标,以便更准确地评估每种系统下训练出的模型的性能。

准确度 - 排名(Acc_RAcc\_{R})是为评估在排名标注系统下训练出的奖励模型性能而设计的。其核心是比较模型预测的分数与排名标注信息的一致性。如公式 16 所展示的,label_ilabel\_{i}score_iscore\_{i} 分别表示第 i_thi\_{th} 个样本的标签值和模型给出的分数。

AccR=i=1nj=1nIlabeli>labeljIscorei>scorej1i=1nj=1nIlabeli>labelj1\displaystyle Acc_{R}=\frac{\sum_{i=1}^{n}\sum_{j=1}^{n}\mathbb{I}_{label_{i}>% label_{j}}\mathbb{I}_{score_{i}>score_{j}}\cdot 1}{\sum_{i=1}^{n}\sum_{j=1}^{n% }\mathbb{I}_{label_{i}>label_{j}}\cdot 1}

二分类准确率(Acc_BAcc\_{B})这个指标,专门用来检验在二分类系统中,经过特定训练方法训练出的奖励模型的表现如何。我们会将正面和负面的样本成对放置,比较由奖励模型所给出的分数,然后计算其中正面样本胜出的对数占比。这一计算依据的是方程 17,在此方程中,N_posN\_{pos} 表示正样本的总数,N_negN\_{neg} 表示负样本的总数,score(pair_ipos)score(pair\_{i}^{pos}) 则是模型对于第 i_thi\_{th} 对中正样本给出的预测分数。

AccB=i=1NposNnegscore(pairipos)>score(pairineg)NposNneg\displaystyle Acc_{B}=\frac{\sum_{i=1}^{N_{pos}\cdot N_{neg}}score(pair_{i}^{% pos})>score(pair_{i}^{neg})}{N_{pos}\cdot N_{neg}}

基础模型

考虑到模型在处理多样下游任务的能力以及在输入法应用场景中,每天需要处理上亿次调用请求的成本问题,本文所有实验都是基于科大讯飞自己开发的 2.6B 版本的长语言模型 LLM - Spark44(奖励模型除外)。这款模型采用了与 GPT 类似的架构,包括了 32 层的变换器,并且在接受了海量中文文本预训练后,具备了强大的文本生成能力。

对于奖励模型部分,我们采用的是中文版的 DeBERTa-v2-large 模型作为基础框架,该模型来源于王等人的研究(2022),并在此基础上增加了非线性层和密集层等结构,从而为样本产出最终的模型评分。

基准对比

K2C  目前的输入法研究多聚焦于完善 26 键拼音输入的问题,因此我们借鉴现有的 PD 数据集和 TP 数据集,与以下几种基本模型进行了对比:

  • GoogleIME 是一款功能强大的中文输入法软件,还提供了便于调试的 API。

  • On-OMWA  张等人 (2017) 提出了一个自适应学习模型,用于中文输入法中在线学习新词。

  • On-P2C  张等人 (2019) 开发了一个神经网络拼音转汉字模型,它通过实时更新词库以适应开放式词汇学习,提升了模型的性能。

  • Pinyin-GPT  谭等人 (2022a) 则使用了 GPT 模型,并将拼音输入作为上下文信息,用于提高拼音到汉字翻译的准确度。

LLM  在本文中,我们选用了 chatGPT 和 GPT4 这两款当前表现最佳的大语言模型来评估它们在输入法任务中的基准效能。为了智能联想、会话助手和 K2C 输入法任务,我们设计并测试了超过 10 种不同的提示语,选出了表现最好的提示语来在测试集上进行最终评估。

系统配置

SFT 模型在 8 个 NVIDIA A100-80G 显卡上训练了一周,每批处理 128 个数据,我们采用了余弦退火的学习策略,起始学习率定为 1.6e-5,并且采用了参数为 0.9 和 0.95 的 Adam 优化器。超参数 λ\lambdaα\alpha 分别设定为 1 和 0.5。

在 RLHF-IME 研究中,Spark 模型也在相同配置的设备上进行了 1 至 5 个周期的训练,每个周期包括两个阶段,每批处理 4096 个数据。我们采用了 Loshchilov 和 Hutter (2017) 提出的 AdamW 优化器,顶峰学习率为 9e-5,并使用了占比 10% 的预热余弦调度策略。在奖励建模方面,我们在 4 个 GPU 上进行实验,针对不同任务选择了更小的批量(64 或 128)和学习率(5e-6 至 1e-5)。

K2C 成效对比

PDTP
系统单一精度前五精度单一精度前五精度
Google IME70.978.357.563.8
On-OMWA64.672.957.171.1
On-P2C71.380.571.989.7
拼音-GPT73.284.1--
基因输入法88.496.277.092.9
无对齐88.195.976.492.5
无对齐无分词82.192.470.188.6

表 2:  在 PD 和 TP 数据集上不同输入法效能的比较。

我们的基因输入法与现行技术比较   在表 2 中,比较结果的上半部分展示了基准线效能,这些数据直接引用自拼音-GPT Tan et al. (2022a) 和 On-P2C Zhang et al. (2019) 的研究。下半部分则展示了我们的基因输入法在这两个数据集上的表现。显而易见,无论是最佳匹配还是前五匹配的准确度,我们的方法都明显优于先前的最佳成绩。这一成就不仅意味着我们在保持全模式键到词(K2C)转换的同时,还保留了单模式的高效能,相比于其他现有的单模式输入法,我们的技术展现出了明显的优势,足见我们模型的高效性。

26 键9 键
系统P@1P@5P@1P@5
完美拼音
Google IME88.090.175.377.1
GeneInput94.299.592.098.4
简拼
Google IME30.232.22.43.3
GeneInput67.086.71.64.6
随机简拼
Google IME65.166.941.343.4
GeneInput81.595.373.488.4
有噪音的拼音
Google IME55.267.27.211.3
GeneInput75.290.746.267.5

表 3: 在 XF 数据集中各种输入法模式的表现。

全模式 K2C 的实验结果鉴于目前对其他输入法模式和全模式的研究尚且不足,我们引入了大家熟悉的 Google IME 作为比较,使用我们自主构建的 XF 数据集来验证全模式 K2C 模型的实用性。

根据表 3 的数据,我们的方法在多种输入模式的测试中都优于 Google IME,唯独在 9 键简拼模式中略逊一筹。尤其在输入数据包含噪音的情况下,我们的表现依然出色。值得一提的是,用户在 9 键输入时往往不采用简拼方式,因此,这一模式在 9 键简拼的测试中的表现并不影响总体效果。从这些数据我们可以看出,我们在不同输入模式下都取得了很好的成绩,这证明了我们的全模式统一建模方法是行之有效的。

奖励建模的智能训练效果

方法IntelAssocConvAssistFK2C
排名
查询情况下68.5-73.5
二元决策
单个样本情况99.377.798.9
类别分析93.073.181.2
对照学习97.767.997.9
批量处理99.578.199.6

表 4:  各类训练方法在奖励模型建立中的表现。

根据表 4 的奖励模型结果,我们可以看出,在智能联想(IntelAssoc)、对话辅助(ConvAssist)以及全功能 K2C(FK2C)三个方面,各训练方法所培养的奖励模型的性能。在排名制度中,由于只用了一种方法,所以没法做横向比较。但通过在不同的测试环境下对模型进行测试,我们发现模型的表现与人的偏好高度一致。正如第 4.1.2 节提到的,由于对话辅助系统中没有建立专门的数据集,这部分的结果就没法展示了。在二元分类任务上,批量处理方法(Batch-Wise)拔得头筹,特别是单样本测试方法(Sample-Wise)表现出与批量处理方法(Batch-Wise)非常接近的成绩,差距仅有 0.5 分。在智能联想和解码领域,对照学习方法(Contra-Wise)同样取得了不错的成绩。不过,输入法场景中的文本特点是上下文变化多端且篇幅短小,这让学习的界限变得模糊,因此与批量处理(Batch-Wise)的成绩还有 3 到 4 分的差距。至于类别分析方法(Class-Wise),由于其学习的粒度较粗,很难精确捕捉到样本级别的偏好,因此其表现最差,这也是符合我们的初衷。

模型IntelAssocConvAssistFK2C
公开版本
ChatGPT3.884.2612.3
GPT-44.414.3518.1
GeneInput
Spark
加上 SFT4.384.2581.0
加上 RLHF-IME 排序版4.40-82.8
加上 RLHF-IME 二进制版4.434.5284.6

表 5:  大语言模型在 IntelAssoc、ConvAssist 和 FK2C 任务上的表现。

SFT/RL 研究成果 表 1: 5 展现了大语言模型在智能联想、会话辅助以及全功能键控输入(K2C)任务上的性能。Spark 基础模型仅在大量未经标注的数据上进行了预训练,并未经过指令优化调整,因此没有提供该模型在输入法环境下的这些任务的成果。ChatGPT 和 GPT-4 未能理解传统 9 键输入与对应中文之间的联系,我们仅展示了它们在 XF 数据集的 26 键测试集上的平均性能,以评估各个大语言模型解码输入序列的效能。若需进一步了解 GeneInput 在键控输入全模式(FK2C)上的详尽成绩,请参见表 2: 2 和表 3: 3。显而易见,现行的通用大语言模型在 FK2C 上的表现不佳,不符合输入法环境的实际应用标准,这提示我们需要开发一款专为输入法设计的语言模型。在智能联想和会话辅助方面,Spark 经过 SFT 改进后,已展现出有竞争力的表现,但与行业领先的模型相比还有差距,特别是在会话辅助方面,SFT 改进后的 Spark 还未能赶上 ChatGPT。但值得庆幸的是,通过采用 RLHF-IME 进行优化后,Spark 不仅在这两项任务上超过了 GPT-4,尤其在会话辅助上,其平均满意度(MOS)评分还提高了 0.17 分。此外,通过比较在智能联想和全功能键控输入(K2C)任务上基于不同标注系统训练的模型,我们认为,在输入法环境中使用二元分类系统来训练奖励模型,要比采用排名系统更为有效。

4.3 实验探究

本节我们通过一系列的实验探究,来揭示逐步增加拼音分词及其与解码对齐之间约束条件的重要性。由于我们的对齐机制是通过拼音分词的中间步骤来实现的,我们首先去除了这些对齐约束,再去除分词步骤。正如表 2 下方的数据所展示的,取消对齐约束会导致模型性能轻微下降 0.5 分,但是一旦不进行拼音分词(pyseg),模型在两种数据集上的性能将大跌约 6 分。这充分说明了在训练过程中,将拼音分词这一中间步骤融入输出扩展的巨大意义。当然,对齐约束本身也是有其作用的,但加入拼音分词(pyseg)后模型已经有了较好的自我对齐能力,这就大大缩减了明确对齐约束可能带来的额外提升。

4.4 案例分析

定制化

在输入法的定制化方面,我们通过一些实际的例子来分析。正如表 6 所演示的那样,对于同样的输入内容,加入不同的信息扩展后,我们能够得到差异化的输出结果。比如,在智能推荐任务中,针对“今晚我没时间”的相同输入,添加了不同用户背景信息的扩展后,输出的结果会更符合用户的职业习惯,体现了个性化的服务。同样的,在 FK2C 任务中,根据不同的场景信息或用户特点的描述,系统也能够给出更为精准的反馈。关于这部分的更深入分析,我们预留给未来的研究。

奖励模型设计

正如第 3.4 节 所述,奖励模型在某种程度上定义了强化学习人工智能(RLHF)表现的极限。因此,我们期待模型对不同回答的打分能够高度符合人类的喜好。表 7 展现了在不同测试场景中,我们奖励模型对会话助理的评分实例。从中可以看出,模型对于普通答复和高品质答复的评价与人类的判断相吻合,对粗话和不相关的回复也能有效抵制,并且能够针对不同的生成任务(比如表格中提到的智能关联回答)做出明确区分。因此,我们相信它能在强化学习过程中根据人类的喜好为大语言模型提供合适的反馈。

任务类型输入扩展输入顶级输出 1
-明天可以吗 How about tomorrow?
智能联想今晚没时间 There’s no time tonight.用户:学生 User: Student作业还没写完呢 I haven’t finished my homework yet
用户:程序员 User: Programmer晚上还得加班呢 I have to work late at night
-万一 in case
全拼简拼转换wany上下文:来找我 Context: Come to me玩耍 playing
用户:喜欢简拼输入 User: Likes to use pinyin abbreviation我爱你呀 I love you
用户自定义词:婉莹 User custom word: Wan Ying婉莹 Wan Ying

表 6: 输入法个性化示例(每个中文句子下面都提供了对应的英文翻译)。

测试类型查询内容回答情况RM 得分
优秀的对话辅助宝贝早安,希望你整天都很开心  Good morning, my love. I hope you are happy all the day.0.974
较差的对话辅助嘿,早上好呀  Hey, hey, good morning. (fondly)0.941
不当言辞早上好  Good morning.去你的  Fuck you, man.0.022
不相关的话语你还在意他吗  Do you still love him?0.083
智能联想你昨晚睡得好吗  How did you sleep last night?0.139

表 7:  这是在相同提问条件下,不同测试环境中对话辅助的 RM 得分示例(中文句子下方有英文对照)。

5 总结

在本项研究中,我们探索了如何使用下一代生成范式  GeneInput  通过提示来统一地为输入法编辑器中的标准任务建模。我们发挥了模型生成文本的能力,以此来增强输入方法,首次实现了 P2C 和完整模式 K2C 的扩展功能。我们还引入了四种基于用户反馈的创新性奖励模型训练法,这使得模型能够在线更新而不需额外的标注数据,并在所有的任务上实现了前沿的性能。展望未来,我们希望能处理更多的辅助输入功能,并进一步缩减模型体积,让它能在大部分的智能手机上高效运行并保持出色的性能。

参考资料