论文笔记:Neural Machine Translation by Jointly Language Learning to Align and Translate

本文主要是介绍论文笔记:Neural Machine Translation by Jointly Language Learning to Align and Translate,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写在前面

Attention 机制在许多领域中都有应用,这些模型都被称为 Attention Based Model,而这篇论文则是将注意力机制应用在神经网络机器翻译中,论文的思路很清楚,首先介绍了传统NMT系统的缺陷,然后针对这一缺陷提出改进,最后实验证明,并进行定量以及定性分析。

首先我们要了解经典的Seq2Seq模型是如何进行翻译的:整体模型使用了一个 Encoder 和一个 Decoder 首先输入的序列经过 Encoder 的处理,压缩成为一个固定长度的向量(Fixed-length Vector),然后在 Decode 阶段,将这个向量中的信息还原成一个序列,从而完成翻译任务。

在这里我们需要尤其注意这个定长向量,可以想象,对于不同长度的句子,在模型中却要将提取的全部信息放在同样长度的向量中,这本身就是不太合理的,一个长度50的句子和一个长度5的句子信息量怎么会在同样长度的向量中合适地表达呢?这也是论文中提到的,在测试的时候,对于长度大于30的句子,RNN Encoder-Decoder 机制的模型就有些力不从心了,因此引入了注意力机制,在 Decode 过程中,仍然可以直接参考原始句子序列中相关的部分。

在学习过程中,看到了这样的说法,使用 Attention 机制进行翻译的过程,就像是人进行翻译的过程,我们在翻译一个长句子的时候,假设翻译到某一个时刻,忘了要翻译的内容,我们会回过头去,找到原始句子的那一部分,然后再决定如何让翻译,Attention 机制解释了这一过程,实验证明,这一方式是非常有效的。

之前参考了一些代码,学习了一下 Seq2Seq + Attention 的代码实现,只能说,即使是论文的模型构建方式懂了,真正落地到代码也还有很长的一段路要走,果然还是要再努力一点啊。

1. Abstract & Introduction & Background

这一部分简要介绍了NMT一些基础共性,论文中提到,目前(当时)的 NMT 模型都属于 Encoder-Decoders 家族,模型的思路本质上就是最大化条件概率: P ( o u t p u t _ s e n t e n c e ∣ i n p u t _ s e n t e n c e ) P(output\_sentence|input\_sentence) P(output_sentenceinput_sentence),而使用固定长度向量来存储信息的做法,就像之前所说的,固定长度的限制无法储存足够多的信息,这就成为了一个瓶颈(Bottleneck)。在生成输出序列的时候,每次模型都只生成一个单词,在生成的时候使用 (soft-)search 的方法搜索输入序列中与要翻译内容最相关的部分,其实也就是 Attention 的思想了。

文中对 Neural Machine Translation 进行了介绍,首先是介绍了概率角度的机器翻译任务(就是最大化那个条件概率),然后对 RNN Encoder-Decoders 模型进行了介绍,并提到,通过使用一些更优秀的循环单元(LSTM),是的这些模型相较之前都有了很大的提升,这里还简单提了 RNN Encoder-Decder 的公式之类的,推荐更深的了解直接看之前的论文,例如 《Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation》

Learning to Align and Translate

第三部分切入正题,这里介绍的顺序是先 Decoder 然后是 Encoder (这算是自顶向下吗?)。首先来看这张图(论文中 Figure 1):

所有的信息都在这张图上了。

Decoder

首先来看 Decoder 部分,这里使用的就是一个简单的 RNN 单元, 只是要注意隐状态的改变:
s i = f ( s i − 1 , y i − 1 , c i ) s_{i}=f(s_{i-1},y_{i-1},c_{i}) si=f(si1,yi1,ci)
可以看到,某个时间点上输入的隐状态由三个因素共同决定:

  • 第一个是上一步的隐状态输出 ( s i − 1 s_{i-1} si1) 。
  • 第二个是上一步的直接输出( y i − 1 y_{i-1} yi1)。
  • 第三个是来自 Encoder 部分所有输出的一个处理结果 ( c i c_{i} ci)。

这一步还是很好理解的,很显然, 问题就在于如何表示来自于 Encoder 部分的输出信息,因为之前提到过,对于输出环节的每一个词语,我们都要找到输入序列的部分信息,然后再决定输出什么。也就是如何表示向量C了。
c i = ∑ j = 1 T x α i j h j c_{i} = \sum_{j=1}^{T_{x}}\alpha_{ij}h_{j} ci=j=1Txαijhj
这里可以看到对于某一步 i i i,对应的 c i c_{i} ci 实际上是一个加权和的形式,与当前步相关大的部分权值大,不太相关的则权值小,这样的过程就是 Attention 的体现,在文中也称 (soft-)search。另一个问题的这个 α i j \alpha_{ij} αij 如何计算,在论文中公式(6)可以看出,每一个权值都是对当前步的隐状态(Decoder阶段)和所有步的隐状态(Encoder阶段)经过一个变换的结果这个变换有必要提一下,这里的变换,也就是公式(6)中的 a ( ) a() a() 有很多实现形式,例如计算余弦距离, 或者是通过一个简单全连接神经网络的形式,这时候也就是 e i j = s i − 1 W h j e_{ij}=s_{i-1}Wh_{j} eij=si1Whj 了,等等。然后对这一批权值,做一个softmax处理,(处理成一个概率分布,相当于一个标准化,不然不同的权值第一步(1,2,3),第二步(100, 200, 300)显得太不平衡了)。

(PS:关于这里 Attention 的权值计算方式,在实现时候多有不同,我见的代码有不使用decoder阶段隐状态而是用decoder阶段输出与encoder所有的输出计算权值的,所以,我觉得理解这个意思就好了,一定程度上不必把所有的细节都完全与论文一样,当然,完全论文复现还是尽量这样的,我的意思只是学习的过程中。。)

另外,更具体的过程可以参考附录部分。

Encoder

Encoder阶段就非常好理解了,这里没有直接使用RNN,而是使用了一个 BiRNN 网络实现,双向循环网络可以更好地捕捉文本上下文信息嘛。这样的话,每一步上Encoder都会有两个输出,这里的处理很简单,直接把两个输出结果 concatenate,也就是论文3.2节中双向箭头那部分向量,把这个拼接后的向量作为我们上面提到的计算 Attention 权重的 h j h_{j} hj 部分。

Experiment Settings

这一部分介绍实验中的一些设置,主要包括两部分,第一部分介绍使用的数据集,第二部分展示了实验中模型的一些参数。

第一部分对于数据集的处理,文中表示对数据集并没有进行一些特殊的操作,首先是数据集选择,去掉了一些不合适的数据,第二步进行分词,然后选择其中最常见的30000词构建词典,这里强调了没有进行其他特殊操作,例如统一对数据小写处理,以及词干化等。

第二部分介绍了实验中的一些参数以及对比模型等。既然是对比试验,文中设计了两类模型,每一种模型又按照长度分为两种(长度不超过30、长度不超过50),分别是:

  • RNN encdec-30
  • RNN search-30
  • RNN encdec-50
  • RNN search-50

具体参数可以看论文这一部分,更具体的参数记录在附录中,这一部分最后也提到了,对于每一个模型,训练了大概5天。。。果然学习最后还是要靠硬件吗。。

Results

感觉这一部分才是论文的核心,对于实验数据的分析,这里分了两部分,第一部分是定量分析(quantitative analysis),第二部分是定性分析(qualitative analysis),这两种分析方法经常在论文中出现。

首先是定量分析,这一部分主要是摆数据,验证论文新模型的效果,第一个表展示了不同模型的 BLEU 分数,对比的基准模型是非常常见的传统模型 Moses,表中分了两类,第一类是只包含词典词语的结果,第二类是包含 unknown 词的结果,结果来看,在更普遍情况下(含 UNK),论文提出的 RNN search-50有最好的结果。第二个实验比较了句子长度增长对模型性能的影响,就像之前分析的结果,确实在最开始,所有模型的结果是差不多的,但是当句子长度增大到20~30以及之后时,采用传统 Encoder-Decoder 模式的模型效果迅速下降,当然 RNNsearch-50 保持了分数稳定。

第二部分进行的是定性分析,这里一开始提到了一个概念:对齐(Alignment),又提到了论文中提出的方法是对(soft-)alignment 的一种很直观的解释,关于这个对齐,我的理解就是输出序列中单词与输入序列中单词的对应关系,这里的 软对齐 ,我的理解是有两层意思吧,第一层是指输出序列中一个单词可能会对应输入序列中的多个单词或者相反,第二层意思是两个序列次序不同的问题,这一点在论文的这一部分有介绍。此外,论文中这一部分给出了两个序列的权重关系图,可以说是非常直接明了了,所以有种说法是 Attention 机制实际上是对翻译过程的形象展示(翻译任务),因为之前的模型方法我们并不清楚模型内部是如何进行转化的,但是 Attention 解释了这个。

在这一部分还直接使用长句子的例子展示了不同的模型的处理结果(具体句子可以看附录),也算是针对之前的介绍的具体解释吧。

Related Work & Conclusion

这一部分,论文中提到,之前使用神经网络的方式进行机器翻译的过程,往往都是作为现有的统计翻译模型的一个组件,例如提供额外特征,或者对候选翻译重新打分等等,但是,作者们提到,完全可以只依赖神经网络方式建立完整的翻译系统。

结论部分就是对之前的各部分工作做了一个总结。

这篇关于论文笔记:Neural Machine Translation by Jointly Language Learning to Align and Translate的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/535197

相关文章

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

忽略某些文件 —— Git 学习笔记 05

忽略某些文件 忽略某些文件 通过.gitignore文件其他规则源如何选择规则源参考资料 对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。 通过.gitignore文件 假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gi