@songying
2019-03-18T16:06:48.000000Z
字数 1812
阅读 1387
阅读理解-蛮荒时代
https://blog.csdn.net/u010995990/article/details/79229257
论文中通过将文档中的实体匿名,生成了 (passage,query, answer) 三元组。数据集如下:
CNN&Dailymail 数据集的答案是某种实体对象,答案一定出现在原文中。采用命名实体替换是为了使得问题更复杂,正确回答问题的唯一策略就是利用好上下文。
Deep LSTM Reader 思想其实很简单,我们的输入为: document ||| query
或 query ||| document
,两者区别不大,|||
作为 document
与 query
的分隔符。 模型直接采用一个两层的LSTM 来处理document
与 query
转化后的词向量, 然后直接将双层LSTM的输出作为接下来分类模型 g 的输入,然后预测就完事了。
怎么样,是不是很简单,很粗暴,这就是最初的基线模型,真的不要太简单。
该模型的缺陷也很明显,首先, passage 与 query 能否一起做上下文处理? 这样不会导致内部信息紊乱?其次, 将passage 与 query 压缩为一个固定长度的向量,这里面会有很多的信息被损失掉了。最后,实在太粗糙了。。。
Attentive Reader 就有点常规模型的样子了。
首先,采用双向LSTM分别对 passage 与 query 进行 Embedding 来获得上下文表示;其中要注意的是对于 passage 而言,其获得的是一个矩阵 y,矩阵的每一列是 passage 中词的上下文表示; 而对于 query, 其将整个信息压缩为一个向量 u。
其次是注意力机制的使用,这里的 Q 为 passage的表示 y, Key 为 query的表示 u, 这里的注意力机制计算公式为:
最后是以 r, u 作为接下来分类模型的输入。
我们看到,与上一个模型相比,该模型就要好很多了,至少从思想上挑不出什么毛病,后续的模型很多都是从该模型改进而成。
但可能会存在一个问题,如果 query 的长度也很长,那么压缩成一个向量,其信息的损失不得不考虑进去。
Impatient Reader 可以是有点矫枉过正的意思,论文里的描述有些粗糙。 我简单介绍一下思想:
首先,采用双向LSTM分别对 passage 与 query 进行 Embedding 来获得上下文表示;此时passage 获得是是一个矩阵 y_p , query 获得的也是一个矩阵 y_q。
我们要求得,对于 y_p 中的每一个 token, 来对 y_p 求注意力值,比如 passage 的第 t 个token 与 query 中的第 i 个 token, 要注意的是,前一时刻获得到的 对当前时刻是有影响的,其注意力计算如下:
最后,我们以最后一个 r 与 u 作为输入输入到后续的分类模型中即可
从上面的公式,我们也看到,这个模型相比要复杂很多,但真的有必要吗,我倒是觉得要具体情况具体分析。 而最终的实验也表明, Impatient Reader 与 Attentive Reader 相比, 其结果相差并不大,且谁好谁坏还不一定呢。