第 5 章 文本分类 文本分类
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
我们暂时抛开图像,将目光转向另一个领域,在这个领域中,深度学习已被证明是对传统技术的重大进步:自然语言处理(NLP)。谷歌翻译就是一个很好的例子。最初,处理翻译的代码多达 50 万行。基于 TensorFlow 的新系统大约只有 500 行,而且性能比旧方法更好。
最近,在将迁移学习(你在第 4 章中已经了解过)引入 NLP 问题方面也取得了突破性进展。Transformer 架构等新架构催生了 OpenAI 的 GPT-2 等网络,其中较大的变体所生成的文本质量几乎与人类无异(事实上,OpenAI 并未公布该模型的权重,因为担心它被恶意使用)。
本章旋风式地介绍了递归神经网络和嵌入。然后,我们将探讨torchtext 库,以及如何将其用于基于 LSTM 模型的文本处理。
递归神经网络 Network+
如果我们回顾一下迄今为止我们是如何使用基于 CNN 的架构的,就会发现它们总是在一个完整的时间快照上工作。但考虑一下这两个句子片段:
The cat sat on the mat. She got up and impatiently climbed on the chair, meowing for food.
如果你把这两个句子一个接一个地输入 CNN,然后问:猫在哪里?你就会遇到问题,因为 Network+ 没有记忆的概念。在处理具有时间域的数据(如文本、语音、视频和时间序列数据)时,这一点非常重要。1递归神经网络(RNN)通过隐藏状态赋予神经网络记忆,从而解决了这一问题。
RNN 看起来像什么?我最喜欢的解释是:"想象一下神经网络与for 循环的交叉"。图 5-1显示了一个经典的 RNN 结构图。
图 5-1. 一个 RNN
我们在时间步长为t 时添加输入,得到隐藏输出状态ht,输出也会反馈到 RNN 中,用于下一个时间步长。如图 5-2 所示,我们可以展开这个网络,深入了解发生了什么。
图 5-2. 未展开的 RNN
这里有一组全连接层(共享参数)、一系列输入和输出。输入数据被送入 Network+,而序列中的下一个项目被预测为输出。从展开的视图中,我们可以看到 RNN 可以被看作是全连接层的流水线,连续的输入被输入到序列中的下一层(层与层之间通常会插入ReLU 等非线性因素)。当我们完成预测序列后,就必须通过 RNN 反向传播误差。由于这涉及到网络步骤的回溯,因此这一过程被称为时间反向传播。先计算整个序列的误差,然后如图 5-2 所示展开网络,计算每个时间步的梯度,并结合起来更新网络的共享参数。你可以把它想象成在单个网络上进行反推,然后将所有梯度相加。
这就是 RNN 背后的理论。但这种简单的结构也存在一些问题,我们需要讨论一下这些问题是如何被更新的架构所克服的。
长短期记忆网络
在实践中,RNNs 过去和现在都特别容易受到我们在第 2 章中谈到的梯度消失问题的影响,或者出现梯度爆炸 ...