1.seq2seq:分为encoder和decoder

  a.在decoder中,第一时刻输入的是上encoder最后一时刻的状态,如果用了双向的rnn,那么一般使用逆序的最后一个时刻的输出(网上说实验结果比较好) 

  b.每一时刻都有一个输出,即:[batch_size,  decoder_output_size],经过一个MLP后,都跟词汇表中的每一个词都对应了一个概率,即: [batch_size, vocab_size]。

  c.将每一个时刻的输出拼接起来,那么就是[batch_size, decoder_timestep, vocab_size],然后用beam search去寻找最优的解。

2.seq2seq attention: 在decoder的时候加入了attention机制

  a.在decoder中,第一时刻输入的是上encoder最后一时刻的状态,如果用了双向的rnn,那么一般使用逆序的最后一个时刻的输出c0(网上说实验结果比较好),以后每一个时刻的输入则是上一时刻的输出与encoder的隐状态计算attention加权的结果。

  b.attention:

    1).用c0去跟encoder的所有时间步骤中的输出,进行match,即:用c0去和所有的输入求一个相似度,那么这个就是一个权值(attention的权值),含义就是当前时刻的输入是有encoder中的哪几个时刻来决定的,就是神经网络翻译中的那张经典的图。

    2).decoder第一个时间步骤c1,会输出一个向量,那么再重复1)中的步骤用c1替换c0

  c.将每一个时刻的输出拼接起来,那么就是[batch_size, decoder_timestep, vocab_size],然后用beam search去寻找最优的解。

attention decoder tensorflow api

https://tensorflow.google.cn/api_docs/python/tf/contrib/legacy_seq2seq/attention_decoder

在输入decoder的时候,输入的是

  a.decoder input: 正确的输出序列,为什么要输入正确的序列,用正确的每个时刻的输入来替换上一时刻的输出,例如:t0时刻的输出应该输入到t1时刻,但是这里直接输入decoder inputs t1时刻的序列,把decoder input t1时刻的输入与decoder t0的输出拿来计算Loss,相当于引导的作用;而在测试的时候,直接用上一时刻的输出,不用decoder input。

  b.init state: 初始化状态。

  c.attention state: 注意力状态

  d.cell: rnn cell

  e.num_threads: 相当于计算出来的attention的倍数

  f.loop_function: 如果为空,则不使用,如果不为空,则对上一时刻的输出做一些处理,用返回值替换上一时刻的输出

  g.init_state_attention: 如果为true,则用c中的attention state来计算attention,如果为false,则全部为0;在训练时,置为0,因为下一时刻的输入是由decoder input来决定的,不关attention的事,所有用不到,所有为0.

在计算loss的时候,有一个weight,因为输出的序列长度不固定(开始我们固定了输出序列长度,不足则pad),为了方便计算loss,有词的地方(时间序列)*1,没有词的地方* 0,表示不计算loss。

在训练的时候:

  输入到模型中有两个decoder inputs,一个是输入到decoder里面的,一个是输入到loss里面的,输入到decoder里面的需要再前面加一个开始符,因为是要训练的,第一个时刻的输出是词,所以是[start_token,word_embed,word_embed,....];输入到loss里面的是[word_embed,word_embed,....,end_token]

上面的输入是loss输入,下面的输入是decoder的输入,每个时刻拿来计算loss,最后对loss求和。

seq2seq attention的更多相关文章

  1. DL4NLP —— seq2seq+attention机制的应用:文档自动摘要(Automatic Text Summarization)

    两周以前读了些文档自动摘要的论文,并针对其中两篇( [2] 和 [3] )做了presentation.下面把相关内容简单整理一下. 文本自动摘要(Automatic Text Summarizati ...

  2. 深度学习中的序列模型演变及学习笔记(含RNN/LSTM/GRU/Seq2Seq/Attention机制)

    [说在前面]本人博客新手一枚,象牙塔的老白,职业场的小白.以下内容仅为个人见解,欢迎批评指正,不喜勿喷![认真看图][认真看图] [补充说明]深度学习中的序列模型已经广泛应用于自然语言处理(例如机器翻 ...

  3. Tensorflow Seq2seq attention decode解析

    tensorflow基于 Grammar as a Foreign Language实现,这篇论文给出的公式也比较清楚. 这里关注seq2seq.attention_decode函数, 主要输入 de ...

  4. seq2seq+attention解读

    1什么是注意力机制? Attention是一种用于提升Encoder + Decoder模型的效果的机制. 2.Attention Mechanism原理 要介绍Attention Mechanism ...

  5. seq2seq&attention图解

  6. NLP Attention

    一.概述 自动摘要可以从很多角度进行分类,例如单文档摘要/多文档摘要.单语言摘要/跨语言摘要等.从技术上说,普遍可以分为三类: i. 抽取式摘要(extractive),直接从原文中抽取一些句子组成摘 ...

  7. attention 汇总(持续)

    Seq2seq Attention Normal Attention 1.  在decoder端,encoder state要进行一个线性变换,得到r1,可以用全连接,可以用conv,取决于自己,这里 ...

  8. Attention & Transformer

    Attention & Transformer seq2seq; attention; self-attention; transformer; 1 注意力机制在NLP上的发展 Seq2Seq ...

  9. NLP之基于Seq2Seq和注意力机制的句子翻译

    Seq2Seq(Attention) @ 目录 Seq2Seq(Attention) 1.理论 1.1 机器翻译 1.1.1 模型输出结果处理 1.1.2 BLEU得分 1.2 注意力模型 1.2.1 ...

随机推荐

  1. Hdu1969 Pie 2017-01-17 13:12 33人阅读 评论(0) 收藏

    Pie Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submissio ...

  2. Java 容器 LinkedHashMap源码分析1

    同 HashMap 一样,LinkedHashMap 也是对 Map 接口的一种基于链表和哈希表的实现.实际上, LinkedHashMap 是 HashMap 的子类,其扩展了 HashMap 增加 ...

  3. 类之间关系理解:组合>聚合>关联>依赖;实现,继承

    类之间关系理解:组合>聚合>关联>依赖:实现,继承 1. 从类之间的关系来看,不外乎以下几种 组合>聚合>关联>依赖:实现,继承 且可以分为以下两类: (1)实现, ...

  4. linux信号量(转载)

    本文转载自http://blog.csdn.net/qinxiongxu/article/details/7830537 信号量一.什么是信号量信号量的使用主要是用来保护共享资源,使得资源在一个时刻只 ...

  5. java web eclipse中项目的加载过程

    java web eclipse中项目的加载过程: Tomcat默认从WEB-INF/目录下加载资源,Eclipse在发布程序的时候,并没有把User Libraries的相关资源拷贝到WEB-INF ...

  6. EBS Webservice Timeout,HTTP Server Return "500 Internal Server Error"

    http://blog.itpub.net/26687597/viewspace-1207571/ 基于Oracle EBS R12,开发了一个Webservice用于返回某项主数据,当请求的数据量非 ...

  7. Docker技术:在微软云Azure上使用K8S

    周末,受微软公司的邀请,参加微软主持的云容器培训会议,为参加培训的学院提供技术辅导,引导学员体验微软云端的DevOps实践. 说是辅导,实际上自己也学到了许多的内容,包括K8S集群.负载.Azure中 ...

  8. K8S+GitLab-自动化分布式部署ASP.NET Core(一) 部署环境

    一.部署流程介绍 开发人员通过Git上传asp.net core 项目到Gilab,并编写好.gitlab-ci.yml , GitLab-Runner 自动拉取代码,然后进行Build,编译,单元测 ...

  9. sql表与表之间的数据操作

    --把一张表的内容更新到另一张表 update 表1 set 表1.Store=t2.Name from 表2 t2 where 表1.id=t2.id --备份一张表 create table ta ...

  10. 使用Commons Email发送邮件

    Commons Email是apache commons库中的一个组件,对java mail做了一些个封装,提供能为简化的API供开发者使用.它依赖于javax.mail . 首先下载commons- ...