关于词向量,word embedding,研究相对较早,存在多种表征方式,目前 distributed 方式相对成熟,得到了广泛应用。但从 word 向 sentence、paragraph、document扩展,却仍处于探索阶段,本文尝试对目前主要的研究方向和代表工作进行概述,不会详细介绍模型细节,后续会不断更新。
感兴趣可以先看下Marco Baroni 2015在 CAS 做的报告。
目前,sentence representation 从构造原理可以分成两大类,基于 word embedding 的 compositional 类,类似于 word2vec 的 distributed 思想的基于上下文的 distributed 类。
此外,从学习方式上还可以分成几大类,早期基于无监督学习的类型,后来基于监督学习的,以及近期基于多任务学习的类型。很长一段时间,普遍认为基于无监督学习得到的句子表征质量要比基于监督学习的质量好,但现在也开始发生了变化,基于监督学习甚至多任务学习的句向量表征越来越突出。
compositional 类,即单从 sentence 的组成单元 word 上入手,以 word embedding 作为输入,在提取组合高阶特征方面做文章,构成 sentence embedding。
此时,根据提取组合高阶特征方式的不同,又可以分为基于无监督的和有监督两类。
作为无监督方式,虽然简单,但通常是一个不错的 baseline。基本就是对词向量做各种简单的数值运算。
近期 [Alexis Conneau, 2018, What you can cram into a single vector: Probing sentence embeddings for linguistic properties] 工作表明,这种构造实际是一个很强大的 baseline。
[Matt J. Kusner, 2015, From Word Embeddings To Document Distances],以及 [Georgios-Ioannis Brokos, 2016, Using Centroids of Word Embeddings and Word Mover’s Distance for Biomedical Document Retrieval in Question Answering],结合词向量与 TF-IDF,通过编辑距离等简单数值运算,得到句子的质心表征。
[Sanjeev Arora, 2017, A Simple but Tough-to-beat Baseline for Sentence Embeddings],提出利用加权的词向量,并对该句向量减去一个基于主成分构成的向量即可。
[Quoc V. Le, T. Mikolov, 2014, Distributed Representations of Sentences and Documents],把 word embedding 的训练方式应用到 sentence embedding,得到了 doc2vec。
仿照 CBOW 和 Skip-gram 有了下述 PV-DM 和 PV-DBOW 模型:
基本全是监督学习方法了,即构建 NN 来对句子的词向量中进行特征表达,从而作为通用的句向量表征使用。各类方法的区别也是集中于网络结构,以及采用哪种学习任务学习到的句子表征才能更好地泛化到下游任务中去。
[Mohit Iyyer, Varun Manjunatha, 2015, Deep Unordered Composition Rivals Syntactic Methods for Text Classification],提出 RNN 虽然可以组合输入的语义信息,但复杂度过高,deep average network 也可以实现差不多的性能,但复杂度降低了很多,网络结构如下,即通过两层隐层来进一步对 average BOW 进行非线性表达:
[Nal Kalchbrenner, 2014, A Convolutional Neural Network for Modelling Sentences],算是把 CNN 应用到 NLP 的先驱,解决了 CNN 处理变长输入序列问题,尝试解决 sentence modeling 问题,所用模型如下:
[Aliaksei Severyn, 2015, Learning to Rank Short Text Pairs with Convolutional Deep Neural Networks],在 CNN 基础上引入了 IR 中的相似度矩阵,并且提出了和传统特征拼接的思路。
这边算是早期应用,通常取最后时序输出算作句子表征,即 RNN 做 acceptor 使用。提出的工作也很多,就不一一介绍了。
[Alexis Conneau, 2017, Supervised Learning of Universal Sentence Representations from Natural Language Inference Data],是在 SNLI 语料上训练的位于句子编码器顶层的分类器,两个句子共用同一个编码器,这里的编码器采用 max-pooling 操作实现的 biLSTM。
distributed 仿照 word embedding 的 distributed 思想,从 sentence 的 context 去挖掘 sentence 的 representation,即 sentence 成为基本 unit,其他 sentence 成为其 context。
[Ryan Kiros, 2015, Skip-Thought Vectors],提出编解码方式,先对本句使用一个 RNN 作为 encoder,然后对应前一句和后一句各采用一个 RNN 作为 decoder,进行预测,其中的 encoder 可以作为特征提取器用于后续任务。当然,这还是算是无监督学习。基本模型如下:
此外,本文还提出了一种未登录词的词向量扩展方法,值得学习。
不过,这种方法很大的局限在于需要基于大量的平衡的语料进行训练,类似于 Word2Vec 训练的语料量很大,本文是采用电子书的文本进行的训练。
[Lajanugen Logeswaran, 2018, An efficient framework for learning sentence representations],对 skip-thought 模型进行了改进,将预测下一个句子解码任务重新定义为一个分类任务,提升了运行速度。
[Tamara Polajnar, 2015, An Exploration of Discourse-Based Sentence Spaces for Compositional Distributional Semantics],提出 discourse-base 方式作为 distributed 模型,主要研究了 distributed 方式和 compositional 方式在性能上的优劣,最后认为两者几乎一致。这里的模型如下:
这一块单独拎出来讲,因为多任务学习可以视为对 skip-throughts、InferSent 以及其他相关的无监督/监督学习方法的一种泛化,它将多个训练目标融合到一个训练方案中,来学习泛化更好的句表征。
[Sandeep Subramanian, 2018, LEARNING GENERAL PURPOSE DISTRIBUTED SENTENCE REPRESENTATIONS VIA LARGE SCALE MULTI-TASK LEARNING],MILA 和 MS 联合提出的,发现为了能够泛化各类任务中的句子表征,就有必要将一个句子的多个层面的信息进行编码。文章提出了一种一对多的多任务学习框架,通过在不同的任务间进行切换去学习一个通用的句子表征。
这六个任务包括:对于上一个/下一个句子的 skip-throughts 预测、NMT、组别解析、神经语言推理,它们共享同一个由 GRU 得到的句向量。
[Daniel Cer, 2018, Universal Sentence Encoder],MS 提出的,也是在多种数据集上切换各种任务上训练,以期获得适应各种NLP 的句子表征。
从目前 sentence embedding 的应用看来,其表达非常依赖特定任务,即不同的任务需要的 sentence 的关键抽象特征是不同层面的。后面会持续更新。