问答系统是近几年大火的nlp应用之一,很多公司不论大小都一窝蜂地研发问答机器人、智能客服。不论是搜狗机器人汪仔在《一战到底》中战胜人类选手,还是前阵子火爆的直播答题类软件,都加速了问答系统走入大众的视野。但是不得不说,即使问答系统前景如此广阔,其背后的技术仍没有达到十分成熟的地步。我从去年9月开始接触QA到现在,对这一领域的一些常见任务和方法都有了初步了解,现做一个总结。

根据应用场景和需求的不同,QA任务的建模过程千变万化。我将从知识的来源、答案类型、交互方式、业务场景及问题类型五个方面对QA任务进行分类,分别展开介绍。

按知识来源划分


回答一个问题需要有依据,人类在回答问题时,会去大脑中搜索相关的内容,然后给出答案;而机器要想实现自动问答,也需要从外部获取知识(或依据)。就好比学生上学时学习知识,并把知识存在大脑中;考试时看到考题,会回忆学习过的相关知识,从而给出答案。机器没有学习知识的过程,我们需要将知识作为结构化或非结构话的数据供其访问,作为其回答问题的依据。根据知识来源的不同,问答系统可以分为以下三种任务:基于知识库的问答、基于文档的问答、答案选择。

KBQA 基于知识库的问答

参考资料:
KBQA从入门到放弃 <https://zhuanlan.zhihu.com/p/28553553>
揭开知识库问答KB-QA的面纱 <https://zhuanlan.zhihu.com/p/25735572>
肖仰华 | 基于知识图谱的问答系统
<http://blog.csdn.net/TgqDT3gGaMdkHasLZv/article/details/78146295?%3E>

给定自然语言问题,通过对问题进行语义理解和解析,利用知识库进行查询、推理得出答案。
其特点是,回答的答案是知识库中的实体。

当我们在百度询问 2016年奥斯卡最佳男主角 时,百度会根据知识库进行查询和推理,返回答案,这其实就是KBQA的一个应用。

知识库通常由大量的三元组组成,每一条三元组包括:entity - relation -
entity,如果我们把实体看作是结点,把实体关系(包括属性,类别等等)看作是一条边,那么包含了大量三元组的知识库就成为了一个庞大的知识图。


这里根据问题的复杂程度,又可以分为两类:

* 简单问句:这种问题只需要一个三元组就能搞定,比较基础的通过LR的方法: Antoine Bordes, Jason Weston, Nicolas
Usunier. Open question answering with weakly su-pervised embedding
models;或者结合CNN、RNN神经网络的方法:Character-Level Question Answering with Attention
* 复杂问句:需要多个三元组,有时需要进一步的推理或者做一些计算。回答这类问题目前采用下面基于语义解析一类的方法效果较好。贴个微软目前比较新的工作
Wen-tau Yih, Ming-Wei Chang, Xiaodong He, and Jianfeng Gao. 2015. Semantic
parsing via staged query graph generation: Question answering with knowledge
base.
传统的解决方法可以分为三类:

* 语义解析(Semantic Parsing)
该方法是一种偏linguistic的方法,主体思想是将自然语言转化为一系列形式化的逻辑形式(logic
form),通过对逻辑形式进行自底向上的解析,得到一种可以表达整个问题语义的逻辑形式,通过相应的查询语句(类似lambda-Caculus)在知识库中进行查询,从而得出答案。下图红色部分即逻辑形式,绿色部分where
was Obama born
为自然语言问题,蓝色部分为语义解析进行的相关操作,而形成的语义解析树的根节点则是最终的语义解析结果,可以通过查询语句直接在知识库中查询最终答案。

* 信息抽取(Information Extraction)

该类方法通过提取问题中的实体,通过在知识库中查询该实体可以得到以该实体节点为中心的知识库子图,子图中的每一个节点或边都可以作为候选答案,通过观察问题依据某些规则或模板进行信息抽取,得到问题特征向量,建立分类器通过输入问题特征向量对候选答案进行筛选,从而得出最终答案。
* 向量建模(Vector Modeling)
该方法思想和信息抽取的思想比较接近,根据问题得出候选答案,把问题和候选答案都映射为分布式表达(Distributed
Embedding),通过训练数据对该分布式表达进行训练,使得问题和正确答案的向量表达的得分(通常以点乘为形式)尽量高,如下图所示。模型训练完成后则可根据候选答案的向量表达和问题表达的得分进行筛选,得出最终答案。

以上三种方法的代表论文都集中在13-14年。那么14年之后KB-QA的主流方法是什么呢?
随着深度学习(Deep
Learning)在自然语言处理领域的飞速发展,从15年开始,开始涌现出一系列基于深度学习的KB-QA文章,通过深度学习对传统的方法进行提升,取得了较好的效果,比如:
使用卷积神经网络对向量建模方法进行提升:
Dong L, Wei F, Zhou M, et al. Question Answering over Freebase with
Multi-Column Convolutional Neural Networks[C]//ACL (1). 2015: 260-269..
使用卷积神经网络对语义解析方法进行提升:
h S W, Chang M W, He X, et al. Semantic parsing via staged query graph
generation: Question answering with knowledge base[J]. 2015.
使用长短时记忆网络(LSTM),卷积神经网络(CNNs)进行实体关系分类:
, Mou L, Li G, et al. Classifying Relations via Long Short Term Memory
Networks along Shortest Dependency Paths[C]//EMNLP. 2015: 1785-1794.
D, Liu K, Lai S, et al. Relation Classification via Convolutional Deep Neural
Network[C]//COLING. 2014: 2335-2344.(Best paper)
Zeng D, Liu K, Chen Y, et al. Distant Supervision for Relation Extraction via
Piecewise Convolutional Neural Networks[C]//EMNLP. 2015: 1753-1762.
使用记忆网络(Memory Networks),注意力机制(Attention Mechanism)进行KB-QA:
A, Usunier N, Chopra S, et al. Large-scale simple question answering with
memory networks[J]. arXiv preprint arXiv:1506.02075, 2015.
Zhang Y, Liu K, He S, et al. Question Answering over Knowledge Base with
Neural Attention Combining Global Knowledge Information[J]. arXiv preprint
arXiv:1606.00979, 2016.
以上论文几乎都使用了Freebase作为knowledge
base,并且在WebQuestion数据集上进行过测试,这里给出各种方法的效果对比图,给大家一个更加直观的感受。

近两年又涌现出很多利用深度学习进行向量建模,解决KBQA任务的论文(且大部分关注于解决简单问题),我将会在下篇博客中做详细的介绍,包括很多端到端的方法。

DBQA 基于文档的问答

这一类型的任务通常也称为阅读理解问答任务,最有名的是斯坦福基于SQuAD数据集展开的比赛(
https://rajpurkar.github.io/SQuAD-explorer/
<https://rajpurkar.github.io/SQuAD-explorer/>)

对于每个问题,会给定几段文本作为参考,这些文本通常根据问题检索得到,每段文本中可能包含有答案,也可能只与问题描述相关,而不含有答案。我们需要从这些文本中抽取出一个词或几个词作为答案。

推荐阅读:
Reading Wikipedia to Answer Open-Domain Questions:
https://github.com/facebookresearch/DrQA
<https://github.com/facebookresearch/DrQA>
Dynamic Coattention Networks for Question Answer:
https://zhuanlan.zhihu.com/p/27151397 <https://zhuanlan.zhihu.com/p/27151397>
KBQA Learning Question Answering over QA Corpora and Knowledge Bases:
https://zhuanlan.zhihu.com/p/27665853 <https://zhuanlan.zhihu.com/p/27665853>

Answer Select 答案选择

Applying Deep Learning To Answer Selection: A Study And An Open Task:
http://www.52nlp.cn/qa问答系统中的深度学习技术实现
<http://www.52nlp.cn/qa%E9%97%AE%E7%AD%94%E7%B3%BB%E7%BB%9F%E4%B8%AD%E7%9A%84%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E6%8A%80%E6%9C%AF%E5%AE%9E%E7%8E%B0>

按答案类型划分

* 事实型问题
* 列举型问题
* 定义型问题
* 交互型问题

* 单轮
* 多轮交互
按业务场景划分

* 闲聊(chatbot)
* 任务型
* 知识型
获取答案方式

* 生成式
* 检索式