DR-BiLSTM: Dependent Reading Bidirectional LSTM for Natural Language Inference
前言
看了这一篇,做一个笔记,万一以后又做任务二了
前人的工作(不重要)
模型(*)
按照自己的理解,将其encoding层和inference层。首先明确模型输入: u = [ u 1 u_1 u1, u 2 u_2 u2…], v = […]里面的元素都是300维的glove词向量。
encoding层
先说 “encode u depending on v”:
- 首先在v上做bilstm,得到两个返回值,分别是 每一个时间步的隐藏层输出 和 (最后时间步的隐藏层,记忆细胞)
- 然后把 (最后时间步的隐藏层,记忆细胞)作为下一个bilstm的 隐藏层、记忆细胞的初始化权重,这个bilstm在u上面做, 也得到两个返回值,但我们只需要前面那个(u^),可以把它理解为: 融合了 v的信息, 并且也捕捉了u的上下文信息之后的, 在u上的每一个时间步的隐藏层输出
所以 "encode v depending on u"也是一样~
attention
计算一个权重表
假设u序列本来是n长度,v是m长度的。 u序列经过上面的bilstm变成了 nx2d(记为X);v序列经过上面的bilstm变成了mx2d(记为Y)。然后只要计算 X x
Y
T
Y^T
YT就得到了一个 n x m 的权重矩阵。
利用这个权重表,用u表示v;用v表示u
下面做的就是,我再计算一个东西,就比如
这个东西虽然叫u,但其实是在 v上面做加权求和得到的一个向量。这里面的"权"就是上面计算出来的。
用一句白话说:下面的
u
i
u_{i}
ui(~不会打…) 是由v中m 个向量加权求和得到的。
利用上面计算的东西(也就是attention得到的产物)
这里使用了三种方式:
- 简单的拼接
- 相减
- 对应元素相乘
- 最后把他们一起拼接起来
上面那个东西是 n(或者是m) x 8d 维的矩阵,然后经过一个线性层+RELU,得到一个 n(或者是m) x 2d维的东西:
inference
首先看看我们已经有的东西:p和q。p∈n x2d, q∈2d。接下来我们首先要得到的,当然是句子的向量表示,不然怎么分类呢。
得到句子向量表示
重复上面
其实上面的p和q,跟我们一开始的输入:u和v是差不多的。所以我们重复上面encoding部分的操作。
maxpooling on word
为什么要maxpooling on word?因为论文同时利用了一开始的输入p(q)以及经过上面操作得到的产物。换句话说,现在一个单词的隐藏层向量有两个,那么我们对于一个单词,都可以从这两个中选择较大的。
这里我认为的maxpooling可以有两种解释:
- 考虑一个位置的词向量,它可以选择-和^中max的哪一个
- 考虑一个位置的词向量,它的所有位置都是在-和^对应位置max的那一个(原文应该用的这个)
maxpooling on sentence
上面的操作得到了 nx4d 和 mx4d 这两个矩阵。分别代表 一开始的 句子u 和 句子v 到目前为止 各自的 矩阵表示。 我们希望 用一个 向量来表示一个句子。
这里的maxpooling也可以有两种解释:
- 考虑一个句子,它可以选择n个词向量中最大的那一个
- 考虑一个句子,它4d维上的每一个句子,都是在n个词向量中对应位置上选择了max的那一个
最后我们终于对输入的两个句子,都得到了 4d维的 向量表示
MLP
然后将上面两个向量进行拼接,输入到线性层:
其它细节
论文做了模型的集成
论文的实验细节
结果
问题
"supplementary material"在哪儿呢…