Introduction

Natural Language Inference任务介绍
NLI又叫做recognizing textual entailment. 是用来确定两句话是不是蕴含关系.
第一句话作为premise, 第二句话作为hypothesis, 则两句话的三种关系定义如下:

  • entailment(如果premise为真, 则hypothesis也必须为真)
  • contradiction(如果premise为真, 则hypothesis必须为假)
  • neutral(既不是entailment, 也不是contradiction)

Model

Interactive Inference Network(IIN)

先介绍下基础的IIN
模型主要包括五部分, 每部分都可以用不同的方式实现.

  1. Embedding Layer: 将词或者短语转换为向量表示, 并构造句子的矩阵表示.
    可以直接使用预训练的词向量, 比如word2vec, glove等等.
    为了提高效果, 还可以利用词性标注, 命名实体识别等方法获取更多词汇和句法信息.
  2. Encoding Layer: 对Embedding Layer的输出进行编码, 这部分可以选择不同的编码器, 比如BiLSTM, self-attention等等. 不同的编码器可以结合使用来获得更好的句表示.
  3. Interaction Layer: 生成premise和hypothesis之间的interaction tensor.
    Interaction有多种不同的建模方式, 比如计算余弦距离, 点积等等.
  4. Feature Extraction Layer: 解析从Interaction layer获取的语义特征. 这部分作者使用的2-D的CNN
  5. Output Layer

Densely Interactive Inference Network(DIIN)

进入正题, 介绍DIIN. DIIN的基础结构和IIN是一样的.

Embedding Layer

Embedding部分, 作者使用了word embedding, character feature和syntactical features进行拼接.

word embedding直接用的预训练的GloVe, 注意, 作者在训练时会对词向量进行更新.

character feature是通过一维的卷积来实现的, 卷积后进行max-pooling. 作者指出, character feature有助于解决OOV问题. CNN在premise和hypothesis之间共享权重.

Syntactical feature包含词性标注的one-hot向量和 binary exact match feature.

Encoding Layer

将上层得到的premise表示 P P P和hypothesis表示 H H H先通过一个两层的highway network得到 <mover accent="true"> P ^ </mover> \hat P P^ <mover accent="true"> H ^ </mover> \hat H H^作为新的表示.

然后, 通过self-attention layer获取词序和上下文信息. self-attention过程如下:

之后,将 <mover accent="true"> P ^ </mover> \hat P P^ <mover accent="true"> P ˉ </mover> \bar P Pˉ拼接并送入fuse date.

用同样的方法得到 <mover accent="true"> H ~ </mover> \tilde H H~

Interaction Layer

这里 β ( a , b ) = a b \beta(a,b)=a\circ b β(a,b)=ab, 也就是element-wise product

Feature Extraction Layer

这部分作者将DenseNet作为CNN特征提取器.
另外, 作者在实验时发现batch normalization会延迟收敛, 而且没有提高准确率, 所以他们没用.

在得到Interaction Layer输出后, 先用1x1的卷积降维.注意这部分卷积不用ReLU激活.
假如输入通道数为 k k k, 输出通道变为 f l o o r ( k × η ) floor(k \times \eta) floor(k×η).

接着输入到DenseNet中, 每个DenseNet块包含n层3x3卷积, growth rate为g.

Output Layer

全连接做分类

实验

数据

  • SNLI
  • MultiNLI
  • Quora question pair

参数设置

optimizer: Adadelta( ρ = 0.95 \rho=0.95 ρ=0.95, ϵ = 1 e 8 \epsilon=1e-8 ϵ=1e8)
learning rate: 0.5
batch size: 70
模型不能进一步收敛后, 使用SGD(learning rate=3e-4)继续训练
在每个线性层之前都用了dropout.
word embedding: 300D GloVe 840B
character embedding: 随机初始化 100D
1维的character embedding卷积核设置为5