Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

14.3 RNN 在其他 NLP 任务中的应用

现在我们已经了解了基本的 RNN 架构,接下来考察如何把它应用于三类 NLP 任务:情感分析和主题分类等序列分类任务;词性标注等序列标注任务;以及文本生成任务,其中包括一种名为编码器—解码器的新架构。

14.3.1 序列标注

在序列标注中,网络的任务是为序列中的每个元素分配一个从小型固定标签集合中选出的标签。一个经典的序列标注任务是词性(part-of-speech,POS)标注,即为句子中的每个词分配 NOUN、VERB 等语法标签。第 18 章将详细讨论词性标注;这里先给出一个引入性的例子。在基于 RNN 的序列标注方法中,输入是词嵌入,输出是由针对给定标签集的 softmax 层生成的标签概率,如图 14.7 所示。

在图中,每个时间步的输入是与输入词元对应的预训练词嵌入。RNN 模块是一个抽象表示,代表展开后的简单循环网络:每个时间步都有输入层、隐藏层和输出层,同时网络还包含共享的 UUVVWW 权重矩阵。网络在每个时间步的输出表示 softmax 层生成的 POS 标签集上的分布。

为了给定输入生成标签序列,我们对输入序列执行前向推理,并在每一步从 softmax 输出中选择最可能的标签。由于使用 softmax 层为每个时间步的输出标签集生成概率分布,训练时仍然使用交叉熵损失。

14.3.2 RNN 用于序列分类

RNN 的另一个用途是对完整序列进行分类,而不是对序列中的词元进行分类。这类任务通常称为文本分类,例如情感分析或垃圾邮件检测:我们将文本分为两类或三类(如正面或负面);也包括类别数量很多的分类任务,如文档级主题分类或客服应用中的消息路由。

图 14.7 使用简单 RNN 进行序列标注的词性标注。词性标注的目标是从预先定义的标签集合中为句子中的每个词分配一个语法标签。(该句的标签包括 NNP(专有名词)、MD(情态动词)等;第 18 章将完整介绍词性标注任务。)预训练词嵌入作为输入,softmax 层则在每个时间步输出词性标签上的概率分布。

在这种场景中应用 RNN 时,我们每次输入一个词,把待分类文本依次送入 RNN,并在每个时间步生成新的隐藏层表示。然后可以取文本最后一个词元的隐藏层 hnh_n,作为整个序列的压缩表示。将该表示 hn\mathbf{h}_n 送入前馈网络,由后者通过对可能类别进行 softmax 来选择类别。图 14.8 展示了这种方法。

图 14.8 将简单 RNN 与前馈网络结合进行序列分类。RNN 的最终隐藏状态作为前馈网络的输入,由前馈网络执行分类。

注意,在这种方法中,不需要为最后一个元素之前的词输出中间结果。因此,这些元素没有对应的损失项。用于训练网络权重的损失函数完全基于最终的文本分类任务。前馈分类器的 softmax 输出与交叉熵损失共同驱动训练。分类产生的误差信号会通过前馈分类器的权重反向传播到其输入,然后再按照 14.1.2 节所述,通过 RNN 的三组权重。利用下游应用产生的损失来调整整个网络权重的训练过程称为端到端训练。

除了只用最后一个词元的隐藏状态 hnh_n 表示整个序列外,另一种选择是对序列中每个词的全部隐藏状态 hih_i 使用某种池化函数。例如,可以逐元素取平均,利用全部 nn 个隐藏状态构造表示:

h mean =1ni=1nhi(14.15)\mathbf {h} _ { \text { mean }} = \frac {1}{n} \sum_ {i = 1} ^ {n} \mathbf {h} _ {i}\tag{14.15}

也可以逐元素取最大值;一组 nn 个向量的逐元素最大值是一个新向量,其第 kk 个元素是所有 nn 个向量第 kk 个元素中的最大值。

RNN 的长上下文使得误差很难成功地反向传播穿过整个输入;我们将在 14.5 节讨论这个问题及其一些标准解决方案。

14.3.3 使用基于 RNN 的语言模型进行生成

基于 RNN 的语言模型也可以用来生成文本。文本生成与图像生成、代码生成一样,构成了一个通常称为生成式 AI 的新兴领域。读过第 7 章的读者已经见过这一过程;这里为那些按不同顺序阅读本书的读者重新介绍它。

回忆第 3 章,我们看到如何根据 Claude Shannon(Shannon, 1951)以及心理学家 George Miller 和 Jennifer Selfridge(Miller and Selfridge, 1950)大约在同一时期提出的采样方法,从 nn 元语言模型生成文本。首先,根据某个词适合作为序列开头的程度,随机采样一个词来开始序列。随后,根据前面已经选择的词继续进行条件采样,直到达到预先设定的长度,或生成序列结束词元。

如今,这种使用语言模型、反复采样在给定先前选择的条件下的下一个词来逐步生成词语的方法,称为自回归生成或因果语言模型生成。其过程基本上与第 79 页所述相同,只是适配到了神经网络环境:

• 从以句首标记 <s> 作为第一个输入所得到的 softmax 分布中,采样一个输出词。

• 在下一个时间步,把第一个词的词嵌入作为网络输入,然后以同样的方式采样下一个词。

• 持续生成,直到采样到句末标记 </s>,或达到固定的长度上限。

严格来说,自回归模型是在时间 tt 根据时间 t1t-1t2t-2 等之前各时刻的值的线性函数预测时间 tt 的值的模型。虽然语言模型并不是线性的(因为它们包含许多非线性层),但由于每个时间步生成的词都以网络上一步选择的词为条件,我们仍然宽泛地把这种生成技术称为自回归生成。图 14.9 展示了该方法。图中,RNN 的隐藏层和循环连接的细节隐藏在蓝色模块中。

这一简单架构支撑了机器翻译、摘要和问答等应用中的先进方法。关键在于用合适的上下文启动生成组件。也就是说,与其只用 <s> 开始生成,不如提供更加丰富且适合任务的上下文:对翻译任务,上下文是源语言句子;对摘要任务,上下文是我们想要概括的长文本。

图 14.9 基于 RNN 的神经语言模型中的自回归生成。