问答系统是近几年大火的nlp应用之一,很多公司不论大小都一窝蜂地研发问答机器人、智能客服。不论是搜狗机器人汪仔在《一战到底》中战胜人类选手,还是前阵子火爆的直播答题类软件,都加速了问答系统走入大众的视野。但是不得不说,即使问答系统前景如此广阔,其背后的技术仍没有达到十分成熟的地步。我从去年9月开始接触QA到现在,对这一领域的一些常见任务和方法都有了初步了解,现做一个总结。
根据应用场景和需求的不同,QA任务的建模过程千变万化。我将从知识的来源、答案类型、交互方式、业务场景及问题类型五个方面对QA任务进行分类,分别展开介绍。
按知识来源划分
回答一个问题需要有依据,人类在回答问题时,会去大脑中搜索相关的内容,然后给出答案;而机器要想实现自动问答,也需要从外部获取知识(或依据)。就好比学生上学时学习知识,并把知识存在大脑中;考试时看到考题,会回忆学习过的相关知识,从而给出答案。机器没有学习知识的过程,我们需要将知识作为结构化或非结构话的数据供其访问,作为其回答问题的依据。根据知识来源的不同,问答系统可以分为以下三种任务:基于知识库的问答、基于文档的问答、答案选择。
KBQA 基于知识库的问答
参考资料:
KBQA从入门到放弃
揭开知识库问答KB-QA的面纱
肖仰华 | 基于知识图谱的问答系统
给定自然语言问题,通过对问题进行语义理解和解析,利用知识库进行查询、推理得出答案。
其特点是,回答的答案是知识库中的实体。
当我们在百度询问
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/
)
对于每个问题,会给定几段文本作为参考,这些文本通常根据问题检索得到,每段文本中可能包含有答案,也可能只与问题描述相关,而不含有答案。我们需要从这些文本中抽取出一个词或几个词作为答案。
推荐阅读:
Reading Wikipedia to Answer Open-Domain Questions:
https://github.com/facebookresearch/DrQA
Dynamic Coattention Networks for Question Answer:
https://zhuanlan.zhihu.com/p/27151397
KBQA Learning Question Answering over QA Corpora and Knowledge Bases:
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问答系统中的深度学习技术实现
按答案类型划分
按业务场景划分
获取答案方式
Yii-
QA
简介(此项目目前已不再维护)
感谢选择Yii-
QA
,基于框架基础
实现
的
问答
程序。
#意识到目前的急性时间有限,无法管理太多的额外项目,我准备合并现有手上的项目,集成在一个项目中,感谢支持!!!!!!!
简而言之:
= php5.4
提示:详细的信息请在参考下一个板块安装后,检查http://localhost/<project>/requirements.php页面了解详情。
通过Composer安装
####预备工作:
安装Composer:下载 ,或访问。
####安装Yii-
qa
:
开启命令行切换到程序根目录并依次运行以下两个命令:
composer global require "fxp/composer-asset-plugin:1.0.0-beta3"
composer create-project --prefer-di
一个模仿百度做的开发文档,希望大家看看 分享资料
也希望大家支持我,
问题
:status
1 未解决 2 解决 3投票 4
问题
结束 (已关闭) 5高分
问题
6 推荐
问题
7 知识分享
问答系统
增加 投票接口
投票理由:当自己觉得几个答案很难做出 那个是最佳答案的时候 发起投票 来取舍将那个答案采纳为最佳答案;
QA
使用的是用户的Question去匹配已有知识库,而推荐是使用用户的浏览记录去匹配。但是很明显,推荐相比
QA
要更复杂一些,主要包括以下几个方面:
刚开始用户没有记录时的推荐(一般行业称为冷启动
问题
)。
除了相似还有其他要考虑的因素:比如热门内容、新内容、内容多样性、随时间变化的兴趣变化等等。
编码(Embedding输入)
问题
:我们应该取标题呢,还是文章,还是简要描述或者摘要,还是都要计算。
规模
问题
:推荐面临的量级一般会远超
QA
,除了横向扩展机器,是否能从流程和算法设计上提升效率。
用户反馈对推荐系统
2020.08.30参考
大概有下面几个kb
qa
基于知识图谱返回一个实体作为答案。open domain
qa
预测合适答案。reading comprehension找到一个文章中的span回答相应
问题
。多跳转
qa
hothop
qa
。大多多数都是预测
任务
。对话系统我理解更多指的是对话生成
任务
。常见的比如seq2seq对话生成等等。希望我的回答能勾帮助到你
https://www.zhihu.com/question/68140485/answer/815211836
https://github.c
最近因为工作原因暂时停止机器学习方面知识的学习,研究了一段KB
QA
。,下面是一个简单的关于中小学生需要掌握的诗词的demo,各位看官有兴趣的可以瞅瞅,欢迎来信一起交流。
1. 原理
KB
QA
简单讲就是将
问题
带入提前准备好的知识库寻求答案的一种基于知识库的
问答系统
。该
问答系统
可以解析输入的自然语言问句,主要运用REFO库的对象正则表达式匹配得到结果,然后利用对应的SPARQL查询语句,请求...
向AI转型的程序员都关注了这个号????????????机器学习AI算法工程 公众号:datayx简略概述要求:构建一个完整的
QA
系统整个系统由三部分构成:前台,后台,知识库前台:请设计...
可以初步划分为两类,基于词频的方法,通常是一些较为传统的方法,以及基于语义的方法,通常是基于机器学习的方法。
1、基于词频的方法
在机器学习出现之前,传统文本匹配方法通常是根据句子中的词频信息进行检索的,如信息检索中的TF-IDF,BM25,语言模型等方法,主要解决字面相似度
问题
。这些方法由于计算简单,适用范围广,到现在依旧是很多场景下的优秀基准模型。
1.1 TF-IDF介绍
TF-IDF(term frequency–inverse document frequency 是一种用于资讯检索与文
基于Transformers.Trainer
实现
任务
描述:
知识库
问答
也叫做知识图谱
问答
,模型结合知识图谱,对输入的
问题
进行推理和查询从而得到正确答案的一项综合性
任务
。知识图谱
问答
方法可分为两大类,一种是基于信息检索的方式,一种是基于语义解析的方式。信息检索的方式不需要生成中间结果,直接得到
问题
答案,十分简洁,但是对复杂
问题
的处理能力有限。语义解析的方式需要对输入的自然语言
问题
进行语义解析,再进行推理,具备解决复杂
问题
的能力。本教程选用信息检索的方式进行讨论
自然语言
问题
大致分为7类:
1.事实类
问题
,适合基于知识图谱或文本生成
问题
对应的答案。
2.是非类
问题
,适合基于知识图谱或常识知识库进行推理并生成
问题
对应的答案。
3.定义类
问题
,适合基于知识图谱,词典或文本生成
问题
对应的答案。
4.列表类
问题
,适合基于网络表格生成
问题
对应的答案。
5.比较类
问题
,适合基于**&amp;amp;amp;lt;
问题
,答案&amp;amp;amp;gt;对**进行解答。
6.意见类
问题
7.指导类
问题
...
QA
问答
是当前我们常说到的一种话题,但随着KB
QA
这一
问答
在众多2B项目中的需求被提出,许多客户以及开发人员陷入了一种怪圈,即无法正确捕捉到不同
问答
类型
之间的区别和边界,这对
技术
选型而言,容易造成混淆视听的局面。因此,为了解决这一
问题
,本文主要围绕目前存在的五种主流
问答
范式,包括FAQ-匹配式
问答
、DOC
QA
-文档
问答
、Table
QA
-表格
问答
、KB
QA
-知识图谱
问答
以及Task
QA
-
任务
式
问答
,对齐适用场景、基本概述以及所需数据进行介绍,供大家一起参考。