浅析谷歌tensorflow官方文档中的seq2seq代码

来源:互联网 发布:博客套利软件 编辑:程序博客网 时间:2024/06/10 09:45

自然语言处理是深度学习亟待攻克的新领域,实力雄厚的IT大企业比如谷歌、IBM、脸书都不遗余力招揽人才开展前沿研究,抢占话语权。比如谷歌开源了深度学习工具包tensorflow意图打造谷歌生态圈,脸书也不甘落后打造了更加简洁易用的Pytorch,还有亚马逊的MAXNET。一段时间,在自然语言处理上,循环神经网络取得了明显的进展,特别是在机器翻译领域,不少学者推陈出新不断创造出新的技术提升翻译质量。seq2seq就是应用比较广泛的输入输出网络,采用了Encoder–Decoder 结构。先是以循环神经网络为基本的Encoder–Decoder结构(如下图),然后就有了更为复杂的双向多层循环神经网络注意力机制seq2seq模型。首先,介绍下这些概念:

什么是 seq2seq?
seq2seq 是一个 Encoder–Decoder 结构的网络,它的输入是一个序列,输出也是一个序列, Encoder 中将一个可变长度的信号序列变为固定长度的向量表达,Decoder 将这个固定长度的向量变成可变长度的目标的信号序列。
这个结构最重要的地方在于输入序列和输出序列的长度是可变的,可以用于翻译,聊天机器人,句法分析,文本摘要等。
作者:不会停的蜗牛
链接:http://www.jianshu.com/p/1d3de928f40c
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Encoder–Decoder 结构?
Cho 在 2014 年提出了 Encoder–Decoder 结构,即由两个 RNN 组成,
https://arxiv.org/pdf/1406.1078.pdf
Encoder-Decoder
(其中的 RNNCell 可以用 RNN ,GRU,LSTM 等结构)
作者:不会停的蜗牛
链接:http://www.jianshu.com/p/1d3de928f40c
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

简单的Encoder-Decoder模型中,利用循环神经网络将前面所有的输入(比如文本单词序列)压缩到一个向量中,然后把这个向量作为输入传递至解码模型中。而注意力机制则是将输入中每个单词利用循环神经网络压缩成一个向量,然后将这些向量进行线性组合后传递至解码模型中,具体请阅读Dzmitry Bahdanau, Kyunghyun Cho, Yoshua Bengio的文章。如下图(引用自http://www.jianshu.com/p/c294e4cb4070):
注意力机制

谷歌在这些方面推进地比较深入,然而,今年脸书也不甘寂寞,直接提出了一个全部是卷积神经网络的注意力模型,表面上颠覆了循环神经网络的风头,很快,谷歌进行了反击,提出了Attention is all you need,既不用循环神经网络,也不用卷积神经网络,只用注意力效果依然不得了。

本博客主要介绍谷歌tensorflow中