zoukankan      html  css  js  c++  java
  • 一文了解自然语言处理神经史(上)

    本文扩展了Herman Kamper和我在2018年深度学习Indaba组织的自然语言处理前沿课程。整个课程的幻灯片都可以在这里找到,这篇文章将主要讨论NLP中基于神经网络方法的近期进展。

    免责声明:本文尝试将大约15年NLP的发展历程浓缩为今天最相关的八个里程碑,因此遗漏了许多相关和重要的发展。特别是,它严重偏向于当前的神经方法,这可能给人留下此期间没有其他有影响力方法的错误影响。

    2001年-神经语言模型

    语言建模是在给定前面的单词的情况下预测文本中的下一个单词的任务。 它可能是最简单的语言处理任务,具有实际应用,如智能键盘和电子邮件响应建议(Kannan et al.,2016)。语言建模有着丰富的历史。基于n-gram的经典方法采用平滑处理看不见的n-gram(Kneser&Ney,1995)。Bengio等人于2001年提出了第一种神经语言模型,一种前馈神经网络,如下图1所示。

    b8961e7df65d3f2b499b6bf4a472887395955de1

    该模型把n个可以在表C中查找的先前单词向量表示作为输入。现在,这种向量被称为词嵌入。这些词嵌入被连接并送入隐藏层,然后将其输出提供给softmax层。想要了解更多该模型的信息,请查看此文章。

    最近,前馈神经网络已被用于语言建模的递归神经网络(RNN; Mikolov等人,2010)和长短期记忆网络(LSTM; Graves,2013)所取代。近年来已经提出了许多经典LSTM的新语言扩展模型(请参阅此页面以获得概述)。尽管有这些发展,但经典的LSTM仍然是一个强大的基线(Melis等,2018)。即使Bengio等人的经典前馈神经网络在某些环境中也与更复杂的模型竞争,但这些通常只学会考虑最近的词(Daniluk等,2017)。如何理解这些语言模型捕获的信息是一个活跃的研究领域(Kuncoro等,2018; Blevins等,2018)。

    语言建模通常是应用RNN时的首选训练场,并成功捕捉到了想象力,许多人通过Andrej的博客文章开始了解。语言建模是无监督学习的一种形式,Yann LeCun也将预测性学习作为获取常识的先决条件(参见NIPS 2016的Cake幻灯片)。 关于语言建模最显著的方面可能是,尽管它很简单,但它是本文讨论的许多后期进展的核心:

    词嵌入:word2vec的目标是简化语言建模;

    序列到序列模型:这种模型通过一次预测一个词来生成输出序列;

    预训练语言模型:这些方法使用语言模型中的表示来进行迁移学习;

    这反过来意味着NLP中许多最重要的最新进展减少为一种语言建模形式。 为了做“真正的”自然语言理解,仅仅从原始形式的文本中学习可能是不够的,我们将需要新的方法和模型。

    2008-多任务学习

    多任务学习是在多个任务上训练的模型之间共享参数的一般方法。在神经网络中,这可以通过绑定不同层的权重来轻松实现。多任务学习的想法在1993年由Rich Caruana首次提出,并应用于道路跟踪和肺炎预测(Caruana,1998)。直观地说,多任务学习鼓励模型学习对许多任务有用的表示。特别对于学习一般的低级表示,集中模型的注意力或在有限量的训练数据的设置中特别有用。有关多任务学习的更全面概述,请查看此文章。

    Collobert和Weston于2008年首次将多任务学习应用于NLP的神经网络。 在他们的模型中,查找表(或词嵌入矩阵)在两个在不同任务上训练的模型之间共享,如下面的图2所示。

    2c4ca19207c222b8ccc5f0cd527e29a7112b752e

    共享词嵌入使模型能够在词嵌入矩阵中协作和共享一般的低级信息,这通常构成模型中最大数量的参数。Collobert和Weston在2008年的论文中证明了它在多任务学习中的应用,它引领了诸如预训练词嵌入和使用卷积神经网络(CNN)之类的思想,这些思想仅在过去几年中被广泛采用。它赢得了ICML 2018的时间考验奖(参见此时的时间考验奖论文)。

    多任务学习现在用于各种NLP任务,并且利用现有或“人工”任务已成为NLP指令集中的有用工具。有关不同附加任务的概述,请查看此文章。虽然通常预先定义参数的共享,但是在优化过程期间也可以学习不同的共享模式(Ruder等,2017)。随着模型越来越多地在多项任务中被评估来评估其泛化能力,多任务学习越来越重要,最近提出了多任务学习的专用基准(Wang et al,2018; McCann et al,2018)。

    2013-词嵌入

    文本的稀疏向量表示,即所谓的词袋模型,在NLP中具有悠久的历史。正如我们在上面所看到的,早在2001年就已经使用了词或词嵌入的密集向量表示。 Mikolov等人在2013年提出的主要创新,是通过移动隐藏层和近似目标来使这些词嵌入的训练更有效率。虽然这些变化本质上很简单,但它们与高效的word2vec一起实现了大规模的词嵌入训练。

    Word2vec有两种模式,可以在下面的图3中看到:连续的词袋(CBOW)和skip-gram。它们的目标不同:一个基于周围的词预测中心词,而另一个则相反。

    449201cebea0af8d9085662282f93a6c1822db8c

    虽然这些嵌入在概念上与使用前馈神经网络学习的嵌入技术没有什么不同,但是对非常大的语料库的训练使它们能够捕获诸如性别,动词时态和国家–首都关系之类的词之间的某些关系,由图4可知:

    4549129a5cd58bad25a79f88701983631982b181

    这些关系及其背后的意义引发了对嵌入词的初步兴趣,许多研究调查了这些线性关系的起源(Arora等,2016; Mimno&Thompson,2017; Antoniak&Mimno,2018; Wendlandt等,2018))。然而,使用预训练嵌入作为初始化的固定词嵌入,把它作为当前NLP的主要内容被证明可以提高各种下游任务的性能。

    虽然捕获的关系word2vec具有直观且几乎神奇的性能,但后来的研究表明word2vec没有任何固有的特殊性:通过矩阵分解也可以学习词嵌入(Pennington等,2014; Levy&Goldberg,2014)和通过适当的调整,经典的矩阵分解方法(如SVD和LSA)可以获得类似的结果(Levy等,2015)。

    从那时起,许多工作已经开始探索词嵌入的不同方面,可以通过这篇文章了解一些趋势和未来方向。尽管有许多发展,但word2ve仍然是如今被广泛使用的一种流行的选择。Word2vec的范围甚至超出了词级别:带有负抽样的skip-gram,一个基于本地环境学习嵌入的方便目标,已被应用于学习句子的表示(Mikolov&Le,2014; Kiros et al.,2015)-甚至超越NLP,应用到网络(Grover&Leskovec,2016)和生物序列(Asgari&Mofrad,2015)等。

    一个特别令人兴奋的方向是将不同语言的词嵌入投影到同一空间中以实现(零射击)跨语言转移。越来越有可能以完全无监督的方式(至少对于类似语言)学习良好的投影,这开启了低资源语言和无监督机器翻译的应用(Lample等,2018; Artetxe等,2018)。请查看(Ruder等,2018)的概述。

    2013年-NLP的神经网络

    2013年和2014年是神经网络模型开始应用于NLP的标志年份。三种主要类型的神经网络被广泛使用:递归神经网络、卷积神经网络、循环神经网络。

    递归神经网络(RNN)是处理NLP中普遍存在的动态输入序列问题的明显选择。 Vanilla RNNs(Elman,1990)很快被经典的长短期记忆网络(Hochreiter&Schmidhuber,1997)所取代,后者证明其对消失和爆炸梯度问题更具弹性。在2013年之前,RNN仍然被认为很难训练,Ilya Sutskever的博士论文是改变这种现状的一个关键例子。LSTM细胞可视化可以在下面的图5中看到。双向LSTM(Graves等,2013)通常用于处理左右上下文。

    050d44de778cfa3e5edac46e50aa072e64b698fb

    随着卷积神经网络(CNN)被广泛用于计算机视觉,它们也开始应用于文本(Kalchbrenner等,2014; Kim等,2014)。用于文本的卷积神经网络仅在两个维度上操作,其中滤波器仅需要沿时间维度移动。下面的图6显示了NLP中使用的典型CNN。

    ca8453709814750bb36dbd42507217cfd1793247

    卷积神经网络的一个优点是它们比RNN更可并行化,因为每个时间步的状态仅取决于本地环境(通过卷积运算)而不是像RNN取决过去所有状态。CNN可以使用扩张卷积扩展到更宽的感受野,以捕捉更广泛的背景(Kalchbrenner等2016)。 CNN和LSTM也可以组合和堆叠,并且可以使用卷积来加速LSTM。

    RNN和CNN都将语言视为一个序列。然而,从语言学的角度来看,语言本质上是等级的:单词被组成高阶短语和子句它们本身可以根据一组生产规则递归地组合。将句子视为树而不是序列的语言启发思想产生了递归神经网络,这可以在下面的图7中看到:

    e18cd0bec6f2f4a5401e24060bc86e865a3cdb03

    与从左到右或从右到左处理句子的RNN相比,递归神经网络从下到上构建序列的表示。在树的每个节点处,通过组合子节点的表示来计算新表示。由于树也可以被视为在RNN上施加不同的处理顺序,因此LSTM自然地扩展到树。

    RNN和LSTM不仅仅可以被扩展来使用分层结构,而且不仅可以根据本地语言学习词嵌入,而且可以基于语法背景来学习词嵌入(Levy&Goldberg,2014);语言模型可以基于句法堆栈生成单词(Dyer et al。,2016); 图形卷积神经网络可以在树上运行(Bastings等,2017)。

    原文链接
    本文为云栖社区原创内容,未经允许不得转载。

  • 相关阅读:
    013.ES6 -对象字面量增强型写法
    012. ES6
    011. ES6 语法
    10. 9. Vue 计算属性的setter和getter 以及 计算属性的缓存讲解
    4. Spring MVC 数据响应方式
    3. SpringMVC 组件解析
    9. Vue 计算属性
    【洛谷 2984】给巧克力
    【洛谷 1821】捉迷藏 Hide and Seek
    【洛谷 1821】银牛派对Silver Cow Party
  • 原文地址:https://www.cnblogs.com/yunqishequ/p/10036821.html
Copyright © 2011-2022 走看看