NLP系列 01 Encoder-Decoder、NLP任务类型 和 seq2seq模型

248 阅读3分钟

这篇文章引用了下边这些资料的图片和讲解内容

【李宏毅机器学习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
将现实问题转化为数学问题

image.png

Decoder

将向量C解码为新的序列(语音、文字、图像等)
求解数学问题,并转化为现实世界的解决方案 image.png

Encoder - Decoder结构

把2个环节连接起来,用通用的图来表达则是下面的样子: image.png

Encoder - Decoder结构特点

  1. 无论输入和输出长度是什么,向量C的大小都是固定的,也就是C所包含的信息是有限的,比如RNN的隐状态长度有限,所以会导致梯度消失且无法支持长时间序列。
  2. 根据不同的任务可以选择不同的编码器和解码器(可以是RNN、CNN、LSTM,GRU,Attention 等等
  3. 因为Encoder-Decoder的结构特性,它很适合用于跨模态的任务(文字-图片、文字-视频、文字-音乐、图片-文字等

只要是符合上面的框架,都可以统称为 Encoder-Decoder 模型。说到 Encoder-Decoder 模型就经常提到一个名词

常见NLP任务类型

常见的NLP任务分为几种类型,都对输入/输出的长度有限制
都可以用Encoder-Decoder结构解决

  • N vs 1
  • 1 vs N
  • N vs N

(1) N VS 1

image.png 应用场景

  • 根据客户的评论,判断对商品的评价正/负
  • 根据一段文字判断其情感倾向
  • 输入一段视频并判断它的类别等等

(2) 1 VS N

类型1:序列开始进行输入计算 image.png

类型2:输入信息X作为每个阶段的输入,上一个时刻的隐状态,是下一个时刻的输入

image.png 应用场景

  • 根据图像生成文字,此时输入的X就是图像的特征,而输出的y序列就是一段句子
  • 根据类别,生成语音
  • 根据类别,生成小说

(3) N VS N

最经典的RNN结构,N个输入,对应N个输出,这里的输入和输出是等长的

image.png 应用场景

  • 词性标注,比如N个单词对应N个词性
  • 输入为字符,输出为下一个字符的概率。比如Char RNN可以生成代码、文字等

这些任务都对Encoder-Decoder的输入和输出个数都有一定的限制
将一张 800X800 像素的图片压缩成 100KB,看上去还比较清晰。
再将一张 3000X3000 像素的图片也压缩到 100KB,看上去就模糊了。

image.png

但实际中很多任务的序列的长度是 不固定的
例如机器翻译中,源语言、目标语言的句子长度不一样(N vs M类型)
对话系统中,问句和答案的句子长度不一样。

于是,就有了Seq2Seq模型

sequence to sequence (Seq2Seq) 模型和Attention

Seq2Seq就如字面意思:输入一个序列,输出另一个序列,且对输入输出长度没有限制
比如下边这张图,输入是6个汉字,输出是4个英文单词

image.png

Seq2Seq使用Attention机制, 通过将输入编码成一个向量的序列。避免了向量C对内容的限制。
在产生每一个输出的时候,都能够做到充分利用输入序列携带的信息。
引入了 Attention 的 Encoder-Decoder 模型如下图:

image.png