雷锋网 AI 科技评论按:本文是一篇发布于 tryolabs 的文章,作者 Javier Couto 针对 2017 年基于深度学习的自然语言处理研究进行了大盘点。雷锋网 AI 科技评论根据原文进行了编译。
在过去的几年里,深度学习(DL)架构和算法在诸如图像识别和语音处理等领域取得了世人瞩目的进步。然而在最开始的时候,深度学习在自然语言处理(Natural Language Processing, NLP)领域的效果一般,但是现在已经被证实深度学习在自然语言处理领域依然能够发挥巨大的作用。并且在一些常见的自然语言处理任务中,基于深度学习的方法已经取得了最佳的结果。神经网络模型在诸如命名实体识别(Named entity recognition, NER)、词性标注(Part of speech tagging)和情感分析(Sentiment analysis)等任务中的表现已经超越了传统方法,另外在机器翻译上的进步也许是最明显的。
在这篇文章中,我将细数 2017 年里基于深度学习技术的自然语言处理所取得的一些进步。另外由于实在是存在着太多的相关论文、框架和工具,所以我并不打算进行详尽的介绍。我只是想和大家分享一下今年产出的我所喜欢的工作,而且我认为 2017 年自然语言处理领域取得的成绩斐然。今年深度学习在自然语言处理领域研究中的应用不断扩大,并且在某些情况下取得了惊人的结果,所有这些迹象都在表明这一应用正方兴未艾。
词嵌入(Word embeddings)可以说是自然语言处理众多任务中与深度学习相关的且最广为人知的一项技术。该技术遵循 Harris ( 1954 ) 的分布假说(Distributional hypothesis),根据这个假说,那些具有相似含义的词汇通常出现在相似的语境中。关于词嵌入更详细的解释,我建议你去阅读这篇由 Gabriel Mordecki 所写的文章。
分布词向量样例
诸如 word2vec ( Mikolov et al. , 2013) 和 GloVe ( Pennington et al. , 2014 ) 等算法已经成为该领域的先驱,虽然它们并不能算作深度学习(word2vec 中的神经网络很浅,而 GloVe 则实现了一个基于计数的方法),但是通过这些方法训练出来的模型却在许多的基于深度学习的自然语言处理算法中被作为输入数据而使用。总之,在自然语言处理领域使用词嵌入已经几乎成了行业准则,并且确实带来了很好的实践效果。
一开始,对于一个需要词嵌入的特定自然语言处理问题,我们倾向于从一个领域相关的大型语料库中训练自己的模型。当然,这样使用词嵌入还不够平民化,因此慢慢地便出现了预训练模型。这些模型经过维基百科、推特、谷歌新闻等数据的训练,可以让你轻松地将词嵌入整合到自己深度学习算法中。
今年证实了预训练词嵌入模型仍然是自然语言处理中的一个关键问题。比如说,来自 Facebook 人工智能研究实验室(Facebook AI Research, FAIR)的 fastText 发布了支持 294 种语言的预训练(词)向量,这对我们的社区而言是一项伟大的工作和贡献。除了支持大量的语言之外,fastText 还使用了字符 n 元语法(n-grams)作为特征。这样使得 fastText 能够避免出现超出词汇量(Out of Vocabulary, OOV)的问题,因为即使是一个非常罕见的单词也可能与一些更为常见的词汇共享某些字符 n 元语法。从这个意义上来说,fastText 比 word2vec 和 GloVe 表现得更好,而且针对小型数据集而言,fastText 的表现更是超越了它们。
虽然我们确实见证了这个领域所取得的进步,但是我们依然还有许多工作需要去完成。比如说,spaCy 是一个非常伟大的自然语言处理框架,它以原生的方式将词嵌入和深度学习模型集成到了命名实体识别和依赖分析(Dependency Parsing)等任务中,并且允许用户更新模型或者使用自定义模型。
依我拙见,将来将会出现许多针对某一特定领域的预训练模型(比如,生物学、文学、经济等),这些模型能够很方便地在自然语言处理框架上进行使用。而在我们的日常使用中,最容易实现也是最锦上添花的功能,可能就是支持对模型的微调(fine-tuning)。同时,适应性词嵌入(Adapting word embedding)方法也开始出现。
二、调整通用嵌入(Generic embeddings)模型适配特定用例
也许使用预训练词嵌入的主要缺点是,训练数据与真实数据之间的单词分布存在差异。假设你只拥有一个较小的语料库,这个语料库中存储了生物论文、食谱或者经济学论文。不过可能你的语料库的数据量又不足以训练出好的词嵌入,所以这时采用通用词嵌入反而可能帮助你提高结果。但是如果可以调整通用嵌入模型去适配你的特定用例呢?
这种适配性通常被称为自然语言处理中的跨域(Cross-domain)或者域适应(Domain adaptation)技术,并且与迁移学习(Transfer learning)非常相似。Yang 等人今年提出了一项非常有趣的工作。他们提出了一个正则化的 skip-gram 模型,该模型能够在给定源域(Source domain)的嵌入时学习得到目标域(Target domain)的嵌入。
其核心思想简洁而有效。假设我们已经知道了源域中单词 w 的词嵌入 ws。为了计算出目标域的嵌入 wt,作者给 ws 增加了一个传输量,而这个传输量则是基于两个域计算得到。基本上,如果这个词在两个域中都具有很高的频率,那就意味着它的语义不依赖于域。在这种情况下,传输量将很高,而因此两个域中产生的嵌入将非常相似。但是由于某一特定域中的词汇出现频率总是比其它域要来的高,所以传输量会很小。
这个关于词嵌入的研究课题还没有被广泛地探索,所以我认为它在近期将得到更多的关注。
一如青霉素、X 光甚至是便利贴都是来源于意外的发现。今年 Radford 等人正在探索字节级别(Byte-level)的循环语言模型的特性,其目标是预测亚马逊评论区中的下一个字符,但是当时他们意外发现训练模型中的单个神经元对情感价值具有非常高的预测能力。并且这个单一的“情感神经元”能够以相当准确的方式将评论情绪分类为积极的或者消极的。
在注意到这种现象之后,作者决定在斯坦福情感分析数据库(Stanford Sentiment Treebank)上测试模型,结果发现它的准确性达到 91.8%,而之前的最好的结果是 90.2%。这意味着,他们的模型能够使用更少的训练样例,以无监督方式进行训练,然后在斯坦福情感分析数据库这一被广泛研究的数据集上实现了最高的情感分析准确度。
由于模型是在字符级别上进行工作的,所以神经元会针对文本中的每一个字符改变自身的状态,而看到它的这种行为也是相当令人吃惊的。
情感神经元的行为展示,图片来自于《Unsupervised Sentiment Neuron》
例如,在扫描过积极的单词之后,神经元的值也变成一个较大的正整数。然后这种效果将随着扫描到消极单词之后而逐渐消失,而这种现象也是符合直觉的。
当然该模型仍然是一个有效的生成模型,所以它能够被用来生成与亚马逊评论相类似的文本内容。但是我觉得更棒的一点是,你可以通过简单地改写情感神经元的值,来影响所生成文本的极性。
生成文本样例,来自于《Unsupervised Sentiment Neuron》
该样例所采用的神经网络模型是由 Krause 等人(2016)所提出的乘性 LSTM,这主要是因为他们发现,在他们所探索的超参数配置下乘性 LSTM 比一般的 LSTM 收敛更快。它有 4096 个单元并且使用了一个具有 8200 万条亚马逊评论的数据语料库进行训练。
至于为什么训练有素的模型能够以如此精确的方式捕捉到情感概念仍然是一个开放性的未解之谜。同时,你可以尝试训练自己的模型来进行实验。当然如果你有许多时间和 GPU 集群,那么根据作者所提供的信息,在四个英伟达 Pascal 图形处理器(GPU)上训练这个特定模型需要花费一个月时间。
无论是要获取人们对企业品牌的评价,或是分析营销活动的影响,亦或是衡量上次美国大选期间全球人们对 Hillary Clinton 和 Donald Trump 的看法,Twitter 上的情感分析都是一个非常强大的工具。
希拉里对上川普:来自 Twitter 的情感分析,图片来自于《Donald Trump vs Hillary Clinton: sentiment analysis on Twitter mentions》
Twitter 上的情感分析已经引起了自然语言处理研究人员的大量关注,而且也引起了政治和社会科学界的关注。这就是为什么自 2013 年以来,SemEval 每年都会提出一个特定的任务进行比赛。
今年一共有 48 支队伍参加了评测,为了让你更好地了解 Twitter 推出的 SemEval 究竟是什么,让我们来看看今年提出的五项子任务。
子任务 A:给出一条推文,然后判定该推文表达了积极、消极或是中立的情绪。
子任务 B:给出一条推文和一个主题,然后把这个主题所传达出的情感进行二分类:积极或者消极。
子任务 C:给出一条推文和一个主题,然后把这个主题所传达出的情感进行五分类:非常积极、积极、中立、消极和非常消极。
子任务 D:给出一组与某个主题相关的推文,评估该组中所有推文在积极和消极两个情绪中的分布情况。
子任务 E:给出一组与某个主题相关的推文,评估该组中所有推文在积极和消极五个情绪中的分布情况,五个情绪分别是:非常积极、积极、中立、消极和非常消极。
如你所见,子任务 A 是最常见的任务,有 38 个团队参与了这个任务,但是其它的四项子任务则更具挑战性。主办方指出,基于深度学习的方法受到越来越多参赛者的欢迎,今年有 20 个团队采用了卷积神经网络(CNN)和长短时记忆(LSTM)等模型。此外,尽管 SVM 模型仍然非常流行,但是一些参与者选择将它们与神经网络方法相结合或者是使用词嵌入特征。
今年我发现一个纯深度学习系统——BB_twtr 系统(Cliche, 2017)在英语的第五项子任务中排名第一。作者将 10 个 CNN 和 10 个 biLSTM 组合起来,然后采用不同的超参数和不同的预训练策略进行训练。你可以从论文中获得这个网络结构的具体信息。
为了训练这些模型,作者使用了人类标记的推文(子任务 A 有 49,693 条数据),并且构建了一个包含 1 亿条推文的无标签数据。作者对每条推文进行了简单标记,也就是使用诸如“:-)”这样积极的表情来标记积极情绪的推文,然后使用消极的表情标记消极的推文,通过这种方式作者从包含有 1 亿条推文的数据集中抽取出了一个远程数据集。所有的推文都被转化为小写,然后其中的标记、URL和表情符号被替换为特定的标记,并且对重复的字符也进行了统一,例如“niiice”和“niiiiiiiiiice”都变成“niice”。
CNN 和 biLSTM 采用词嵌入作为输入,为了获得该预训练的词嵌入,作者在所有未标记数据上使用了 word2vec、GloVe 和 fastText(全部使用默认设置)。然后他使用远程的数据集来微调词嵌入模型,以便给模型添加极性信息,之后他使用人类标记的数据集对模型再次进行微调。
作者使用以前的 SemEval 数据集进行实验,结果表明使用 GloVe 会降低性能,并且对于所有的标准数据集没有一个唯一的最佳模型。然后作者通过一个软投票(Soft voting)策略将所有模型组合起来。由此产生的模型比 2014 年和 2016 年的历史最佳的成绩还更胜一筹,并且与其它年份的结果也非常接近。最终,该模型 SemEval 2017 的第五个子任务中取得了英语语言排名第一的成绩。
虽然这种组合不是以一种有机的方式进行的,而是采用一种简单的软投票策略,但是该工作表明了将不同深度学习模型结合起来的可能性,还以一种近乎端到端的方法(输入必须经过预处理)证明了在 Twitter 的情感分析中,端到端策略是能够超越监督方法的。
自动摘要(Automatic summarization)生成和自动翻译都是自然语言处理领域中最早出现的一类研究问题。自动摘要生成的实现主要有两类方法:基于抽取(Extraction-based),该方法的摘要是通过从源文本中提取最重要的片段而建立的,而基于抽象(Abstraction-based)的方法则是通过生成文本来构成摘要。历史中,由于基于抽取的方法比起基于抽象的方法更加简单,因此基于抽取的方法是最常使用的。
在过去的几年里,基于 RNN 模型在文本生成方面取得了惊人的成就。它们对于简短的输入和输出文本表现得非常好,但是对于长文本就显得差强人意,所生成内容往往颠三倒四和语义不通。在他们的工作中,Paulus 等人提出了一种新颖的神经网络模型来克服这个局限性。结果令人吃惊,如下图所示。
摘要生成展示,图片来自于《A deep reinforced model for abstractive summarization》
作者使用 biLSTM 编码器读取输入,并使用 LSTM 解码器生成输出。他们的主要贡献是提出了分别关注输入和连续生成输出的一种全新的内部注意力(Intra-attention)策略,以及结合标准监督词语预测和强化学习的全新的训练方法。
内部注意力策略的目标是避免输出中出现重复。为了实现这个目标,他们在解码时使用时间注意力机制来查看输入文本的前一片段,然后再决定下一个要生成的词语。这迫使模型在生成过程中使用了输入的不同部分。他们还允许模型从解码器访问以前的隐藏状态。然后将这两个函数组合起来,为输出摘要选择最好的下一个单词。
要生成一个摘要,对于不同的人可能会采用不同的词汇和语序,但是这些摘要却都可能是有效的。因此,一个好的摘要不一定是尽可能与训练数据集中的序列相匹配的单词序列。在理解到这一点之后,作者避开使用标准教师强迫算法(Standard teacher forcing algorithm),由于该算法在每个解码步骤(即对每个生成的单词)最小化损失,并且它们依赖于那些被证明是极好选择的强化学习策略。
该模型在 CNN/每日邮报数据集上进行了测试,并且取得了最好的结果。在另一项有人类评估者参与的实验表明,该模型生成的摘要在可读性和质量上均有提高。总体来看,这些结果令人印象深刻。另外该模型的预处理包括有:标记输入文本、采用小写、数字被替换为“0”并且移除数据集中的一些特定实体。
双语词汇归纳法,即用两种语言的源语和单语语料库来识别单词翻译对,这是一种古老的自然语言处理任务。然后自动生成的双语词典有助于其它自然语言处理任务,如信息检索和统计机器翻译。然而,这些方法大部分时间都依赖于某种资源,通常是一个初始的双语词典,而这个词典并不总是可用或者容易建立。
随着词嵌入取得成功,业内也开始出现了跨语言词嵌入的想法,而其目标是对齐嵌入空间而不是词典。不幸的是,第一种方法也依赖于双语词典或平行语料库。在他们的工作中,Conneau 等人(2018)提出了一个非常有前途的方法,它不依赖于任何特定的资源,并且对于多个语言对的语言翻译、句子翻译检索和跨语言单词相似性的任务要优于现有技术的监督方法。
作者发明的方法是将输入的两组词嵌入在单语数据上进行独立训练,并学习它们之间的映射,使得翻译在公共空间中相互接近。他们使用 fastText 在维基百科文档上训练无监督的单词向量。以下图片说明了算法的核心思想。
建立两个词嵌入空间之间的映射,红色的 X 分布是英语单词的嵌入,而蓝色的 Y 分布是意大利语单词的嵌入。
首先他们使用对抗学习(Adversarial learning)来学习要执行第一次原始对齐的旋转矩阵 W。他们根据 Goodfellow 等人(2014)提出的主张,先训练了一个基础的对抗神经网络(Generative Adversarial Network, GAN)。如果想要了解 GAN 是如何工作的,我推荐这篇由 Pablo Soto 撰写的优秀文章。
为了在对抗学习方面对问题进行建模,他们将判别模型(Discriminator)定义为具有判定能力的角色,对于所给定的从 WX 和 Y 随机采样的一些元素(参见上图中的第二列),判别模型将判定每个元素属于哪种语言。然后他们训练 W 以避免判别模型做出更好的预测。我认为这种做法非常聪明和优雅,并且最终的结果也相当不错。
之后,他们还再经过两个步骤来完善映射关系。一是为了避免映射计算中因为罕见词汇而引入的噪声;另一个则是主要通过使用学习到的映射关系与一个距离度量来建立实际的翻译。
在某些情况下这些结果非常令人印象深刻。例如,对于英语-意大利语单词翻译,他们的模型在 P@10 的情况下超过了最佳平均精度将近 17%。
英语-意大利语单词翻译平均精度
作者声称,他们的方法可以用作无监督机器翻译的第一步。如果真是这样,这将非常棒。同时,让我们看看这个新的富有前途的方法还能走多远吧。
当前存在着许多的深度学习框架和工具,其中有一些已经被广泛使用了,比如 TensorFlow、Keras或者 PyTorch。然而,面向特定开源自然语言处理的深度学习框架和工具才刚刚兴起。今年总归行情不错,因为一些非常有用的框架已经在社区中进行了开源。其中有三个引起了我的特别注意。
AllenNLP框架是构建在 PyTorch 之上的一个平台,可以实现在语义自然语言处理任务中轻松使用深度学习方法。其目标是让研究人员设计和评估新模型。它包含了常用的语义自然语言处理任务模型的参考实现,例如语义角色标注、文字蕴涵(Textual entailment)和指代消除(Coreference resolution)。
ParlAI 框架是针对对话研究(Dialog research)而设计的一款开源软件。它采用 Python 进行实现,其设计目标是为对话模型的共享、训练和测试提供一个统一的框架。ParlAI 提供了一个与 Amazon Mechanical Turk 轻松集成的机制。它还提供了该领域所流行的数据集,并且支持多种模型,包括记忆网络、seq2seq 和 LSTM。
OpenNMT 工具箱是专门用于序列到序列(Sequence-to-sequence)模型的通用框架。它可以用于执行诸如机器翻译、摘要生成、图像转文本和语音识别等任务。
用于处理自然语言处理的深度学习技术不断增加这一事实是不可否认的。一个很好的指标就是过去几年里在 ACL、EMNLP、EACL 和 NAACL 等关键的自然语言处理会议上深度学习论文比例在不断提升。
深度学习论文占比
然而,真正的端到端学习才刚刚开始出现。我们仍然在处理一些经典的自然语言处理任务来准备数据集,例如清洗、标记或统一某些实体(例如URL、数字、电子邮件地址等)。我们也使用通用嵌入(Generic embeddings),其缺点是不能捕捉到特定领域术语的重要性,而且它们对于多词语表达式的表现能力不佳,这也是我在工作中经常发现的一个关键问题。
如果想要获取更多今年的基于深度学习自然语言处理研究方法的资讯,我强烈建议你阅读 Young 等人的优秀论文《Recent Trends in Deep Learning Based Natural Language Processing》(2017)。
另一份有趣的阅读材料是由 Blunsom 等人(2017)在学术研讨会上所做的报告“从字符到理解自然语言(C2NLU):强大的 NLP 端到端深度学习”。出席研讨会的人都是自然语言处理领域的研究员。研讨会上讨论了深度学习和一般机器学习的优势,同时也探讨了使用多个字符而不是特定语言标记(Language-specific tokens)作为深度学习模型输入所带来的挑战。
为了在模型之间进行比较,Yin 等人提出了一个非常有趣的 CNN 和 RNN 的对比研究(2017)。
关于词嵌入的详细解释,我建议你阅读 Gabriel Mordecki 的这篇文章。他寓教于乐,不仅解释了词嵌入的不同方法,而且还介绍了一些关于词嵌入的神话。
最后,Sebastian Ruder 在 2017 年写了一篇非常好非常详细的有关于词嵌入的文章——《About Word embedding in 2017: Trends and future directions》
From Characters to Understanding Natural Language (C2NLU): Robust End-to-End Deep Learning for NLP Phil Blunsom, Kyunghyun Cho, Chris Dyer and Hinrich Schütze (2017)
BB_twtr at SemEval-2017 Task 4: Twitter Sentiment Analysis with CNNs and LSTMs Mathieu Cliche (2017)
Word Translation without Parallel Data Alexis Conneau, Guillaume Lample, Marc’Aurelio Ranzato, Ludovic Denoyer, Hervé Jégou (2018)
Generative adversarial nets Ian Goodfellow, Jean Pouget-Abadie, Mehdi Mirza, Bing Xu, David Warde-Farley, Sherjil Ozair, Aaron Courville and Yoshua Bengio (2014)
Distributional structure Zellig Harris (1954)
OpenNMT: Open-source toolkit for neural machine translation Guillaume Klein, Yoon Kim, Yuntian Deng, Jean Senellart and Alexander M Rush. (2017)
Multiplicative lstm for sequence modelling Ben Krause, Liang Lu, Iain Murray and Steve Renals (2016)
Parlai: A dialog research software platform Alexander H Miller, Will Feng, Adam Fisch, Jiasen Lu, Dhruv Batra, Antoine Bordes, Devi Parikh and Jason Weston (2017)
Linguistic Regularities in Continuous Space Word Representations Tomas Mikolov, Scott Wen-tau Yih and Geoffrey Zweig (2013)
Glove: Global vectors for word representation Jeffrey Pennington, Richard Socher and Christopher D. Manning (2014)
Via : Deep Learning for NLP, advancements and trends in 2017,雷锋网编译
AI慕课学院近期推出了《NLP工程师入门实践班:基于深度学习的自然语言处理》课程!
三大模块,五大应用,海外博士讲师手把手教你入门NLP,更有丰富项目经验相授;算法+实践,搭配典型行业应用;随到随学,专业社群,讲师在线答疑!
课程地址:http://www.mooc.ai/course/427
加入AI慕课学院人工智能学习交流QQ群:624413030,与AI同行一起交流成长