这是我的第一篇技术博客,也是对近期学习的问答系统进行一个小结,方便回顾所学。文章难免有错误之处,欢迎大家批评指正,不胜感激。

下面将从两个方面对问答系统进行小结:

一、常见的问答系统种类及介绍

二、问答系统中的常用技术

一、常见的问答系统种类及介绍:

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

语义解析目前一般做法:

建图->主题词链接->确定核心推导链->增加约束和聚合函数

查询图形式  Yih.ACL.Semantic Parsing via Staged Query Graph Generation:Question Answering with Knowledge Base.2015

将语义解析简化为查询图生成,将其表述为具有分阶段状态和动作的搜索问题。

(2)基于向量表示的KB-QA(基于表示学习的方法)

定义:把知识库问答看做一个语义匹配过程。通过表示学习知识库以及用户问题的语义表示,得到低维空间的数值向量,再通过数值计算,直接匹配与用户问句语义最相似的答案。即问答任务就可以看成问句语义向量与知识库中实体、边的语义向量相似度计算的过程。

随着深度学习的发展,基于表示学习的知识库问答取得了较好的效果。

一般做法:

问题和答案映射向量->向量匹配->计算问题-答案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。

接着,又有很多位学者提出了其他基于知识表示学习的方法。其中论文[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模型精度的影响。

比较基于符号和向量的方法:

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数据中)

信息检索阶段:该阶段目标是如何根据问题的分析结果去缩小答案 可能存在的范围,其中存在两个关键问题:

(1)检索模型(找到和问题类似的问题)

(2)两个问题相似性判断(返回答案或返回相似问题列表)

答案抽取部分:在答案抽取部分, 由于问题答案对已经有了答案, 答案抽取最重要的工作就是判断答案的质量.研究怎么从问题的众多答案中选择一个最好的答案.

下面网址给出了一些论文和近期研究成果:

https://blog.csdn.net/class_guy/article/details/81535287

二、问答系统中的常用技术

总结一些目前能想到的常用技术

参考文献:

[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~**

python 自动问答系统_问答系统介绍相关推荐

  1. python 自动问答系统_外虎知乎自动问答系统

    外虎知乎自动问答系统是针对目前比较火的问答软件知乎制作的一款营销软件,通过外虎知乎自动问答系统可以轻易的实现多个账号的切换和同时发文营销,软件支持自动答题,自问自答等功能,是网络营销人员知乎营销需要的 ...

  2. python自动扫雷_利用Python实现自动扫雷

    自动扫雷一般分为两种,一种是读取内存数据,而另一种是通过分析图片获得数据,并通过模拟鼠标操作,这里我用的是第二种方式. 一.准备工作 我的版本是 python 3.6.1 python的第三方库: w ...

  3. python自动抢单_【Python成长之路】基于sikuli jar包,实现淘宝自动抢单功能(1)...

    [写在前面] 记得节前,西哥问我能不能帮忙写个淘宝自动抢单的功能.其实之前就有提到过sikuli IDE工具,可以很方便地实现图形化自动化,只是当时并没有真正用python实现. 因此刚好借这个机会, ...

  4. python自动投递_利用python如何在前程无忧高效投递简历

    前言 在前程无忧上投递简历发现有竞争力分析,免费能看到匹配度评价和综合竞争力分数,可以做投递参考 计算方式 综合竞争力得分应该越高越好,匹配度评语也应该评价越高越好 抓取所有职位关键字搜索结果并获取综 ...

  5. python 自动抢红包_基于Airtest实现python自动抢红包

    一.Airtest的介绍 1)Airtest的简介 Airtest是网易出品的一款基于图像识别和poco控件识别的一款UI自动化测试工具. Airtest的框架是网易团队自己开发的一个图像识别框架,这 ...

  6. python自动买股票_用python可以做哪些有趣的事--我:选股票

    最近炒股是买什么就跌,一直是亏损哎,哭,作为学过python的人来讲怎么能容忍,之前也炒过股票觉得用阳包阴这样的k线来选出来的股票还不错.于是说做就做,我可以用python来写一个选股的程序. 好!有 ...

  7. python自动抽奖_「懒人必备」用Python自动抽奖

    不知道你们有没有玩过无码科技的小程序抽奖助手,没有玩过的可以在微信小程序入门搜索抽奖助手,首页有很多奖品进行抽奖的,我前几天发现了之后就把那里的所有奖品都点了一次,就突发萌想,能不能用python来实 ...

  8. python自动修图_程序员不会用PS给女朋友修图?没关系,用Python十行代码轻松搞定-站长资讯中心...

    虽然P图 最好的还是用要学会使用PS,但是并不是每个人都会PS的,但是如果你会Python的话,也是可以为所欲为! 现代社会,不P图的人简直就像是恐龙一样稀奇,大到瘦脸瘦腿瘦全身,小到滤镜大眼高鼻梁, ...

  9. python自动点赞_用Python模拟技巧带你实现自动抽屉登录自动点赞

    /1 前言/ 嘿,各位小伙伴们晚上好呀,今天小编又给大家带来干货内容啦,今天带来的是,如何自动登录抽屉,并且点赞! 原计划是不打算使用selenium的,但是因为要涉及点赞,所以免不了登录.但事实证明 ...

  10. python自动上传图片_使用Python实现一个简单的图片上传存储服务

    使用flask实现的一个简单的图片上传服务 设计初衷 对于图片的存储,有很多选择,一般采用云服务如(七牛,又拍等),但是国内的服务像七牛 自定义域名竟然需要域名备案(Excuse me,当初就是因为备 ...

最新文章

  1. k-means-algorithm
  2. Java 7 并发编程指南
  3. 【论文】引用格式 NoteExpress管理文献
  4. Lucene全文检索过程
  5. 车刀 matlab,可转位车刀的结构
  6. 查询sql执行计划_使用SQL执行计划进行查询性能调整
  7. 走进JavaScript
  8. Win XP 精简版安装SQL Server
  9. 转帖: 如何备份和恢复BIG-IP V9.0
  10. 爱普生epson lq-630k打印机没有反应,发送成功,就是不打印
  11. 个人博客搭建教程——基于WordPress
  12. Markdown:插入图片和图注
  13. 文明与征服君士坦丁阵容搭配推荐 文明与征服君士坦丁攻略
  14. C++经典算法题-猴子吃桃问题
  15. iar使用:创建工程
  16. 【论文阅读】Region Proposal by Guided Anchoring
  17. python基于svm实现指数预测_基于SVM的股票预测 Python实现 附Github
  18. Smart Contract Vulnerabilities:Vulnerable Does Not Imply Exploited总结
  19. Shiro(1.3.2)——入门
  20. Android应用利用libusb设备通信权限问题

热门文章

  1. 最小二乘估计与卡尔曼滤波公式推导
  2. 【C语言】指针的理解(乱七芭蕉)
  3. mysql身份证来算年龄_MySQL 根据身份证出生年月计算年龄户籍地性别
  4. 根据身份证号判断年龄
  5. 原型开发工具_开发工具的未来原型
  6. Java中的箭头->符号
  7. pytorch例子学习——NEURAL TRANSFER USING PYTORCH神经迁移
  8. 数据分析系列:Z 检验和 T 检验的应用及代码实现
  9. MATLAB中使用plotyy绘制双纵坐标图及坐标轴设置
  10. 安装Win8跳过密钥方法