Neural Machine Translation(NMT)技术概述

article/2025/8/26 19:34:03

在神经网络语言模型处理NLP领域,我做的研究一直都和文本分类相关,其实还有很多其他的应用领域,比方说:语言翻译、词性标注、命名实体识别等。感觉还是有必要了解一下如何用神经网络语言模型对这些应用进行建模的。因此,这几天看了几篇有关Neural Machine Translation(NMT)的论文,对这个领域基本有了比较全面、正确的认识。在这个过程中,正好学习了业界最流行的attention思想,下面我就来总结一下学习到的东西。


这里写图片描述

上图就是NMT的宏观流程,其中序列ABCD对应着一种语言,序列XYZ对应着意义和前面相同的另一种语言。符号代表着序列的结束标志。如果用S(source)代表原序列,用T(target)代表目标序列,那么我们最终的目标是max p(y | x),即给定义一个原序列s,求出使其概率最大的目标序列t。其实我们可以把原序列和对应的目标序列看成是一个pair对,那么对于一个大集合D中存在着很多这样的pair对,对于全局来说我们的目标损失函数就是: ∑ S , T ∈ D − log ⁡ p ( t ∣ s ) \sum_{S,T\in D } -\log p(t|s) S,TDlogp(ts)
一般来说,标准的NMT由2个component组成:encoder和decoder。其中encoder负责编码和提取原序列的信息,而decoder负责根据encoder的编码信息,翻译出对应的目标序列。假设长度为m的目标序列 y 1 y 2 y 3 . . . . . y m y_1 y_2 y_3 .....y_m y1y2y3.....ym,那么一对pair对应的概率函数为 ∑ j = 1 m log ⁡ p ( y i ∣ y &lt; j , S ) \sum_{j=1}^m {\log p(y_i|y&lt;j,S)} j=1mlogp(yiy<j,S),其中S为encoder对应生成的原句子生成的编码信息。
其实从上图中就可以看出来了,最终的目标序列的生成方式是依次生成的,因此,在decoder阶段一般使用RNN系列的变种模型。而各种模型的不同也就是在这部分的建模方式不同罢了。

首先讲的是一种比较基础的处理方式,参考论文《Sequence to Sequence Learning with Neural Networks》NIPS。现在来看他的思路就是非常简单明了了,他用的RNN变种是LSTM。在encoder部分就是因此输入序列元素,然后把最后一个输出C作为整个句子的表示。在decoder部分也是一样使用的LSTM,但是为了结合encoder所提取出的C向量,这里在decoder初始化其LSTM的hidden state的时候使用的是encoder最后的输出向量C。也就是说这个encoder编码出的向量C只在decoder过程中使用了一次,然后就是每次输入一个序列目标元素X,然后输出一个序列目标元素Y,知道输出最后的结束符号为止。google的大佬在实验的过程中,使用了3个小的trick:1 反转原序列的输入顺序(目标序列不变;2 使用了多层的LSTM;3 为了加快实验的训练速度,减少训练的时间,在min-batch训练阶段中,尽量使长度相仿的句子一起训练。我个人对反转原序列能提出翻译效果的普适性感到怀疑,因为他的实验数据有限,很可能只和他们用的那份实验数据有关,毕竟他们在论文里也没有给出很好的解释。

接下来的模型参考论文《Effective Approaches to Attention-based Neural Machine Translation》EMNLP。如题目所示,他使用了attention机制,下面我来大概讲一下attention机制的工作原理:上面的那个最简单的没有使用attention机制模型,在目标序列的生成阶段所参考的原序列的内容是不变的,也就是所有的目标词汇在生成的所考虑的原序列上下文是相同的,这显然是不合理的,因为不同的目标词汇所依赖的原序列不同位置词语的权值显然是在不断变化的。把这种变化考虑进来就是attention的基本思想。而这篇论文提出了两种attention方式,一种是local的,一种是global的,下面就来详细的讲一下这两种方式。
首先我们要明确的是,这篇论文提出的模型在encoder阶段这里同样使用的是LSTM模型,只不过它把所有的中间hidden state收集起来,然后做了一个加权求和,而这里权值向量 α \alpha α就是体现了attention思想的地方,因为在decoder生成不同目标词汇的时候,这个权值向量的值是在变化的,而由这些权值向量和encoder生成的hidden state序列加权求和后的结果 C t C_t Ct就可以作为decoder 在t时刻所对应的原序列向量编码。如果decoder在t时刻所对应的hidden state为 h t h_t ht 那么我们就定义 h t 1 = t a n h ( W c [ C t ; h t ] ) h_t^{1}=tanh(W_c[C_t;h_t]) ht1=tanh(Wc[Ct;ht])其中符号 [ C t ; h t ] [C_t;h_t] [Ct;ht]代表了向量的concatenation操作。那么就有了, p ( y t ∣ y &lt; t , c t ) = s o f t m a x ( W s . h t 1 ) p(y_t|y&lt;t,c_t)=softmax(W_s.h_t^{1}) p(yty<t,ct)=softmax(Ws.ht1)。很容易看出来, C t C_t Ct向量生成是非常重要的。

我们首先来讲一下global的方式。所谓global的方式,即在生成decoder所需要的原序列内容的时候,考虑了所有原序列的元素,其结构如下所示:
这里写图片描述
那么我们只需要计算decoder目前的hidden state h t h_t ht 和原序列各个位置的hidden state h s i h_s^i hsi 的相似度关系即可得出。 α t ( s ) = a l i g n ( h t , h s i ) = e x p ( s c o r e ( h t , h s i ) ) ∑ i e x p ( s c o r e ( h t , h s i ) ) \alpha_t(s)=align(h_t,h_s^i)=\frac{exp(score(h_t,h_s^i))}{\sum_iexp({score}(h_t,h_s^i))} αt(s)=align(ht,hsi)=iexp(score(ht,hsi))exp(score(ht,hsi))。那么对于score函数有下面几种选择,这里写图片描述
接下来我们介绍一下local的方式,所谓local方式,即在生成decoder所需要的原序列内容的时候,只考虑了原序列的部分元素。
这里写图片描述
在细节上,模型在生成target中的第t序列的时候,生成一个变量 p t p_t pt,它代表了要考虑的source序列中的中间位置,然后前后各取 D D D个元素。这个 D D D是一个超参数,需要提前设置好。具体关于 p t p_t pt的生成算法,论文里也给了两参考的方式:1 就是直接认为 p t = t p_t=t pt=t,即认为source和target大致相当,剩下的权值计算方式和全局一致;2 就是根据公式 p t = S . s i g m o i d ( v p . t a n h ( W p . h t ) ) p_t=S.sigmoid(v_p.tanh(W_p.h_t)) pt=S.sigmoid(vp.tanh(Wp.ht)),其中 S S S代表了source序列长度, W p 和 V p W_p和V_p WpVp是需要训练的参数,那么为了使这些参数可以通过反向传播算法以梯度下降的方式来训练,必须重新构造权值生成公式使其能包含这些参数, α t ( s ) = a l i g n ( h t , h s i ) . e x p ( − ( i − p t ) 2 2 δ 2 ) \alpha_t(s)=align(h_t,h_s^i).exp(-\frac{(i-p_t)^2}{2\delta^2}) αt(s)=align(ht,hsi).exp(2δ2(ipt)2),i代表了其在source中的位置,而 δ 则 一 般 取 D 2 \delta则一般取\frac{D}{2} δ2D

在论文提出的结构中的decoder部分,采用的是RNN的变种LSTM,为了在每次生成target序列元素的时候能够充分考虑之前步骤的alignment的信息,采用了如下的结构:
这里写图片描述
即把前一步生成的 h t 1 h_t^{1} ht1和生成的元素X进行向量的向量的concatenation操作操作。

下面的模型参考了论文《NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE》ICLR会议。如题所示他使用了attention机制。只不过他使用的方式和上面那个不是太一样,其实大概原理都差不多,就是细节稍有不同,这里列举出来供大家参考。
这里写图片描述
可以看出在下面的encoder部分,该模型使用了bi-RNN来提取信息,这里面他使用的RNN变种是一种自己提出来的,可以看成是LSTM的简化版,具体公式在后面讲解。在decoder部分使用的是一样的RNN变种结构,而且他只有global一种方式,用y代表目标序列,用x代表原序列,那么有 p ( y i ∣ y 1 , y 2 , . . . . . y i − 1 , X ) = g ( y i − 1 , S i , C i ) p(y_i|y_1,y_2,.....y_{i-1},X)=g(y_{i-1},S_i,C_i) p(yiy1,y2,.....yi1,X)=g(yi1,Si,Ci),用函数f(x)来代表这个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),其具体公式如下这里写图片描述
这里面的 z i z_i zi 被称之为update门, r i r_i ri 被称之为reset门。比之前的LSTM要简化一些。在计算 C i C_i Ci 即原序列的表示的时候的时候,所用的方式和《Effective Approaches to Attention-based Neural Machine Translation》中使用的相似,不过是由于该模型的 S i S_i Si 生成依赖了 C i C_i Ci,故使用的是 S i − 1 S_{i-1} Si1 和原序列的h_i进行相似度的计算,具体这里不再赘述了。


http://chatgpt.dhexx.cn/article/rlWdQoRW.shtml

相关文章

NMT with Attention

1.数据准备 termcolor.colered 对输出进行染色&#xff0c;凸显。colored(f"tokenize(hello): ", green) from termcolor import colored import random import numpy as npimport trax from trax import layers as tl from trax.fastmath import numpy as fastnp …

CANopen通信之NMT通信

在介绍NMT通信机制之前&#xff0c;先介绍一下NMT这个通信对象的定义。在以下部分中COB-ID使用的是 CANopen 预定义连接集中已定义的缺省标志符。 1) NMT 模块控制&#xff08; NMT Module Control&#xff09; 只有 NMT-Master 节点能够传送 NMT Module Control 报文。 所有从…

NMT:神经网络机器翻译

前言 SMT是在神经网络之前最主流的翻译模式&#xff0c;统计机器翻译&#xff1b;NMT则是基于神经网络的翻译模式&#xff0c;也是当前效果最好的翻译模式。现在基于几篇paper来梳理下神经网络下的翻译模型。 NMT based RNN 1) First End-to-End RNN Trial   2014年&…

神经机器翻译(Neural machine translation, NMT)学习笔记

神经机器翻译&#xff08;Neural machine translation, NMT&#xff09;是最近提出的机器翻译方法。与传统的统计机器翻译不同&#xff0c;NMT的目标是建立一个单一的神经网络&#xff0c;可以共同调整以最大化翻译性能。最近提出的用于神经机器翻译的模型经常属于编码器-解码器…

Java本机内存跟踪NMT实战详解

JVM通常会额外分配内存。这些额外的分配&#xff0c;会导致java程序占用的内存&#xff0c;超出-Xmx的限制。让我们使用NMT查看内存的使用情况 NMT 是什么 NMT 是一种 Java Hotspot VM 功能&#xff0c;用于跟踪 HotSpot VM 的内部内存使用情况。您可以使用该jcmd实用程序访问…

fastText模型

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 目标一、fastText的模型架构1. N-gram的理解1.1 bag of word 2. fastTex模型中层次化的softmax2.1 哈夫曼树和哈夫曼编码2.1.1 哈夫曼树的定义2.1.2 哈夫曼树的相关…

fastText Python 教程

诸神缄默不语-个人CSDN博文目录 fastText Python官方GitHub文件夹网址&#xff1a;fastText/python at main facebookresearch/fastText 本文介绍fastText Python包的基本教程&#xff0c;包括安装方式和简单的使用方式。 我看gensim也有对fasttext算法的支持&#xff08;ht…

玩转Fasttext

Fasttext是Facebook AI Research最近推出的文本分类和词训练工具&#xff0c;其源码已经托管在Github上。Fasttext最大的特点是模型简单&#xff0c;只有一层的隐层以及输出层&#xff0c;因此训练速度非常快&#xff0c;在普通的CPU上可以实现分钟级别的训练&#xff0c;比深度…

FastText详解

词向量对比word2vec https://zhuanlan.zhihu.com/p/75391062 0、实战经验 word2vec vs fastText区别&#xff1f; 思想&#xff1a;将整篇文档的词及n-gram向量叠加平均得到文档向量&#xff0c;然后使用文档向量做softmax多分类。 word2vec vs fastText区别&#xff1f; …

FastText原理

一、简介 fasttext是facebook开源的一个词向量与文本分类工具&#xff0c;在2016年开源&#xff0c;典型应用场景是“带监督的文本分类问题”。提供简单而高效的文本分类和表征学习的方法&#xff0c;性能比肩深度学习而且速度更快。 fastText结合了自然语言处理和机器学习中最…

Fasttext

Fasttext Paper Fasttext特点 模型简单&#xff0c;只有一层的隐层以及输出层&#xff0c;因此训练速度非常快不需要训练词向量&#xff0c;Fasttext自己会训练两个优化&#xff1a;Hierarchical Softmax、N-gram Fasttext模型架构 fastText模型架构和word2vec中的CBOW很相…

[NLP]文本分类之fastText详解

Word2vec, Fasttext, Glove, Elmo, Bert, Flair pre-train Word Embedding 一、fastText简介 fastText是一个快速文本分类算法&#xff0c;与基于神经网络的分类算法相比有两大优点&#xff1a; 1、fastText在保持高精度的情况下加快了训练速度和测试速度 2、fastText不需要预…

FastText:高效的文本分类工具

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

FastText的简单介绍

0、引言 FastText是facebook开源的一款集word2vec、文本分类等一体的机器学习训练工具。在之前的论文中&#xff0c;作者用FastText和char-CNN、deepCNN等主流的深度学习框架&#xff0c;在同样的公开数据集上进行对比测试&#xff0c;在保证准确率稳定的情况下&#xff0c;Fa…

快速文本分类(FastText)

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

FastText:快速的文本分类器

转载请注明作者和出处&#xff1a;http://blog.csdn.net/john_bh/ 一、简介二、FastText原理 2.1 模型架构2.2 层次SoftMax2.3 N-gram特征 三、 基于fastText实现文本分类 3.1 fastText有监督学习分类3.2 fastText有监督学习分类 三、总结 3.1 fastText和word2vec的区别3.2 小…

DCGAN的PyTorch实现

DCGAN 1.什么是GAN GAN是一个框架&#xff0c;让深度模型可以学习到数据的分布&#xff0c;从而通过数据的分布生成新的数据(服从同一分布)。 其由一个判别器和一个生成器构成&#xff0c;生成器负责生成“仿造数据”&#xff0c;判别器负责判断“仿造数据”的质量。两者一起…

GAN论文阅读——DCGAN

论文标题&#xff1a;Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks 论文链接&#xff1a;https://arxiv.org/abs/1511.06434 参考资料&#xff1a;http://blog.csdn.net/liuxiao214/article/details/73500737      …

DCGAN整理总结

DCGAN整理总结 GAN什么是GAN&#xff1f;GAN重要参数及损失函数 DCGAN什么是DCGAN&#xff1f;DCGAN结构TensorFlow版本MINIST手写体生成模型Pytorch版本人脸生成模型 GAN 什么是GAN&#xff1f; GAN是一个教深度学习模型捕捉训练数据的布局来从该布局中生成新数据的框架。最早…

DCGAN论文翻译

UNSUPERVISED REPRESENTATION LEARNING WITH DEEP CONVOLUTIONAL GENERATIVE ADVERSARIAL NETWORKS &#xff08;使用DCGAN的无监督表示学习&#xff09; ABSTRACT&#xff08;摘要&#xff09; In recent years, supervised learning with convolutional networks (CNNs) h…