深度|自然语言处理领域深度学习研究总结:从基本概念到前沿成果

核心提示选自adeshpande3机器之心编译每隔几周,加利福尼亚大学洛杉矶分校的 Adit Deshpande 就会在其博客上发表一篇深度解读的深度学习研究回顾博客。今天这篇是 Adit 的这一系列的第三篇博客,将主要介绍深度学习在自然语言处理当

挑选

自adeshpande3以来

机器心脏编译

每隔几周,加州大学洛杉矶分校的Adit Deshpande就会在他的博客上发布一篇深度阅读评论博客。今天这是Adit系列的第三篇博客,将主要介绍深度学习在自然语言处理中的应用。

自然语言处理导论

自然语言处理就是创建一个系统,能够处理或“理解”语言,以完成特定的任务。这些任务可能包括:

问答系统

情感分析

图片标题

机器翻译

语音识别

词性标注

命名实体识别

传统的自然语言处理方法涉及到大量的语言学知识。有必要了解音素、语素等术语。为了学习这些专业知识,要上完整的语言学课程。接下来,我们来看看一些传统的自然语言处理是如何理解下面这个词的。

假设我们的目标是收集一些关于这个单词的信息。

利用我们在语言方面的专业知识,我们把这个词分成三个部分。

我们知道这个词的前缀“un”表示相反或相反的概念,“ed”可以限定这个词的时态。通过理解“兴趣”这个词的主要部分,我们可以很容易地推断出整个词的含义和情感。是不是看起来很简单?然而,当你不得不考虑英语中所有不同的前缀和后缀时,你可能需要一个非常熟练的语言学家来理解所有可能的组合和含义。

如何将深度学习应用于其中?

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

本文概述

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

词向量

因为深度学习和数学密不可分,所以我们会把每一个单词都表征为一个D维向量。我们把d设为6。

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

在这个句子中,我们要为每个单词建立一个单词向量。

共生矩阵包含每个单词在语料库中与其他单词相邻出现的次数。让我们看看下面的矩阵。

提取这个矩阵的行可以使我们对字向量进行简单的初始化。

注意,通过这个简单的矩阵,我们将获得非常有用的见解。比如讲究“爱”和“喜欢”。这两个词和名词连在一起的次数是1。与“我”相连的次数也是1,说明这两个词一定是动词。如果我们有一个更大的数据集,而不是一个简单的句子,你可以想象这种相似性会越来越明显,就像“爱”和“喜欢”一样,其他同义词也会开始有相似的词向量,因为它们一般用在相似的语境中。

现在,虽然我们的出发点很好,但是我们也注意到,每个词的维度都会随着语料库的扩大而线性上升。如果我们有100万个单词,我们就会有一个100万乘以100万的矩阵,这个矩阵会非常稀疏。就存储效率而言,这一定不是最好的。在寻找表示这些单词向量的最佳方式方面,有许多先进的技术。最著名的是Word2Vec。

Word2Vec

单词初始化技术的基本思想是在单词向量中存储尽可能多的信息,同时将维度控制在可管理的范围内。Word2Vec可以让我们预测每个单词周围的单词。还是拿“我爱NLP,我喜欢狗”这句话来说吧。举个例子。首先,我们来看看这句话的前三个词,所以我们必须将我们的窗口大小M设置为3。

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

让我们做一些更深入的了解。文中的代价函数基本上是说要增加“我”和“爱”以及“NLP”和“爱”的对数概率。t代表训练句子的数量。我们再来看看对数概率。

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

总之:给定一个头词,Word2Vec通过最大化上下文词的对数概率,并通过随机梯度下降修改向量,试图找到不同词的向量表示。

注:论文《词和短语的分布式表示及其合成有效性》讲了更多细节:如何使用常用词的负采样和子采样来获得更准确的词向量。)

Word2Vec最有趣的贡献在于,它展示了不同词向量之间的线性关系。经过训练后,单词向量似乎可以捕捉不同的语法和语义概念。

令人难以置信的是,通过一个简单的目标函数和优化技术可以形成这些线性相关性。

福利

:另一种初始化单词向量的酷方法:手套:http://nlp.stanford.edu/pubs/glove.pdf

循环神经网络

现在我们有了单词向量,让我们看看它们如何适合循环神经网络。神经网络现在是大多数自然语言处理的必需品。递归神经网络最大的优点是可以有效利用前面时间步的数据。这是一个小的环形神经网络的样子。

底部是单词向量。每个向量在同一时间步都有一个隐藏状态向量。我们称之为模块。

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

仔细看上标,会发现有一个权重矩阵Whx,我们将Whx矩阵乘以输入,就会有一个循环权重的矩阵Whh乘以上一时间步的隐状态向量。记住这些循环权重矩阵在所有时间步都是相同的,这也是循环神经网络的关键点。仔细想想,和传统的两层神经网络还是有很大区别的。传统上,我们每一层通常有一个不同的权重矩阵W,这里的循环权重矩阵在整个网络中是相同的。

要得到特定模块的输出,需要将H乘以WS,这是另一个权重矩阵。

现在让我们退一步,了解一下递归神经网络的优势。与传统神经网络最大的区别在于递归神经网络可以接收输入序列。你可以和典型的卷积神经网络比较一下,典型的卷积神经网络只取单幅图片作为输入。然而,使用递归神经网络,输入可以小到一个短句,大到一篇有五段的文章。此外,输入的序列顺序可以极大地影响权重矩阵和隐藏向量在训练中如何变化。隐藏状态有望在训练后从过去获得信息。

门控循环单元

现在让我们来看看门控循环单元。本单元的目标是提供一种更复杂的方法来计算递归神经网络中的隐藏状态向量。这种方法将允许我们存储信息和捕获远距离依赖。我们想象一下,为什么在循环神经网络的传统框架中,长期依赖是有问题的。在反向传播中,误差将流经递归神经网络,从最近的时间步长到最早的时间步长。如果初始梯度是一个很小的数字,那么在通过第三个或第四个模块时,梯度实际上会消失,因此更早的时间步长的隐藏状态不会被更新。

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

GRU提供了一种不同的方法来计算隐藏状态向量H,它被分成三个部分,一个更新门,一个复位门和一个新的存储器。两个门都是输入字向量和先前时间步长的隐藏状态函数:

关键的区别在于每扇门使用了不同的重量,用不同的上标表示。更新门使用Wz和Uz,而复位门使用Wr和Ur。

现在,新内存的计算公式如下:

现在仔细看公式会发现,如果reset gate的值接近0,整项也会变成0,所以忽略了前一时间步ht-1的信息。在这种情况下,计算单元只是新单词向量xt的函数。

h的最终公式如下:

Ht是一个由三部分组成的函数:复位门、更新门和存储器。理解这一点的最好方法是想象当zt接近1和0时会发生什么。当zt接近1时,新的隐层向量ht几乎依赖于前一个隐层,由于变成了0,我们忽略了当前的内存存储。当zt接近0时,新的隐层向量几乎依赖于当前的内存存储,我们忽略之前的隐层状态。以直观的方式观察这三个组件可以总结如下:

1.更新门:

如果zt趋于1,ht会完全忽略当前的词向量,这只是复制前的隐藏状态。

如果zt趋于0,ht完全忽略前一时间步的隐藏状态,只依赖新的记忆。

门控允许模型控制先前隐藏状态的信息对当前隐藏状态的影响程度。

2.重置门:

如果rt趋于1,内存会保留之前隐藏状态的信息。

如果rt趋于0,内存会忽略之前隐藏状态的信息。

这种门控可以允许模型在将来丢弃一些不相关的信息。

3.记忆记忆:取决于复位门。

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

以及相关问题2个数之和是多少。由于中句对手的问题绝对没有影响,重置刷新门会让网络在某种意义上“忘记”中句,学习到只有某些信息才应该修改隐藏状态。

长期和短期记忆单位

如果你已经很了解GRU,那么理解LSTM就不会太难。LSTM也是由一系列的门组成的。

当然,涉及的知识更多。不过,因为可以把LSTM理解为GRU的衍生品,所以我就不做过多分析了,但是如果你想了解每一扇门和每一次计算的更多内容,可以点击查看克里斯·奥拉赫(Chris Olah)写的一篇优秀博文:http://colah.github.io/posts/2015-08-Understanding-LSTMs/.这篇文章是目前最热门的关于LSTM的教程,对想了解其背后工作原理的你一定会有很大的帮助。

比较LSTM和格鲁

先说相似点。两者的单位成分都有一个特殊的功能,可以长期记录词与句之间的依存关系。这种长期依赖意味着,在某些情况下,两个词或短语可能出现在不同的时间点,但它们之间的关系对于实现最终目标至关重要。LSTM和GRU可以通过一些门忽略或保留语句中的某些信息来捕捉这些依赖性。

这两个基本单元的区别在于它们拥有的门的数量。这将影响输入可以传递的非线性关系的数量,最终影响整体计算。此外,GRU没有与LSTM相同的记忆单元。

在看报纸之前

这部分只是一个快速提醒:还有其他深度模型对NLP有用。循环神经网络和CNN有时会在实践中使用,但它们不像RNN那样受欢迎,后者是大多数深度学习NLP系统的主干。现在,我们对NLP和深度学习之间的关系有了很好的理解。我们来看几篇论文。因为NLP领域存在不同的问题,圈里可以看的论文很多,但我在这篇文章里找到了三篇有见地的论文。2016年,NLP领域有了长足的进步,但还是从2015年的一篇论文说起吧。

存储网络

论文:https://arxiv.org/pdf/1410.3916v11.pdf

介绍

我们要讨论的第一篇论文,在问答系统这个子领域是很有影响力的。这篇由Jason Weston、Sumit Chopra和Antoine Bordes撰写的论文介绍了一种称为内存网络的内存网络模型。

这个想法来源于这样一个事实:当你想准确地回答一个关于课文的问题时,你必须记住课文的大致内容。如果我问你一个问题“RNN代表什么”,你可以告诉我答案。这是因为你通过阅读和存储记忆吸收了这些知识。你只需要几秒钟就可以定位这条信息,然后用流利的语言表达出来。目前不知道大脑是怎么做到的,但是需要一个地方来存储信息的想法肯定是存在的。

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

网络体系结构

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

下一步是提出特征表示I,并允许我们的记忆M被更新以反映我们已经接收到的新输入X。

你可以把内存M想象成一个由单个内存mi组成的序列。这些单独的存储器mi中的每一个都可以是整个存储器m、特征表示I和/或其本身的函数。函数g可以简单到仅将整个表示I存储在单个存储单元mi中。可以根据新的输入修改函数g,更新过去的记忆。第三和第四部分包括根据问题读取记忆,获得特征表征O,然后解码输出最终答案。

函数R可以是RNN,用于将来自记忆的特征表示转换成可读且准确的问题答案。

现在,仔细看看第三步。我们希望O模块可以输出一个特征表示,并最好地匹配给定问题X的可能答案。现在,这个问题将与每个单独的记忆单元进行比较,并根据记忆单元是否能很好地支持该问题进行评分。

让我们找到评分函数的argmax,找到最能支持问题的输出表示。评分函数是计算不同问题的嵌入和选择的记忆单元之间的矩阵乘积。。当你把两个单词向量相乘来计算它们的相似度时,你会想到这一点。然后,这个输出表示O将被输入到RNN或LSTM,或另一个将输出可读结果的评分函数。

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

感兴趣的读者,下面的论文讲一讲构建这种记忆网络的方法:

端到端存储网络

动态覆盖网络

影响力。

网络体系结构

树LSTM和标准LSTM的一个区别在于,后者的隐藏状态是当前输入和前一时间步的隐藏状态的函数。然而,对于这种结构,它的隐藏状态是当前输入及其子单元的隐藏状态的函数。

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

一棵LSTM树,单个单元可以吸收所有子节点的隐藏状态。这很有趣,因为一个单元可以单独评估它的子单元。在训练过程中,网络可以意识到特定单词对句子整体情感分析的极端重要性。给予节点更高估价能力使得网络具有更大的灵活性并提高了网络性能。

神经机器翻译

论文:file/tupian/20220802/Jeff.pdf Dean、Greg Corrado、Orial Vinyals等。本文介绍了一个机器翻译系统,它也是Google翻译服务的主干。与谷歌之前使用的产品系统相比,该系统平均减少了60%的翻译错误。

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

网络体系结构

本文作者介绍了一个深度LSTM网络,它可以用8个解码层和编码层进行端到端的训练。我们可以将系统分为三个部分:编码器RNN、解码器RNN和注意模块。从高层来看,编码器的任务是将输入语句转换成向量表示,然后解码器生成输入表示,再由注意力模块提示解码器在解码过程中应该注意什么。

论文的其他部分主要集中在扩展服务的挑战上。详细介绍了计算资源、时延和大容量部署等主题。

结论

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

 
友情链接
鄂ICP备19019357号-22