Commit 88a9b1a9 by 曹润柘

合并分支 'master' 到 'caorunzhe'

Master

查看合并请求 !558
parents 423cdabb 6694543e
......@@ -21,10 +21,127 @@
% CHAPTER 17
%----------------------------------------------------------------------------------------
\chapter{神经机器翻译实践}
\chapter{机器翻译应用技术}
\parinterval 机器翻译的应用场景众多,特别是随着翻译品质的不断提升,有越来越多的机器翻译需求被挖掘出来。但是,仅凭一个翻译引擎是无法满足这些需求的。应用机器翻译时,需要“额外”考虑很多因素,例如,数据加工方式、交互方式、应用的领域等,甚至机器翻译模型也要经过改造才能适应到不同的场景中。从某种意义上说,机器翻译应用技术是机器翻译走向实用的必要手段,可以被看做是机器翻译理论和模型的进一步延伸。
\parinterval 本章将重点介绍机器翻译应用中所面临的问题,以及解决问题可以采用的策略。本章所涉及的内容较为广泛,一方面会大量使用本书前十七章的模型和方法,另一方面也会介绍新的技术手段。最终,本章会结合机器翻译的特点展示机器翻译可能的应用场景。
%----------------------------------------------------------------------------------------
% NEW SECTION
%----------------------------------------------------------------------------------------
\section{机器翻译的应用并不简单}
\parinterval 机器翻译一直是自然语言处理的热点,无论从评测比赛的结果,还是论文发表数量上看,机器翻译的研究可谓火热。但是,客观的说,我们离机器翻译完美的应用还有相当的距离。这主要是因为,需求的多样化需要更多技术的融合,是一项复杂的系统工程,而机器翻译研究大多是对局部模型和方法的调整。这也会造成一个现象,很多论文里报道的技术方法可能无法直接应用于真实场景的系统。当然,这是一个复杂的问题,也并不是本章所要讨论的。这里更加关注如何对具体的机器翻译应用问题进行求解。有几方面挑战:
\begin{itemize}
\vspace{0.5em}
\item {\small\bfnew{机器翻译模型很脆弱}}。实验环境下,给定翻译任务,甚至给定训练和测试数据,机器翻译模型可以表现的很好。但是,真实的应用场景是不断变化的。经常会出现训练数据缺乏、应用领域与训练数据不匹配、用户的测试方法与开发者不同等等一系列问题。特别是,对于不同的任务,神经机器翻译等模型需要进行非常细致的调整,理想中一套``包打天下''的模型和设置是不存在的。这些都导致一个结果:直接使用既有机器翻译模型很难满足真实应用的需求。
\vspace{0.5em}
\item {\small\bfnew{机器翻译缺少针对场景的应用技术}}。目前为止,机器翻译的研究进展已经为我们提供很好的基础模型。但是,在应用时,用户并不是简单的与这些模型“打交道”,他们更加关注如何解决自身的业务需求,例如,机器翻译应用的交互方式、系统是否可以自己预估翻译可信度等等。甚至,在某些场景中,用户对翻译模型的体积和速度都有非常严格的要求。
\vspace{0.5em}
\item {\small\bfnew{优秀系统的研发需要长时间的打磨}}。这不是一个技术问题。因为如果有足够的时间,所有人都可以把任何事情做到极致。但是,不论是为了毕业、提职,还是希望在领域占据一席之地,我们总是希望在尽可能短的时间内把系统研发出来,把结果报道出来。这种做法无可厚非,因为科学研究需要对更本质的科学问题进行探索,而非简单的工程开发与调试。但是,对一个初级的系统进行研究往往会掩盖掉``真正的问题'',因为很多问题在更先进的系统中根本就不存在。
\vspace{0.5em}
\end{itemize}
\parinterval 下面本章将就一些具体技术问题展开讨论,旨在给机器翻译应用提供一些可落地的思路。
%----------------------------------------------------------------------------------------
% NEW SECTION
%----------------------------------------------------------------------------------------
\section{增量式模型优化}
\parinterval 机器翻译的训练数据不是一成不变的。系统研发人员可以使用自有数据训练得到基础的翻译模型(或初始模型)。当应用这个基础模型时,可能会有新的数据出现,例如:
\begin{itemize}
\vspace{0.5em}
\item 应用的目标领域和场景可能是系统研发时无法预见的,但是用户会有一定量自有数据,可以用于系统优化。
\vspace{0.5em}
\item 系统在应用中会产生新的数据,这些数据经过一些筛选和修改也可以用于模型训练。
\vspace{0.5em}
\end{itemize}
\parinterval 这时就产生一个问题,能否使用新的数据让系统变得更好?简单直接的方式是,将新的数据和原始数据混合重新训练系统,但是使用全量数据训练模型的周期很长,这种方法成本的很高。而且,新的数据可能是不断产生的,甚至是流式的。这时就需要快速、低成本的方式对模型进行更新。
\parinterval 增量训练就是满足上述需求的一种方法。本质上来说,神经机器翻译中使用的基于小批次的模型更新就是典型的增量训练方法,其基本思想是:使用少量样本对模型进行更新,这个更新的代价并不高,而且可以反复不断执行。当新的数据到来时,可以把这些新的数据作为训练数据,把当前的模型作为初始模型。当新增加的数据量不大的时候(比如,几万句对),训练的代价非常低。
\parinterval 这里面的一个问题是,原始训练数据量巨大,因此得到的基础模型相对稳定。新的数据虽然能代表一定的翻译现象,但是如果过分依赖新数据进行更新,会使模型产生对新数据的过分拟合,进而造成无法很好地处理新数据之外的样本。这也可以被看做是一种灾难性遗忘的问题({\color{red} 参考文献!}),即:模型过分注重对新样本的拟合,丧失了旧模型的一部分能力。解决这个问题,有几种思路:
\begin{itemize}
\vspace{0.5em}
\item 数据混合。在增量训练时,除了使用新的数据,再混合一定量的旧数据,混合的比例可以训练的代价进行调整。这样,模型相当于在全量数据的一个采样结果上更新。
\vspace{0.5em}
\item 模型插值({\color{red} 参考文献!})。在增量训练之后,将新模型与旧模型进行插值。
\vspace{0.5em}
\item 多目标训练({\color{red} 参考文献!})。在增量训练时,除了在新数据上的损失函数之外,可以再定义一个在旧数据上的损失,这样确保模型可以在两个数据上都有较好的表现。另一种方案是引入正则化项,控制新得到的模型的参数不会偏离旧模型的参数太远。
\vspace{0.5em}
\end{itemize}
\parinterval {\color{red} 图XXX}给出了上述方法的对比。在实际应用中,还有很多细节会影响增量训练的效果,比如,学习率大小的选择等。另外,新的数据积累到何种规模可以进行增量训练也是实践中需要解决问题。一般来说,增量训练使用的数据量越大,训练的效果越稳定。但是,这并不是说数据量少就不可以进行增量训练,而是如果数据量过少时,需要考虑训练代价和效果之间的平衡。而且,过于频繁的增量训练也会带来更多的灾难性遗忘的风险,因此合理进行增量训练也是应用中需要实践的。
\parinterval 理想状态下,系统使用者会希望,系统看到少量句子就可以很好地解决一类翻译问题,即:进行真正的小样本学习。但是,现实的情况是,现在的机器翻译系统还无法很好的做到“举一反三”。增量训练也需要专业人士完成才能得到相对较好的效果。
\parinterval 另一个实际的问题是,当应用场景没有双语句对时是否可以优化系统?这个问题在{\chaptersixteen}的领域适应部分进行了一些讨论。一般来说,如果目标任务没有双语数据,仍然可以使用单语数据进行优化。常用的方法有数据增强、基于语言模型的方法等。具体方法可以参考{\chaptersixteen}的内容。
%----------------------------------------------------------------------------------------
% NEW SECTION
%----------------------------------------------------------------------------------------
\section{交互式机器翻译}
%----------------------------------------------------------------------------------------
% NEW SECTION
%----------------------------------------------------------------------------------------
\section{翻译结果可干预性}
%----------------------------------------------------------------------------------------
% NEW SECTION
%----------------------------------------------------------------------------------------
\section{小设备机器翻译}
\parinterval 在机器翻译研究中,一般会假设计算资源是充足的。但是,在很多应用场景中,机器翻译使用的计算资源是非常受限的,比如,一些离线设备上没有GPU处理器,而且CPU的处理能力也很低,甚至内存也非常有限。这时让模型变得更小、系统变得更快就成为了重要需求。
\parinterval 本书中已经讨论了大量的技术方法,可用于小设备机器翻译系统,例如:
\begin{itemize}
\vspace{0.5em}
\item 知识蒸馏({\chapterthirteen})。这种方法可以有效地把翻译能力从大模型迁移到小模型。
\vspace{0.5em}
\item 低精度存储及计算({\chapterfourteen})。可以使用量化的方式将模型压缩,同时使用整数等数据类型进行计算也非常适合CPU等设备。
\vspace{0.5em}
\item 轻量模型结构({\chapterfourteen}{\chapterfifteen})。对机器翻译模型的局部结构进行优化也是非常有效的手段,比如,使用更加轻量的卷积计算模块,或者使用深编码器-浅解码器等结构等。
\vspace{0.5em}
\item 面向设备的结构学习({\chapterfifteen})。可以基于设备的存储及延时作为目标函数,自动搜索高效的翻译模型结构。
\vspace{0.5em}
\end{itemize}
%----------------------------------------------------------------------------------------
% NEW SECTION
%----------------------------------------------------------------------------------------
\section{机器翻译系统部署}
%----------------------------------------------------------------------------------------
% NEW SECTION
%----------------------------------------------------------------------------------------
\section{机器翻译的应用场景}
%----------------------------------------------------------------------------------------
% NEW SECTION
%----------------------------------------------------------------------------------------
\section{}
\section{拓展思考}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论