关于句子embedding的一些工作简介(二)---- InferSent

这篇文章介绍一下2017年影响力非常大的一篇论文 : Supervised Learning of Universal Sentence Representation from Natural Language Inference Data, by Alexis Conneau et al. 迄今为止它在NLP很多任务上都取得了state of art的成绩。

贡献

关于句子embedding已经有过很多的研究了,按照学习方法可以分为无监督和监督学习两大类。一般来讲如果我们需要的是比较generalized,能够用在各种task中的句子embedding, 无监督方法是一个更好的选择,因为它不太容易受到特定的NLP任务的影响,比如说skip-thought就是很好的利用无监督方法产生句子embedding的算法。

然而论文的作者注意到在Computer Vision领域中,很多模型都是先利用ImageNet预先训练好,之后再用在别的任务上去(迁移学习)。也就是说,监督学习一样可以产生transferrable的特征。基于这样的观察,作者希望以监督学习的方式,找到通用的句子表征。但是作者需要回答两个问题:

  1. 什么样的数据是NLP领域的ImageNet
    数据和任务是紧密联系在一起的。什么样的数据+任务是产生好的universal sentence representations 的数据+任务?
  2. 什么样的模型是NLP领域的Le-Net(VGG-Net, Google-Net, Res-Net, etc)

让我们看看作者给出的答案:

  • NLP领域的ImageNet
    作者给出的答案是SNLISNLI全称为Stanford Natural Language Inference Corpus, 它由570k个人造句子对组成。每一对句子都被标记为三个分类之一:entailment(蕴含), contradiction(矛盾) 和 neutral(中立)。ImageNet对应的任务是image classification, SNLI对应的的任务是NLI。
    作者选中了SNLI的原因是,NLI任务的语义学特性应该会使SNLI成为很好的产生universal sentence embeddings的数据(任务)。我觉得找到SNLI是本篇论文的重大贡献。的确,NLI是很好的理解语义的任务,该任务足够具体,以致于好的模型需要区分三种句子对分类,从而产生足够好的对语义的理解;同时又足够一般化,以致于能够避免产生过于task-specific的特征。比如,拿我们熟悉的sentiment analysis任务举例,其句子表征会含有很多有强烈情感信息的特征,这些特征对于情感分析是非常有用的,但是transfer到其他任务中(比如句子分类), 它们可能带来很多噪音。 而NLI任务则足够“粗糙”,它关心的仅仅是句子对之间的相互关系。
    数据(任务)有了,什么样的深度学习模型才是NLP领域的VGG-Net?

这里对比一下CV和NLP,

领域 数据 任务 模型(编码器)
CV ImageNet image classification Le-Net, VGG-Net, Google-Net, ResNet, DenseNet etc.
NLP SNLI NLI ?
  • NLI任务设计
    在介绍句子编码器之前,先看一看NLI任务的整体训练设计。如下图所示:
    关于句子embedding的一些工作简介(二)---- InferSent
    具体流程是:句子对中的每一个句子都传给同样一个sentence encoder, 这个encoder产生的sentence embeddings(图中的uv)要经过3种匹配函数:连接,element-wise的向量差(取绝对值),element-wise的向量积。在这之后经过全连接层传给3-way softmax进行句子关系的预测。

  • 编码器模型
    作者尝试了不同的编码器模型:LSTM and GRUBiLSTM with mean/max pooling; Self-attentive network; Hierarchical ConvNet

    在关注实验结果之前,我们预测一下哪个模型会是合适的编码器模型。

    首先,BiLSTM由于包含了两个方向的信息,一般要好于LSTM/GRU
    然后,ConvNet强于抓取local的信息但缺点是不能很好地概括句子中global的信息,在NLP任务中往往不如LSTM类的模型。
    在各种NLP任务中,attention+(Bi)LSTM效果要强于(Bi)LSTM:因为有了attention机制,我们可以找到每个隐向量在任务中合适的权重,而不是简单的对隐向量做简单的平均。 self-attentive利用一个jointly learned context query vector,来找到隐向量的weight(详见我的另一篇文章:一个Hierarchical Attention神经网络的实现) ,从而实现对隐向量更好的总结(即,找到更好的sentence embedding)。但是,这里找到的对NLI任务有用的weights,并不一定能很好地迁移到其他任务中去。换言之,这里的attention机制会有“过拟合”之嫌。这里的“过拟合”定义为在训练任务中表现的好,但是在transfer任务中表现一般。
    综上所述,我们可以预测(Bi)LSTM是最好的句子编码器。

实验和结果

为了检验编码器的效果,作者使用了12个不同的NLP任务。这些任务大致分为五类:Binary and multi-class classificationEntailment and semantic relatednessSTS14 - Semantic Textual SimilarityParaphrase detectionCaption-Image retrieval。 笼统的说,这五类任务分属于分类问题,相关性问题,或者属于排序问题。
Binary and multi-class classification 包括 sentiment analysis (MR, SST),
question-type(TREC),product reviews(CR), subjectivity/objectivity(SUBJ) 以及 opinion polarity(MPQA)。
Entailment and semantic relatedness 使用了SICK数据,其中SICK-E用来做entailment,SICK-R做semantic relatedness(语义相关)。
STS14 - Semantic Textual Similarity包括了SemEval里的STS14。
Paraphrase detection使用Microsoft Research Paraphrase Corpus。
Caption-Image retrieval用到了COCO数据集。

实验结果如表:
关于句子embedding的一些工作简介(二)---- InferSent

表中的macro指的是对每个任务精度求平均,micro是指基于dev集合数据个数的平均。显然BiLSTM-Max的效果最好。另外,在训练任务(NLI)中表现好的模型,未必在迁移学习中表现的一样好。比如说Inner-attention模型,对比BiLSTM-Mean而言,它在NLI中精度更高,但是在transfer任务中不如后者。如前面的分析所言,Inner-attention更有效的解决了训练任务,但是它学习到的特征未必适用于其它的NLP任务。
另外,SNLI的加强版本–MultiNLI corpus包含了10中不同风格的英文书面语及口语。作者基于SNLIMultiNLI重新训练了模型,并取得了更好的结果。

结语

文章找到了NLP领域的ImageNet和VGG-Net。虽然sentence embedddings是基于supervised任务产生的,可是一样可以很好的transfer到其他任务中去。这给很多缺乏训练数据的NLP任务带来了方便。抽空我会在github中手动实现一下,另外有可能的话,写一个中文版本的InferSent出来。

关注公众号《没啥深度》有关自然语言处理的深度学习应用,偶尔也有关计算机视觉
关于句子embedding的一些工作简介(二)---- InferSent