深度学习研究回顾博客:自然语言处理的应用

来自 adeshpande3

机器之心编译

每隔几周,加州大学洛杉矶分校 (UCLA) 的 Adit Deshpande 就会在他的博客上发表一篇深度学习研究的深入评论。今天的文章是Adit本系列的第三篇博客,主要介绍深度学习在自然语言处理中的应用。

自然语言处理简介

自然语言处理 (NLP) 是创建可以处理或“理解”语言以完成特定任务的系统。这些任务可能包括:

传统的自然语言处理方法涉及到很多语言学本身的知识。必须了解音素和语素等术语,并且需要完整的语言学课程来学习这些专业。接下来让我们看看一些传统的自然语言处理是如何理解下面这个词的。

假设我们的目标是收集关于这个词的一些信息(描述它的情绪,找到它的定义等)。利用我们的语言专业知识,我们将这个词分为三个部分。

我们知道这个词的前缀“un”代表了一个相反或相反的概念,“ed”可以定义这个词的时态(过去时)。通过了解“兴趣”这个词的主体部分,我们可以很容易地推断出整个词的意思和情感。看起来很简单吗?但是,当您必须考虑英语中所有不同的前缀和后缀时,可能需要一位非常熟练的语言学家才能理解所有可能的组合和含义。

如何应用深度学习

深度学习,在其最基本的层面上,是一种表征学习的方法。使用卷积神经网络,我们可以看到用于对事物进行分类的不同过滤器的组成。在这里,我们将采用类似的方法,使用大型数据集来创建单词的表示。

本文概述

在这篇文章中,我们将首先了解构建用于自然语言处理的深度网络的基本构建块,然后讨论最近研究论文的一些应用。大多数人并不清楚为什么我们使用循环神经网络(RNN)或长短期记忆(LSTM),但我希望在我们讨论研究论文之后,你可以理解为什么深度学习会对自然语言处理有用提供这么多帮助有更好的理解。

词向量

因为深度学习和数学密不可分,我们将把每个单词表示为一个 d 维向量。我们将 d 设置为 6。

现在让我们考虑如何填写这些值。我们希望以向量表示单词的方式填充值,以及单词的上下文、含义或语义。一种方法是建立一个共现矩阵。以下面的句子为例。

在这句话中,我们要为每个词构建一个词向量。

共现矩阵包含每个单词在语料库(或训练集)中出现在其他单词旁边的次数。让我们看看下面的矩阵。

提取该矩阵的行允许我们对词向量进行简单的初始化。

请注意,通过这个简单的矩阵,我们将能够获得非常有用的见解。例如,注意“love”和“like”,这两个词与名词(NLP和dogs)关联的次数都是1。与“I”关联的次数也是1,所以这意味着这两个词必须是动词。如果我们有一个比简单句子更大的数据集,你可以想象,相似度会越来越明显,比如“love”和“like”,其他一些同义词也会开始有相似的词向量,因为它们通常是在类似的情况下使用。

现在,虽然我们的起点很好,但我们也注意到每个单词的维度随着语料库的增长而线性增加。如果我们有 100 万个单词(按 NLP 标准来说不是很多),我们将有一个大小为 100 万乘以 100 万的矩阵,并且该矩阵将非常稀疏(有很多 0)@ >。这不能在存储效率方面是最好的。还有许多先进的技术可以找到表征这些词向量的最佳方法前向和递归神经网络的区别,其中最著名的是 Word2Vec。

Word2Vec

词向量初始化技术的基本思想是在词向量中存储尽可能多的信息,同时将维数保持在可管理的范围内(25-1000维是理想的)。Word2Vec 允许我们预测每个单词周围的单词。以“我喜欢 NLP,我喜欢狗”这句话为例。我们前面提到的一个例子。让我们从这句话的前三个单词开始,所以我们要将窗口大小 m 设置为 3.

现在,我们的目标是提取中心词“love”,然后预测可能出现在这个词之前或之后的词。我们应该做什么?通过最大化/优化功能!一般来说,我们的函数最大化现有核心词的上下文词的对数概率。

让我们做一些更深入的了解。上面的成本函数基本上是在说我们要增加“I”和“love”以及“NLP”和“love”的对数概率(love 是这两种情况的中心词)。变量 T 表示训练句子的数量。让我们再看一下对数概率。

Vc 是中心词的词向量。每个词都有两个向量表示(Uo 和 Uw),一个是当这个词被用作中心词时,另一个是当这个词被用作外部词时。这些向量都是用随机梯度下降训练的。这一定是那些令人困惑的方程式之一,也是我们需要理解的方程式,所以如果您仍然无法想象发生了什么,您可以查看更多资源以找出答案。

简而言之:给定一个中心词,Word2Vec 试图通过最大化上下文词的对数概率并通过随机梯度下降 (SGD) 修改向量来找到不同词的向量表示。

注意:论文“Distributed Representations of Words and Phrases and their Compositionality”更详细:如何使用常用词的负采样和子采样来获得更准确的词向量。)

Word2Vec 最有趣的贡献是展示了不同词向量之间的线性关系。经过训练,词向量似乎捕捉到了不同的句法和语义概念。

令人难以置信的是,这些线性关联是如何通过简单的目标函数和优化技巧形成的。

奖励:另一种很酷的初始化词向量的方法:GloVe(将共现矩阵与 Word2Vec 相结合):

递归神经网络 (RNN)

现在我们有了词向量,让我们看看它们如何适应循环神经网络。递归神经网络现在是大多数自然语言处理 (NLP) 的必需品。RNN 的最大优势在于它们可以有效地使用来自先前时间步长的数据。这就是小型 RNN 的样子。

在底部我们有词向量 (xt, xt-1, xt+1)。每个向量在同一时间步长 (ht, ht-1, ht+1) 有一个隐藏状态向量)。我们称这些是一个模块。

RNN每个模块中的隐藏状态是隐藏状态向量和前一个时间步的词向量的函数:

如果仔细看上标,你会看到有一个权重矩阵 Whx,我们将 Whx 矩阵与输入相乘,就会有一个循环权重矩阵 Whh 乘以上一个时间步长向量处的隐藏状态。请记住,这些循环权重矩阵在所有时间步长上都是相同的,这也是循环神经网络的一个关键点。仔细想想,这与传统的两层神经网络有很大不同。传统上,我们通常对每一层都有不同的权重矩阵 W(W1 和 W2),这里的循环权重矩阵在整个网络中都是相同的。

要获得特定模块(Yhat)的输出,您需要将 h 乘以 WS,这是另一个权重矩阵。

现在让我们退后一步,看看递归神经网络的优势在哪里。与传统神经网络的最大区别在于循环神经网络可以接收输入序列(我们示例中的单词)。您可以将其与典型的卷积神经网络进行比较,后者只能将单个图像作为输入。然而,使用 RNN,输入可以小到一个短句,也可以大到一篇有 5 段的文章。此外,此输入的序列顺序会极大地影响权重矩阵和隐藏向量在训练期间的变化。训练后的隐藏状态期望有来自过去的信息(之前的时间步长)。

门控循环单元 (GRU)

现在让我们看一下门控循环单元(GRU)。本单元的目标是提供一种更复杂的方法来计算循环神经网络中的隐藏状态向量。这种方法将使我们能够存储信息并捕获长距离依赖关系。让我们想象一下为什么在传统的 RNN 架构中长期依赖存在问题。在反向传播中,误差将通过循环神经网络,从最近的时间步流到最早的时间步。如果初始梯度是一个小数(比如小于0.25),那么当经过第三或第四个模块时,梯度实际上就消失了(链式法则乘以梯度),所以 Hidden不会更新较早时间步的状态。

在传统的循环神经网络中,隐藏状态向量由以下公式计算:

GRU 提供了一种不同的方法来计算隐藏状态向量 h(t),计算分为三个分量,一个更新门(update gate)、一个重置门(reset gate)和一个新的内存存储(memory container)。两个门都是先前时间步的输入词向量和隐藏状态函数:

关键区别在于每个门使用不同的权重,由不同的上标表示。更新门使用 Wz 和 Uz,而重置门使用 Wr 和 Ur。

现在,新的内存容器由下式计算:

(空心点指的是Hadamard产品)

现在,如果你仔细看公式,你会发现如果重置门的值接近 0,那么这整个项也变为 0,从而忽略了上一个时间步 ht-1 的信息。在这种情况下,计算单元只是新词向量 xt 的函数。

图片[1]-深度学习研究回顾博客:自然语言处理的应用-老王博客

h(t) 的最终公式如下:

ht 是一个包含三个部分的函数:reset gate、update gate 和 memory memory。理解这一点的最好方法是可视化当 zt 接近 1 和 0 时会发生什么。当 zt 接近 1 时,新的隐藏层向量 ht 几乎依赖于之前的隐藏层,并且由于 (1-zt) 变为 0,我们忽略当前的内存存储。当 zt 接近 0 时前向和递归神经网络的区别,新的隐藏层向量几乎取决于当前的内存存储,我们忽略了之前的隐藏层状态。直观地看这三个组件,可以总结如下:

1.更新门:

2.重置门:

3.内存容器:取决于复位门。

一个常用来说明 GRU 工作的例子如下:假设你遇到下面这段话

以及相关的问题 2 个数字的总和是多少。由于中间句子对手头的问题绝对没有影响,然而,重置和刷新门将使网络在某种意义上“忘记”中间句子,并了解到只有某些信息(本例中为数字)应该修改隐藏状态。

长短期记忆 (LSTM)

如果你已经很了解 GRU,那么理解 LSTM 对你来说一定不会太难。LSTM 也由一系列门组成。

当然,这里涉及到更多的知识。但是因为LSTM可以理解为GRU的衍生,我就不过多分析了,但是如果你想更深入的理解每一个门,每一个计算,可以点击查看Chris Olah写的一篇优秀的博文: . 这篇文章是迄今为止最受欢迎的 LSTM 教程,肯定会对那些想知道它在幕后如何工作的人有很大帮助。

比较和对比 LSTM 和 GRU

让我们先从相似之处开始。两者的单元组件都有一个特殊的功能,可以记录长期的词句依赖。这种长期依赖意味着在某些情况下,两个单词或短语可能出现在不同的时间点,但两者之间的关系对于实现最终目标至关重要。LSTM 和 GRU 可以通过传递一些门来忽略或保留句子中的某些信息来捕获这些依赖关系。

两个基本单元的区别在于它们拥有的门数量(GRU 有两个,LSTM 有三个)。这将影响输入可以通过的非线性关系的数量,并最终影响整体计算。此外,GRU 没有与 LSTM 的内存单元(C_t)相同的内存单元。

在阅读论文之前

这部分只是一个快速提醒:还有其他对 NLP 有用的深度模型。循环神经网络和 CNN 有时会在实践中使用,但不如 RNN 流行,后者是大多数深度学习 NLP 系统的支柱。既然我们已经对 NLP 和深度学习的关系有了足够的了解,那么我们来看看几篇论文。由于 NLP 领域存在不同的问题(从机器翻译到问答系统),因此有大量论文可供查看,但我在这篇文章中找到了 3 篇有见地的论文。NLP 领域在 2016 年有了巨大的发展,但让我们从 2015 年的一篇论文开始。

记忆网络

纸:

介绍

我们将首先讨论的第一篇论文在问答系统的子领域非常有影响力。这篇由 Jason Weston、Sumit Chopra 和 Antoine Bordes 撰写的论文介绍了一类称为记忆网络的模型。

这个想法来自这样一个事实,即当您想准确回答有关文本的问题时,您必须记住文本的一般内容。如果我要问你“RNN 代表什么”这个问题(前提是你已经完全阅读了这篇博文),你就能告诉我答案。这是因为你通过阅读和存储你的记忆吸收了这些知识。您只需花几秒钟的时间查找这些信息,然后用流利的语言表达出来。现在,我不知道大脑是怎么做的,但是存储信息的地方的想法肯定是有的。

本文描述的记忆网络有些特殊,因为它包含一个联想记忆。这种关联存储器可以读写。值得注意的是,我们在 CNN 或 Q 网络(用于强化学习)或其他传统网络中找不到这种类型的网络。这部分是因为问答任务在很大程度上依赖于能够建模或跟踪长期依赖关系的系统,例如在完整故事中记录角色的进度,或在时间轴中记录重要事件。在 CNN 或 Q-network 中,记忆模块嵌入在网络的权重系统中,因为网络需要能够学习不同的过滤器或将状态映射到动作。乍一看,RNN 和 LSTM 或许能够实现这种记忆功能,但它们通常无法记住过去的输入,

网络架构

好的,让我们看看这个网络如何处理给定的初始文本。与几乎所有机器学习算法一样,输入首先被转换为特征表示。这需要使用词向量、词性标注、解析等,这些都是由程序员决定的。

下一步是想出一个特征表示 I(x) 并让我们的记忆 m 被更新以反映我们收到的新输入 x。

您可以将记忆 m 视为一系列单独的记忆 mi。这些单独的记忆 mi 中的每一个都可以是整个记忆 m、特征表示 I(x) 和/或自身的函数。函数 G 可以简单到仅将整个表示 I(x) 存储在单个存储单元 mi 中。您可以根据新输入修改函数 G,更新过去的记忆。三、的第四步,根据问题读取内存,得到特征表示o,解码输出最终答案。

函数 R 可以是一个 RNN,用于将内存中的特征表示转换为对问题的可读且准确的答案。

现在,仔细看看第三步。我们希望 O 模块输出与给定问题 x 的可能答案最匹配的特征表示。现在,将问题与每个单独的记忆单元进行比较,并根据记忆单元对问题的支持程度进行评分。

我们取打分函数的 argmax 来找到最能支持问题的输出表示(也可以取多个得分最高的单元,不一定是 1)。评分功能是计算不同问题嵌入和所选记忆单元之间的矩阵乘积。(有关详细信息,请阅读论文)。当您将两个词向量相乘以找到它们的相似性时,这就是您所想到的。然后将此输出表示 o 输入 RNN 或 LSTM,或输入另一个输出可读结果的评分函数。

训练方式为有监督训练,训练数据包括原文、问题、支持句和ground truth答案。这是目标函数。

感兴趣的读者,以下论文讨论了构建此类记忆网络的方法:

用于情感分析的树 LSTM

纸:

介绍

下一篇论文分析了情感分析领域取得的进展,即判断一个短语的语气/意义是积极的还是消极的。更正式地说,情绪可以定义为对情况或时间的意见或态度。目前,LSTMs 是情感分析网络中最常用的组件。Kai Sheng Tai、Richard Socher 和 Christopher Manning 的这篇论文介绍了一种将 LSTM 链接成非线性结构的有趣方法。

这种非线性排列背后的想法是,自然语言具有这样的特性,即当单词按一定顺序排列时,它们就会变成短语。这些由单词顺序组成的短语表达了与组成短语的单词不同的含义。为了表示这一特性,LSTM 的网络单元必须排列成树形结构,其中不同的单元受其子节点的影响。

网络架构

Tree LSTM 和标准 LSTM 之间的一个区别是后者的隐藏状态是当前输入和先前时间步的隐藏状态的函数。但是,使用这种结构,它的隐藏状态是当前输入和其子单元的隐藏状态的函数。

新的树结构带来了一些数学变化,包括忽略门的子单元。对细节感兴趣的读者可以研究一下这篇论文。但我的重点是了解为什么这些模型比线性 LSTM 更有效。

一个 Tree-LSTM,单个单元可以吸收所有子节点的隐藏状态。这很有趣,因为一个单元格可以单独评估其子代。在训练过程中,网络意识到特定单词(可能是情感分析中的“not”或“very”)对句子的整体情感分析的极端重要性。赋予该节点更高估值的能力为网络提供了很大的灵活性并提高了网络性能。

神经机器翻译

纸:

介绍

最后一篇论文讨论了解决机器翻译任务的方法。作者来自 Google 的机器学习远见者:Jeff Dean、Greg Corrado、Orial Vinyals 等。这篇文章介绍了一个机器翻译系统,它是谷歌翻译服务背后的支柱。与 Google 以前使用的产品系统相比,该系统将翻译错误平均减少了 60%。

传统的自动翻译解决方案包括基于短语的变量匹配。这种方法需要大量的语言领域知识,而且设计过于脆弱,缺乏泛化能力。传统解决方案的问题之一是逐位翻译输入句子。因此,更有效的解决方案是一次翻译整个句子,这样可以实现更广泛的上下文和更自然的单词重新排列。

网络架构

该论文的作者介绍了一个深度 LSTM 网络,该网络能够通过 8 个解码器和编码器层进行端到端训练。我们可以将系统分解为 3 个组件:编码器 RNN、解码器 RNN、注意力模块。在高层次上,编码器的任务是将输入句子转换为向量表示,然后解码器生成输入表示,注意模块提示解码器在解码过程中要注意什么(这是使用输入句子的完整语言环境的想法)。

本文的其余部分侧重于扩展服务的挑战。计算资源、延迟和大容量部署等主题都得到了详细的介绍。

综上所述

在这篇博客中,我们总结了深度学习如何帮助自然语言处理任务。在我看来,该领域的一些未来目标包括:改进消费者服务聊天机器人,完善机器翻译,并有望使问答系统能够掌握对非结构化或长文本(如维基百科文本页面)的更深入理解。

原网址:

©本文为机器之心编译,转载请联系本公众号授权。

✄————————————————

加入机器之心(全职记者/实习生):hr@almosthuman.cn

投稿或寻求报道:editor@almosthuman.cn

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论