基于SQuAD数据集,作者提出了一个多视角上下文匹配模型,可以直接预测答案在文章(passage)的起始位置和开始位置。首先,模型通过乘以针对问题计算的相关权重来调整passage中的每个词嵌入向量,然后,使用BiLSTM来对问题和加权后的passage进行编码,接着,针对passage中的每个点,模型结合编码后的问题对每个点的上下文进行多个视角的匹配,并产生一个匹配向量。在这些匹配向量上,再使用另一个BiLSTM对信息进行集成,最后预测开始和结束索引。
MC模型需要理解段落中的问题、原因,然后确定答案范围。答案要限定于原文,模型只需要判断原文中哪些词是答案即可,是一种QA抽取任务。如果这个上下文与问题非常相似,则这个范围很可能是正确答案。
形式上,将SQuAD数据集表示为三元组:
MC任务可以表示为基于训练集估计条件概率,通过以下方式预测测试实例的答案。
其中是P的一组候选答案。
对预测起点和终点进行简单的独立假设,将模型简化为:
通过glove、word2vec将词和字符映射为向量,并输入到LSTM中,输出为:
大多数情况下,回答问题只需要文章的一小部分,因此采用filter layer来过滤掉文章中的冗余信息(「如果passage中的单词与该问题更相关,在后续步骤中应该考虑该单词的更多信息。」)。
首先,计算passage中的每个单词与question的每个单词的相关度:
其中表示passage的每个单词的相关度。
然后通过过滤掉每个单词向量,并将传递到下一层。
该层的目的是将上下文信息整合到passage和questions中的每个时间步的表示中。
「本篇文章的核心层,目标是从多个视角比较passage和questions的每个context embedding,主要将多视角匹配函数定义为两个方向。」
返回值m是一维向量,m是视角或者是选取特征的数量,是从第k个角度来看的匹配值。通过两个加权向量之间的协正弦相似度进行计算。
采用三种匹配策略,将得到的向量连接后为
「Full-Matching」:将段落的每个前向(或后向)上下文嵌入与整个问题的前向(或后向)表示进行比较。
「Max Pooling-Matching」:将段落的每个前向(或后向)上下文嵌入与整个问题的前向(或后向)表示进行比较,并且保留最大值。
「Mean Pooling-Matching」:与上面类似,只是将max运算换成mean。
最终的匹配向量为:
该层用于汇总匹配向量,以便passage的每个时间步都可以与周围的位置进行交互。本文将匹配向量与BiLSTM结合在一起,并为每个时间步生成聚集向量。
对于多视角层,max polling起的作用最大。
比较老的MC论文,采用的匹配机制,通过多视角的方法取得了不错的效果,但是现在在各种注意力的加持下,显得这种方法可能过于简单。
欢迎关注微信公众号:自然语言处理CS,一起来交流NLP。