深入浅出Embedding:原理解析与应用实践
上QQ阅读APP看书,第一时间看更新

4.2 构建一些特殊模型

循环神经网络适合含时序序列的任务,如自然语言处理、语言识别等。基于循环神经网络可以构建功能更强大的模型,如Encoder-Decoer(编码器-解码器)模型、Seq2Seq模型等。在具体实现时,编码器和解码器通常使用循环神经网络,如RNN、LSTM、GRU等,有些情况也可以使用卷积神经网络,实现语言翻译、文档摘取、问答系统等功能。

4.2.1 Encoder-Decoder模型

Encoder-Decoder模型是一种神经网络设计模式,其架构示意图如图4-8所示。模型分为两部分:编码器和解码器。首先由编码器将源数据编码为状态,该状态通常为向量,然后,将状态传递给解码器生成输出。

086-1

图4-8 Encoder-Decoder模型架构示意图

对图4-8进一步细化,在输入模型前,需要将源数据和目标数据转换为词嵌入。对于自然语言处理问题,考虑到序列的不同长度及语言的前后依赖关系,编辑器和解码器一般选择循环神经网络,具体可选择RNN、LSTM、GRU等,可以一层,也可以多层,具体如图4-9所示。

086-2

图4-9 细化的Encoder-Decoder模型架构

下面以一个简单的语言翻译场景为例,输入为4个单词,输出为3个单词,此时Encoder-Decoder模型架构如图4-10所示。

087-1

图4-10 基于语言翻译的Encoder-Decoder模型架构

这是一个典型的Encoder-Decoder模型。该如何理解这个模型呢?

可以这样直观理解:从左到右,看作由一个句子(或篇章)生成另外一个句子(或篇章)的通用处理模型。假设这个句子对为<XY>,我们的目标是给定输入句子X,期待通过Encoder-Decoder模型来生成目标句子YXY可以是同一种语言,也可以是两种不同的语言。而XY分别由各自的单词序列构成:

X=(x 1x 2x 3x m) (11.1)

Y=(y 1y 2y 3y n) (11.2)

Encoder,顾名思义就是对输入句子X进行编码,通过非线性变换将输入句子转化为中间语义表示C

C=fx 1x 2x 3x m) (11.3)

对于Decoder来说,其任务是根据句子X的中间语义表示C和之前已经生成的历史信息y 1y 2y 3y i-1来生成i时刻要生成的单词y i

y i=gCy 1y 2y 3y i-1) (11.4)

依次生成y i,那么看起来就是整个系统根据输入句子X生成了目标句子Y。Encoder-Decoder是个非常通用的计算框架,而Encoder和Decoder具体使用什么模型则由我们自己决定。常见的有CNN、RNN、BiRNN、GRU、LSTM、Deep LSTM等,而且变化组合非常多。

Encoder-Decoder模型的应用场景非常广泛,比如对于机器翻译来说,<XY>就是对应不同语言的句子,其中X是英语句子,Y就是对应的中文句子翻译;对于文本摘要来说,X就是一篇文章,Y就是对应的摘要;对于对话机器人来说,X就是某人的一句话,Y就是对话机器人的应答等。

这个框架有一个缺点,就是生成的句子中每个词采用的中间语言编码是相同的,即都是C。例如如下几个表达式,在句子比较短时,性能还可以,但句子稍长一些,生成的句子就不尽如人意了。那么,要如何解决这个缺点呢?

y 1=gC) (11.5)

y 2=gCy 1) (11.6)

y 3=gCy 1y 2) (11.7)

解铃还须系铃人,既然问题出在C上,就需要在C上做一些处理。引入一个注意力机制以有效解决这个问题。关于注意力的更多内容将在第5章详细讲解。

4.2.2 Seq2Seq模型

在Seq2Seq模型提出之前,深度神经网络在图像分类等问题上已经取得了非常好的效果。输入和输出通常都可以表示为固定长度的向量,如果在一个批量中有长度不等的情况,往往通过补零的方法补齐。但在许多实际任务中,例如机器翻译、语音识别、自动对话等,表示成序列后,其长度并不固定。因此如何突破这个局限,使其可以适应这些场景成为急需解决的问题,在探索的过程中,Seq2Seq模型应运而生。

Seq2Seq模型是基于Encoder-Decoder模型生成的,其输入和输出都是序列,如图4-11所示。

088-1

图4-11 Seq2Seq模型

Seq2Seq不特指具体方法,只要满足输入序列、输出序列的目的,都可以称为Seq2Seq模型。