【Natural Language Processing】seq2seq学习笔记
来源:互联网 发布:linux dump 函数乱码 编辑:程序博客网 时间:2024/05/22 11:44
seq2seq可以看成是一个翻译模型,即通过一个sequence转换为另一个sequence,也可以看做是对联的生成,即通过上联来产生下联,其主要是使用两个RNN(其实是LSTM,具体可看:LSTM(Long Short-Term Memory)学习),一个进行Encoder,另一个进行Decoder,即Encoder-Decoder,其可用在NLG(Nature Language Generation,自然语言生成)和NLU(Nature Language Understanding, 自然语言理解)等方面。
一、Encoder-Decoder
Encoder-Decoder的结构如下图:
在上图中,输入序列是”ABC”,输出序列是”WXYZ”,其中”<EOS>”是句子结束符,我们通过在时间维度上进行展开Encoder-Decoder模型,如前面所说该模型是由两个RNN组成的:
①Encoder,第一个RNN接受输入序列”ABC”进行Encoder,并在读取到<EOS>时终止接受输入,通过这样我们可以得到一个向量来表示输入序列“ABC”的语,具体为:
其中f是非线性激活函数,ht−1是上一隐节点输出, xt是当前时刻的输入。向量c即为我们想通过Encoder获得的语义向量,通常为RNN中的最后一个隐节点(h,Hidden state)输出值,或者是多个隐节点的加权和,这就是整个Encoder的过程。
②Decoder,第二个RNN接受第一个RNN产生的语义向量,通过当前隐状态 ht来预测当前的输出符号 yt ,这里的 ht和yt都与其前一个时刻的隐状态和输出有关,最终目的就是在每个时刻t输出与上一时刻t-1相关的输出词的概率,具体为:
二、Attention Mechanism
通过上面知道在Encoder-Decoder模型中,对于目标句子Y中每个单词的生成过程如下(其中c为Encoder生成的语义向量):
可以发现对于目标词汇y,不论生成哪个单词,都是使用Encoder过程生成的语义向量c,即句子X中的单词对生成每一个目标单词的影响力是相同的,显然这是不合理的,Attention Model会对输入序列X的不同单词分配不同的概率,具体如下图:
这个时候每一个目标词就可以根据不同的语义向量ci来生成了,即:
c(i)对应输入序列X不同单词的概率分布,其计算公式为:
其中n为输入序列的长度,第一行公式中的 hj 是Encoder第j时刻的隐状态,对于第二行的公式中aij是对应的权重, a是一种对齐模型, si−1 是Decoder过程的前一个隐状态的输出,hj 是Decoder过程的当前第j个隐状态。至此,seq2seq完成。
参考:
①Sequence to Sequence Learning with Neural Networks
②http://x-algo.cn/index.php/2017/01/13/1609/
- 【Natural Language Processing】seq2seq学习笔记
- 《Natural Language Processing》斯坦福视频学习笔记——2.text processing
- NLP:Natural Language Processing
- Natural Language Processing Knowledge
- Natural Language Processing
- 《Natural Language Processing》斯坦福视频学习笔记——1.introduction
- 《Natural Language Processing》斯坦福视频学习笔记——3.编辑距离
- Stanford CS224n: Natural Language Processing with Deep Learning 课程笔记
- Natural Language Processing On Coursera
- 20+ Natural Language Processing APIs
- Natural Language Processing (nlp) 路线图
- 【Natural Language Processing】语言模型(Language Modeling)
- Natural Language Processing With Python (3)
- 自然语言处理(Natural language processing) 1
- Natural Language Processing With Python (2)
- Natural Language Processing With Python (1)
- Ask Me Anything: Dynamic Memory Networks for Natural Language Processing 阅读笔记及tensorflow实现
- 《Natural Language Processing with Python》6.2节的一些错误
- Java过滤器与SpringMVC拦截器之间的关系与区别
- 关于shell语法 和shell进度条之间的事儿
- GNS3连接VMware出现error could not execute vmrun:Command "C:\\program files (x86)\\vmwork\\vmrun.exe,'-T'
- 正则表达式
- 搭建SVN服务器(支持http)
- 【Natural Language Processing】seq2seq学习笔记
- 删除一个无头单链表的非尾节点
- js的ajax与jq的ajax总结
- nodejs对于json数据的引用
- ARP协议
- cv::max、cv::min error C2589: “(”:“::”右边的非法标记,error C2059: 语法错误:“::”
- 运行maven clean报错解决
- C语言小函数—二进制与十六进制
- 如何打开大型文本文件