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

一、机器翻译发展历程

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF Prism框架

一、关于Prism框架 Prism.Core:【Prism.dll】实现MVVM的核心功能,属于一个与平台无关的项目 Prism.Wpf:【Prism.Wpf】包含了DialogService,Region,Module,Navigation,其他的一些WPF的功能 Prism.Unity:【Prism.Unity.Wpf】,IOC容器 Prism.Unity>Pr…

STM32F103系统时钟配置

时钟是单片机运行的基础,时钟信号推动单片机内各个部分执行相应的指令。时钟系统就是CPU的脉搏,决定CPU速率,像人的心跳一样 只有有了心跳,人才能做其他的事情,而单片机有了时钟,才能够运行执行指令&#x…

2024年 Web3开发学习路线全指南

Web3是一个包含了很多领域的概念,不讨论币圈和链圈的划分,Web3包括有Defi、NFT、Game等基于区块链的Dapp应用的开发;也有VR、AR等追求视觉沉浸感的XR相关领域的开发;还有基于区块链底层架构或者协议的开发。 这篇文章给出的学习路…

CTF--php伪协议结合Base64绕过

Base64绕过 在ctf中,base64是比较常见的编码方式,在做题的时候发现自己对于base64的编码和解码规则不是很了解,并且恰好碰到了类似的题目,在翻阅了大佬的文章后记录一下,对于base64编码的学习和一个工具 base64编码是…

Linux 命令之 tar

文章目录 1 tar 命令介绍2 压缩与解压缩2.1 压缩2.2 解压 4 高级用法4.1 排除目录4.2 显示进度4.2.1 脚本解压缩4.2.2 命令解压缩4.2.3 压缩进度 1 tar 命令介绍 常见的压缩包有 .tar.gz、.tar.xz、.tar.bz2,以及 .rar、.zip、.7z 等压缩包。 常见的 tar 选项&#…

Jenkins修改LOGO

重启看的LOGO和登录页面左上角的LOGO 进入LOGO存在的目录 [roottest-server01 svgs]# pwd /opt/jenkins_data/war/images/svgs [roottest-server01 svgs]# ll logo.svg -rw-r--r-- 1 jenkins jenkins 29819 Oct 21 10:58 logo.svg #jenkins_data目录是我挂载到了/opt目录&…

【大模型】LLaMA: Open and Efficient Foundation Language Models

链接:https://arxiv.org/pdf/2302.13971 论文:LLaMA: Open and Efficient Foundation Language Models Introduction 规模和效果 7B to 65B,LLaMA-13B 超过 GPT-3 (175B)Motivation 如何最好地缩放特定训练计算预算的数据集和模型大小&…

vue添加LCD字体(液晶字体)数字美化,前端如何引用LCD字体液晶字体,如何转换?@font-face 如何使用?

文章目录 一、效果二、下载字体格式【[https://www.dafont.com/theme.php?cat302&text0123456789](https://www.dafont.com/theme.php?cat302&text0123456789)】三、下载后,解压后都是.ttf文件,在【[https://www.fontsquirrel.com/tools/webfo…

【大数据学习 | Spark】关于distinct算子

只有shuffle类的算子能够修改分区数量,这些算子不仅仅存在自己的功能,比如分组算子groupBy,它的功能是分组但是却可以修改分区。 而这里我们要讲的distinct算子也是一个shuffle类的算子。即可以修改分区。 scala> val arr Array(1,1,2,…

Qt桌面应用开发 第五天(常用控件 自定义控件)

目录 1.QPushButton和ToolButton 1.1QPushButton 1.2ToolButton 2.RadioButton和CheckBox 2.1RadioButton单选按钮 2.2CheckBox多选按钮 3.ListWidget 4.TreeWidget控件 5.TableWidget控件 6.Containers控件 6.1QScrollArea 6.2QToolBox 6.3QTabWidget 6.4QStacke…

Excel - VLOOKUP函数将指定列替换为字典值

背景:在根据各种复杂的口径导出报表数据时,因为关联的表较多、数据量较大,一行数据往往会存在三个以上的字典数据。 为了保证导出数据的效率,博主选择了导出字典code值后,在Excel中处理匹配字典值。在查询百度之后&am…

ctfshow-web入门-SSRF(web351-web360)

目录 1、web351 2、web352 3、web353 4、web354 5、web355 6、web356 7、web357 8、web358 9、web359 10、web360 1、web351 看到 curl_exec 函数,很典型的 SSRF 尝试使用 file 协议读文件: urlfile:///etc/passwd 成功读取到 /etc/passwd 同…

【vmware+ubuntu16.04】ROS学习_博物馆仿真克隆ROS-Academy-for-Beginners软件包处理依赖报错问题

首先安装git 进入终端,输入sudo apt-get install git 安装后,创建一个工作空间名为tutorial_ws, 输入 mkdir tutorial_ws#创建工作空间 cd tutorial_ws#进入 mkdir src cd src git clone https://github.com/DroidAITech/ROS-Academy-for-Be…

AI数字人视频小程序:引领未来互动新潮流

当下,随着人工智能技术的不断创新发展,各类AI系统已经成为了创新市场发展的重要力量,AI文案、AI数字人、AI视频等,为大众带来更加便捷的创作方式,AI成为了一个全新的风口,各种AI红利持续释放,市…

leetcode400第N位数字

代码 class Solution {public int findNthDigit(int n) {int base 1;//位数int weight 9;//权重while(n>(long)base*weight){//300n-base*weight;base;weight*10;}//n111 base3 weight900;n--;int res (int)Math.pow(10,base-1)n/base;int index n%base;return String…

MySQL扩展varchar字段长度能否Online DDL

目录 问题场景 Online DDL 简介 场景复现 DBdoctor快速识别 Online DDL 总结 问题场景 在MySQL数据库中,DDL变更可以通过两种算法实现:Copy算法和In-Place算法。Copy算法会复制整个表,这可能导致长时间的写入阻塞,从而严重影…

【WPF】Prism学习(九)

Prism Dependency Injection 1.Container Locator 1.1. Container Locator的引入: Container Locator是在Prism 8.0版本中新引入的一个特性。它的目的是为了帮助Prism框架摆脱对CommonServiceLocator的依赖,并解决一些必须回退到ServiceLocator模式的内…

.NET 9与C# 13革新:新数据类型与语法糖深度解析

记录(Record)类型 使用方式: public record Person(string FirstName, string LastName); 适用场景:当需要创建不可变的数据结构,且希望自动生成 GetHashCode 和 Equals 方法时。不适用场景:当数据结构需…

3C产品说明书电子化转变:用户体验、环保与商业机遇的共赢

在科技日新月异的当代社会,3C产品(涵盖计算机类、通信类和消费类电子产品)已成为我们日常生活中不可或缺的重要元素。与此同时,这些产品的配套说明书也经历了一场从纸质到电子化的深刻变革。这一转变不仅体现了技术的飞速进步&…

GIT 入门详解指南

前言: 注:本博客仅用于记录本人学习过程中对git的理解,仅供学习参考,如有异议请自行查资料求证 安装 使用git之前必须完成git的安装,Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行 git 安装教程 基本…