Heloowird

NLP论文阅读- InferSent

论文题目

Supervised Learning of Universal Sentence Representations from Natural Language Inference Data(InferSent)

背景介绍

许多现代NLP系统依赖以无监督方式在大规模语料上训练得到的词向量,但鲜有大文本块(如句子)级别向量取得了成功。一些无监督地学习句子表示的尝试均未达到令人满意的结果,以至没有得到大规模应用。

如何学习句子通用表示,或者说如何找到一个通用的句子编码器—将句子中的多个单词和短语映射到一个固定长度的向量。这个问题可分解为两个子问题:

  • 需要找到一个优良的神经网络结构
  • 在何种任务上,以何种方式训练该网络

围绕着这两个问题,本文提出了以监督学习方式在Stanford Natural Language Inference数据集学习通用句子表示,并在大部分迁移任务中超过了无监督方法的SkipThought。

何为SNLI?

SNLI数据集[2]共有57万人工生成的句子对,即推理前提(premise)与推理假设(hypothesis),人工标注了句子对存在的以下三种逻辑关系标签:

  • 蕴含(entailment),即由前提可推出假设
  • 矛盾(contradiction),即前提和假设相矛盾
  • 中立(neutral ),即无法判断前提和假设的关系

该语料通常用于自然语言推理 (Natural language inference,NLI)任务,也称为文本蕴含识别(Recognizing Textual Entailment, RTE)。

模型结构

NLI通用训练框架

NLI任务通常有两种模型结构,一种是分别对每个句子进行编码,另一种是使用特征交叉或注意力机制对句子进行联合编码。前一种方式的副产品是可以学习到良好的句子向量表示,后一种更倾向于直奔主题地解决该任务。

本文旨在学习通用的句子表示,故选择前种通用训练方式,使用了一个孪生神经网络(Siamese Network)。Siamese也有连体的意思,对神经网络而言,连体就是共享网络权重[3],在实际操作中,使用同一模型即可。分为3部分:

  1. 使用同一句子编码器对推理前提句子和推理假设句子做编码,分别得到句子向量$u$和$v$
  2. 匹配部分使用拼接concat($u$, $v$),逐元素相乘($u * v$),逐元素差绝对值$(|u - v|)$来抽取相互特征
  3. 经过多个全联接之后,接三分类softmax层

文中接下来比较了7种句子编码器:LSTM最后隐层,GRU最后隐层,BiGRU最后隐层拼接,BiLSTM+Mean Pooling,BiLSTM+Max Pooling,自注意力网络(Inner-attention)和层次卷积网络(HConvNet)。

LSTM和GRU按下不表,下面分别介绍BiLSTM+Max Pooling,自注意力网络和层次卷积网络。

BiLSTM + Max Pooling
BiLSTM-Max网络结构

先通过BiLSTM对句子进行编码,每个$t$时刻的前后向隐层拼接成$h_{t}$;然后将$n$个隐层转化成一个定长向量:具体地,可以$h_{t}$对应各个维度上取$n$个数的最大值(max-pooling)或者求平均(mean-pooling),这样就得到一个维度和$h_{t}$一样的向量来表示句子。

Self-attentive network
Inner-attention网络结构

\begin{equation}
\overline{h_{i}} = tanh(w_{i}h_{i}+b_{i})
\end{equation}
\begin{equation}
\alpha_{i} = \frac{e^{\overline{h}_{i}^{T}}u_{w}}{\sum_{i}e^{\overline{h}_{i}^{T}}u_{w}}
\end{equation}
\begin{equation}
u = \sum_{i}^{n}\alpha_{i}h_{i}
\end{equation}

用BiLSTM进行句子编码,拼接前后向隐层状态$h_{i}$,经过$(w_{i}, b_{i})$仿射变换和$tanh$激活函数,得到$\overline{h_{i}}$。然后计算$\overline{h_{i}}$和上下文向量$u_{w}$相似度$\alpha_{i}$,后面作为$\overline{h_{i}}$的权重;最后各个$\alpha_{i}$乘以$h_{i}$并累加得到句子向量。

这里上下文向量$u_{w}$没有详细说明。在其引用的文章中,有两种方式计算上下文向量。两种方式通过对隐层状态进行变换得到,但变换方式不一样。文中$u_{w}$采用的变换方式[4]如下:
\begin{equation}
\alpha = softmax(w_{s2}tanh(W_{s1}H^{T})
\end{equation}
\begin{equation}
u_{w} = \alpha H^{T}
\end{equation}

当$w_{s2}$为矩阵时,会产出多个$u_{w}$,即多个上下文向量,因此会生成多个句子表示,拼接起来即为句子向量。

Hierarchical ConvNet
层次卷积网络结构

层次卷积结构使用了4层卷积层提取不同层次的特征,额外使用3个max-pooling获取不同层次的句子特征,最后把各个层次的特征拼接起来,得到句子向量。

模型训练

训练超参数

  • SGD with lr=0.1, weight decay ratio=0.99;每遍训练完成时,若验证集上准确率下降,lr=lr/5
  • batch size=64
  • 当lr<$10^{-5}$,停止训练
  • 全联接选用一个含512隐层单元的隐层
  • 选用Common Crawl 840B数据集上300维GloVe向量作为固定的词向量

在迁移任务中,输入为句子编码器输出的句子向量,然后使用batch size=64,Adam方式训练出一个LR作为分类器,比较各个句子编码器的效果。

模型比较

BiLSTM-MaxPooling输出4096维的句子向量在SNLI和迁移任务上表现最佳。有些模型专注于学习目标任务上的句子向量,而忽视通用用途的句子表示,如Inner-attention网络;相反,BiLSTM-Mean不聚焦目标任务所需的特有特征,但学习到了句子的通用信息。

在一定范围内,迁移任务效果随句子向量维度增加而更佳。随着向量维度增大,不同模型具有不等程度抽取信息能力。作者认为有些模型抽取的特征虽然和目标任务不直接相关,但对迁移任务还是很有用。

参考资料:

  1. Supervised Learning of Universal Sentence Representations from Natural Language Inference Data
  2. Siamese network 孪生神经网络
  3. SNLI
  4. A Structured Self-attentive Sentence Embedding