NLP的这一年2017:深度学习或成主角

在过去几年,深度学习(DL)的架构和算法在很多领域都取得了里程碑似的进展,例如图像识别和语言处理。

起初,深度学习在自然语言处理(NLP)中的应用并不起眼,但后来却出现了许多重量级的成果,例如命名实体识别(NER)、词性标注(POS tagging)或文本情感分析(sentiment analysis)等都是神经网络模型超越传统模型的方法。然而,机器翻译领域所取得的进步才是最显著的。

本文作者Javier Couto是tryo labs公司的一名研发科学家,专注于NLP技术。这篇文章是他对2017年NLP领域中深度学习技术应用的总结,也许并不全面,但都是他认为有价值、有意义的成果。Couto表示,2017年是对NLP领域非常有意义的一年,随着深度学习的应用,NLP技术也将继续发展下去。以下是论智对原文的编译。

从训练word2vec到使用预先训练的模型

通常来说,词嵌入(word embeddings)是与NLP相关的最有名的深度学习技术了,它遵循了Harris提出的分布假想(distributional hypothesis),分布假想源自于语言学中的语义学原理,即认为出现在相似的上下文环境中的词汇可能是用于表达相似的意思。

词的分布式向量

虽然著名的word2vec和GloVe等算法不能算作是深度学习框架(word2vec中只涉及浅显的神经网络,而GloVe是基于矩阵的方法),但用它们训练的许多模型都被输入到用于NLP的深度学习工具中。所以在这一领域使用词嵌入通常是非常好的做法。

开始时,对于一个需要词嵌入的问题,我们倾向于从与该领域相关的语料库中训练自己的模型。不过,这种方法并不适用于所有情况,所以出现了预训练模型。通过在维基百科、Twitter、谷歌新闻以及其他网页上训练,这些模型可以让你轻松地将词嵌入整合到深度学习算法中。

今年,许多人认为预训练的词嵌入模型仍然是NLP中的一个关键问题。例如,Facebook人工智能实验室(FAIR)发布的fastText是一款能够支持294种语言的预训练词嵌入模型,为NLP领域做出了巨大的贡献。除了支持多种语言,fastText还能够将字分解成字符n-gram,即使遇到词典中不存在的字(OOV problem),也能给出向量表示。因为一些特定领域的罕见词仍然可以被分解成字符n-gram,所以它们可以与通用字共享这些n-gram。而word2vec和GloVe都不能为词典中不存在的词提供向量表示。所以从这方面来说,fastText比上述两种方法表现得更好,在小数据集上更是如此。

不过,虽然取得了一些进展,NLP方面还有很多工作要做。例如,强大的NLP框架spaCy能够以本地方式将词嵌入整合到深度学习模型中,完成例如NER或依存句法分析(Dependency Parsing)等任务,允许用户更新或使用自己的模型。

我认为,在将来,对于易于在NLP框架中使用的特定领域(例如生物学、文学、经济等),使用预训练的模型是很合适的。对我们来说,如果能用最简单的方式对它们进行调校,那就更是锦上添花的进步了。与此同时,能够适应词嵌入的方法开始出现。

将通用型嵌入应用到具体应用案例

使用预训练的词嵌入的主要缺点就是,训练数据与实际问题中的数据存在着词语分布的差距(word distributional gap)。假如你有一份生物学论文、或一份食谱、或经济学研究论文的语料,但是没有足够大的语料库来训练良好的嵌入,所以最终会选择通用词嵌入来帮助你提高结果。但是如果能将通用的嵌入调整为适合你个人案例的情况呢?

这种适应通常被称为NLP中的跨领域或域自适应技术,与迁移学习非常接近。Yang等人今年提出了一个正则化的skip-gram模型,给定始源域(source domain)的嵌入,可以学习目标域(target domain)的嵌入,是一项非常有趣的研究。

重要思想简洁且高效。假设我们知道始源域中单词w的词嵌入为ws。为了计算目标域中wt的嵌入,就要在两个域之间加入一个特定量的迁移ws。一般来说,如果这个单词在两个域中都经常出现,那么它的语义就是独立的。在这种情况下,迁移的值越大,嵌入的结果可能在两个域中就越相似。反之,如果一个单词在一个域中的出现频率高于另一个域,那么迁移的值就小。

关于这一话题的研究并未深入展开,但我相信在不远的未来会有更多人关注它。

情感文本分析不可思议的副作用

伟大的发明往往是意外之喜,下面要说的这个成就也不例外。今年,Radford等人在研究字节级循环语言模型的特性,目的是要预测亚马逊评论文本中的下一个字符。然而在这一过程中,他们发现训练模型中的一个单一神经元能够高度预测出文章的情感价值(sentiment value)。这个单一的“情感神经元”(sentiment neuron)能够以相当准确的方式将评论分为积极或消极的两类。

评论极性vs神经元值

在发现了这一特性后,作者决定将模型应用于Stanford Sentiment Treebank数据集上,结果得到的精确度高达91.8%,比之前最佳的90.2%的结果还要高。这意味着,他们的模型经过无监督的方式训练后,用更少的训练数据达到了最先进的情感文本分析结果。

情感神经元的工作过程

由于模型是在字符层面工作,可以看到,神经元在文本中进行判断时,能够改变特殊的字符颜色。如下图所示:

在单词“best”之后,神经元使文本变成了深绿色(代表积极),而在单词“horrendous”之后,绿色消失,表示情感由积极开始转向消极。

生成极性偏向文本

当然,训练过的模型是一个有效地生成模型,所以你也可以拿他来生成类似亚马逊的评论那样的文本。但是,我觉得很棒的一点是,你可以简单地改写情感神经元的值来决定生成文本的极性(polarity)。

积极情绪 消极情绪
这是我买过的最好的吊床!完全不会变形,而且超级舒服。我喜欢上面的印花,看起来好可爱! 根本不能用,吃一堑长一智吧。
这就是我想要的。这条裤子完全合身,走线也很精密,强烈推荐! 包裹竟然是空的,没有二维码。浪费时间金钱。

作者选用的神经网络模型是Krause等人在2016年提出的multiplicative LSTM,主要原因是他们观察到该模型的超参数设置比正常的LSTM收敛地更快。它有4096个单位,训练的语料库中含有8200万条亚马逊的评论。

同时,你还可以试着训练自己的模型并进行试验。当然这需要你有足够的时间和强大的GPU:论文的作者在NVIDIA Pascal GPU上花了一个月的时间训练了该模型。

Twitter上的情感文本分析

要想知道人们对某个品牌的评价,或是分析某一营销活动的影响,甚至是衡量人们对总统大选的感受,Twitter中的情感分析是一个非常强大的工具。

推特对有关川普和希拉里的推文的情感分析

SemEval 2017

Twitter中的情感文本分析已经引起了NLP研究人员的关注,而且也引起了政界和社会科学界的关注。所以自从2013年以来,国际语义测评SemEval提出了一项具体的任务。

2017年共有48支队伍参加了评选,以下五个子任务可以让你了解SemEval在Twitter上都分析了什么。

  • A:给定一条推文,判断它是积极的或是消极的或是中立的情绪。

  • B:给定一条推文和话题,将话题中所传达出的情绪进行分类:正面或负面。

  • C:给定一条推文和话题,将推文中所传达出的情绪分为五类:非常积极、一般积极、中立、一般消极、非常消极。

  • D:给定关于某一话题的一组推文,估计这些推文在积极和消极中的分布。

  • E:给定关于某一话题的一组推文,将推文的情绪分为五类:非常积极、一般积极、中立、一般消极、非常消极。

可以看到,A任务是最常见的任务,共有38支队伍参加了这个任务,其他的几项更难一些。主办方指出,今年使用深度学习方法的队伍比较显眼,并且在不断增加,有20个团队使用了CNN和LSTM等模型。另外,尽管SVM模型仍然非常流行,但已经有几个队伍将它们与神经网络或词嵌入等方法结合起来了。

BB_twtr系统

我认为今年最值得关注的是一个纯粹的深度学习系统——BB_twtr,该系统在英语的5个子任务中排名第一。作者将10个CNN和10个biLSTM的集合结合起来,用不同的超参数和不同的预训练策略进行训练。可以在论文中看到神经网络架构的细节。

为了训练这些模型,作者使用了带有话题标签的推文(A任务中共有49693条推文),然后建立了一个含有1亿条没有标签的推文数据集,将其中带有类似微笑表情的推文归为积极一类,反之归为消极一类,再次建立派生的数据集。在这里,推文都被变成了小写、标上了记号;URL和表情符号被替换成了特殊的符号;重复的字母都被合并,例如“niiice”和“niiiiiiiice”变成了“niice”。

为了对用作CNN和biLSTM的输入词嵌入进行预训练,作者使用带有默认设置的word2vec、GloVe和fastText在未标记的数据集上进行训练。然后他使用派生数据集改进嵌入,并加入极性信息,然后再使用带有标签的数据集再次改进。

使用从前的SemEval数据集的实验表明,使用GloVe会降低性能,并且对所有金标准数据集没有一个最佳模型。然后作者将所有模型与软投票策略结合起来,由此产生的模型比2014和2016年的最佳成绩都好,接近2015年的最佳成绩。它最终在2017SemEval的5个子任务中排名第一。

即使这种组合并不是以一种有机的方式进行的,而是加入了简单的软投票策略,也表明了将深度学习模型应用其中的潜力非常大,同样也证明了几乎所有端到端的方法在Twitter中的情感分析可以超越监督的方法(输入必须进行预处理)。

令人激动的抽象总结系统

自动总结(automatic summarization)是NLP最早的任务之一。方式主要有两种:抽取式(extraction-based)和生成式(abstraction-based)。抽取式自动文摘方法是通过提取文档中已存在的关键词、句子形成摘要;生成式自动文摘方法是通过建立抽象的语义表示,使用自然语言生成技术形成摘要。在过去,抽取式是最常用的方法,因为他们比另一种方法简单。

在过去几年,基于RNN的模型在文本生成方面取得了惊人的成果。对于简短的文本输入和输出,它们表现得很好。但是遇到长文本,往往输出的是不连贯的、重复的结果。在他们的工作中,Paulus等人提出了一种新型的神经网络模型来克服这一局限性,并取得了令人兴奋的结果,如下所示:

自动摘要生成模型

作者使用biLSTM编码器读取输入,并使用LSTM解码器生成输出。他们的主要贡献是创建了一种新的内部注意策略,能够分别关注输入和连续的输出,并且还有一种新的训练方法,将监督词语预测的标准和强化学习结合起来。

内部注意策略

新型的内部注意策略的目的是避免在输出中出现重复。为了达到这个目的,他们在解码时用缓存的注意查看输入文本的前一段内容,然后再决定下一个将要产生的字。这就使得模型在生成过程中使用输入的不同部分。他们还允许模型从解码器访问之前的隐藏状态,两个函数结合后,就会选择出最适合输出摘要的下个词。

强化学习

写摘要时,两个不同的人会使用不同的词语和句子,但写出的摘要都是正确的。因此,判断一个摘要是好的标准不一定是使其完全与数据集中的单词序列相匹配。了解这一点后,作者就避免了标准的强制教导(teacher forcing)算法,该算法会在每个解码步骤将损失最小化,而是依赖更可靠的强化学习策略。

近似端到端模型的好结果

该模型在CNN和《每日邮报》的数据集上进行了测试,并取得了前所未有的好结果。在人类评估下,一项具体的实验结果表明,可读性和质量都有了增长。由于在预处理时,输入文本都被打上了标记、改为小写,同时数字被替换成0,以及数据集的一些特殊对象被移除,还能得到这样的结果,实在令人印象深刻。

迈向完全无监督机器翻译的第一步

双语词典构建是NLP领域一个老生常谈的问题了,它使用两种语言的源语言和目标语言的单语料库生成词语互译。自动生成的双语词典能够帮助其他NLP任务,例如信息检索和机器翻译统计。然而,这些方法大多都需要一个初始的双语词典,但通常很难建立。

随着词嵌入的出现,跨语言词嵌入(cross-lingual word embeddings)也随之产生,其目的是调整嵌入空间而不是生成字典。但不幸的是,跨语言嵌入也需要有双语词典或平行语料库。接着,Conneau等人提出了一个可行的方法,可以不依赖任何特定的资源,在词语翻译、句子翻译检索以及跨语言词语相似性等任务上由于现有的监督式方法。

作者提出的方法是将两组在单语语料库上训练的词嵌入作为输入,然后学习二者之间的映射,使得公共空间上的翻译相近。他们利用fastText对维基百科上的文本进行无监督训练,如下图所示。

构建两个词嵌入空间之间的映射

红色的X表示英语单词的嵌入,紫色的Y表示意大利语的词嵌入。

刚开始,他们使用对抗学习来学习旋转矩阵W,W将执行第一次原始对齐。接着,在Ian Goodfellow等人提出生成对抗网络之后,他们也训练了一个GAN。

为了用生成学习对该问题建模,他们将判别器看作能够做决定的角色。他们从Wx和Y中随机采样(上图第二栏),两种语言分别属于Wx和Y。然后,他们训练W,防止判别器做出好的预测。我认为这种方式非常聪明优雅,直接结果也非常不错。

之后,他们增加了两步来完善映射。一是消除罕见字在映射计算中产生的噪声,另一个是利用学到的映射和测量距离建立实际的翻译。

在某些案例中,输出的结果已经超越了最佳纪录。例如在P@10的英语和意大利语之间的词语翻译中,他们在1500个源单词所组成的数据库中得出了近17%的平均准确率。

英语-意大利语词语翻译平均精确度

作者称,他们的方法可以用作开启无监督机器翻译的第一步,让我们拭目以待。

特别的框架和工具

现如今已经有很多通用的深度学习框架和工具,例如TensorFlow、Keras、PyTorch等等。然而,面向NLP的特定开源深度学习框架和工具才刚刚兴起。今年对我们来说十分重要,因为有许多开源框架出现,其中三个是我很感兴趣的。

AllenNLP

AllenNLP框架是构建在PyTorch之上的一个平台,它的设计初衷是将深度学习方法应用其中,执行相关的NLP任务。其目的是让研究人员设计并评估新模型,它包含了语义角色标注(semantic role labeling)、文字蕴涵(textual entailment)和共指消解(coreference resolution)等常见的NLP语义任务。

ParlAI

ParlAI框架是一个开源的用于对话研究的软件平台。它在Python中实现,其目标是提供一个集分享、训练和测试于一体的框架。ParlAI提供了一个与亚马逊Mechanical Turk轻松集成的机制,同时还提供了该领域流行的数据集,并支持多种模型,包括内存网络、seq2seq和注意力LSTM等神经模型。

OpenNMT

OpenNMT工具箱是专门用于序列到序列模型的通用框架,它可以执行类似机器翻译、总结、图像到文本和语音识别的任务。

写在最后

不可否认,用于NLP领域的深度学习技术在不断增长,从过去几年的ACL、EMNLP、EACL、NAACL等关键大会上所提交的有关NLP深度学习的论文上就能看出这一趋势。

有关深度学习的论文

然而,真正端到端的学习才刚刚开始出现,我们仍在处理一些经典的NLP任务来准备数据集,例如清理、标记或合并(例如URL、数字、电子邮件地址等)。我在研究的项目中发现,通用嵌入除了不能捕捉特定领域术语的重要性,而且在多次表达中表现不佳。

2017对深度学习在NLP领域的应用是关键的一年,我希望2018年将带来更多端到端的学习工作,并涌现出更多的开源框架。

原文地址:tryolabs.com/blog/2017/12/12/deep-learning-for-nlp-advancements-and-trends-in-2017/

发布了451 篇原创文章 · 获赞 601 · 访问量 80万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览