机器翻译基础与模型 之一: 基于RNN的模型

news/2024/11/24 19:09:00/

一、机器翻译发展历程

基于规则的-->基于实例的-->基于统计方法的-->基于神经网络的

传统统计机器翻译把词序列看作离散空间里的由多个特征函数描述的点,类似
于 n-gram 语言模型,这类模型对数据稀疏问题非常敏感。神经机器翻译把文字序列表示为实数向量,一方面避免了特征工程繁重的工作,另一方面使得系统可以对文字序列的“表示”进行学习。

神经网络模型在机器翻译上的实践发展:

CNN/RNN:存在梯度消失问题

LSTM:seq2seq学习的方法,缓解了梯度消失/爆炸问题,通过遗忘门的设计让网络选择性的记忆信息,缓解了序列中长距离依赖的问题。但句子越长损失的信息越多,模型无法对输入和输出序列的对齐进行建模,不能有效保证翻译质量。

注意力机制:可以有效地处理长句子的翻译,而且注意力的中间结果具有一定的可解释性。但模型计算量很大。

GNMT系统:google发布的基于多层RNN的方法。

Transformer:完全摒弃了RNN和CNN,仅通过多头注意力机制和前馈神经网络的框架。解决了长距离依赖的问题,训练速度快,翻译效果更好。

二、基于RNN的模型

2.1 编码器-解码器

2.1.1 框架结构

编码器将输入的文字序列通过某种转换变为一种新的“表示”形式。解码器把这种“表示”重新转换为输出的文字序列。其中的核心问题是表示学习。

当今主流的神经机器翻译系统中,编码器由词嵌入层和中间网络层组成。当输入一串单词序列时,词嵌入层会将每个单词映射到多维实数表示空间,这个过程也被称为词嵌入。

之后中间层会对词嵌入向量进行更深层的抽象,得到输入单词序列的中间表示。中间层的实现方式有很多,比如:RNN、CNN、自注意力机制等都是模型常用的结构。解码器的结构基本上和编码器是一致的,只比编码器多了输出层,或者多一个编码-解码注意力子层。

编码器-解码器框架已经成为了神经机器翻译系统的标准架构。

2.2 基于RNN的翻译建模

2.2.1 建模问题

序列表示问题:如何描述文字序列。

对序列中某个位置的答案进行预测时需要记忆当前时刻之前的序列信息,这就是RNN网络诞生的背景。RNN处理序列问题的实例: 循环单元的输入由上一时刻的输出和当前时刻的输入组成。

在RNN神经机器翻译里,把源语言句子、目标语言句子分别看作两个序列,使用两个RNN分别对其进行建模。一个就是编码器,另一个就是解码器。

三个关键问题:
(1)词嵌入,即词的分布式表示问题。RNN网络的输入。
(2)句子的表示学习,即在词嵌入的基础上获取整个序列的表示。RNN网络的最后一层输出。
(3)译文单词生成,即每个目标语言单词的概率。 softmax输出层来获得所有单词的分布。

2.2.2 LSTM模型 (长短时记忆模型)

LSTM 模型是 RNN 模型的一种改进。相比 RNN 仅传递前一时刻的状态,LSTM 会同时传递两部分信息:状态信息和记忆信息 。

LSTM的结构主要分为三部分: 遗忘、记忆更新、输出。

见之前博文:理解LSTM模型-CSDN博客

2.2.3 GRU 门控循环单元(Gated Recurrent Unit)

GRU是LSTM的一个变体,继承了门控单元控制信息传递的思想,并对其进行了简化。GRU只有两个门信号: 重置门、更新门。GRU比LSTM运算效率高些。

2.2.4 双向RNN模型

双向循环网络,同时考虑前文和后文的信息。编码器可以看作由两个RNN构成,第一个RNN从句子的右边进行处理,第二个RNN从句子左边开始处理,最终将正反向得到的结果融合后传递解码器。

2.3 注意力机制

注意力机制的概念来源于生物学的现象:当待接受的信息过多时,人类会选择性地关注部分信息而忽略其他信息。

2.3.1 翻译中的注意力机制

在翻译中引入注意力机制是为了在生成目标语言单词时有选择地获取源语言句子中更有用的部分,即相关性更高的源语言片段应该在句子的表示中体现出来,而不是将所有的源语言单词一视同仁。

对每个目标语言单词y_j,注意力机制会生成一个动态的表示C_j,而不是采用静态的表示。C_j也被称作对于目标语言位置j的上下文向量。

2.3.2 上下文向量的计算

注意力机制的核心是:针对不同目标语言单词生成不同的上下文向量。可以将注意力机制看做是一种对接收到的信息的加权处理。对于更重要的信息赋予更高的权重即更高的关注度,对于贡献度较低的信息分配较低的权重,弱化其对结果的影响。

根据这种思想,上下文向量 Cj 被定义为对不同时间步编码器输出的状态序列{h1,...,hm} 进行加权求和,如下式:Cj =SUM( αi,j * hi) 。其中, αi,j 是注意力权重(Attention Weight),它表示目标语言第 j 个位置与源语言第 i 个位置之间的相关性大小。

注意力权重αi,j的计算:第一步计算相关性系数\beta i,j,第二步用softmax函数将\beta i,j做归一化处理得到注意力权重αi,j。

计算过程实例:

2.3.3 注意力机制的解读

基于模糊匹配的查询模型。

2.3.4 实例:GNMT

GNMT是google在2016年发布的神经机器翻译系统。

2.4 训练与推断

2.4.1 损失函数、参数初始化

交叉熵损失函数。一般选择凸函数。

大量实践中发现,神经机器翻译模型对初始化方式非常敏感,性能优异的系统往往需要特定的初始化方式。

2.4.2 优化策略、梯度裁剪、学习率策略

学习率调整策略:预热阶段、衰减阶段。

学习率的预热阶段便是通过在训练初期使学习率从小到大逐渐增加来减缓在初始阶段模型“跑偏”的现象。常用的余热方法是:逐渐预热(Gradual Warmup)

模型训练逐渐接近收敛的时候,使用太大学习率会很容易让模型在局部最优解附近震荡,从而错过局部极小,因此需要通过减小学习率来调整更新的步长,以此来不断地逼近局部最优,这一阶段也称为学习率的衰减阶段。学习率衰减方法:指数衰减、余弦衰减、分段常数衰减(Piecewise Constant Decay)等。

2.4.3 并行训练

a.数据并行

如果一台设备能完整放下一个神经机器翻译模型,那么数据并行可以把一个大批次均匀切分成 n 个小批次,然后分发到 n 个设备上并行计算,最后把结果汇总。

b.模型并行

把较大的模型分成若干小模型,之后在不同设备上训练小模型。

2.4.4 推断

神经机器翻译的推断是一个搜索问题。全搜索 Vs 自左向右的搜索。

自左向右的搜索: 贪婪搜索、束搜索。都是典型的自回归模型。

a.贪婪搜索

解码过程中每一个时间步的单词预测都依赖于其前一步单词的生成。因为是基于贪心的方法,这
里会选择概率最大(top-1)的单词作为输出。

贪婪搜索的优点在于速度快,而且原理非常简单,易于快速实现。由于每一步只保留一个最好的局部结果,贪婪搜索往往会带来翻译品质上的损失。

b.束搜索

束搜索是一种启发式图搜索算法。对于每一个目标语言位置,束搜索选择了概率最大的前 k 个单词进行扩展(其中 k 叫做束宽度,或简称为束宽)。

假设 {y1,...,yn} 表示生成的目标语言序列,且 k = 3,则束搜索的具体过程为:在预测第一个位置时,可以通过模型得到 y1 的概率分布,选取概率最大的前 3 个单词作为候选结果(假设分别为“have” , “has” , “it”)。在预测第二个位置的单词时,模型针对已经得到的三个候选结果(“have” , “has” , “it”)计算第二个单词的概率分布。因为 y2 对应 |V | 种可能,总共可以得到 3 × |V | 种结果。然后从中选取使序列概率 P(y2,y1|x) 最大的前三个 y2 作为新的输出结果,这样便得到了前两个位置的top-3 译文。在预测其他位置时也是如此,不断重复此过程直到推断结束。

可以看到,束搜索的搜索空间大小与束宽度有关,也就是:束宽度越大,搜索空间越大,更有可
能搜索到质量更高的译文,但同时搜索会更慢。束宽度等于 3,意味着每次只考虑三个最有可能的结果,贪婪搜索实际上便是束宽度为 1 的情况。在神经机器翻译系统实现中,一般束宽度设置在 4~8 之间。


http://www.ppmy.cn/news/1549610.html

相关文章

Linux-Apache静态资源

文章目录 静态资源权限设置 🏡作者主页:点击! 🤖Linux专栏:点击! ⏰️创作时间:2024年11月20日11点21分 静态资源 Apache配置静态资源 可以在网页上配置一个静态的FTP服务器,让用户…

Vue核心特性解析(内含实践项目:设置购物车)

Vue 3 作为前端开发领域的热门框架,为构建用户界面提供了高效且灵活的解决方案。在上一篇博客:深度解析Vue3中,我们了解到了响应式数据、v-on、v-if、v-for、v-bind等Vue相关属性,这篇我们继续探讨Vue的其他属性,为你揭…

机器翻译基础与模型 之三:基于自注意力的模型

基于RNN和CNN的翻译模型,在处理文字序列时有个问题:它们对序列中不同位置之间的依赖关系的建模并不直接。以CNN的为例,如果要对长距离依赖进行描述,需要多层卷积操作,而且不同层之间信息传递也可能有损失,这…

Spark 中的 Shuffle 是分布式数据交换的核心流程,从源码角度分析 Shuffle 的执行路径

Spark 中的 Shuffle 是分布式数据交换的核心流程,涉及多个组件的协同工作。为了深入理解其处理过程,我们可以从源码角度分析 Shuffle 的执行路径,分为 Shuffle Write 和 Shuffle Read 两个阶段。 1. Shuffle Write 阶段 Shuffle Write 的主要…

11/19使用Spring,gradle实现前后端交互

创建 Gradle 项目 在你常用的 IDE(如 Intellij IDEA)中选择创建新的 Gradle 项目,按照向导进行相应的配置,选择合适的项目名称、目录等信息。配置 build.gradle 文件(Gradle 项目的配置文件),添…

蚁群算法(Ant Colony Optimization, ACO)

简介 蚁群算法(Ant Colony Optimization, ACO)是一种基于自然启发的优化算法,由意大利学者马可多里戈(Marco Dorigo)在1992年首次提出。它受自然界中蚂蚁觅食行为的启发,用于解决离散优化问题。 在自然界…

jquery还有其应用场景,智慧慢慢地被边缘化,但不会消亡

一、jQuery 的辉煌过往 jQuery 的诞生与崛起 在前端开发的漫长历史中,2006 年诞生的 jQuery 犹如一颗耀眼的新星划破天际。它由 John Resig 创造,一出现便以其独特的魅力迅速吸引了广大开发者的目光。在那个前端技术发展相对缓慢的时期,jQue…

ESP32移植Openharmony外设篇(6)光敏电阻ADC读取

光照传感器 模块简介 产品描述 光敏电阻(photoresistor orlight-dependent resistor,后者缩写为LDR)是一种基于内光电效应的半导体元件,它的阻值依赖于入射光强的变化 。入射光强增加,光敏电阻的阻值减小&#xff0…