当前位置: 首页 > 科技观察

深度-自然语言处理领域深度学习研究综述:从基本概念到前沿成果_0

时间:2023-03-18 15:45:39 科技观察

一、自然语言处理简介自然语言处理(NLP)是创造一个可以处理或“理解”语言的系统来完成特定的任务。这些任务可能包括:问答系统(Siri、Alexa和Cortana所做的)情感分析(判断句子隐含的正面或负面含义)图像字幕(为输入图像生成字幕)机器翻译(翻译一段文本转换成另一种语言)语音识别词性标注命名实体识别传统的自然语言处理方法涉及到大量语言学本身的知识。必须理解音素和语素等术语,并且需要完整的语言学课程才能学习这些专业。接下来让我们看看一些传统的自然语言处理是如何理解下面这个词的。假设我们的目标是收集关于这个词的一些信息(描述它的情感、找到它的定义等)。利用我们在语言方面的专业知识,我们将这个词分为三个部分。我们知道这个词的前缀“un”表示一个相对或相反的概念,“ed”可以定义这个词的时态(过去时)。通过理解“兴趣”这个词的主要部分,我们可以很容易地推断出整个词的意思和情感。看起来很简单?但是当你考虑到英语中所有不同的前缀和后缀时,可能需要非常熟练的语言学家才能理解所有可能的组合和含义。1.如何将深度学习应用到其中深度学习,在最基本的层面上,是一种表示学习的方法。使用卷积神经网络,我们可以看到用于对事物进行分类的不同过滤器的组成。在这里,我们将采用类似的方法,使用大型数据集来创建单词表示。2.本文概述在本文中,我们将首先了解构建自然语言处理深度网络的基本构建块,然后讨论近期研究论文中的一些应用。大多数人不清楚为什么我们使用递归神经网络(RNN)或为什么长短期记忆(LSTM)有用,但我希望在我们讨论研究论文后,您可以理解为什么深度学习会对自然语言有用。处理提供了如此大的帮助,可以更好地理解。2.词向量因为深度学习和数学密不可分,所以我们将每个词表示为一个d维向量。我们将d设置为6。现在让我们考虑一下如何填充这些值。我们希望以这样的方式填充值,即向量代表单词,以及单词的上下文、含义或语义。一种方法是构建共现矩阵。以下面的句子为例。在这句话中,我们要为每个词创建一个词向量。共现矩阵包含每个词在语料库(或训练集中)中与其他词相邻出现的次数。让我们看看下面的矩阵。提取该矩阵的行允许我们对词向量进行简单的初始化。请注意,使用这个简单的矩阵,我们将能够获得非常有用的见解。例如,请注意“love”和“like”,它们都与名词(NLP和狗)相关联1次。连“我”的次数也是1次,说明这两个词一定是动词。如果我们有比简单句子更大的数据集,你可以想象这种相似性会越来越明显,就像“love”和“like”一样,其他的同义词也会开始有相似的词向量,因为它们是通常用于类似的上下文。现在,虽然我们的起点很好,但我们也注意到每个词的维数随着语料库的扩展而线性增加。如果我们有100万个单词(按照NLP标准来说不算多),我们将有一个100万乘100万的矩阵,这个矩阵将非常稀疏(很多零)。从存储效率的角度来看,这绝对不是最好的。还有许多高级技术可以找到表示这些词向量的最佳方式。其中最著名的是Word2Vec。3.Word2Vec词向量初始化技术的基本思想是在词向量中存储尽可能多的信息,同时将维度控制在一个可管理的范围内(25-1000维度比较理想)。Word2Vec允许我们为每个单词预测周围的单词。还是拿一句“IloveNLPandIlikedogs”来说吧。我们之前提到过一个例子。我们先来看看这句话的前三个词,所以我们将我们的窗口大小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相结合):http://nlp.stanford.edu/pubs/glove.pdf4.循环神经网络(RNN)现在我们有了词向量,然后看看它们如何拟合循环神经网络。循环神经网络现在是大多数自然语言处理(NLP)所必需的。RNN的最大优点是它们可以有效地使用来自先前时间步长的数据。这就是循环神经网络的一小部分可能看起来的样子。在底部,我们有单词向量(xt,xt-1,xt+1)。每个向量在同一时间步(ht,ht-1,ht+1)都有一个隐藏状态向量。我们称这些为模块。循环神经网络每个模块中的隐藏状态是隐藏状态向量和上一个时间步的词向量的函数:如果你仔细看上标,你会发现有一个权重矩阵Whx,我们将Whx矩阵与输入相乘,就会有一个循环权重矩阵Whh与上一个时间步的隐藏状态向量相乘。请记住,这些循环权重矩阵在所有时间步都是相同的,这是循环神经网络的关键点。仔细想想,这与传统的两层神经网络有很大不同。传统上,我们通常对每一层(W1和W2)都有一个不同的权重矩阵W,而这里的循环权重矩阵在整个网络中都是相同的。要获得特定模块的输出(Yhat),需要将h乘以WS,这是另一个权重矩阵。现在让我们退后一步,了解循环神经网络的优势是什么。与传统神经网络的最大区别在于循环神经网络可以接收输入序列(在我们的例子中是单词)。您可以将其与典型的卷积神经网络进行比较,后者只能将单个图像作为输入。然而,对于循环神经网络,输入可以小到一个短句,也可以大到一篇5段文章。此外,此输入的顺序会极大地影响权重矩阵和隐藏向量在训练期间的变化方式。隐藏状态被训练为期望来自过去的信息(之前的时间步长)。V.门控循环单元(GRU)现在让我们看一下门控循环单元(GRU)。本单元的目标是提供一种更复杂的方法来计算循环神经网络中的隐藏状态向量。这种方法将使我们能够存储信息并捕获长距离依赖关系。让我们想象一下为什么长期依赖在传统的RNN架构中是有问题的。在反向传播中,错误将流经递归神经网络,从最近的时间步到最早的时间步。如果初始梯度是一个小数(比如小于0.25),那么当经过第三或第四块时,梯度实际上会消失(链式法则乘以梯度),所以较早时间步的隐藏状态不会会更新。在传统的循环神经网络中,隐藏状态向量是通过这个公式计算的:GRU提供了一种不同的方式来计算隐藏状态向量h(t),计算分为三个部分,一个更新门(updategate),一个重置门和一个新的内存容器。两个门都是来自先前时间步的输入词向量和隐藏状态函数:关键区别在于每个门使用不同的权重,用不同的上标表示。更新门使用Wz和Uz,重置门使用Wr和Ur。现在,新的内存容器(memorycontainer)的计算方式如下:(空心点指的是Hadamard乘积)现在,如果你仔细看这个公式,你会发现如果resetgate的值很接近为0,则整个项也变为0,从而忽略了前一个时间步ht-1的信息。在这种情况下,计算单元只是新词向量xt的函数。h(t)的最终公式如下:ht是一个包含三个部分的函数:重置门、更新门和内存存储。理解这一点的最好方法是想象当zt接近1和0时会发生什么。当zt接近1时,新的隐藏层向量ht几乎取决于之前的隐藏层,并且由于(1-zt)变为0,我们忽略当前内存存储。当zt接近于0时,新的隐层向量几乎依赖于当前的内存存储,我们忽略之前的隐层状态。直观地观察这三个分量可以总结如下:1.UpdateGate:如果zt趋于1,ht完全忽略当前词向量,只是复制之前的hiddenstate(如果不太理解,看ht方程并注意1-zt如何随着zt趋于1)而变化。如果zt趋于0,则ht完全忽略前一时间步的隐藏状态,仅依赖于新记忆。此门控允许模型控制来自先前隐藏状态的信息有多少影响当前隐藏状态。2.ResetGate:如果rt趋于1,memorystore会保留之前hiddenstate的信息。如果rt趋于0,则内存存储忽略来自先前隐藏状态的信息。这种门控允许模型丢弃与未来无关的信息。3.MemoryContainer:依靠复位门。下面是一个通常用来说明GRU有效性的例子:假设你遇到以下段落和相关的问题Whatisthesumof2numbers。由于中间句子对手头的问题完全没有影响,但是重置和刷新门会使网络在某种意义上“忘记”中间句子,并了解到只有特定信息(本例中的数字)应该修改隐藏状态。6.长短期记忆单元(LSTM)如果你已经非常了解GRU,那么理解LSTM对你来说并不会太难。LSTM也由一系列门组成。当然,这里涉及到更多的知识。不过,因为LSTM可以理解为GRU的衍生,我就不过多分析了,但是如果你想更深入的了解每一个门,每一个计算,可以点击查看ChrisOlah写的一篇很棒的博文:http://colah.github.io/posts/2015-08-Understanding-LSTMs/。这篇文章是迄今为止最受欢迎的LSTM教程,对于那些想了解它在幕后如何工作的人来说肯定会有很大帮助。7.比较和对比LSTM和GRU让我们从相似之处开始。两者的单位成分都具有特殊的功能,可以记录词句之间的长期依存关系。这种长期依赖意味着在某些情况下,两个单词或短语可能出现在不同的时间点,但两者之间的关系对于实现最终目标至关重要。LSTM和GRU可以通过一些门忽略或保留句子中的某些信息来捕获这些依赖关系。两个基本单元的区别在于它们拥有的门数(GRU有两个,LSTM有三个)。这会影响输入可以通过的非线性关系的数量,最终影响整体的计算。另外,GRU没有和LSTM的记忆单元(C_t)一样的记忆单元。8.这部分只是阅读论文前的一个快速提醒:还有其他对NLP有用的深度模型。循环神经网络和CNN有时会在实践中使用,但不如RNN流行,后者是大多数深度学习NLP系统的支柱。既然我们对NLP和深度学习的关系有了足够的了解,我们再来看几篇论文。由于NLP领域(从机器翻译到问答系统)存在不同的问题,所以圈子里有很多论文可以阅读,但我在这篇文章中找到了3篇非常有见地的论文。2016年,NLP领域有了很大的发展,但还是先从2015年的一篇论文说起吧。1.MemoryNetworks(记忆网络)论文:https://arxiv.org/pdf/1410.3916v11.pdf介绍了我们将要进行的第一篇论文首先讨论,这在问答系统的子领域非常有影响力。这篇由JasonWeston、SumitChopra和AntoineBordes撰写的论文介绍了一类称为记忆网络的模型。这个想法来自这样一个事实,即当你想准确地回答关于文本的问题时,你必须记住文本是关于什么的。如果我问你一个问题“RNN是什么意思”(假设你已经完全阅读了这篇博文),你将能够告诉我答案。这是因为你通过阅读吸收了这些知识,储存了记忆。你只需要简单地花几秒钟的时间定位到这些信息,然后用流利的语言表达出来。现在,我不知道大脑是如何做到的,但它需要一个地方来存储信息的想法肯定存在。本文描述的记忆网络有些特殊,因为它包含一个联想记忆。该关联存储器可以读取和写入。值得注意的是,我们没有在CNN或Q-network(用于强化学习)或其他传统网络中找到这种类型的网络。这在一定程度上是因为问答任务在很大程度上依赖于系统能够建模或跟踪长期依赖关系,例如记录角色在完整故事中的进展,或在时间轴上记录重要事件。在CNN或Q网络中,记忆模块嵌入在网络的权重系统中,因为网络需要能够学习不同的过滤器或将状态映射到动作。乍一看,RNN和LSTM可能能够实现这种记忆功能,但它们通常无法记住过去的输入,这对问答系统至关重要。网络架构很好,让我们看看这个网络如何处理给定的初始文本。与几乎所有机器学习算法一样,输入首先被转换为特征表示。这需要使用词向量、词性标注、解析等,由程序员决定。下一步是提出一个特征表示I(x)并让我们的记忆m更新以反映我们收到的新输入x。您可以将记忆m视为一系列单独的记忆mi。这些单独的记忆mi中的每一个都可以是整个记忆m、特征表示I(x)和\or本身的函数。函数G可以像将整个表示I(x)存储在单个存储单元mi中一样简单。您可以根据新输入修改函数G,更新过去的记忆。第三步和第四步是根据问题读取内存,得到特征表示o,然后解码输出最终答案。函数R(可以是RNN)用于将记忆中的特征表示转换为可读的、准确的问题答案。现在,仔细看看第三步。我们希望O模块输出与给定问题x的可能答案最匹配的特征表示。现在,将问题与每个单独的记忆单元进行比较,并根据记忆单元对问题的支持程度进行评分。我们找到打分函数的argmax来找到最支持问题的输出表示(你也可以取多个最高分单元,不一定限于1个)。评分函数是计算不同问题嵌入和选定记忆单元之间的矩阵乘积。(详情请阅读论文)。当您将两个词向量相乘以获得它们的相似性时,您会想到这一点。这个输出表示o然后被送入RNN或LSTM,或输出可读结果的另一个评分函数。训练方式为有监督训练,训练数据包括原文、问题、支持句和基本真实答案。这是目标函数。有兴趣的读者,下面的论文讲的是构建这类记忆网络的方法:EndtoEndMemoryNetworks(https://arxiv.org/pdf/1503.08895v5.pdf)(仅监督输出,不支持句子)DynamicMemoryNetworks(https://arxiv.org/pdf/1506.07285v5.pdf)DynamicCoattentionNetworks(https://arxiv.org/pdf/1611.01604v2.pdf)(2个月前才发布,斯坦福问答数据组获取最高分2.TreeLSTMspaperforsentimentanalysis:https://arxiv.org/pdf/1503.00075v3.pdfIntroduction下一篇论文分析了情感分析领域取得的进展。phrase/意思是积极的还是消极的。更正式地说,情感可以定义为对某种情况或时间的一种看法或态度。此时,LSTMs是情感分析网络中最常用的组件。这篇文章来自KaiShengTai、RichardSocher和ChristopherManning的一篇论文预发送了一种将LSTM链接成非线性结构的有趣方法。这种非线性排列背后的思想是,自然语言有一个属性,单词按照一定的顺序排列后,就变成了一个短语。这些短语根据单词的顺序表达的意思与单词的意思是不同的为了表征这个特征,必须将一个LSTM网络单元排列成树状结构,其中不同的单元受其子节点的影响。网络架构TreeLSTM与标准LSTM的一个区别在于,后者的隐藏状态是关于当前输入和前一个时间步函数的隐藏状态。但是,对于这种结构,其隐藏状态是当前输入及其子单元隐藏状态的函数。新的树结构引入了一些数学变化,包括忽略门的子单元。那些对细节有兴趣的读者可以研究一下这篇论文。但我的重点是了解为什么这些模型比线性LSTM表现更好。在Tree-LSTM中,单个单元可以吸收所有子节点的隐藏状态。这很有趣,因为单元格可以单独评估其子节点。在训练期间,网络意识到特定词(在情感分析中可能是“不”或“非常”)对句子的整体情感分析的极端重要性。赋予该节点更高估值的能力为网络提供了极大的灵活性并提高了网络性能。3.神经机器翻译论文:https://arxiv.org/pdf/1609.08144v2.pdfIntroduction最后一篇论文描述了解决机器翻译任务的方法。作者来自谷歌机器学习的有远见的学者:JeffDean、GregCorrado、OrialVinyals等。这篇文章介绍了一个机器翻译系统,它是谷歌翻译服务背后的支柱。与谷歌之前使用的生产系统相比,该系统平均减少了60%的翻译错误。传统的自动翻译解决方案包括基于短语的变量匹配。这种方法需要大量语言领域的知识,设计最终被证明过于脆弱,缺乏泛化能力。传统解决方案的一个问题是逐位翻译输入的句子。因此,更有效的解决方案是一次翻译整个句子,这样可以提供更广泛的上下文和更自然的单词重新排列。网络架构论文的作者介绍了一个深度LSTM网络,它具有8个解码器和编码器层,能够进行端到端训练。我们可以将系统分解为3个组件:EncoderRNN、DecoderRNN、AttentionModule。从高层的角度来看,编码器的任务是将输入的句子转换成向量表示,然后解码器生成输入表示,然后注意模块提示解码器在解码过程中要注意什么过程(这是使用整个语言输入句子的思维环境)。本文的其余部分重点关注扩展此服务的挑战。详细介绍了计算资源量、延迟和大容量部署等主题。9.结论在这篇博客中,我们总结了深度学习如何帮助自然语言处理任务。在我看来,该领域的一些未来目标包括:改进的客户服务聊天机器人、完善的机器翻译,以及希望对非结构化或长文本(例如维基百科文本页面)有更深入理解的问答系统。原文:https://adeshpande3.github.io/adeshpande3.github.io/Deep-Learning-Research-Review-Week-3-Natural-Language-Processing【本文为专栏机器心、微信原创翻译公众号《机器之心(id:almosthuman2014)》】点此阅读作者更多好文