当前最好的词句嵌入技术概览:从无监督学习到监督、多任务学习

本文是一篇对于当今最先进的通用词/句嵌入技术的简介,包括对比基线: FastText、词袋模型(Bag-of-Words);以及最先进的模型:ELMo、Skip-Thoughts、Quick-Thoughts、InferSent、MILA 研究组和微软研究院提出的通用句子表征,以及谷歌的通用句子编码器。

词语和句子的嵌入已经成为了任何基于深度学习自然语言处理系统必备的组成部分。

它们将词语和句子编码成稠密的定长向量,从而大大地提升通过神经网络处理文本数据的能力。

当前主要的研究趋势是追求一种通用的嵌入技术:在大型语料库中预训练的嵌入,它能够被添加到各种各样下游的任务模型中(情感分析、分类、翻译等),从而通过引入一些从大型数据集中学习到的通用单词或句子的表征来自动地提升它们的性能。

它是迁移学习的一种体现形式。

尽管在相当长的一段时间内,对句子的无监督表示学习已经成为了一种行业规范。但在最近的几个月里,人们开始逐渐转向监督学习和多任务学习,并且在 2017 年底/2018 年初提出了一些非常有趣的方案。

近期的通用词/句嵌入的趋势:在本文中,作者将介绍上图中用黑体表示的模型。

因此,本文是一篇对于当今最先进的通用词/句嵌入技术的简介,详细讨论了以下模型:

  • 强大、快速的对比基线: FastText、词袋模型(Bag-of-Words)

  • 最先进的模型:ELMo、Skip-Thoughts、Quick-Thoughts、InferSent、MILA 研究组和微软研究院提出的通用句子表征,以及谷歌的通用句子编码器。

让我们从词嵌入开始娓娓道来。

最近的词嵌入研究进展

在过去的五年中,人们提出了大量可行的词嵌入方法。目前最常用的模型是 word2vecGloVe,它们都是基于分布假设(在相同的上下文中出现的单词往往具有相似的含义)的无监督学习方法。

尽管此后有一些研究(https://arxiv.org/abs/1805.04032)通过引入语义或者句法的监督信息来增强这些无监督方法,但是纯粹的无监督学习方法在 2017 年到 2018 年得到了令人关注的提升,最著名的是「FastText」(word2vec 的一种拓展)以及「ELMo」(目前最先进的基于上下文的词嵌入技术)。

FastText 由 Tomas Mikolov 的团队提出,他曾在 2013 年提出了著名的 word2vec 框架,引发了通用词嵌入技术的研究浪潮。

FastText 相对于原始的 word2vec 向量最主要的提升是它引入了 n 元字符(n-gram),这使得对没有在训练数据中出现的单词(词汇表外的单词)计算单词的表征成为了可能。

FastText 向量的训练速度非常快,并且可以在 GitHub 上获取通过「Wikipedia」和「Common Crawl」数据集上预训练好的版本。它们是非常棒的对比基线。

深度上下文单词表征(ELMo)在很大的程度上提高了目前最先进的词嵌入模型的性能。它们由 Allen 人工智能研究所研发,并将在 6 月初的 NAACL 2018(https://arxiv.org/abs/1802.05365)中展示。

ELMo 能感知到丰富的单词的上下文知识

ELMo 模型会为每一个单词分配一个表征,该表征是它们所属的整个语料库中的句子的一个函数。词嵌入将从一个两层的双向语言模型(LM)的内部状态中计算出来,因此该模型被命名为「ELMo」: Embeddings from Language Models(E 代表「嵌入」,LM 代表「语言模型」)。

ELMo 模型的特点:

  • ELMo 模型的输入是字符而不是单词。因此,它们可以利用子词单元的优势来计算有意义的单词表示,即使这些单词可能在词汇表之外(就像 FastText 一样)。

  • ELMo 是在双向语言模型中的一些层上的激励函数的串接。一个语言模型的不同层会对一个单词的不同类型的信息进行编码(例如,词性标注(Part-Of-Speech tagging)由双向 LSTM(biLSTM)的较低层很好地预测,而词义排歧则由较高层更好地进行编码)。将所有的层串接起来使得自由组合各种不同的单词表征成为了可能,从而在下游任务中得到更好的模型性能。

现在让我们转而讨论通用句子嵌入。

通用句子嵌入的兴起

目前有许多相互竞争的学习句子嵌入的方案。尽管像平均词嵌入这样简单的基线也能够一直给出很好的实验结果,但一些新的类似于无监督和监督学习以及多任务学习的方法,在 2017 年底 2018 年初出现在了人们的视野中,并且取得了令人瞩目的性能提升。

让我们快速浏览一下目前研究出来的四种嵌入方法吧:从简单的词向量平均的基线到无监督/监督学习方法,以及多任务学习方案(如上文所述)。

在这个领域有一个广泛的共识(http://arxiv.org/abs/1805.01070),那就是:直接对句子的词嵌入取平均(所谓的词袋模型(Bag-of-Word,BoW))这样简单的方法可以为许多下游任务提供一个很强大的对比基线。

Arora 等人在 ICLR 2017 上提出了「A Simple but Tough-to-Beat Baseline for Sentence Embeddings」(https://openreview.net/forum?id=SyK00v5xx),这是一个很好的能够被用于计算这个基线(BoW)的算法,算法的大致描述如下:选择一个流行的词嵌入方法,通过词向量的线性的加权组合对一个句子进行编码,并且删除共有的部分(删除它们的第一个主成分上的投影)。这种通用的方法有更深刻和强大的理论动机,它依赖于一个生成模型,该生成模型使用了一个语篇向量上的随机游走生成文本。(这里不讨论理论细节。)

「HuggingFace」对话的词袋模型的示意图。词袋模型弱化了词语的顺序关系,但保留了大量的语义和句法的信息。在 ACL 2018 上,Conneau 等人对此提出了有趣的见解(http://arxiv.org/abs/1805.01070)。

除了简单的词向量平均,第一个主要的提议是使用无监督学习训练目标,这项工作是起始于 Jamie Kiros 和他的同事们在 2015 年提出的「Skip-thought vectors」(https://arxiv.org/abs/1506.06726)。

无监督方案将句子嵌入作为通过学习对一个句子中一致且连续的短句或从句进行预测的副产品来学习句子嵌入。理论上,这些方法可以利用任何包含以一致的方式并列的短句/从句的文本数据集。

「Skip-thoughts vector」是一个典型的学习无监督句子嵌入的案例。它可以被认为相当于为词嵌入而开发的「skip-gram」模型的句子向量,我们在这里试图预测一个给定的句子周围的句子,而不是预测一个单词周围的其他单词。该模型由一个基于循环神经网络的编码器—解码器结构组成,研究者通过训练这个模型从当前句子中重构周围的句子。

Skip-Thoughts 的论文中最令人感兴趣的观点是一种词汇表扩展方案:Kiros 等人通过在他们的循环神经网络词嵌入空间和一个更大的词嵌入空间(例如,word2vec)之间学习一种线性变换来处理训练过程中没有出现的单词。

「Quick-thoughts vectors」(https://openreview.net/forum?id=rJvJXZb0W)是研究人员最近对「Skip-thoughts vectors」的一个改进,它在今年的 ICLR 上被提出。在这项工作中,在给定前一个句子的条件下预测下一个句子的任务被重新定义为了一个分类问题:研究人员将一个用于在众多候选者中选出下一个句子的分类器代替了解码器。它可以被解释为对生成问题的一个判别化的近似。

该模型的运行速度是它的优点之一(与 Skip-thoughts 模型属于同一个数量级),使其成为利用海量数据集的一个具有竞争力的解决方案。

「Quick-thoughts」分类任务示意图。分类器需要从一组句子嵌入中选出下一个句子。图片来自 Logeswaran 等人所著的「An efficient framework for learning sentence representations」。

在很长一段时间内,人们认为监督学习技术比无监督学习技术得到的句子嵌入的质量要低一些。然而,这种假说最近被推翻了,这要部分归功于「InferSent」(https://arxiv.org/abs/1705.02364)的提出。

与之前详细讨论的无监督学习不同,监督学习需要一个带标签的数据集,为一些像自然语言推理(例如:有蕴含关系的句子对)或者机器翻译(例如:翻译前后的句子对)这样的任务进行标注。监督学习提出了以下两个问题:(1)如何选择特定任务?(2)若要获得高质量的嵌入,所需的数据集大小应该如何确定?在本文的下一节和最后一节,作者将会对多任务学习进行进一步的讨论。但在这之前,让我们一起来看看 2017 年发布的 InferSent 背后的原理。

InferSent 具有非常简单的架构,这使得它成为了一种非常有趣的模型。它使用 Sentence Natural Language Inference(NLI)数据集(该数据集包含 570,000 对带标签的句子,它们被分成了三类:中立、矛盾以及蕴含)训练一个位于句子编码器顶层的分类器。两个句子使用同一个编码器进行编码,而分类器则是使用通过两个句子嵌入构建的一对句子表征训练的。Conneau 等人采用了一个通过最大池化操作实现的双向 LSTM 作为编码器。

一个用于对 Sentence Natural Language Inference 进行学习的有监督的句子嵌入模型(InferSent)。此图来自 A.Conneau 等人所著的「Supervised Learning of Universal Sentence Representations from Natural Language Inference Data」。

InferSent 的成功不仅导致了对选择最佳的神经网络模型的探索,它还引发了对以下问题的研究:

哪种监督训练任务能够学到能更好地泛化到下游任务中去的句子嵌入呢?

多任务学习可以被视为对 Skip-Thoughts、InferSent,以及其他相关的无监督/监督学习方案的一种泛化,它通过试着将多个训练目标融合到一个训练方案中来回答这个问题(上文提到的问题)。

在 2018 年初,研究人员发布了一系列最新的多任务学习的方案。让我们快速的浏览一下 MILA 和微软研究院提出的「通用目的句子表征」和谷歌的「通用句子编码器」。

在 ICLR 2018 上发表的描述 MILA 和微软蒙特利尔研究院的工作的论文《Learning General Purpose Distributed Sentence Representation via Large Scale Multi-Task Learning》(https://arxiv.org/abs/1804.00079)中,Subramanian 等人观察到,为了能够在各种各样的任务中泛化句子表征,很有必要将一个句子的多个层面的信息进行编码。

因此,这篇文章的作者利用了一个一对多的多任务学习框架,通过在不同的任务之间进行切换去学习一个通用的句子嵌入。被选中的 6 个任务(对于下一个/上一个句子的 Skip-thoughts 预测、神经机器翻译、组别解析(constituency parsing),以及神经语言推理)共享相同的由一个双向门控循环单元得到的句子嵌入。实验表明,在增添了一个多语言神经机器翻译任务时,句法属性能够被更好地学习到,句子长度和词序能够通过一个句法分析任务学习到,并且训练一个神经语言推理能够编码语法信息。

谷歌在 2018 年初发布的的通用句子编码器(https://arxiv.org/abs/1803.11175)也使用了同样的方法。他们的编码器使用一个在各种各样的数据源和各种各样的任务上训练的转换网络,旨在动态地适应各类自然语言理解任务。该模型的一个预训练好的版本可以在 TensorFlow 获得。

以上就是我们对于通用的词语和句子嵌入的简要总结。

在过去的短短的几个月中,这个领域取得了很多令人瞩目的发展,并且在评价和探索这些嵌入的性能以及其内在的偏差/公平性的方面(这是讨论通用的嵌入时的一个真实存在的问题)有了很大的进步。

原文链接:https://medium.com/huggingface/universal-word-sentence-embeddings-ce48ddc8fc3a

工程词嵌入词向量自然语言处理
8
相关数据
神经网络技术
Neural Network

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

词袋模型技术
Bag of words

词袋模型(英语:Bag-of-words model)是个在自然语言处理和信息检索(IR)下被简化的表达模型。此模型下,像是句子或是文件这样的文字可以用一个袋子装着这些词的方式表现,这种表现方式不考虑文法以及词的顺序。最近词袋模型也被应用在电脑视觉领域。

分类问题技术
Classification

分类问题是数据挖掘处理的一个重要组成部分,在机器学习领域,分类问题通常被认为属于监督式学习(supervised learning),也就是说,分类问题的目标是根据已知样本的某些特征,判断一个新的样本属于哪种已知的样本类。根据类别的数量还可以进一步将分类问题划分为二元分类(binary classification)和多元分类(multiclass classification)。

神经机器翻译技术
Neural Machine Translation

2013 年,Nal Kalchbrenner 和 Phil Blunsom 提出了一种用于机器翻译的新型端到端编码器-解码器结构 [4]。该模型可以使用卷积神经网络(CNN)将给定的一段源文本编码成一个连续的向量,然后再使用循环神经网络(RNN)作为解码器将该状态向量转换成目标语言。他们的研究成果可以说是神经机器翻译(NMT)的诞生;神经机器翻译是一种使用深度学习神经网络获取自然语言之间的映射关系的方法。NMT 的非线性映射不同于线性的 SMT 模型,而且是使用了连接编码器和解码器的状态向量来描述语义的等价关系。此外,RNN 应该还能得到无限长句子背后的信息,从而解决所谓的「长距离重新排序(long distance reordering)」问题。

门控循环单元技术
Gated recurrent Units

门控循环单元(GRU)是循环神经网络(RNN)中的一种门控机制,与其他门控机制相似,其旨在解决标准RNN中的梯度消失/爆炸问题并同时保留序列的长期信息。GRU在许多诸如语音识别的序列任务上与LSTM同样出色,不过它的参数比LSTM少,仅包含一个重置门(reset gate)和一个更新门(update gate)。

生成模型技术
Generative Model

在概率统计理论中, 生成模型是指能够随机生成观测数据的模型,尤其是在给定某些隐含参数的条件下。 它给观测值和标注数据序列指定一个联合概率分布。 在机器学习中,生成模型可以用来直接对数据建模(例如根据某个变量的概率密度函数进行数据采样),也可以用来建立变量间的条件概率分布。

GloVe技术
GloVe

Stanford开发的用于词向量表示的一个库/工具

语言模型技术
Language models

语言模型经常使用在许多自然语言处理方面的应用,如语音识别,机器翻译,词性标注,句法分析和资讯检索。由于字词与句子都是任意组合的长度,因此在训练过的语言模型中会出现未曾出现的字串(资料稀疏的问题),也使得在语料库中估算字串的机率变得很困难,这也是要使用近似的平滑n元语法(N-gram)模型之原因。

自然语言处理技术
Natural language processing

自然语言处理(英语:natural language processing,缩写作 NLP)是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机程序更易于处理的形式。

机器翻译技术
Machine translation

机器翻译(MT)是利用机器的力量「自动将一种自然语言(源语言)的文本翻译成另一种语言(目标语言)」。机器翻译方法通常可分成三大类:基于规则的机器翻译(RBMT)、统计机器翻译(SMT)和神经机器翻译(NMT)。

池化技术
Pooling

池化(Pooling)是卷积神经网络中的一个重要的概念,它实际上是一种形式的降采样。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。直觉上,这种机制能够有效的原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的卷积层之间都会周期性地插入池化层。

词性标注技术
part of speech (tagging)

词性标注是指为分词结果中的每个单词标注一个正确的词性的程序,也即确定每个词是名词、动词、形容词或其他词性的过程。

感知技术
perception

知觉或感知是外界刺激作用于感官时,脑对外界的整体的看法和理解,为我们对外界的感官信息进行组织和解释。在认知科学中,也可看作一组程序,包括获取信息、理解信息、筛选信息、组织信息。与感觉不同,知觉反映的是由对象的各样属性及关系构成的整体。

监督学习技术
Supervised learning

监督式学习(Supervised learning),是机器学习中的一个方法,可以由标记好的训练集中学到或建立一个模式(函数 / learning model),并依此模式推测新的实例。训练集是由一系列的训练范例组成,每个训练范例则由输入对象(通常是向量)和预期输出所组成。函数的输出可以是一个连续的值(称为回归分析),或是预测一个分类标签(称作分类)。

迁移学习技术
Transfer learning

迁移学习是一种机器学习方法,就是把为任务 A 开发的模型作为初始点,重新使用在为任务 B 开发模型的过程中。迁移学习是通过从已学习的相关任务中转移知识来改进学习的新任务,虽然大多数机器学习算法都是为了解决单个任务而设计的,但是促进迁移学习的算法的开发是机器学习社区持续关注的话题。 迁移学习对人类来说很常见,例如,我们可能会发现学习识别苹果可能有助于识别梨,或者学习弹奏电子琴可能有助于学习钢琴。

word2vec技术
word2vec

Word2vec,为一群用来产生词向量的相关模型。这些模型为浅而双层的神经网络,用来训练以重新建构语言学之词文本。网络以词表现,并且需猜测相邻位置的输入词,在word2vec中词袋模型假设下,词的顺序是不重要的。 训练完成之后,word2vec模型可用来映射每个词到一个向量,可用来表示词对词之间的关系。该向量为神经网络之隐藏层。 Word2vec依赖skip-grams或连续词袋(CBOW)来建立神经词嵌入。Word2vec为托马斯·米科洛夫(Tomas Mikolov)在Google带领的研究团队创造。该算法渐渐被其他人所分析和解释。

词嵌入技术
Word embedding

词嵌入是自然语言处理(NLP)中语言模型与表征学习技术的统称。概念上而言,它是指把一个维数为所有词的数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数域上的向量。

深度学习技术
Deep learning

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

张量技术
Tensor

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

重构技术
Refactoring

代码重构(英语:Code refactoring)指对软件代码做任何更动以增加可读性或者简化结构而不影响输出结果。 软件重构需要借助工具完成,重构工具能够修改代码同时修改所有引用该代码的地方。在极限编程的方法学中,重构需要单元测试来支持。

TensorFlow技术
TensorFlow

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

刘晓坤
刘晓坤

机器之心编辑

返回顶部