一份问答系统的小结

2020 年 6 月 2 日 深度学习自然语言处理

点击上方,选择星标置顶,每天给你送干货

阅读大概需要12分钟

跟随小博主,每天进步一丢丢


来自 | 知乎

地址 | https://zhuanlan.zhihu.com/p/35667773

作者 | susht

编辑 | 机器学习算法与自然语言处理公众号

本文仅作学术分享,若侵权,请联系后台删文处理


Part I:基于知识图谱的QA

Part II:基于阅读理解的QA

Part III:基于多轮交互的对话系统


前言

问答系统是非常热门也是很有前景的一个领域,学术界有很多人在研究,工业界也在积极寻求落地,因此本文对问答系统的发展现状和做法做了一个综述整理。模型非常多,这里不会一一展开介绍,而是把这些方法的特点进行归类。


Part I:基于知识图谱的QA

以知识图谱构建事实性问答系统,也称之为KB-QA,在业界是一种比较靠谱的做法,从知识图谱中寻找答案。对事实性问答任务而言,这种做法依赖于知识图谱,准确率比较高,同时也要求我们的知识图谱是比较大规模的,因为KB-QA无法给出在知识图谱之外的答案。KB-QA又可以分成两类:基于符号表示的KB-QA,基于向量表示的KB-QA。

知识图谱并不是我的领域,但我实验室有人在做知识图谱,所以我也有一些大概了解。


基于符号表示的KB-QA

这种做法主要是利用语义解析的方法对问题进行解析,把问题转换成逻辑表达式,再加上一些规则,得到一个结构化的SQL查询语句,用来查询知识库得到答案。

语义解析的传统做法是:问题->短语检测->资源映射->语义组合->逻辑表达式

短语检测:词性标注、实体识别

资源映射:实体链接、实体消岐、关系抽取

语义组合:将映射得到的资源进行组合,得到逻辑形式。

训练分类器:计算每一种语义解析结果的概率,再对于问答对计算损失函数。


现在的做法一般是:

首先是建图:包含知识库实体(圆角矩形,比如family guy),聚合函数(棱形,比如argmin),中间变量 y 和答案变量 x

对问题进行信息抽取:提取问题特征(问题词,问题焦点,问题主题词和问题中心动词),识别命名实体,进行词性标注来删除限定词和介词。

确定核心推导链:将自然语言问题,映射为一个谓语序列

增加约束和聚合:增加约束和聚合函数相当于扩展查询图,缩小答案范围

构建查询图特征:主题词链接特征,核心推导链特征,约束聚合特征,总体特征

分类器:对查询图做二分类,只有正确的查询图才是正样本。


基于向量表示的KB-QA

知识表示是近几年很火的方向,就像词向量刚出来那会也发了很多论文,不过现在热度转向知识推理了。基于向量表示的KB-QA主要是对问题和答案学习到一个向量表示,然后进行向量匹配,归根到底就是个匹配问题。这种方法就是我当时差点要入的坑,后来因为项目比较繁琐 时间也不够,选择了基于文本的QA。


我们先把问题和候选答案都映射成向量,

如何学习问题向量:把问题用LSTM进行建模(因为问题本来就是自然语言)

如何学习答案向量:答案不能简单映射成词向量,一般是利用到答案实体,答案类型,答案路径(从问题主题词到答案的知识库路径),答案关系(从主题词到答案之间的知识库关系),答案上下文信息(与答案在一定范围内有连接的知识库实体),然后把这些特征分别映射成不同的向量,作为答案的其中一个向量(而不是直接拼接起来),最后用这些特征向量依次和问题做匹配,把score加起来作为总的score。


接下来我们要对问题和答案进行向量匹配,计算问题-答案score,常见的有,

最简单的方法:直接进行向量点乘,可以用CNN对这种方式做改进

Attention匹配法:计算答案对问题每一步的Attention

我们的训练目标是:一般用Margin Loss,极大化问题对正确答案的score,同时极小化问题对错误答案的score。

当模型训练完成后,通过score进行筛选,取最高分的作为最终答案

另外,有一些论文加入了Multi-Task Learning,同时使用TranE去训练知识库。

也可以使用记忆网络来做,首先通过Input模块来处理问题,加入知识库信息,将三元组通过输入模块变换为一条一条的记忆向量,再通过匹配主语获得候选记忆,进行cos匹配来获取最终记忆,将最终记忆中的宾语输出作为答案。


现在来比较一下基于符号和向量的方法:

1)基于符号的方法,缺点是需要大量的人工规则,构建难度相对较大。优点是通过规则可以回答更加复杂的问题,有较强的可解释性。

2)基于向量的方法,缺点是目前只能回答简单问题,可解释性差。优点是不需要人工规则,构建难度相对较小。


因此目前可以改进的地方有:

1)复杂问句,目前End2End的模型只能解决简单问答。

2)多源异构知识库问答,对于开放域问答,单一的知识库不能完全回答所有问题。

3)训练语料,知识库中有实体和关系,除此之外还可能有描述实体的文本信息,或许可以结合结构化知识和非结构化文本,也就是Part II要介绍的方法。


Part II:基于阅读理解的QA

这个就是我所研究过的领域了,对非结构化文章进行阅读理解得到答案,又可以分成匹配式QA,抽取式QA和生成式QA,目前绝大部分是抽取式QA。但是我有一段时间没有follow了,不知道能不能跟上时代的步伐,因为阅读理解花样很多,但是基本框架应该差不多的。


匹配式QA

给定文章,问题,和一个候选答案集(一般是实体或者单词),从候选答案中选一个score最高的作为答案。这种形式比较像选择题型,已经基本上没人做了。

具体的问题可以定义为多分类问题:

其中d是document,q是query,a是answer,求概率最大的候选答案。注意:词汇表V 可以定义为 document 和 query 中的所有词,也可以定义为所有的 entity,或者定义为这篇document里面的词,而有的会直接提供包括正确答案在内的 N个候选答案。


重点在于求解g(d, q),g是对document和question建模得到的向量,把这个向量变化到词表空间再进行归一化可以得到所有候选score。求解g的方式比如:

1)LSTM Reader:直接把query跟document拼接起来,输入到双向LSTM中,最终得到一个向量g,这种做法非常粗糙,只是提供一个简单的baseline。

2)Attentive Reader:先对query用LSTM进行建模得到问题向量u,然后也对document建模,接下来用u 给document分配attention,去算文章向量r,再结合u和r得到g。相当于每读完一个问题,然后带着这个问题去读文档。

3)Impatient Reader:这里考虑到了query的每一个token,每个token都去算一个r。相当于每读问题的一个字,都要读一遍文档。(增加计算量)

4)Gated-Attention Reader:相当于带着一个问题,反复读文档,读k遍。

抽取式QA

目前认同度最高的应该是斯坦福的SQuAD数据集,数据形式是给定一篇文章,围绕这个文章提出一些问题,直接从文章中扣答案出来。这个数据集是基于维基百科爬取的真实文章,

目前难度比较高的应该是 TriviaQA数据集,在语义各方面难度都要超过squad。


常见的模型框架基本上是这样:

Embedder:对词进行embedding

Encoder:分别对问题和文章用LSTM进行建模。

Interaction Layer:各种Attention机制花式结合问题和文章,对问题和文章进行交互,在原文上得到query-aware的文章表示。(差别主要在这一部分)

Answer Layer:用query-aware的文章表示来预测答案,一般是用两个网络分别预测答案起止位置,或者直接对文章进行答案标注。


这里简单介绍一下,

最简单的就是Match-LSTM:Interaction 层用的是中规中矩的Attention,用到两种预测答案的模式,其中Boundary Model 比较简单好用。


BiDAF 也比较出名:Interaction 层中引入了双向注意力机制,使用Query2Context 和 Context2Query 两种注意力机制,去计算 query-aware 的原文表示。另外在Embedder 层用到词级 embedding 和字符级 embedding,这倒不是什么新奇的做法,我记得很早就看过这种embedding了,比较适合英文。


FastQAExt 主打轻量级:在Interaction 层用了两种轻量级的信息 fusion 策略;Embedder 层加入了一些额外特征(这个确实有用);确定答案范围的时候用到了Beam Search(这个一般用在机器翻译的Decode测试阶段)


R-NET 也是曾经占领过leaderboard第一的模型:双 Interaction 层架构,分别捕捉原文和问题之间的关系(类似于match-lstm),原文内部各词之间的关系(self match);先预测答案开始概率,更新RNN状态,再预测答案截止位置。

其实......看得多了.......感觉都是在堆模型........


生成式QA

目前只有MSRA的MS MARCO数据集,答案形式是这样的:

1)答案完全在某篇原文

2)答案分别出现在多篇文章中

3)答案一部分出现在原文,一部分出现在问题中

4)答案的一部分出现在原文,另一部分是生成的新词

5)答案完全不在原文出现(Yes / No 类型)


MSRA发布这个数据集后,也发布了S-Net,在R-Net基础上使用Multi task Learning,先抽取出答案后,利用这个特征再对文章生成答案。

抽取部分:

这个模型同时做了两个任务,预测答案ID,还有对文档进行排序。左下角是对问题建模,右下角是对文章建模,左上角是预测答案ID,右上角是对文章进行排序,对问题跟答案去算一个score,去做排序。

但是我总觉得右下角画得不够严谨,这里其实是用到所有passages去预测ID,再对单个passage计算score,图中应该是只画了一个passage的多个词。


生成部分:

前面花这么大力气标注出答案后,其实.....这里只是作为一个特征信息叠加到文章向量中,对这段文章和问题,重新通过Encoder建模(其实我觉得这里问题所用的LSTM,可以和前面抽取模型中的问题LSTM共享,不需要重新搞一下问题LSTM),得到一个综合的语义向量,再输入到Decoder中生成答案。就是一个简单的seq2seq模型。


这个论文我本来打算follow的,但是数据集处理实在麻烦,而且感觉模型也各种复杂(并不是说他难,而是说他模型庞大,我感觉我可能跑不动)。

然后我刚刚查了一下这个论文的应用,现在渐渐有人去follow这个工作了,比如加上强化学习,同时修正问题和生成答案。OK,这个坑,就留给别人填吧。

然而......有点尴尬的是,自家的数据集,被百度和猿题库刷到前面了,可能MSRA最近也在憋大招,毕竟是长期占领SQuAD排行榜第一的人。


Part III:基于多轮交互的对话系统

我对这个领域了解不多,正在观望。

未完待续


添加个人微信,备注: 昵称-学校(公司)-方向 即可获得
1. 快速学习深度学习五件套资料
2. 进入高手如云DL&NLP交流群
记得备注呦


登录查看更多
0

相关内容

自动问答(Question Answering, QA)是指利用计算机自动回答用户所提出的问题以满足用户知识需求的任务。不同于现有搜索引擎,问答系统是信息服务的一种高级形式,系统返回用户的不再是基于关键词匹配排序的文档列表,而是精准的自然语言答案。近年来,随着人工智能的飞速发展,自动问答已经成为倍受关注且发展前景广泛的研究方向。

知识荟萃

精品入门和进阶教程、论文和代码整理等

更多

查看相关VIP内容、论文、资讯等
【ACL2020-复旦大学NLP】异构图神经网络的文档摘要提取
专知会员服务
34+阅读 · 2020年5月1日
专知会员服务
153+阅读 · 2020年4月21日
NLP基础任务:文本分类近年发展汇总,68页超详细解析
专知会员服务
57+阅读 · 2020年1月3日
【阿里技术论文】AliMe KBQA:阿里小蜜中的结构化知识问答
专知会员服务
82+阅读 · 2019年12月14日
【阿里技术干货】知识结构化在阿里小蜜中的应用
专知会员服务
96+阅读 · 2019年12月14日
知识图谱更新技术研究及其应用,复旦大学硕士论文
专知会员服务
102+阅读 · 2019年11月4日
技术动态 | 跨句多元关系抽取
开放知识图谱
49+阅读 · 2019年10月24日
论文浅尝 | 基于知识图谱子图匹配以回答自然语言问题
开放知识图谱
25+阅读 · 2018年6月26日
论文浅尝 | 利用 RNN 和 CNN 构建基于 FreeBase 的问答系统
开放知识图谱
11+阅读 · 2018年4月25日
决策树
Datartisan数据工匠
4+阅读 · 2018年4月19日
论文浅尝 | 使用变分推理做KBQA
开放知识图谱
12+阅读 · 2018年4月15日
肖仰华 | 基于知识图谱的问答系统
开放知识图谱
27+阅读 · 2017年9月18日
深度 | 复旦肖仰华:基于知识图谱的问答系统
全球人工智能
27+阅读 · 2017年9月7日
论文动态 | 基于知识图谱的问答系统关键技术研究 #03
开放知识图谱
8+阅读 · 2017年8月8日
Knowledge Based Machine Reading Comprehension
Arxiv
4+阅读 · 2018年9月12日
VIP会员
相关VIP内容
【ACL2020-复旦大学NLP】异构图神经网络的文档摘要提取
专知会员服务
34+阅读 · 2020年5月1日
专知会员服务
153+阅读 · 2020年4月21日
NLP基础任务:文本分类近年发展汇总,68页超详细解析
专知会员服务
57+阅读 · 2020年1月3日
【阿里技术论文】AliMe KBQA:阿里小蜜中的结构化知识问答
专知会员服务
82+阅读 · 2019年12月14日
【阿里技术干货】知识结构化在阿里小蜜中的应用
专知会员服务
96+阅读 · 2019年12月14日
知识图谱更新技术研究及其应用,复旦大学硕士论文
专知会员服务
102+阅读 · 2019年11月4日
相关资讯
技术动态 | 跨句多元关系抽取
开放知识图谱
49+阅读 · 2019年10月24日
论文浅尝 | 基于知识图谱子图匹配以回答自然语言问题
开放知识图谱
25+阅读 · 2018年6月26日
论文浅尝 | 利用 RNN 和 CNN 构建基于 FreeBase 的问答系统
开放知识图谱
11+阅读 · 2018年4月25日
决策树
Datartisan数据工匠
4+阅读 · 2018年4月19日
论文浅尝 | 使用变分推理做KBQA
开放知识图谱
12+阅读 · 2018年4月15日
肖仰华 | 基于知识图谱的问答系统
开放知识图谱
27+阅读 · 2017年9月18日
深度 | 复旦肖仰华:基于知识图谱的问答系统
全球人工智能
27+阅读 · 2017年9月7日
论文动态 | 基于知识图谱的问答系统关键技术研究 #03
开放知识图谱
8+阅读 · 2017年8月8日
Top
微信扫码咨询专知VIP会员