python⾃动问答系统_问答系统介绍
这是我的第⼀篇技术博客,也是对近期学习的问答系统进⾏⼀个⼩结,⽅便回顾所学。⽂章难免有错误之处,欢迎⼤家批评指正,不胜感激。
下⾯将从两个⽅⾯对问答系统进⾏⼩结:
⼀、常见的问答系统种类及介绍
⼆、问答系统中的常⽤技术
⼀、常见的问答系统种类及介绍:
1.根据问题所属的知识领域来分类:
(1) 开放域闲聊性。 举例:微软⼩冰
(2) ⾯向FAQ和任务型。举例:京东JIMI、苹果Siri
(3)限定域知识型。 举例:左⼿医⽣(问答模型、信息检索)
2.根据答案⽣成阶段的技术分类:
(1)检索式 (2)⽣成式
3.依据答案来源分类:
(1)基于知识图谱问答系统
(2)机器阅读理解的问答系统
(3)基于问答对的问答系统
下⾯将根据答案来源的分类进⾏详细展开:
1.基于知识图谱问答系统(KB-QA)
定义:给定⾃然语⾔处理问题,通过对问题进⾏语义理解和解析,进⽽利⽤知识库进⾏查询、推理得出答案。对事实性问答任务⽽⾔(如政策问题)这种做法依赖于知识图谱,准确率⽐较⾼。要求知识图谱是⽐较⼤规模的,因为KB-QA⽆法给出在知识图谱之外的答案。下⾯给出常见分类:
(1)基于符号表⽰的KB-QA(传统的语义解析⽅法)
(2)基于向量表⽰的KB-QA(知识表⽰学习的⽅法)
评价标准:召回率(Recall)、精确率(Precision)、F1
常⽤数据集:WebQuestion、SimpleQuestion、NLPCC KBQA数据集(中⽂)
下⾯根据常见分类分别进⾏详细展开:
(1)基于符号表⽰的KB-QA(传统的语义解析⽅法)
定义:该⽅法是⼀种偏语⾔学的⽅法,主体思想是将⾃然语⾔转化为⼀系列形式化的逻辑形式,通过对逻辑形式进⾏⾃底向上的解析,得到⼀种可以表达整个问题语义的逻辑形式,通过相应的查询语句在知识库中进⾏查询,从⽽得出答案。
语义解析传统⽅法:
问题->短语检测->资源映射->语义组合->逻辑表达式
语义解析树形式 Berant.EMNLP.Semantic parsing on freebase from question-answer pairs.2013
语义解析⽬前⼀般做法:
建图->主题词链接->确定核⼼推导链->增加约束和聚合函数
初中信息技术python编程导航代码查询图形式 Yih.ACL.Semantic Parsing via Staged Query Graph Generation:Question Answering with Knowledge Base.2015
将语义解析简化为查询图⽣成,将其表述为具有分阶段状态和动作的搜索问题。
(2)基于向量表⽰的KB-QA(基于表⽰学习的⽅法)
定义:把知识库问答看做⼀个语义匹配过程。通过表⽰学习知识库以及⽤户问题的语义表⽰,得到低维空间的数值向量,再通过数值计算,直接匹配与⽤户问句语义最相似的答案。即问答任务就可以看成问句语义向量与知识库中实体、边的语义向量相似度计算的过程。
随着深度学习的发展,基于表⽰学习的知识库问答取得了较好的效果。css布局中有什么不好的习惯
⼀般做法:
问题和答案映射向量->向量匹配->计算问题-答案score->优化问题->候选答案选择
详细过程:
问题和答案映射向量:
如何学习问题向量:把问题⽤LSTM进⾏建模
如何学习答案向量:答案不能简单映射成词向量,⼀般是利⽤到答案实体,答案类型,答案路径,答案关系,答案上下⽂信息。分别和问句向量做相似度计算,最终的相似度为⼏种相似度之和。代表性的论⽂ [1]Dong, ACL. Question answering over freebase with multi-column convolutional neural networks.2015提出Multi-column CNN,在答案端加⼊了更多信息,答案类型、答案路径以及答案周围的实体和关系三种特征向量分别和问句向量做相似度计算,最终的相似度为三种相似度之和。
Multi-column CNN
向量匹配、计算问题-答案score:把这些特征分别映射成不同的向量,作为答案的其中⼀个向量(⽽不是直接拼接起来),最后⽤这些特征向量依次和问题做匹配,把score加起来作为总的score。
优化问题、候选答案选择:⼀般⽤Margin Loss,极⼤化问题对正确答案的score,同时极⼩化问题对错误答案的score。当模型训练完成后,通过score进⾏筛选,取最⾼分的作为最终答案。
早期⽅法使⽤记忆⽹络来做,论⽂:Bordes, arXiv. Large-scale simple question answering with memory networks.2015.⾸先通过Input模块来处理问题,加⼊知识库信息,将三元组通过输⼊模块变换为⼀条⼀条的记忆向量,再通过匹配主语获得候选记忆,进⾏cos匹配来获取最终记忆,将最终记忆
中的宾语输出作为答案。在WebQuestions上得到了42.4的F1-score,在SimpleQuestions上得到了63.9的Accuracy。
京东python入门教程接着,⼜有很多位学者提出了其他基于知识表⽰学习的⽅法。其中论⽂[Xie.2018]提出⼀种基于深度学习的主题实体抽取模型,结合了问句单词级别和字符级别的嵌⼊表⽰来学习问题的序列表⽰,并利⽤双向LSTM对单词序列编码,最后使⽤CNN⽹络根据单词的上下⽂信息预测单词是否为主题词。在答案选择部分,⽂章提出⼀种基于⾃注意⼒机制的深度语义表⽰模型。使⽤双向LSTM和CNN⽹络来构建深度语义模型,并提出⼀种基于局部和全局上下⽂的⾃注意⼒机制⽤于计算单词的注意⼒权重。考虑语义表⽰学习和实体抽取任务之间的具有相互辅助作⽤,⽂章提出深度融合模型,将基于⾃注意⼒机制的深度语义表⽰模型与主题实体抽取模型结合,⽤多任务学习的⽅式进⾏联合训练。在NLPCC-ICCPOL 2016数据集上得到了83.45的F1-score。
今年,Huang, WSDM. Knowledge graph embedding based question answering.2019 提出KEQA模型,不同于以往的直接计算问句和答案语义相似度的⽅法,本⽂尝试通过关系和实体学习模型从问句分别重构出实体和关系的知识表⽰,并进⼀步重构出三元组的知识表⽰,最终答案为知识库中与重构三元组最接近的三元组。同时⽂章也评估了不同的知识表⽰学习⽅法TransE,TransH, TransR对KEQA模型精度的影响。
减肥体操运动30分钟视频⽐较基于符号和向量的⽅法:
1)基于符号的⽅法,缺点是需要⼤量的⼈⼯规则,构建难度相对较⼤。优点是通过规则可以回答更加复杂的问题,有较强的可解释性.
2)基于向量的⽅法,缺点是⽬前只能回答简单问题,可解释性差。优点是不需要⼈⼯规则,构建难度相对较⼩。
⽬前可以改进的地⽅:
1)复杂问句,⽬前End2End的模型只能解决简单问答。
2)多源异构知识库问答。对于开放域问答,单⼀的知识库不能完全回答所有问题。
3)训练语料,知识库中有实体和关系,除此之外还可能有描述实体的⽂本信息,或许可以结合结构化知识和⾮结构化⽂本。
4)对话中的⾃然语⾔形式回复。传统的⾃动问答都是采⽤⼀问⼀答的形式。然⽽在很多场景下,需要提问者和系统进⾏多轮对话交互,实现问答过程。这时,需要系统返回⽤户的答案不再只是单⼀实体、概念、关系的形式,⽽是需要是以⾃然语⾔的形式返回答案。这就需要⾃动⽣成⾃然语⾔的回复。现有⽅法多利⽤ sequence-to-sequence 模型进⾏⾃然语⾔⽣成,在这⼀过程中,如何与知识库相结合,将知识库问答的答案加⼊⾃然语⾔回复中,仍是亟待解决的问题。
2.基于阅读理解的QA(基于⽂档、⽂本的问答)
机器阅读理解在 NLP 领域近年来备受关注,⾃ 2016 年 EMNLP 最佳数据集论⽂ SQuAD 发表后,各⼤企业院校都加⼊评测⾏列。利⽤机器阅读理解技术进⾏问答即是对⾮结构化⽂章进⾏阅读理解得到答案,可以分成匹配式QA,抽取式QA和⽣成式QA,⽬前绝⼤部分是抽取式QA。阅读理解花样很多,但是基本框架差异不⼤。
SQuAD(斯坦福问答数据集):这是⼀个阅读理解数据集,由众包⼈员基于⼀系列⽂章的提问和对应的答案构成,其中每个问题的答案是相关⽂章中的⽂本⽚段或区间。SQuAD ⼀共有 107,785 个问题,以及配套的 536 篇⽂章。
(1)匹配式QA
给定⽂章、问题和⼀个候选答案集(⼀般是实体或者单词),从候选答案中选⼀个score最⾼的作为答案。这种形式⽐较像选择题型,已经基本上没⼈做了。
(2)抽取式 QA
让⽤户输⼊若⼲篇⾮结构化⽂本及若⼲个问题,机器⾃动在阅读理解的基础上,在⽂本中⾃动寻答案来回答⽤户的问题。抽取式 QA 的某个问题的答案肯定出现在某篇⽂章中。抽取式 QA 的经典数据
集是 SQuAD。
(3)⽣成式QA
⽬前只有MSRA的MS MARCO数据集,针对这个数据集,答案形式是这样的:
1)答案完全在某篇原⽂
2)答案分别出现在多篇⽂章中
3)答案⼀部分出现在原⽂,⼀部分出现在问题中
4)答案的⼀部分出现在原⽂,另⼀部分是⽣成的新词
5)答案完全不在原⽂出现(Yes / No 类型)
3.基于问答对的问答系统
随着互联⽹技术的成熟和普及, ⽹络上出现了常问问题(frequent asked questions, FAQ)数据, 特别是在 2005 年末以来⼤量 的社区问答(community based question answering, CQA)数据(例如 Yahoo!Answer)出现在⽹络上, 即有了⼤量的问题答案对数据, 问答系统进⼊了开放领域、基于问题答案对时
期。
⼀般过程:问题分析 ->信息检索->答案抽取
问题分析阶段:和基于⾃由⽂本的问答系统的问题分析部分基本⼀样, 不过还多了⼏个不同的研究点:
(1)问题主客观的判断
(2)问题的紧急性(通常在CQA数据中)
信息检索阶段:该阶段⽬标是如何根据问题的分析结果去缩⼩答案 可能存在的范围,其中存在两个关键问题:lightbox下载
(1)检索模型(到和问题类似的问题)
(2)两个问题相似性判断(返回答案或返回相似问题列表)
答案抽取部分:在答案抽取部分, 由于问题答案对已经有了答案, 答案抽取最重要的⼯作就是判断答案的质量.研究怎么从问题的众多答案中选择⼀个最好的答案.
下⾯⽹址给出了⼀些论⽂和近期研究成果:
⼆、问答系统中的常⽤技术
总结⼀些⽬前能想到的常⽤技术
参考⽂献:
[1]Berant.EMNLP.Semantic parsing on freebase from question-answer pairs.2013
[2]Yih.ACL.Semantic Parsing via Staged Query Graph Generation:Question Answering with Knowledge Base.2015
[3]Dong, ACL. Question answering over freebase with multi-column convolutional neural networks.2015
[4]Hao, ACL. An end-to-end model for question answering over knowledge base with cross-attention combining global knowledge.
[5]Bordes, arXiv. Large-scale simple question answering with memory networks.2015
[6]Huang, WSDM. Knowledge graph embedding based question answering.2019
[8]Susht.知乎.⼀份关于问答系统的⼩结.2018
若有侵权请联系作者,本⽂不作商业⽤途,仅供学习使⽤。**O(∩_∩)O~**
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论