![88afa351730a512eace6f0a9bc9e49c4.png](https://i-blog.csdnimg.cn/blog_migrate/7e7932ff6b4d75418bf94327caf44333.jpeg)
作者:louwill 个人公众号:机器学习实验室,致力于数据科学、机器学习和深度学习的应用与研究。有着多年的R语言和Python编程经验 配套视频教程:Python机器学习全流程项目实战精 https:// edu.hellobi.com/course/ 284 涵盖需求分析->数据采集->数据清洗与预处理->数据分析与可视化->特征工程->机器学习建模->模型调优->报告输出。以Python为工具实现机器学习全流程。
在前几讲中笔者和大家讲到了词向量的一些内容,关于 word2vec 词向量的主要类型和训练方式,以及如何基于训练好的词向量做一些简单的分析。本节开始我们继续回到之前的 RNN 模型,学习一些经典的深度学习自然语言模型,以及一些常见的 NLP 应用。
本讲笔者要说的是著名的 seq2seq 模型,翻译过来也就是序列对序列的模型,在前面 RNN 的几种类型内容中我们已经了解到了 seq2seq 本质上是一种多对多(N vs M)RNN 模型,也就是输入序列和输出序列不等长的 RNN 模型。也正是因为 seq2seq 的这个特性,使得其有着广泛的应用场景,比如神经机器翻译、文本摘要、语音识别、文本生成、AI写诗等等。
seq2seq
先简单来图解一下 seq2seq 模型,刚刚说了 seq2seq 针对的是输入输出序列不等长的情况,对于这种情况,seq2seq 的做法是先将输入序列编码成一个上下文向量 c,如下图所示:
![49265acf7ec17cadbf55f767c7ead834.png](https://i-blog.csdnimg.cn/blog_migrate/f7c8a7ba7eddd9f4365e06a66c92acc5.jpeg)
N VS M 编码 (图片选自何之源知乎专栏)https://zhuanlan.zhihu.com/p/28054589
如上图所示,我们可以通过对最后一个隐变量以 c 进行赋值,然后展开来写。编码完成后我们再用一个 RNN 对 c 的结