一、概述
Encoder-Decoder框架可以看作是一种深度学习领域的研究模式,应用场景异常广泛。图1是文本处理领域里常用的Encoder-Decoder框架最抽象的一种表示。
图1 文本处理领域的Encoder-Decoder框架
二、介绍
文本处理领域的Encoder-Decoder框架可以这么直观地去理解:可以把它看作适合处理由一个句子(或篇章)生成另外一个句子(或篇章)的通用处理模型。对于句子对 ( S o u r c e , T a r g e t ) (Source,Target) (Source,Target),我们的目标是给定输入句子 S o u r c e Source Source,期待通过Encoder-Decoder框架来生成目标句子 T a r g e t Target Target。 S o u r c e Source Source 和 T a r g e t Target Target 可以是同一种语言,也可以是两种不同的语言。而 S o u r c e Source Source 和 T a r g e t Target Target 分别由各自的单词序列构成:
S
o
u
r
c
e
=
⟨
x
1
,
x
2
…
x
m
⟩
Source =\langle\mathbf{x_1},\mathbf{x_2}\ldots\mathbf{x_m}\rangle
Source=⟨x1,x2…xm⟩
T
a
r
g
e
t
=
⟨
y
1
,
y
2
…
y
n
⟩
Target=\langle\mathbf{y_1},\mathbf{y_2}\ldots\mathbf{y_n}\rangle
Target=⟨y1,y2…yn⟩
Encoder顾名思义就是对输入句子 S o u r c e Source Source 进行编码,将输入句子通过非线性变换转化为中间语义表示 C C C:
C = F ( x 1 , x 2 … x m ) \mathbf{C}={\mathcal F}(\mathbf{x_{1}},\mathbf{x_{2}}\ldots\mathbf{x_{m}}) C=F(x1,x2…xm)
对于解码器Decoder来说,其任务是根据句子 S o u r c e Source Source 的中间语义表示 C C C 和之前已经生成的历史信息
y 1 , y 2 … y i − 1 \mathbf{y_1},\mathbf{y_2}\ldots\mathbf{y_{i-1}} y1,y2…yi−1,来生成i时刻要生成的单词 y i \mathbf{y_i} yi。
每个 y i \mathbf{y_i} yi 都依次这么产生,那么看起来就是整个系统根据输入句子 S o u r c e Source Source 生成了目标句子 T a r g e t Target Target。如果 S o u r c e Source Source 是中文句子, T a r g e t Target Target 是英文句子,那么这就是解决机器翻译问题的Encoder-Decoder框架;如果 S o u r c e Source Source 是一篇文章, T a r g e t Target Target 是概括性的几句描述语句,那么这是文本摘要的Encoder-Decoder框架;如果 S o u r c e Source Source 是一句问句, T a r g e t Target Target 是一句回答,那么这是问答系统或者对话机器人的Encoder-Decoder框架。由此可见,在文本处理领域,Encoder-Decoder的应用领域相当广泛。
Encoder-Decoder框架不仅仅在文本领域广泛使用,在语音识别、图像处理等领域也经常使用。比如对于语音识别来说,图1所示的框架完全适用,区别无非是Encoder部分的输入是语音流,Decoder部分的输出是对应的文本信息;而对于“图像描述”任务来说,Encoder部分的输入是一副图片,Decoder的输出是能够描述图片语义内容的一句描述语。一般而言,文本处理和语音识别的Encoder部分通常采用RNN模型,图像处理的Encoder一般采用CNN模型。