Commit f0282b7e by xiaotong

updates (sec 18, incremental training and small models)

parent 36e9f74b
......@@ -23,9 +23,9 @@
\chapter{机器翻译应用技术}
\parinterval 机器翻译的应用场景众多,特别是随着翻译品质的不断提升,有越来越多的机器翻译需求被挖掘出来。但是,仅凭一个翻译引擎是无法满足这些需求的。应用机器翻译时,需要“额外”考虑很多因素,例如,数据加工方式、交互方式、应用的领域等,甚至机器翻译模型也要经过改造才能适应到不同的场景中。从某种意义上说,机器翻译应用技术是机器翻译走向实用的必要手段,可以被看做是机器翻译理论和模型的进一步延伸。
\parinterval 机器翻译的应用场景众多,特别是随着翻译品质的不断提升,有越来越多的机器翻译需求被挖掘出来。但是,仅凭一个翻译引擎是无法满足这些需求的。应用机器翻译时,需要“额外”考虑很多因素,例如,数据加工方式、交互方式、应用的领域等,甚至机器翻译模型也要经过改造才能适应到不同的场景中。
\parinterval 本章将重点介绍机器翻译应用中所面临的问题,以及解决问题可以采用的策略。本章所涉及的内容较为广泛,一方面会大量使用本书前十七章的模型和方法,另一方面也会介绍新的技术手段。最终,本章会结合机器翻译的特点展示机器翻译可能的应用场景
\parinterval 本章将重点介绍机器翻译应用中所面临的问题,以及解决这些问题可以采用的策略。本章所涉及的内容较为广泛,一方面会大量使用本书前十七章的模型和方法,另一方面也会介绍新的技术手段。最终,本章会结合机器翻译的特点展示机器翻译可能的应用场景,并进行一些对机器翻译未来的思考
%----------------------------------------------------------------------------------------
% NEW SECTION
......@@ -33,7 +33,7 @@
\section{机器翻译的应用并不简单}
\parinterval 机器翻译一直是自然语言处理的热点,无论从评测比赛的结果,还是论文发表数量上看,机器翻译的研究可谓火热。但是,客观的说,我们离机器翻译完美的应用还有相当的距离。这主要是因为,需求的多样化需要更多技术的融合,是一项复杂的系统工程,而机器翻译研究大多是对局部模型和方法的调整。这也会造成一个现象,很多论文里报道的技术方法可能无法直接应用于真实场景的系统。当然,这是一个复杂的问题,也并不是本章所要讨论的。这里更加关注如何对具体的机器翻译应用问题进行求解。有几方面挑战:
\parinterval 机器翻译一直是自然语言处理的热点,无论从评测比赛的结果,还是论文发表数量上看,机器翻译的研究可谓火热。但是,客观的说,我们离机器翻译完美的应用还有相当的距离。这主要是因为,成熟的系统需要很多技术的融合。因此,机器翻译系统研发也是一项复杂的系统工程。而机器翻译研究大多是对局部模型和方法的调整,这也会造成一个现象,很多论文里报道的技术方法可能无法直接应用于真实场景的系统。当然,也并不是本书所要讨论的,这里更加关注如何对具体的机器翻译应用问题进行求解。有几方面挑战:
\begin{itemize}
\vspace{0.5em}
......@@ -47,7 +47,7 @@
\vspace{0.5em}
\end{itemize}
\parinterval 下面本章将就一些具体技术问题展开讨论,旨在给机器翻译应用提供一些可落地的思路
\parinterval 下面本章将重点对机器翻译应用中的若干技术问题展开讨论,旨在给机器翻译应用提供一些可落地的思路。之后,本章也会结合笔者的经验,对机器翻译的方向展开一些讨论
%----------------------------------------------------------------------------------------
% NEW SECTION
......@@ -67,19 +67,19 @@
\parinterval 这时就产生一个问题,能否使用新的数据让系统变得更好?简单直接的方式是,将新的数据和原始数据混合重新训练系统,但是使用全量数据训练模型的周期很长,这种方法成本的很高。而且,新的数据可能是不断产生的,甚至是流式的。这时就需要快速、低成本的方式对模型进行更新。
\parinterval 增量训练就是满足上述需求的一种方法。本质上来说,神经机器翻译中使用的基于小批次的模型更新就是典型的增量训练方法,其基本思想是:使用少量样本对模型进行更新,这个更新的代价并不高,而且可以反复不断执行。当新的数据到来时,可以把这些新的数据作为训练数据,把当前的模型作为初始模型。当新增加的数据量不大的时候(比如,几万句对),训练的代价非常低。
\parinterval 增量训练就是满足上述需求的一种方法。本质上来说,神经机器翻译中使用的随机梯度下降方法就是典型的增量训练方法,其基本思想是:每次选择一个样本对模型进行更新,这个过程反复不断执行,每次模型更新都是一次增量训练。当拥有由多个样本构成的新数据时,可以把这些新样本作为训练数据,把当前的模型作为初始模型,之后正常执行机器翻译的训练过程即可。如果新增加的数据量不大(比如,几万句对),训练的代价非常低。
\parinterval 这里面的一个问题是,原始训练数据量巨大,因此得到的基础模型相对稳定。新的数据虽然能代表一定的翻译现象,但是如果过分依赖新数据进行更新,会使模型产生对新数据的过分拟合,进而造成无法很好地处理新数据之外的样本。这也可以被看做是一种灾难性遗忘的问题({\color{red} 参考文献!}),即:模型过分注重对新样本的拟合,丧失了旧模型的一部分能力。解决这个问题,有几种思路:
\parinterval 这里面的一个问题是,新的数据虽然能代表一部分的翻译现象,但是如果仅仅依赖新数据进行更新,会使模型产生对新数据的过分拟合,进而造成无法很好地处理新数据之外的样本。这也可以被看做是一种灾难性遗忘的问题({\color{red} 参考文献!}),即:模型过分注重对新样本的拟合,丧失了旧模型的一部分能力。解决这个问题,有几种思路:
\begin{itemize}
\vspace{0.5em}
\item 数据混合。在增量训练时,除了使用新的数据,再混合一定量的旧数据,混合的比例可以训练的代价进行调整。这样,模型相当于在全量数据的一个采样结果上更新。
\item 数据混合。在增量训练时,除了使用新的数据,再混合一定量的旧数据,混合的比例可以训练的代价进行调整。这样,模型相当于在全量数据的一个采样结果上进行更新。
\vspace{0.5em}
\item 模型插值({\color{red} 参考文献!})。在增量训练之后,将新模型与旧模型进行插值。
\vspace{0.5em}
\item 多目标训练({\color{red} 参考文献!})。在增量训练时,除了在新数据上的损失函数之外,可以再定义一个在旧数据上的损失,这样确保模型可以在两个数据上都有较好的表现。另一种方案是引入正则化项,控制新得到的模型的参数不会偏离旧模型的参数太远。
\item 多目标训练({\color{red} 参考文献!})。在增量训练时,除了在新数据上定义损失函数之外,可以再定义一个在旧数据上的损失函数,这样确保模型可以在两个数据上都有较好的表现。另一种方案是引入正则化项,避免新模型的参数不会偏离旧模型的参数太远。
\vspace{0.5em}
\end{itemize}
......@@ -108,32 +108,51 @@
\section{小设备机器翻译}
\parinterval 在机器翻译研究中,一般会假设计算资源是充足的。但是,在很多应用场景中,机器翻译使用的计算资源是非常受限的,比如,一些离线设备上没有GPU处理器,而且CPU的处理能力也很低,甚至内存也非常有限。这时让模型变得更小、系统变得更快就成为了重要需求。
\parinterval 在机器翻译研究中,一般会假设计算资源是充足的。但是,在很多应用场景中,机器翻译使用的计算资源是非常有限的,比如,一些离线设备上没有GPU处理器,而且CPU的处理能力也很弱,甚至内存也非常有限。这时,让模型变得更小、系统变得更快就成为了一个重要的需求。
\parinterval 本书中已经讨论了大量的技术方法,可用于小设备机器翻译系统,例如:
\parinterval 本书中已经讨论了大量的技术方法,可用于小设备上的机器翻译,例如:
\begin{itemize}
\vspace{0.5em}
\item 知识蒸馏({\chapterthirteen})。这种方法可以有效地把翻译能力从大模型迁移到小模型。
\vspace{0.5em}
\item 低精度存储及计算({\chapterfourteen})。可以使用量化的方式将模型压缩,同时使用整数等数据类型进行计算也非常适合CPU等设备
\item 低精度存储及计算({\chapterfourteen})。可以使用量化的方式将模型压缩,同时使用整数等数据类型也非常适合在CPU等设备上执行
\vspace{0.5em}
\item 轻量模型结构({\chapterfourteen}{\chapterfifteen})。对机器翻译模型的局部结构进行优化也是非常有效的手段,比如,使用更加轻量的卷积计算模块,或者使用深编码器-浅解码器等结构等。
\vspace{0.5em}
\item 面向设备的结构学习({\chapterfifteen})。可以基于设备的存储及延时作为目标函数,自动搜索高效的翻译模型结构。
\item 面向设备的结构学习({\chapterfifteen})。可以把设备的存储及延时作为目标函数的一部分,自动搜索高效的翻译模型结构。
\vspace{0.5em}
\item 动态适应性模型(引用:王强emnlp findings,还有Adaptive neural networks for fast test-time prediction,Multi-scale dense networks for resource efficient image classification)。让模型可以动态调整大小或者计算规模,以达到在不同设备上平衡延时和精度的目的。比如,可以根据延时的要求,动态生成合适深度的神经网络模型进行翻译。
\vspace{0.5em}
\end{itemize}
\parinterval 此外,机器翻译系统的工程实现方式也是十分重要的,例如,编译器的选择、底层线性代数库的选择等等。有时候,使用与运行设备相匹配的编译器\footnote{以神经机器翻译为例,张量计算大多使用C++等语言编写,因此编译器与设备的适配程度对程序的执行效率影响很大。},会带来明显的性能提升。如果希望追求更加极致的性能,甚至需要对一些热点模块进行修改。例如,在神经机器翻译中,矩阵乘法就是一个非常耗时的部分。但是这部分计算又与设备、矩阵的形状有很大关系。对于不同设备,根据不同的矩阵形状可以设计相应的矩阵乘法算法。不过,这部分工作对系统开发和硬件指令的使用水平要求较高。
\parinterval 另一个工程问题是,在很多系统中,机器翻译模块并不是单独执行,而是与其他的模块并发执行。这时,由于多个计算密集型任务存在竞争,处理器要进行更多的上下文切换,会造成程序变慢。比如,机器翻译和语音识别两个模块一起运行时{\footnote{在一些语音翻译场景中,由于采用了语音识别和翻译异步执行的方式,两个程序可能会并发。}},机器翻译的速度会有较明显的下降。对于这种情况,需要设计更好的调度机制。而且在一些同时具有CPU和GPU的设备上,可以考虑合理调度CPU和GPU的资源,增加两种设备可并行处理的内容,避免在某个处理器上的拥塞。
\parinterval 除了运行速度,模型过大也是限制其在小设备上运行的障碍。在模型体积上,神经机器翻译具有天然的优势。因此,在对模型规模有苛刻要求的场景中,神经机器翻译是不二的选择。通过量化、剪枝、参数共享等方式,还可以将模型压缩一个数量级以上。
%----------------------------------------------------------------------------------------
% NEW SECTION
%----------------------------------------------------------------------------------------
\section{机器翻译系统部署}
单模型多语言系统
单卡多语言
技术问题:
显存优化
batching策略(长度近似的放到一起,但是目标端长度无法预测,增加了难度)
%----------------------------------------------------------------------------------------
% NEW SECTION
%----------------------------------------------------------------------------------------
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论