导言
本论文的工作主要是在 'matching-aggregation'的sentence matching的框架下,通过增加模型的特征(实现P与Q的双向匹配和多视角匹配),来增加NLSM(Natural language sentence matching)的accuracy
Relation work
在NLSM中,主要有两个DL的框架:
-
Siamese框架:
介绍:在该框架中,相同的神经网络编码器(例如,CNN或RNN)被单独地应用于两个输入句子,使得P和Q两个句子中的两个被编码到同一嵌入空间中的句子向量中。 然后,仅基于两个句子向量做出匹配决策。
优点: a、共享参数使模型更小更容易训练,b、句子矢量可用于可视化,也可以用到句子聚类和其他目的
缺点:两个句子之间没交互,可能丢失重要信息 -
matching-aggregation 框架
介绍:先对P和Q两个句子进行跟小粒度的匹配(word or contextual vectors),再对他们匹配的结果进行聚集,最后做出决策。
优点:抽取更多的两个句子交互性的特征
缺点:a、仅有word-by-word的匹配,粒度单一 b、P和Q匹配方向单一,只有P←Q的匹配; -
BiMPM创新点:
在matching-aggregation基础上,a、增加P→Q和P←Q连个方向的匹配 b、在每个方向增加不同视角的匹配;
Our model essentially belongs to the“matching-aggregation”framework. Given two sentences P and Q, our model first encodes them with a bidirectional Long Short-Term Memory Network (BiLSTM). Next, we match the two encoded sentences in two directions P→Q and P←Q. In each matching direction, let’s say P→Q, each time step of Q is matched against all time-steps of P from multiple perspectives.
模型介绍
Overview
BiMPM模型的目标是学习条件概率分布:
模型一共5个部分组合而成:
-
Word Representation Layer: 输入的vector由word vector 与 character vector 拼接成
-
Context Representation Layer: 使用Bi-LSTM对P或Q的每个time-step进行上下文词嵌入(contextual embedding)进行编码。
-
Matching Layer: 使用cosine相似度函数,对经Context Representation层后,P中每个time-step 的contextual embedding与Q的所有(all)time-step进行多个(4个)视角的相似度计算(即P←Q相似度匹配),输出 matching vector。反之,反方向P→Q的相似度匹配亦然。
-
Aggregation Layer: 针对Matching Layer输出P或Q每个 time-step的matching vector,用Bi-LSTM进行相似度的聚集成固定长度(fixed-matching)的matching vector,并仅仅将Bi-LSTM两个方向最后一个(last) time-step 的 fixed-matching matching vector 作为该层输出,P与Q分别各输出两个fixed-matching matching vector 。
-
Prediction Layer: 两层全连接层对4个fixed-matching matching vector 进行总结‘consume’,并用Softmax函数作为输出。
Word Representation Layer
为了增加更多的特征信息,该层输入的词向量采用word +character的形式,增加输入不同粒度的信息。
-
word vector:
维度:300-d
来源:GloVe 预训练的词向量 or word2vec -
character vector:
维度:50-d
来源:用LSTM在其他NLSM任务中训练,初始化为20-d,经过LSTM后输出50-d -
输出:将word vector 连接 character vector 句子,该层的输出为 P:\(p_i\) 和 句子 Q:\(q_i\)
#https://github.com/pengshuang/Text-Similarity/blob/master/models/BiMPM.py
if self.args.use_char_emb:
# (batch, seq_len, max_word_len) -> (batch * seq_len, max_word_len)
seq_len_p = kwargs['char_p'].size(1)
seq_len_h = kwargs['char_h'].size(1)
char_p = kwargs['char_p'].view(-1, self.args.max_word_len)
char_h = kwargs['char_h'].view(-1, self.args.max_word_len)
# 用LSTM 将(max_word_len, char_dim)维输出为 (char_hidden_size)维vector
# (batch * seq_len, max_word_len, char_dim)-> (1, batch * seq_len, char_hidden_size)
_, (char_p, _) = self.char_LSTM(self.char_emb(char_p))
_, (char_h, _) = self.char_LSTM(self.char_emb(char_h))
#
# (batch, seq_len, char_hidden_size)
char_p = char_p.view(-1, seq_len_p, self.args.char_hidden_size)
char_h = char_h.view(-1, seq_len_h, self.args.char_hidden_size)
# (batch, seq_len, word_dim + char_hidden_size)
# torch.cat是将两个张量(tensor)拼接在一起,cat是concatnate的意思,即拼接,联系在一起。
# 若矩阵为2维矩阵,按维数0(行)拼接,#按维数1(列)拼接
p = torch.cat([p, char_p], dim=-1)
h = torch.cat([h, char_h], dim=-1)
Context Representation Layer
用Bi-LSTM对 P 或 Q 对输入每个time-step(\(p_i\) 和 \(q_i\) )的进行上下文词嵌入编码(contexture embedding coding),即抽出上下文特征信息。
输入:每个time-step ( \(p_i\) 和 \(q_i\) )
输出:每个time-step( \(\overrightarrow{h^p_i}\) 、 \(\overleftarrow{h^p_i}\) 和 \(\overrightarrow{h^q_i}\) 、 \(\overleftarrow{h^q_i}\))
Matching Layer (创新点)
Matching Layer 中主要负责 P 与 Q 之间 cosine 相似度的匹配计算。其中,主要创新点有两个(BiMPM:bilateral multi-perspective matching):
0、consine相似度匹配函数
在此,对Matching Layer 中,定义了cosine相似度匹配函数 \(f_m\) ,计算两个向量的相似度,公式如下:
其中\(f_m\)为\(cosine\) 函数,\(W\)为可训练参数,\(W\in R^{l\times d}\)(\(W\)的维度是\(l\times d\),\(l\)为视角数,\(d\)为输入向量的维度)。\(m \in [m_1,...,m_k,...,m_l]\),并且 \(m_k\)表示第\(k\)个视角的相似度值,具体为:
1、bilateral
- 双向相似度匹配。除了之前相关工作,只有 P 每个 time-step 与 Q 中所有 time-step 的,P←Q的单向相似度匹配外,增加了只有 Q 每个 time-step 与 P 中所有 time-step 的相似度匹配。即增加了P→Q方向的双向相似度匹配,即双向的相似度匹配。增加了P与Q的相似度的特征信息。
2、multi-perspective
- 多视角相似度匹配。即在P←Q和P→Q中,有单一的每个 time-step 与另一个句子所有(all) time-step相似度匹配,变成每个 time-step 与另一个句子的Full-Matching(所有 time-step 总体相似度)/ Maxpooling-Matching(每个time-step 相似度中最大值) /Attentive-Matching(加权平均 time-step的相似度)/Max-Attentive-Matching 等四个不同视角相似度的匹配。(ps:括号里面为个人理解,不是直译,仅供参考。)
在此,以 \(P ← Q\) 的 foward 方向 \(\overrightarrow{P}\) ← \(\overrightarrow{Q}\) 和 backward 方向 \(\overleftarrow{P}\) ← \(\overleftarrow{Q}\) 为例,分别对Full-Matching、Maxpooling-Matching、Attensive-Matching、Max-Attensive-Matching作简要说明。\(P → Q\) 的 \(\overrightarrow{P}\) → \(\overrightarrow{Q}\) 和 \(\overleftarrow{P}\) → \(\overleftarrow{Q}\) 两个方向上的同理可得。(ps: \(\overrightarrow{P}\) 指 P 在Bi-LSTM的foward放向的 time-step,\(\overleftarrow{P}\) 指 P 在Bi-LSTM 二点backward放向的 time-step .)
- Full-Matching: 句子P中,每一个time-step \({\overrightarrow h}_i^p\) 都与 句子Q中,foward方向最后一个time-step 输出\({\overrightarrow h}_N^q\),进行相似度匹配计算,公式表示为:
并且,\(\overrightarrow{P}\) ← \(\overrightarrow{Q}\) 的 Full-Matching 的图示为:
另外, \(\overrightarrow{P}\) ← \(\overrightarrow{Q}\) 的 Full-Matching 公式,则表示为:
为此,我个人理解为P 中每一个方向(foward/backward)的time-step,都与Q中所有time-step上文或下文(因为foward和backward相似度分开计算的)信息,做一个相似度匹配的计算。这是一个Q全文信息的视角。
- Maxpooling-Matching: 句子P中,每一个 time-step \({\overrightarrow h}_i^p\) 都与 句子Q中,foward方向每一个time-step \({\overrightarrow h}_i^q\),进行相似度计算$ {\overrightarrow m}_i$,并且经过Max-pooling 选取所有 time-step 相似度最大值 \({\overleftarrow m}_i^{max}\),公式表示为:
并且,\(\overrightarrow{P}\) ← \(\overrightarrow{Q}\) 的 Max-Matching 的图示为:
另外, \(\overrightarrow{P}\) ← \(\overrightarrow{Q}\) 的 Max-Matching 公式,则表示为:
同样,我个人理解为P 中每一个方向(foward/backward)的time-step,采用Max-pooling选择Q中所有time-step上文或下文相似度最高的信息。这是一个Q最大相似度的视角。
- Attentive-Matching: 句子P中,每一个 time-step \({\overrightarrow h}_i^p\) 都与句子Q中,foward方向所有time-step的加权平均(attentive) \({\overrightarrow h}_i^{mean}\)(权重为cosine距离),进行相似度计算 \({\overrightarrow m}_i^{att}\) 。其中,
\({\overrightarrow h}_i^{mean}\) 的计算公式为:
\(.\)
因此,\({\overrightarrow m}_i^{att}\)的相似度计算则为:
并且,\(\overrightarrow{P}\) ← \(\overrightarrow{Q}\) 的 Attentive-Matching 的图示为:
另外, \(\overrightarrow{P}\) ← \(\overrightarrow{Q}\) 的 Attentive-Matching 公式,则表示为:
为此,我个人理解为P 中每一个方向(foward/backward)的time-step,与Q中所有time-step上文或下文加权平均值的\({\overrightarrow h}_i^{mean}\),做一个相似度匹配的计算。这是一个Q平均相似度的视角。
- Max-Attensive-Matching: 句子P中,每一个 time-step \({\overrightarrow h}_i^p\) 都与句子Q中,foward方向所有time-step的最大attentive的 \({\overrightarrow h}_i^{max}\),进行相似度计算\({\overrightarrow m}_i^{max-att}\)。(ps:与Max-pooling有点区别,Max-pooling选择所有经\(f_m\)计算后\({\overrightarrow m}_i\)中的最大值,其cosine相似度有可训练参数W参与计算。而这里,是纯粹\({\overrightarrow h}_i^q\) 与\({\overrightarrow h}_i^q\) 的cosine距离\({\overrightarrow m}_{i,j}\)(其cosine相似度没W参与计算),选择\({\overrightarrow m}_{i,j}\)对应最大的\({\overrightarrow h}_i^q\),再计算出其相似度\({\overrightarrow m}_i^{max-att}\))。另外,Max-Attensive-Matching 的公式与Attensive-Matching 极为相近,区别是\({\overrightarrow h}_i^{mean}\) 变成 \({\overrightarrow h}_i^{max}\) ,而\({\overrightarrow h}_i^{max}\)计算公式为:
而\(\overrightarrow{P}\) ← \(\overrightarrow{Q}\) 的 Max-Attentive-Matching 的图示为:
为此,我个人理解为P 中每一个方向(foward/backward)的time-step,与Q中所有time-step上文或下文加权平均值的\({\overrightarrow h}_i^{max}\),做一个相似度匹配的计算。这是一个Q每个time-step最大cosine距离相似度的视角。
3、BiMPM与之前Matching-Aggregation之间Matching Layerde的对比
总来的说,BiMPM的Matching Layer与之前的Matching-Aggregation匹配框架相比较:
-
匹配方向的创新:
之前:单向匹配:\(P ← Q\)(\(\overrightarrow{P}\) ← \(\overrightarrow{Q}\) 和 \(\overleftarrow{P}\) ← \(\overleftarrow{Q}\) )
BiMPM:双向匹配: \(P ← Q\)(\(\overrightarrow{P}\) ← \(\overrightarrow{Q}\) 和 \(\overleftarrow{P}\) ← \(\overleftarrow{Q}\) )和 \(P→Q\)(\(\overrightarrow{P}\) → \(\overrightarrow{Q}\) 和 \(\overleftarrow{P}\) → \(\overleftarrow{Q}\) )! -
匹配视觉的创新:
之前:单一视觉: Full-Matching
BiMPM:多种视觉: Full-Matching/ Maxpooling-Matching /Attentive-Matching/Max-Attentive-Matching -
每个time-step输出的matching vector形式
之前:2个matching-vector concatenate。\(\overrightarrow{P}\) ← \(\overrightarrow{Q}\) 和 \(\overleftarrow{P}\) ← \(\overleftarrow{Q}\) 各单个视角的 matching vector 作 concatenate。
BiMPM:8个matching-vector concatenate。\(\overrightarrow{P}\) ← \(\overrightarrow{Q}\) 和 \(\overleftarrow{P}\) ← \(\overleftarrow{Q}\) (或\(\overrightarrow{P}\) → \(\overrightarrow{Q}\) 和 \(\overleftarrow{P}\) → \(\overleftarrow{Q}\) )各4个视角的 matching vector 作 concatenate。
Aggregation Layer & Prediction Layer
该层将上层输出相似度向量matching-vector \(m_i\),按Bi-LSTMde foward 和backward作信息聚合/特征提取,并将foward 和backward的最后time-step 的 fixed-length matching-vector 输出至2层全连接层的 Prediction Layer 中,最后采用 softmax 作分类。如图示,其中,图中4个绿色的vector为 fixed-length matching-vector:
实验与总结
1、BiMPM在NLSM中有效:在Paraphrase Identification实验中,BiMPM的Acc能高于之前state-of-art 2.6%。但对于实际应用,要考虑即训练难度和inference速率。
2、双向和四种视角都对BiMPM有部分促进作用。
1、BiMPM在inference任务中效果一般,甚至在相对与state-of-art还有差距。
2、虽然BiMPM在Ensemble情况下Acc最高,但也只搞0.5%,个人认为有待商榷。
1、BiMPM在针对不同些数据集效果不同。
- 总体收获:
1、该模型给我最大的思路是,针对提升NLP任务的性能提升,可以从增加正向逆向与增视角信息的方面考虑(但还是有点炼丹学)。 2、cosine函数作为Matching Layer的输出,可以将其与sigmoid和tanh激活函数作简单比较,这里包含可训练参数W的cosine函数已经可以看作相似度的激活函数。它将P与Q信息投影至一个相似度空间,然后经过Aggregation Layer作相似度的信息聚合,经全连接层分类。