[阅读笔记] Semantic Sentence Matching with Densely-connected Recurrent and Co-attentive Information

1. Abstract

句子匹配被广泛应用于各种自然语言任务,例如:自然语言推理 (natural language inference,NLI)、释义识别 (paraphrase identification) 以及问答 (question answering)。这些任务都要求模型能够很好地对句子之间的逻辑和语义关系建模。虽然注意力机制对于捕捉语义关系非常有用,但是仅仅使用求和运算的注意力机制并不能很好地保留原始特征。收到 DenseNet 的启发,本文提出了一种 densely-connected co-attentive recurrent neural network,每层使用 attentive 特征以及所有之前的 recurrent 层的隐藏状态特征, 它能够保留从最底层的 word embedding 层到最上层的 recurrent 层所有的原始信息和 co-attentive 特征信息。为了缓解 dense 拼接操作带来的特征维度不断增大的问题,在 dense 拼接之后使用 autoencoder 降维。

作者在与句子匹配相关的多个流行的基准数据集上评估提出的模型。实验结果表明,该模型保留了 recurrent 和 attentive 特征,成为了大多数任务新的 SOTA。

2. Introduction

句子语义匹配是 NLP 中的一个基本技术,要求捕捉词级别以及短语或者固定搭配甚至更高级别的语义。在 paraphrase identification 中句子匹配被用来识别两个句子是否具有相同的含义;在 NLI 中被用来识别文本蕴含 (textual entailment) 关系,即判断给定的 hypothesis sentence 是否能够合理地从给定的 premise sentence 中推理得到;在问答中,句子匹配有两个层面,一种是 query 和数据库中 question 的匹配用于获取 question,另一种是 question 和 answer 之间的匹配用于答案选择。然而,由于语义之间的 gap,识别两个句子之间的逻辑和语义关系并不容易。

近些年来深度学习的进步使得其可以用来为句子匹配学习文本语义。大量的标注数据比如 Quota、SNLI 以及 MultiNLI 已经为学习语义做出了较大的贡献。传统方法中,匹配模型有两种训练方法。一种是基于句子编码,每个句子以一种完全独立的方式被编码为固定长度的向量,然后这两个句子的表示向量用于预测匹配度,这种方式就是前一篇综述中提到的“表示模型”。另一种是联合方法,这种方法使用比如说 attentive 信息这种句子间的交互特征,上篇综述中也提到了,叫做“交互模型”。

在第一种范式中,由于两个句子没有交互,故而无法在编码的过程中使用交互信息。本文提出了一种联合方法能够利用交互信息提高在任务上的表现。更具体地说,本文采用了更深的 RNN 来进行句子匹配,类似于深度神经机器翻译 (NMT)。深度循环模型对于学习长序列更有利,优于较浅的结构。然而由于梯度消失问题注意力机制在深度模型中并不稳定,尽管 GNMT (Google’s neural machine translation system) 在循环层中使用了残差连接以提供更好的信息和梯度流,但仍存在一些限制。循环层的隐藏状态以及 attentive 特征仍无法通过残差连接完整保留,因为求和操作可能会阻碍深层网络中的信息流。

本文提出的模型 Densely-connected Recurrent and Co-attentive neural Network 简称为 DRCN,其结构如下图所示:

image-20210131212300210

DRCN 在三个句子匹配任务上 (natural language inference, paraphrase identification and answer sentence selection) 进行评估,5 个流行的数据集:SNLI, MultiNLI, QUORA, TrecQA and SelQA

3. Methods

3.1 Word Representation Layer

拼接了 word embedding、character representation 以及 exact matched flag。解释一下 exact matched flag,应该就是表示两个句子中完全相等的词或者说经过 stem 或 lemma 之后一样的元素。最终 word (p_i) 可以表示为:

image-20210131215023175

其中 (E^{tr}) 表示可学习的词向量,(E^{fix}) 表示固定的词向量,这种做法是因为不固定随着任务一起更新的话能够更好地捕捉训练数据的特征,但也容易过拟合,固定的词向量虽然不够灵活但是不容易过拟合,所以干脆两个拼接一起使用。Char-Conv 表示随机初始化的字符级别的 embedding,通过卷积和池化得到对应的词表示。(f_{pi}) 表示当前词是否在另一个句子中出现,出现则为 1。

3.2 Densely connected Recurrent Networks

顺序堆叠的RNN,上一层的输出序列构成下一层的输入序列,(H_l) 表示 stacked RNN 中的第 (l) 层 RNN,RNN 具体使用 LSTM。在时间步 (t),stacked RNN 可以表示为:

image-20210131221044670

仅仅使用这种方法通常网络无法做到很深,会出现梯度消失的情况。所以就有了引入残差连接缓解这个问题:

image-20210131222048554

但是上面这种求和操作可能会阻碍网络中的信息流动。所以本文受到 DenseNet 启发使用拼接操作,使得来自前面层的信息不被修改地保留下来:

image-20210131223828263

拼接操作使隐藏状态特征得以保留,直到它们到达最上层,并且所有先前的特征都作为集体知识进行预测。

3.3 Densely-connected Co-attentive networks

image-20210131225159521

上式中,(p,q) 表示两个句子,(h_{p_i}) 表示句子 p 在 RNN 中的隐藏状态, attention 的整个过程是这样的:

使用句子 p 中的第 i 个词在 RNN 中的隐藏状态分别和句子 q 各个词的 RNN 隐藏状态计算余弦值,这个余弦值也就表示了词与词之间的相似度,然后利用这个相似度计算 attention 的权重 (alpha_{i,j}),然后利用权重对句子 q 各个词的 RNN 隐藏状态加权求和得到句子 pi 个词对于句子 q 的 attentive 信息。

此时 stacked RNN 的表示也就变成了:

image-20210131230821442

3.4 Bottleneck component

由于一直使用的拼接操作,所以 RNN 的输入维度会不断增大,层数越深,参数将会急剧增多,为了解决这个问题,本文使用了 autoencoder 作为 bottleneck component 降低特征维度,在保留原始信息的情况下蒸馏出语义知识用于预测。同时,也可看作是正则化手段,它可以提高测试集上的表现。

3.5 Interaction and Prediction Layer

最终的预测层,首先对前面的 RNN 输出的隐藏状态在句子长度上进行 max-pooling,比如说 RNN 输出为 30*100 的矩阵,30 表示句子长度,100 表示句子中每个词的隐藏表示,经过 max-pooling 得到句子最终 100 维的表示向量,按照如下方式抽取最终的特征向量:

image-20210131232751143

其中的运算都是逐元素操作的,即最终会得到 500 维的特征向量。加减运算呢应该是手动构造一些特征让网络更容易学习收敛,比如说,如果 p 和 q 是同一个句子,那么它们的表示应该是一致的,那相减后就应该为 0,模型见到 0 后就可以判断这俩语义相同了,那如果不手动构造呢,比如说:(v=[p;q]),神经网络应该是也能学习到上面的关系的,只不过可能费劲些。

最后在 (v) 的基础上再堆两层使用 ReLU 的全联接,最后的损失包括多分类交叉熵损失以及 autoencoder 的重构损失。

4. Experiments

实验结果上,除了使用预训练的 ELMo 和 LM-Transformer,在 3 个任务 5 个数据集上 DRCN 都是最佳。并且结合 ELMO 和 DRCN 能有更好的效果。

4.1 消融实验

下图的结果反映了各个组件在模型中的重要性,-* 表示去掉这个组件。

image-20210201103753512

参考

[1] Kim S, Kang I, Kwak N. Semantic sentence matching with densely-connected recurrent and co-attentive information[C]//Proceedings of the AAAI conference on artificial intelligence. 2019, 33(01): 6586-6593.

原文地址:https://www.cnblogs.com/xxBryce/p/14355448.html