这篇文章引用了下边这些资料的图片和讲解内容
【李宏毅机器学习2021】自注意力机制 (Self-attention) (上)_哔哩哔哩_bilibili
Seq2Seq 模型详解 - 简书 (jianshu.com)
完全图解RNN、RNN变体、Seq2Seq、Attention机制 - 知乎 (zhihu.com)
一文看懂 NLP 里的模型框架 Encoder-Decoder 和 Seq2Seq - 掘金 (juejin.cn)
Encoder-Decoder模型
Encoder-Decoder 并不特指某种具体的算法,而是一类算法的统称。
Encoder 和 Decoder 部分可以是任意文字,语音,图像,视频数据,模型可以是 CNN,RNN,LSTM,GRU,Attention 等等。所以,基于 Encoder-Decoder,我们可以设计出各种各样的模型。
Encoder
将输入的序列(语音、文字、图像等)编码为向量C
将现实问题转化为数学问题
Decoder
将向量C解码为新的序列(语音、文字、图像等)
求解数学问题,并转化为现实世界的解决方案
Encoder - Decoder结构
把2个环节连接起来,用通用的图来表达则是下面的样子:
Encoder - Decoder结构特点
- 无论输入和输出长度是什么,向量C的大小都是固定的,也就是C所包含的信息是有限的,比如RNN的隐状态长度有限,所以会导致梯度消失且无法支持长时间序列。
- 根据不同的任务可以选择不同的编码器和解码器(可以是RNN、CNN、LSTM,GRU,Attention 等等 )
- 因为Encoder-Decoder的结构特性,它很适合用于跨模态的任务(文字-图片、文字-视频、文字-音乐、图片-文字等)
只要是符合上面的框架,都可以统称为 Encoder-Decoder 模型。说到 Encoder-Decoder 模型就经常提到一个名词
常见NLP任务类型
常见的NLP任务分为几种类型,都对输入/输出的长度有限制
都可以用Encoder-Decoder结构解决
- N vs 1
- 1 vs N
- N vs N
(1) N VS 1
应用场景
- 根据客户的评论,判断对商品的评价正/负
- 根据一段文字判断其情感倾向
- 输入一段视频并判断它的类别等等
(2) 1 VS N
类型1:序列开始进行输入计算
类型2:输入信息X作为每个阶段的输入,上一个时刻的隐状态,是下一个时刻的输入
应用场景
- 根据图像生成文字,此时输入的X就是图像的特征,而输出的y序列就是一段句子
- 根据类别,生成语音
- 根据类别,生成小说
(3) N VS N
最经典的RNN结构,N个输入,对应N个输出,这里的输入和输出是等长的
应用场景
- 词性标注,比如N个单词对应N个词性
- 输入为字符,输出为下一个字符的概率。比如Char RNN可以生成代码、文字等
这些任务都对Encoder-Decoder的输入和输出个数都有一定的限制
将一张 800X800 像素的图片压缩成 100KB,看上去还比较清晰。
再将一张 3000X3000 像素的图片也压缩到 100KB,看上去就模糊了。
但实际中很多任务的序列的长度是 不固定的
例如机器翻译中,源语言、目标语言的句子长度不一样(N vs M类型)
对话系统中,问句和答案的句子长度不一样。
于是,就有了Seq2Seq模型
sequence to sequence (Seq2Seq) 模型和Attention
Seq2Seq就如字面意思:输入一个序列,输出另一个序列,且对输入输出长度没有限制
比如下边这张图,输入是6个汉字,输出是4个英文单词
Seq2Seq使用Attention机制,
通过将输入编码成一个向量的序列。避免了向量C对内容的限制。
在产生每一个输出的时候,都能够做到充分利用输入序列携带的信息。
引入了 Attention 的 Encoder-Decoder 模型如下图: