看了这一篇,做一个笔记,万一以后又做任务二了
按照自己的理解,将其encoding层和inference层。首先明确模型输入: u = [ u 1 u_1 u1, u 2 u_2 u2…], v = […]里面的元素都是300维的glove词向量。
所以 "encode v depending on u"也是一样~
假设u序列本来是n长度,v是m长度的。 u序列经过上面的bilstm变成了 nx2d(记为X);v序列经过上面的bilstm变成了mx2d(记为Y)。然后只要计算 X x Y T Y^T YT就得到了一个 n x m 的权重矩阵。
下面做的就是,我再计算一个东西,就比如
这个东西虽然叫u,但其实是在 v上面做加权求和得到的一个向量。这里面的"权"就是上面计算出来的。
用一句白话说:下面的 u i u_{i} ui(~不会打…) 是由v中m 个向量加权求和得到的。
这里使用了三种方式:
首先看看我们已经有的东西:p和q。p∈n x2d, q∈2d。接下来我们首先要得到的,当然是句子的向量表示,不然怎么分类呢。
其实上面的p和q,跟我们一开始的输入:u和v是差不多的。所以我们重复上面encoding部分的操作。
为什么要maxpooling on word?因为论文同时利用了一开始的输入p(q)以及经过上面操作得到的产物。换句话说,现在一个单词的隐藏层向量有两个,那么我们对于一个单词,都可以从这两个中选择较大的。
这里我认为的maxpooling可以有两种解释:
上面的操作得到了 nx4d 和 mx4d 这两个矩阵。分别代表 一开始的 句子u 和 句子v 到目前为止 各自的 矩阵表示。 我们希望 用一个 向量来表示一个句子。
这里的maxpooling也可以有两种解释:
最后我们终于对输入的两个句子,都得到了 4d维的 向量表示
然后将上面两个向量进行拼接,输入到线性层:
论文做了模型的集成
论文的实验细节
结果
"supplementary material"在哪儿呢…