Learning to Identify Follow-Up Questions in Conversational Question Answering-Follow-Up笔记

Author Avatar
cooscao 7月 22, 2020

Learning to Identify Follow-Up Questions in Conversational Question Answering

论文摘要

  1. 提出一个辨别多轮对话中 follow-up的任务(就是判断下一个问题是不是和之前的上下文相关)

  2. 并提出使用结合以下三种信息

    • 关联文章
    • 对话历史
    • 候选的下个问题

      之间的关系的attentive-pooling networks网络。

数据集

论文数据集的构造是基于QuAC所改的,所以先介绍QuAC

QuAC

这篇文章的数据集是基于18年Allen-AI所提出的QuAC数据集,实质上还是抽取式,与其它数据集不同是

  1. 提问者没有预先看passage,只知道主题,然后跟着主题自由提问。这么做,可以避免提问者受文本影响,从而提出的问题里面包含文本中的原词或者同义词。那么train出来的model,会存在因为word embedding相近,就能预测准确,但其实model并没有真正做到对语义的理解。
  2. 提问的问题之间是有语义关联的,那么这样可以训练model,通过上下文来提取语义的能力。

数据例子

红色我框起来的说明下面的问题是和上面相关的,所以就需要输入之前的context信息去回答这个问题,会比常规的SQuAD难不少。

QuAC的回答者与提问者是分开的(一般数据集都是分开的)。回答者可以看到文本内容,在回答时,答案分成三种,分别是should(确定的),could(可能确定的),No answer(不能回答)三种。对于should和could,回答者需要以text span(文本中的片段)来作为答案。补充一点,QA数据集的答案有:text span(文本片段)、multiple-choice(问题选项)、free-form text(自由生成的文本)等几种。其中text span比较好用来衡量机器是否预测准确。

LIF

这篇文章所提出的数据集被称为LIF

给出一篇文章和对话历史,会给出候选问题,用来判断候选问题是否为follow-up问题,如果是则为Valid,否则为Invalid。

  • 根据QuAC中的should ask作为Valid
  • 由于QuAC的测试集无法获取,将验证集以篇章为单位分出一个测试集
  • Invalid生成方法
  1. 从其它对话中获取一些问题来作为负样本

    • 使用Infersent网络比较其它问题和当前篇章的相似度,选择Top200
    • 使用当前篇章选择好的Valid问题和当前篇章之前的对话历史作为证据,与Top200计算Token的重叠度,并除以Top200中每个问题的长度,来进行归一化,然后设置一个阈值来选取出至少一个至多两个最高数量重叠度的问题来作为负样本Invalid

      这一步和之前我做问答尝试过的Passage Ranking with Weak Supervision这篇文章很像,都是由于如果随机选择负样本的话,由于所属于的篇章的不同,和正样本的差距会太大了,这样模型会很容易分辨。所以采用了一定的方法,使负样本更接近于正样本,更为难分,这样任务会难更多,模型也会学到更深的语义,而不是字面上的相似。

  1. 在同一个对话的已经标注为Valid的follow-up问题之后选择Non-follow-up问题作为负样本

    • 过滤掉包含这些词的问题what else, any other, interesting aspects,举了个例子(Any other insteresting aspects about this article?)
  2. 根据Invalid划分的两种不同方式将测试集分为三种情形

    1. Test-I: 包含了来自其它对话的Invalid和来自同一个对话的Invalid
    2. Test-II: Invalid只来自于其它对话
    3. Test-III: Invalid只来自于同一个对话

  • 数据集的难点

    模型需要去判别当前的问题的主题是否和篇章还有之前的对话一致, 这些是很受一些代词(I, He, My, His….)的影响的,所以在其中所需做的指代消解就是关键。第二点是模型还必需去判断当前问题是否能由篇章和历史对话中推理出答案的,否则就和上述例子中的第二点一样,同样也为Invalid。第三点就是抓住对话中的问题连续性(continuity)和(shift)也是这个任务很有必要的一点

Three-Way Attentive Pooling Network

Attentive pooling Networks

论文

Attentive-Pooling-Network

AP-BILSTM算法的设计是将问题和答案经过BILSTM抽取特征,然后通过问题和答案的特征计算soft alignment(对上下文所以h计算attention),该矩阵包含了问题和答案相互作用的重要性得分,对该矩阵的列取最大,即可得到答案对问题的重要性得分,而对该矩阵行取最大,即可得到问题对答案的重要性得分乘以各自相应的矩阵之后再计算$r_{q}$与$r_{a}$的余弦相似度。

训练时候是使用的$pairwise$方式进行训练,即选取一个正样本和一个负样本,然后损失函数为采用的$Hinge$ $Loss$.

Embedding and Encoding

使用chantacter embedding 和 word embedding 结合,对三种信息分别求出embedding vector.

其中char embedding 使用的是使用的CNN去训练,首先对每个字符取一个随机vector, 比如word这个单词[‘w’, ‘o’, ‘r’, ‘d’], 这样整个句子构成了一个m维的vector,然后通过卷积神经网络之后映射为n维,再取Max-pooling之后得到一个vector(这个阶段是可学习的),将这个vector和word这个词向量拼接起来作为输入。其中词向量是采用的预训练好的glove词向量。

使用LSTM来Encoding输入向量, 其中$H$为LSTM的隐层单元数量,分别得到输出矩阵为

  • 历史对话 $\mathbf{Q} \in \mathbb{R}^{U \times H}$
  • 候选问题 $\mathbf{C} \in \mathbb{R}^{V \times H}$
  • 篇章的句子级别 $\mathbf{D} \in \mathbb{R}^{T \times H}$
Joint Encoding

首先会计算一个历史对话和篇章的相似度矩阵 $\mathbf{A} \in \mathbb{R}^{T \times U} = DQ^{T}$

对$A$做行(row)上的Softmax得到$\mathbf{R} \in \mathbb{R}^{T \times U}$,可以看作篇章中每个句子上Token对应每个历史对话上每个Token的概率,即历史对话中哪些是关键信息。这样对于所有的篇章词,历史对话的总表达可以计算为$\mathbf{G}=\mathbf{R} \mathbf{Q} \in \mathbb{R}^{T \times H}$, (其实就是AP里面的方式),然后这个表达$\mathbf{G}$再和$\mathbf{D}$拼接起来通过另外一个BiLSTM获得篇章和历史对话的Joint Encoding为$\mathbf{V} \in \mathbb{R}^{T \times H}$,这个$V$相当于是篇章的Embedding融合了历史对话的一些信息。

Multi-Factor Encoding

A questionfocused multi-factor attention network for question answering.

看了发现上面的Joint Encoding操作同样是来自于这篇论文的。(真复杂😓)

选取多个因子,如果$m$代表的是因子数量,则

这也是计算Attention的常见方式之一。然后对$F^{[1:m]}$在不同因子上取Max-Pooling,之后获得注意力矩阵$F\in \mathbb R^{T \times T}$, 然后对F同样作用Row-Softmax获得$\tilde{\mathbf{F}}$,这样Self Encoding就可以表示为$\mathbf{M}=\tilde{\mathbf{F}} \mathbf{V} \in \mathbb{R}^{T \times H}$,与之前的Joint Encoding拼接起来之后输入到DNN中获取到$\mathbf{Y}$,再输入到LSTM中获取到最终的Passage Encoding $P \in \mathbb{R}^{T \times H}$

Three-Way Attentive Pooling

先上网络图

Attention Matrix Computation
  • 历史对话和篇章的注意力矩阵$\mathbf{A}_{q, p}=\mathbf{f}_{\mathrm{attn}}(\mathbf{Q}, \mathbf{P}) = PQ^{T}$, $A_{q, p}(i, j)$代表篇章中第i个token和历史对话中第j个token的相似度
  • 候选项和篇章同样计算得到 $\mathbf{A}_{c, p}=\mathbf{f}_{\mathrm{attn}}(\mathbf{C}, \mathbf{P})$
  • 候选项和历史对话计算得到 $\mathbf{A}_{c, q}=\mathrm{f}_{\mathrm{attn}}(\mathbf{C}, \mathbf{Q})$
Attention Pooling

接下来的就是和之前的Attention pooling Network类似,只是对于每个矩阵选取了不同方向上的Max Pooling + Softmax

Candidate Scoring

取了两种情况,就是考虑和不考虑Passage Encoding $P$,得到每个候选项的分数

使用二值交叉熵函数作为损失函数进行训练,而预测时选取一个阈值来预测。

实验

选取了一些BaseLine模型进行比较,最终结果

参考