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

embedded/2024/11/21 21:07:40/

一、机器翻译发展历程

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

传统统计机器翻译把词序列看作离散空间里的由多个特征函数描述的点,类似
于 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/embedded/139431.html

相关文章

Docker和VMWare有什么不同

Docker与VMWare在虚拟化技术方面存在显著的差异。以下是对两者区别的详细分析: 一、虚拟化类型与实现方式 Docker 虚拟化类型:Docker采用的是操作系统级别的虚拟化(也称为容器化)。实现方式:Docker容器共享宿主操作系…

[JAVA]MyBatis框架—获取SqlSession对象

SqlSessionFactory作为MyBatis框架的核心接口有三大特性 SqlSessionFactory是MyBatis的核心对象 用于初始化MyBatis,创建SqlSession对象 保证SqlSessionFactory在应用中全局唯一 1.SqlSessionFactory是MyBatis的核心对象 假设我们要查询数据库的用户信息&#x…

PHP Date 函数:日期和时间处理的全指南

PHP Date 函数:日期和时间处理的全指南 PHP Date 函数是 PHP 编程语言中用于处理日期和时间的核心函数之一。它提供了强大的功能,允许开发者轻松地格式化、计算和操作日期和时间值。本文将详细介绍 PHP Date 函数的用法,包括基本格式化、时间戳处理、时区设置以及一些高级特…

Ubuntu问题 -- 设置ubuntu的IP为静态IP (图形化界面设置) 小白友好

目的 为了将ubuntu服务器IP固定, 方便ssh连接人在服务器前使用图形化界面设置 设置 找到自己的网卡名称, 我的是 eno1, 并进入设置界面 查看当前的IP, 网关, 掩码和DNS (注意对应eno1) nmcli dev show掩码可以通过以下命令查看完整的 (注意对应eno1) , 我这里是255.255.255.…

微信小程序 最新获取用户头像以及用户名

一.在小程序改版为了安全起见 使用用户填写来获取头像以及用户名 二.代码实现 <view class"login_box"><!-- 头像 --><view class"avator_box"><button wx:if"{{ !userInfo.avatarUrl }}" class"avatorbtn" op…

【Node.js】深入理解 V8 JavaScript 引擎

V8 是 Google 开发的高性能 JavaScript 和 WebAssembly 引擎&#xff0c;是 Node.js 和 Google Chrome 的核心组件之一。它的强大性能和高效设计&#xff0c;使其成为现代 JavaScript 应用的基石。在本文中&#xff0c;我们将全面解析 V8 引擎的架构、运行原理及其在 Node.js 中…

删除了mysql的binlog日志导致服务无法启动怎么办

假如我们不小心把mysql的binlog文件删除了&#xff0c;mysql启不来了&#xff0c;怎么办&#xff0c;不要惊慌&#xff0c;我们可以查看MySQL日志&#xff0c;日志提示./mysql-bin.0000xx文件找不到&#xff0c;我们可以在当前目录下找到mysql-bin.index这个文件&#xff0c;编…

Spring视图解析(ViewResolver)

在 Spring MVC 框架中&#xff0c;视图解析&#xff08;ViewResolver&#xff09;是一个重要的组件&#xff0c;负责将逻辑视图名称解析为具体的视图技术&#xff08;如 JSP、Thymeleaf、Freemarker 等&#xff09;。视图解析器使得控制器可以返回一个逻辑视图名称&#xff0c;…