第 7 章 用于自然语言处理的递归神经网络
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
在第 5 章中,我们了解了如何对文本进行标记和排序,将句子转化为数字张量,然后输入神经网络。 然后,在第 6 章中,我们对嵌入进行了扩展,嵌入是将具有相似含义的单词聚类在一起以计算情感的一种方法。正如你在建立讽刺分类器时看到的那样,这种方法非常有效。但这也有局限性:即句子并不仅仅是单词的集合--通常,单词出现的顺序会决定句子的整体含义。此外,形容词可以增加或改变其旁边出现的名词的含义。例如,从情感角度来看,"blue"和 "sky"可能没有任何意义,但如果把它们组合在一起,就会得到 "blue sky",这表示一种明确的情感,通常是积极的。最后,一些名词可能会修饰其他名词,例如雨云、写字台和咖啡杯。
要将这样的序列考虑在内,需要采取一种额外的方法:在模型架构中加入递归因素。本章将介绍实现这一目的的不同方法。我们将探讨如何学习序列信息,以及如何利用这些信息创建一种能够更好地理解文本的模型:递归神经网络(RNN)。
递归的基础
要了解递归 的工作原理,我们首先要考虑本书迄今为止所使用模型的局限性。最终,创建模型的过程有点像图 7-1。您提供数据和标签并定义模型架构,然后模型学习将数据与标签相匹配的规则。然后,这些规则将作为应用编程接口(API)提供给您,它将为您提供未来数据的预测标签。
图 7-1. 创建模型的高级视图
但是,正如你所看到的,这些数据都是一次性的。不涉及任何粒度,也无法理解数据发生的顺序。这就意味着,在 "今天我很忧郁,因为天空是灰色的 "和 "今天我很高兴,因为天空是美丽的蓝色的 "这样的句子中,"蓝色"和 "天空 "这两个词并没有不同的含义。对我们来说,这两个词在使用上的区别是显而易见的,但对模型来说,在这里展示的架构下,确实没有什么区别。
那么,我们该如何解决这个问题呢?让我们先来探讨一下递归的本质,然后你就能知道基本的 RNN 是如何工作的了。
请看著名的 斐波那契数列。如果你对它不熟悉,我将其中一些数字放入图 7-2 中。
图 7-2. 斐波那契数列中的前几个数字
这个数列背后的原理是,每个数字都是前面两个数字的和。因此,如果我们从 1 和 2 开始,下一个数字是 1 + 2,也就是 3,之后是 2 + 3,也就是 5,然后是 3 + 5,也就是 8,以此类推。
我们可以将其放入计算图中,得到图 7-3。
图 7-3. 斐波那契数列的计算图示
在这里,你可以看到我们将 1 和 2 送入函数,得到 3 作为输出。然后,我们将第二个参数(2)带入下一步,并与上一步的输出(3)一起输入函数。这个过程无限循环,每次操作都取决于之前的操作。左上角的 1 在整个过程中 "存活 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access