神经机器翻译 之 tensorflow seq2seq

声明:转载请声明作者,并添加原文链接。

简介

这篇博客主要解读seq2seq 自然语言处理模型,重点有三部分。

1. seq2seq 模型介绍

2. seq2seq 的注意力机制

3. 实战tensorflow tutoral 的实验过程。

本文实战代码是 https://github.com/tensorflow/nmt, 参考的课程主要是stanford CS224N Lecture 9, 10 ,11. http://web.stanford.edu/class/cs224n/

Seq2seq模型

以前的统计翻译法, 都是将句子分解成一段一段的, 然后每一小段进行翻译。 但是这样翻译出来的句子,不够流畅。 我们人类也不是这么翻译句子的。 人类应该是看懂了句子,再进行翻译, 而下面的神经机器翻译 sequence-to-sequence (seq2seq) 模拟了这个过程。

Fig. 1 Seq2seq neural machine translation (source:CS224N Lecture 10  http://web.stanford.edu/class/cs224n/lectures/lecture10.pdf)

Fig. 1 介绍了一个标准的seq2seq模型。 其中红色的是encoder RNN, 绿色的是decoder RNN. 他们之间 有一个连线, 也就是encoder states 传给decoder RNN,当做initial state.  这个翻译过程可以解释如下。

Encoder 过程: 图一就只有一个RNN cell,  每个法语单词都是按照时间顺序输入到这个RNN cell 里。 具体就如Fig. 2中的描述, 对于一个单词, 比如les, 首先要通过one-hot 方法来代表它, 然后通过word embeddings, 其实就是一个全连接的乘法。 不懂得同学可以看我以前的博客。 然后计算RNN隐形层。 对于encoder 的过程是没有输出y的计算的。 接下来, 这样h(t)就算出来了。 再输入下一个单词, h(t+1)就算出来了。 直到最后一个单词对应的隐形层h算出来, 这个h 会当做初始状态输入另一个rnn cell 做decoding.

Fig. 2  Encoder 的过程 (output is ignored in the encoding process)

Decoder 过程: decoding 的过程与encoding的过程相似。 只是多了区分training 和inference 的状态。 Fig. 1 描述的是Inference 的状态, decode 输出来的每一个单词都会当做下一个时刻的输入,来进行翻译。 而在训练过程中, 因为知道翻译出来的单词是什么,就会把这个单词当做输入进行训练。 Fig. 1 的inference的过程中用到了argmax, 这个函数,也就是每次都选择概率最大的那个单词当做翻译。 这个叫做greedy decoding.  这个不是optimal solution。 还可以使用beam searching, 就是多考虑几个单词,

Fig. 3 Beam search decoding (source:CS224N Lecture 10  http://web.stanford.edu/class/cs224n/lectures/lecture10.pdf)

Beam search decoding: 这个方法在每个翻译的步骤 都保存k 个最可能的选择, k 就是beam size, 这个方法虽然不能保证最优解, 但是效率高了很多。  k 一般就是5-10.  Fig. 3 就是一个 beam size =2 的例子。  在T=0 的时候, 有两个选择。 在T=1的时候还是两个选择路径 一个是the poor, 一个是a poor.  在T=2的时候选择是are , don't。  那么下面的那条路径就可以丢掉了, 只考虑上面的路径, 以此类推。

Fig. 4 Loss 计算

Loss 计算: 神经网络的Loss计算 就如Fig.4 一样,把每个翻译出来的单词和目标单词对应, 算出negative log,求和 就是总的loss.

注意力机制下的seq2seq模型

Fig. 5 Seq2seq 模型缺点

Fig. 5 的图中, 明确的标出了,最后一个state包含了整个句子的信息。 但是问题是,一个vector 是无法包含这么多信息的。 这样势必导致比较远的单词信息的丢失。 另一个优化上的问题是, 求微分时,较远的单词会受到diminishing gradient的影响, 导致失去了long term dependency 的关系。

Attention 注意力机制提供了一个可以和远距离单词保持联系的方式, 解决了一个vector保存信息不足的问题。

Fig. 6 注意力机制

注意力机制的计算发生在decoder 的每一个步骤, 他包含了四个步骤。

首先decoder state 和encoder 所有的source state 进行softmax, 计算, 算出attention weights. 比如Fig. 6 里的 "the" hidden state, 就去和原文中的"les pauvres sont demunis"对应的state 进行softmax 计算。

基于这个attention weights  (attention distribution 在Fig. 6里), 我们算出一个上下文向量(attention output)。 这个向量是通过加权平均的 source state.

attention output 再和 decoder hidden state 拼接起来, 最后算出y2.  下面的公式总结了这三步计算过程。


图片发自简书App

实战

实战使用的模型来自 https://github.com/tensorflow/nmt, 内容也是基于里面代码的介绍。

跑代码的方式在nmt 的tutorial 里已经解释的比较清楚了, 就是这两个命令。

训练命令


Inference 命令

训练代码跑起来就会在屏幕输出很多信息。

Fig. 7 端口Terminal output

Fig. 7 提供了很多信息, 我的这个训练的代码是two layer LSTM, 然后第一个layer 是256 * 512, 这个矩阵的维度让我思考很久。 看了下LSTM 的计算方式,就容易理解多了。 如下图所示, LSTM 有四个 weight W  和四个 weight U.  这样输出维度就从128*4 = 512, 然后 输入的维度 不仅仅是x, 还有上一个state, 所以 输入维度就是128*2 = 256. 所以第一个LSTM的weight是 256*512.  对于docoder 过程, weight矩阵维度是384*512, 这个是因为输入端又多了一个attention vector , 也是128 维度, 所以128*3 = 384 维度。

训练中, Result at  12000 steps

成功的例子

失败的例子

如果使用刚才inference命令, 可以翻译整本文件, 比如 我就是翻译的tst2013.vi, 翻译的结果还可以接受呢。 截图显示, 其中&apos 就是单引号。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342