循环神经网络的应用

目前循环神经网络已经被应用在了很多领域,如语音识别(ASR)、语音合成(TTS)、聊天机器人、机器翻译,以及自然语言处理的分词、词性标注等工作的研究中。在本节中,我们将介绍几个较为典型的循环神经网络的应用,以此来了解循环神经网络是如何与实际应用场景相结合的。

根据应用场景和需求的不同,我们大致可以将循环神经网络的任务分为两类:一类是序列到类别的模式;另一类是序列到序列的模式。其中,序列到序列的模式又可以进一步地划分为:“同步的序列到序列的模式”和“异步的序列到序列的模式”。接下来我们会通过三个案例来进一步了解这三种模式。

1. 文本分类

文本分类目前是自然语言处理(Natural Language Processing,NLP)领域中最常见的问题之一,例如做垃圾邮件检测、用户评论的情感极性分析等。序列到类别的模式适用于文本分类问题,在文本分类问题中,我们输入循环神经网络中的是一段文本,长度为 n,神经网络的输出只有一个类别,长度为 1。

假设要实现一个外卖行业的用户评论的情感极性分类,如图 1 所示,往神经网络中输入的是一段用户对外卖商品的评论。
实现文本分类的循环神经网络示意图
图 1:实现文本分类的循环神经网络示意图

循环神经网络在每一个时间步都有一个输出,但对于一个简单的分类问题,我们不需要这么多的输出,一个常用且简单的处理方式是只保留最后一个时间步的输出,如图 2 所示。
“序列到类别模式”的循环神经网络示意图
图 2:“序列到类别模式”的循环神经网络示意图

2. 序列标注

分词是自然语言处理中最基础、也是最重要的一个环节,随着深度学习的发展,不少人开始尝试将深度学习应用到这一领域,近两年里也取得了一定的成果。虽然目前在分词、词性标注等任务中普遍使用的还是 CRF、HMM 等传统算法,但是深度学习所取得的成果已经被越来越多的人所认可,并且不断地在自然语言处理的任务中崭露头角。

不管使用传统的 CRF 算法还是使用循环神经网络来训练分词模型,我们都需要先对训练数据进行标注。以 4-tag 字标注法为例,假设有一段训练样本“北京市是中国的首都”,标注后的数据形式如图 3 所示。
标注后的数据形式
图 3:标注后的数据形式

在 4-tag 字标注法中,有四个标签,分别是 B、M、E 和 S。其中 B 代表这个字是一个词的首字,M 代表这个字是一个词的中间部分(一个词如果由多个字组成,除了首尾,中间的字都标为 M),E 代表这个字是一个词的最后一个字,而 S 代表这是一个单字,单独成词。

在类似分词这种序列标注的问题中,每一个时间步都对应一个输入和输出。对于这种问题,我们采用“同步的序列到序列的模式”,如图 4 所示。
“同步的序列到序列模式”的循环神经网络示意图
图 4:“同步的序列到序列模式”的循环神经网络示意图

3. 机器翻译

用于机器翻译的循环神经网络是一种“异步的序列到序列模式”的网络结构,同样是序列到序列的模式,与适用于序列标注的“同步的序列到序列模式”的不同之处在于,“异步的序列到序列模式”的循环神经网络对于输入和输出的序列长度没有限制。

在序列标注问题中,每一个时间步都有一个输入和一个对应的输出,因此输入和输出的序列长度相同,然而在机器翻译问题中,我们输入的序列长度和输出的序列长度不一定等长。

“异步的序列到序列模式”的循环神经网络就是我们常说的“Sequence to Sequence Model”,又称为编码器-解码器(Encoder-Decoder)模型。之所以称之为编码器-解码器模型,是因为我们将网络分成了两部分:编码器部分和解码器部分。如图 5 所示,编码器模型对输入的序列数据进行编码,得到中间向量 C。
编码器部分示意图
图 5:编码器部分示意图

最简单的编码方式是直接把网络最后一个时刻的状态 hn 赋值给 C,也可以使用一个函数来做变换,函数接收的参数可以是 hn,也可以是从 h1 到 hn 的任一中间状态。在得到中间向量 C 之后,接下来要做的就是解码。

一种常用的解码方式如图 6(左)所示,模型在解码过程中将编码得到的向量 C 作为解码器的初始状态,并将每一个时间步的输出作为下一个时间步的输入,直至解码完成。“EOS”是输入和输出序列结束的标志。图 6(右)所示的是另一种解码的方式,该方式将编码得到的向量 C 作为解码器模型每一个时间步的输入。
两种不同的解码器模型示意图
图 6:两种不同的解码器模型示意图