问答也可以结合知识图谱

Knowledge-based Question Answering and How to Evaluate QA models

Featured image

上一篇介绍了如何利用Information Retrieval和阅读理解模型来做单步乃至多步推理问答系统.

本文介绍另两种问答系统的思路:

以及如何评价问答系统.


基于知识图谱的问答

将提问文本转化为对数据库的查询语句,然后通过查询已有数据库得到问题的答案.
其中语义解析器(semantic parser)负责将提问文本转化为按固定逻辑表达的查询语句, 而数据库可以是真正的关系型数据库,也可以是一堆三元组(RDF triples)1.

以三元组为例,问答任务可以定义为根据提问找到对应的三元组,并返回提问所需的三元组成员.
eg

基于规则的方案

很常见的提问可以直接写规则找到三元组.
比如问某个实体的生日日期,可以先正则表达式找到提问中的when和born,然后跑个命名实体识别得到实体名.

有监督模型

少数情况中我们有标注数据.

模型会在训练中总结出提问的套路,形成对一类提问的解析规则(parsing rule).

也有论文证明过即使是较复杂的逻辑关系也可以这么学出来.

半监督/无监督模型

问题是大多数情况下我们都没有专门的标注数据.也没有数据库.
所以模型一般都依赖于网络上的文本会有重复(textual redundancy).

步骤

  1. 先用开放信息抽取(Open Information Extraction) 来抽取网络文本中的三元组,形成一个庞大的知识库.
    英文抽取器有REVERB和它的升级版OpenIE 5.
    • “1732”这种对时间描述 可以用SUTime标准化
  2. 将提问文本转化为标准化的查询语句
    • 实体转化为数据库中的某个概念
      “Fragonard”用Entity Linking2对应到维基百科的一页
    • 实体间的词组转化为数据库中的某种关系
      目前已经有人生成了一系列能对应到Freebase relation的惯用词组列表.
       对应到country.capital关系的惯用词组:
       capital of, capital city of, become capital of, capitol of, national capital of, official capital of, ..., federal capital of, beautiful capital city of
      

      如果提问文本中的谓语词组能与列表中的词组对应,那么就对应上了Freebase的关系.

    • 或者把提问按写好的模板转化为查询语句
      | - Question Type - | ——— Pattern ——– | —- Query —- |
      | Question (1-Arg.) | how big is e population | population(?, e) |
  3. 同义提问聚类
    利用[WikiAnswers语料库]训练同义句模型,将同义不同表达的提问对应到同一个查询语句上.
    可以参考PARALEX模型
    • 像下面这堆提问应该被聚类到同一个群里, 然后通过查询找到同一个三元组authored(milne, winnie-the-pooh)来回答
      eg

结合TBQA和KBQA的工业QA

在实际工业应用中,我们其实不拘泥于达到目的的方式, whatever works.
我们可以从Text-based模型和Knowledge-based模型中分别得到大量的备选答案,
为备选答案设计支撑他们是答案的特征,然后通过分类器给他们打分,选择分数最高的备选答案作为最后输出.
注意分类器的输入将非常不平衡,因为大部分都是错误答案,只有一小部分是正确答案. 这时候常用的处理方式有Instance weighting.
这类的模型可以参考IBM的DeepQA,由于里面太多rule-based的设计,细讲实在没意思,这边就不展开说了.
eg

另外一种结合TBQA和KBQA的方式——把外部知识也做成表示向量
具体可以看KABLSTM模型 代码
model


如何评价问答系统

测试集

TriviaQA

9.5万个人工生成的提问-回答对子.共65万条数据, 每条是(提问, 回答, 支撑证据)
平均每个问答对子有6条支撑数据.

RACE

基于中国初高中学生的英语测试
英语老师们从2.8万篇文章中提出10万个问题,数据集对模型的推理能力会有高要求.

NarrativeQA

提问基于长文本.
人工从1572个故事(书/电影脚本、以及它们的人工摘要)中,提取出4.6万个问题及其答案.

QuAC

首先, logo是个小鸭子也太可爱了!

跟SQuAD2.0数据集设定差不多但是包含了一个新的对话相关部分.十万个问答.

AI2 Reading Challenge(ARC)

针对简单使用lexical method的模型的对抗测试集. 7千多个问题.


评价指标

Mean Reciprocal Rank(MRR)

衡量模型输出的答案是否正确

\(MRR = \frac{1}{N}\sum_{\substack{i=1{}\\s.t. rank_{i} \neq 0}}^{N} \frac{1}{rank_{i}}\)

要求每个问题有标注好的正确答案,且模型会输出排好序的备选答案.
精髓是找到在模型输出的一堆可能答案中, 第一个正确答案排第几.整个模型的MRR是每个问题MRR的平均.

Exact Match

要求每个问题有标注好的正确答案.
精髓是百分之几的输出答案与问题的正确答案完全重合(忽略标点和量词后)

F1 score

要求每个问题有标注好的正确答案.
将输出答案与正确答案看成两袋词语,算每个问题的F1. 模型的F1是每个问题F1的平均值.


Reference


  1. 回忆到三元组是一种描述一对实体之间关系的形式, 比如
    | Subject | Predicate | Object |
    | Flora | birth-month | 12 | 

  2. 回忆到Entity Linking任务,就是把一段字符对应到一个维基百科的页面.