Encoder-Decoder 和 Seq2Seq

文章目录

一文看懂Encoder-Decoder和Seq2Seq

Encoder-Decoder 是 NLP 领域里的一种模型框架,广泛用于机器翻译、语音识别等任务。 本文将详细介绍 Encoder-Decoder、Seq2Seq 以及它们的升级方案 Attention。

想要了解更多 NLP 相关的内容,请访问 NLP 专题(免费提供 59 页的 NLP 文档下载)。

什么是 Encoder-Decoder ?

Encoder-Decoder 模型主要是 NLP 领域里的概念,并不特指某种具体的算法,而是一类算法的统称。 它是一个通用框架,在这个框架下可以使用不同的算法来解决不同任务。

Encoder(编码器):将现实问题转化为数学问题。
Decoder(解码器):求解数学问题,并转化为现实世界的解决方案。

把 2 个环节连接起来,用通用的图来表达则是下面的样子: 关于 Encoder-Decoder,有2 点需要说明:
1. 不论输入和输出的长度是什么,中间的「向量 c」 长度都是固定的(这也是它的缺陷,下文会详细说明)
2. 根据不同的任务可以选择不同的编码器和解码器(可以是一个 RNN ,但通常是其变种 LSTM 或者 GRU )
只要是符合上面的框架,都可以统称为 Encoder-Decoder 模型。说到 Encoder-Decoder 模型就经常提到一个名词—— Seq2Seq。

什么是 Seq2Seq?

Seq2Seq 是 Sequence-to-sequence 的缩写,强调“输入一个序列,输出另一个序列”, 特点在于输入与输出的长度可变。例如输入 6 个汉字,输出 3 个英文单词。

Seq2Seq 的由来
在 Seq2Seq 框架提出之前,深度神经网络在图像分类等问题上取得了非常好的效果。在其擅长解决的问题中,输入和输出通常都可以表示为固定长度的向量,如果长度稍有变化,会使用补零等操作。
然而许多重要的问题,例如机器翻译、语音识别、自动对话等,表示成序列后,其长度事先并不知道。因此如何突破先前深度神经网络的局限,使其可以适应这些场景,成为了13年以来的研究热点,Seq2Seq框架应运而生。

Seq2Seq 与 Encoder-Decoder 的关系:
Seq2Seq 更强调“输入序列—输出序列”这一目标;Encoder-Decoder 则是方法论层面, Seq2Seq 的具体实现一般都属于 Encoder-Decoder 范畴。

Encoder-Decoder 有哪些应用?

Encoder-Decoder 在多个场景中大放异彩:

Encoder-Decoder 的缺陷

由于编码器与解码器之间只有一个固定长度的向量 c 传递信息,导致当输入序列过长时,信息容易丢失。 可以将其类比为压缩图片:分辨率越大,压缩到同样大小,失真越严重。

因此,输入越长,固定向量 c 容纳的信息就越有限,这在长序列任务中成为瓶颈。

Attention 解决信息丢失问题

Attention 机制正是为了解决 Encoder-Decoder 信息丢失而出现的。 它使得编码器不再只输出一个固定向量 c,而是输出一系列向量。

在解码时,每个输出都能访问输入序列的全部信息,挑选关键部分进行“加权求和”, 因此在机器翻译等任务中取得了非常好的效果。

总结:Attention 是对传统 Encoder-Decoder 的升级,使模型能够更好地处理长序列信息。

发表评论