想研究 NLP,不了解词嵌入与句嵌入怎么行?

雷锋网按:本文为雷锋字幕组编译的研究博客,原标题 The Current Best of Universal Word Embeddings and Sentence Embeddings ,作者 Thomas Wolf。

翻译 | 付腾、汪星宇     整理 | 凡江

词与句的嵌入模型已经是目前任何以深度学习为基础的 NLP 系统的核心部件了。

它们将词和句编码成为固定长度的密度向量,以此来大幅提升文本数据的处理性能。

目前一个大趋势就是:如何构建通用嵌入系统。通用嵌入系统是已经在大量的文献基础上进行了训练的系统,这种训练好的系统能够被用于大量的下游任务模型当中(情感分析,分类,翻译,等等),以此来自动提升这些任务模型的性能,因为通用嵌入系统已经在大型的数据集上学习到了一些基本的词/句的表征特点,来和任务模型进行配合。

这就是一种形式的迁移学习。

目前对句子的非监督的表征学习已经是一种常态,并且持续了很长一段时间,但是在过去的几个月里,尤其是在 2017 年末至 2018 年初,出现了很多有趣的可迁移的监督学习和多任务学习方案。

目前通用词/句嵌入模型的趋势。在这片文章中,我们会介绍上图中以黑色字体标识的模型。相关的具体文献会在本文结尾列出。

这篇文章只是对目前最新的通用词/句嵌入系统的大概介绍,此外,深入介绍了一些模型的细节,包括:

性能好/速度快的基线模型:比如 FastText,词袋(BoW)

目前最新的模型:ELMo, Skip-Thoughts, Quick-Thoughts, InferSent, MILA/MSR’s General Purpose Sentence Representations & Google’s Universal Sentence Encoder

让我们从词嵌入模型开始吧。

当下词嵌入模型的发展

在过去五年的时间里,很多可能的词嵌入方法被提出。其中最常用的包括 Word2vec 和 GloVe,它们采用的都是非监督的方法,也都是基于词义分布理论 distributional hypothesis 来构建的(即某些词如果出现于相同上下文中则它们可能具有相同或类似的意义)。

虽然同时期也有一些研究提出了结合传统词义和句法知识且基于非监督的方法,但是在 2017 到 2018 年间,纯粹的非监督方法依然有可喜的进展,其中最受瞩目的就是FastText(word2vec 模型的扩展)和 ELMo(最新的基于上下文的词向量模型)。

FastText 是 Tomas Mikolov 团队的杰出作品,这引爆了对于通用词嵌入模型的研究热情。(Tomas Mikolov 同时也是在 2013 年提出 word2vec 架构的始作俑者。)

FastText 相对于原版的 word2vec 向量主要提升包括基于字符的 ngrams 的模型。这种模型可以让词嵌入模型计算出训练数据当中没有出现的词的表征向量(即词典之外的词)。

FastText 向量 的训练速度堪称急速,并且提供基于 Wiki 百科和 Crawl 数据集的预训练模型,支持多达 157 种语言。这些都是很重要的基准模型。

深度上下文词表征 模型(ELMo)最近在词嵌入方面的性能提升同样引人侧目。ELMo 是由 Allen AI 研究院提出并且开源,并且被 NAACL 2018 收录,将会在 2018 年六月上旬大会期间进行展示。

ELMo 对于词一级的上下文知道不少。

在 ELMo 模型当中,每个词都被赋予一个表征,这个表征是一个函数,代表它们所属整个语料库的语句的一个函数。从两层双向语言模型(LM)的内部状态计算嵌入,因此从语言模型命名为「ELMo」:Embeddings from Language Models。

ELMo 的具体特点:

ELMo 的输入是字符而不是词。这让 ELMo 可以获得 分词单元 一级的优势,从而让模型能够为 词典外单词 计算出有意义的表征(与 FastText 类似)。

ELMo 是好几层激活的 biLM 的 并列组合。不同层的语言模型编码了相同单词的不同信息(比如,POS 标识能够被底层 biLSTM 很好的预测,同时高层的 biLM 模型能很好的完成词义的消歧)。将所有层并列组合能够将大量的信息结合然后赋予词表征向量,以此提高下游任务模型的性能。

接下来,让我们看看通用句嵌入模型吧。

通用句嵌入模型的兴起

目前在句嵌入模型领域 有很多相互竞争的方案。简单的基线模型比如 基于词嵌入的平均方法就不断的有更好的结果出现,一些新奇的非监督和监督方法和一些多任务学习方案,在 2017 年末和 2018 年初出现,并且引领了有趣的性能提升。

让我们赶快看看目前较新的四类方法: 从简单的词向量平均基线模型到一些新奇的非监督和监督方法,和一些多任务学习方案(如前文所述)。

先说说在这个领域的共识,那就是最简单的方法: 直接对一个句子中的词嵌入向量求平均值(简称 BoW 方法),已经能够提供足够好的基线性能,并且适合大部分下游任务。

计算此类基线方法中有一个比较好的算法,具体细节可以参考 Arora et al. 发表在 ICLR 2017 年的文章。标题是:A Simple but Tough-to-Beat Baseline for Sentence Embeddings。具体的实施方法就是使用任意一种词嵌入,然后对句子当中的词向量 进行线型加权的整合。然后对所得向量进行正常的成分移除(即 移除 向量在其第一主成分的低纬度方向上的 投影)。这个简单的方法背后的理论动机深厚且强大。这个理论是基于生成模型的原理,就是利用话语向量的随机游动来生成文本(此处我们就不讨论理论细节了)。

这是一个 Hugging Face(一个社交对话 AI)对话的热词图词袋。词袋(BoW)的 排序比较松散,但是却很神奇的保存了大量的语义和句法 的内容信息。这是一个有趣的结论,也是 Conneau 等人的成果,文章发于 ACL 2018。

超越简单的求平均,第一个重要的提案就是利用非监督来达到训练目标。这也是 Jamie Kiros 及其同事在 2015 年 提出的 Skip-thoughts vectors 方法。

基于非监督学习的句嵌入方案其实是一个副产品。而这个副产品的本来目标其实是希望模型能够学会预测 一个连贯一致的句子,或者至少是一个连贯的句子摘要。这些方法(理论上)能够利用任何文本数据,只要文本数据中存在句子或者摘要,并且是连贯且并列的方式组织起来的。

Skip-thoughts vectors 模型就是一个典型的基于非监督学习的句嵌入模型。它可以与另一种模型等价,那就是基于skip-gram 模型的句嵌入模型。这种模型的原型其实是基于 skip-gram 词嵌入。它的的特点就是:与其预测某个具体单词 的上下文可能出现的单词,不如预测某个给定的句子的上下文可能出现的句子。这个模型包含一个 基于 RNN 的编码-解码器,而这个编码-解码器就是被训练用来重构上下文句子的,前提是一个具体的句子已经给定。

Skip-Thought 这篇文章有一个很有趣的结论,那就是词汇扩展方案。Kiros 小组处理未出现生词的方法,尤其是在模型训练阶段,就是 从 RNN 词嵌入空间和另外一个大型的词嵌入模型(比如 word2vec)之间的线性转换当中学习到生词的向量。

......

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180808A0RE7N00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券