18.2 增量式模型优化 611
18.2 增量式模型优化
机器翻译的训练数据不是一成不变的。系统研发人员可以使用自有数据训练
到基础的翻译模型(或初始模型)当应用这个基础模型时,可能会有新的数据出现,
例如:
虽然应用的目标领域和场景可能是研发系统时无法预见的,但是用户会有一定
量的自有数据,可以用于系统优化。
系统在应用中会产生新的数据,这些数据经过一些筛选和修改也可以用于模型
训练。
这时就产生一个问题,能否使用新的数据让系统变得更好?简单直接的方式是,
将新的数据和原始数据混合重新训练系统,但是使用全量数据训练模型的周期很长,
这种方法的成本很高。而且,新的数据可能是不断产生的,甚至是流式的。这时就需
要一种快速、低成本的方式对模型进行更新。
增量训练就是满足上述需求的一种方法。第十三章已经就增量训练这个概念
开了一些讨论,这里重点介绍一些具体的实践手段。本质上,神经机器翻译中使用的
随机梯度下降方法就是典型的增量训练方法,其基本思想是:每次选择一个样本
模型进行更新,这个过程反复不断执行,每次模型更新都是一次增量训练。当多
样本构成了一个新数据集时,可以把这些新样本作为训练数据,把当前的模型作
初始模型,之后正常执行机器翻译的训练过程即可。如果新增加的数据量不大(比
如,几万个句对),训练的代价非常低。
然而,新的数据虽然能代表一部分的翻现象,但是如果仅仅依赖新数据进
更新,会使模型对新数据过分拟合,从而无法很好地处理新数据之外的样本。这
可以被看做是一种灾难性遗忘的问题
[1171]
即:模型过分注重对新样本的拟合,丧失
了旧模型的一部分能力。在实际系统开发中,有几种常用的增量训练方法:
数据混合
[1172]
在增量训练时,除了使用新的数据,再混合一定量的旧数据,
合的比例可以根据训练的代价进行调整。这样,模型相当于在全量数据的一个
采样结果上进行更新。
模型插值
[618]
。在增量训练之后,将新模型与旧模型进行插值。
多目标训练
[1006, 1173, 1174]
在增量训练时,除了在新数据上定义损失函数之外,
以再定义一个在旧数据上的损失函数,这样确保模型可以在两个数据上都有较
好的表现。也可以在损失函数中引入正则化项,使新模型的参数不会偏离旧模
型的参数太远。
18.1给出了上述方法的对比。在实际应用中,还有很多细节会影响增量训练的
效果,比如,学习率大小的选择等。另外,新的数据积累到何种规模可以进行增量训
练也是实践中需要解决的问题。一般来说,增量训练使用的数据量越大,训练的
果越稳定。但是,这并不是说数据量少就不可以进行增量训练,而是如果数据量
612 Chapter 18. 机器翻译应用技术 肖桐 朱靖波
少时,需要考虑训练代价和效果之间的平衡。而且,过于频繁的增量训练也会带
更多的灾难性遗忘的风险,因此合理进行增量训练也是机器翻译应用中需要考虑
问题。
旧数据
新数据
最终数据
最终模型
训练
(a) 数据混合
旧数据 新数据
旧模型 新模型
最终模型
训练 训练
插值
(b) 模型插值
旧数据 新数据
最终模型
目标
函数 1
目标
函数 2
(c) 多目标训练
18.1 增量式模型优化方法
需要注意的是,理想状态下,系统使用者希望系统看到少量句子就可以很
地解决一类翻译问题,即:进行真正的小样本学习。但是,现实的情况是,现在的机
器翻译系统还无法很好的做到“举一反三”增量训练也需要专业人士的参与才能得
到相对较好的效果。
另一个实际的问题是,当应用场景没有语句对时是否可以优化系统?这个
题在第十六章的低资源翻译部分进行了一些讨论。一般来说,如果目标任务没有
语数据,仍然可以使用单语数据进行优化。常用的方法有数据增强、基于语言模
的方法等。具体方法可以参考第十六章的内容。