seq2seq attention
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的更多相关文章
- DL4NLP —— seq2seq+attention机制的应用:文档自动摘要(Automatic Text Summarization)
两周以前读了些文档自动摘要的论文,并针对其中两篇( [2] 和 [3] )做了presentation.下面把相关内容简单整理一下. 文本自动摘要(Automatic Text Summarizati ...
- 深度学习中的序列模型演变及学习笔记(含RNN/LSTM/GRU/Seq2Seq/Attention机制)
[说在前面]本人博客新手一枚,象牙塔的老白,职业场的小白.以下内容仅为个人见解,欢迎批评指正,不喜勿喷![认真看图][认真看图] [补充说明]深度学习中的序列模型已经广泛应用于自然语言处理(例如机器翻 ...
- Tensorflow Seq2seq attention decode解析
tensorflow基于 Grammar as a Foreign Language实现,这篇论文给出的公式也比较清楚. 这里关注seq2seq.attention_decode函数, 主要输入 de ...
- seq2seq+attention解读
1什么是注意力机制? Attention是一种用于提升Encoder + Decoder模型的效果的机制. 2.Attention Mechanism原理 要介绍Attention Mechanism ...
- seq2seq&attention图解
- NLP Attention
一.概述 自动摘要可以从很多角度进行分类,例如单文档摘要/多文档摘要.单语言摘要/跨语言摘要等.从技术上说,普遍可以分为三类: i. 抽取式摘要(extractive),直接从原文中抽取一些句子组成摘 ...
- attention 汇总(持续)
Seq2seq Attention Normal Attention 1. 在decoder端,encoder state要进行一个线性变换,得到r1,可以用全连接,可以用conv,取决于自己,这里 ...
- Attention & Transformer
Attention & Transformer seq2seq; attention; self-attention; transformer; 1 注意力机制在NLP上的发展 Seq2Seq ...
- NLP之基于Seq2Seq和注意力机制的句子翻译
Seq2Seq(Attention) @ 目录 Seq2Seq(Attention) 1.理论 1.1 机器翻译 1.1.1 模型输出结果处理 1.1.2 BLEU得分 1.2 注意力模型 1.2.1 ...
随机推荐
- 201521123035-个人作业4——alpha阶段个人总结
个人总结 在alpha 结束之后, 每位同学写一篇个人博客, 总结自己的alpha 过程: 第一部分 类别 具体技能和面试问题 现在的回答(大三) 语言 最拿手的计算机语言是一?,代码量多少?(偏前端 ...
- jsTree问题
1. 问题:刷新页面时,会自动打开刚才上次选中的节点 解决办法:去掉'state'插件 2. 关闭一个node时,使用close_all,不能修改class 注:好像用toggle_node,可以op ...
- Python学习-35.Python中的List Comprehensions(列表解释|列表生成式)
在某些情况下,我们需要对列表进行某些操作,例如对列表中的每一个元素都乘以2,这样一般来说就是遍历每个元素在乘以2.那么写下来就得两行了.而且这会修改原来的列表,如果要求不能修改原来的列表,又得多一行了 ...
- [ASP.NET]NTKO插件使用常见问题
一.环境要求 NTKO OFFICE文档控件能够在IE.谷歌Chrome.Firefox等浏览器中直接编辑MS Office.WPS.金山电子表.永中Office等文档并保存到WEB服务器.(标准版对 ...
- [工具]JSON校验、转换在线工具
1. 在线JSON代码检验.检验.美化.格式化工具[简单易用的格式化工具]: http://tools.jb51.net/code/json 2. JSON在线格式化工具[代码高亮及可控缩进大小的格式 ...
- Android------------------ListVIew学习
一.ListActivity : 如何你的Activity仅涉及到一个列表(ListVIew),那么你就该考虑使用ListActivity这个类 注意事项:1.ListActivity 里面默认包含 ...
- eclipse常见使用方法
1.修改字体大小,字符类型(设置为中欧字符) window-preferences-General-Appearance-Colors and Fonts-Basic-Text Font修改 2.展示 ...
- 一次对webshell的后门的查看
本文作者i春秋作家——非主流 昨天晚上突发奇想的想去看看github上面tennc的webshell收集项目中的shell有没有漏洞,比如未授权啊啥的,结果找半天都没找到...但是机缘巧合下,居然给我 ...
- css基础小总结
header{font-size:1em;padding-top:1.5em;padding-bottom:1.5em} .markdown-body{overflow:hidden} .markdo ...
- Pycharm使用Git
Pycharm使用Git 1.设置git程序路径 2.设置github连接 3.创建git respository 4.提交文件 5.共享给GitHub 6.修改文件push到版本库 7.从版本库ch ...