当前位置: 首页 > news >正文

问答系统(QA)调研

引言

智能问答系统广泛用于回答人们以自然语言形式提出的问题,经典应用场景包括:智能语音交互、在线客服、知识获取、情感类聊天等。根据QA任务,可以将QA大致分为5大类,分别为:
文本问答(text-based QA,TBQA)
知识库问答(Knowledge Base Question Answering,KBQA),
社区问答(Community Question Answering,CQA)
表格问答(Table Question Answering,TQA),
视觉问答(Visual Question Answering,VQA)
下面分别从任务(回答是什么),方法(回答怎么做,只梳理deeplearning部分,传统算法略过),示例工程(实操或者在线体验),结论(个人思考与衡量)4方面展开。

文本问答(text-based QA,TBQA)

一:任务

基于给定文本,生成问题对应的答案,也可叫机器阅读理解(MRC)。
处理流程:
在这里插入图片描述
1)文章定位模块
文本读取
根据用户问题,借助文本分类,检索等算法获取概率较大的段落集合
2)预处理模块
句子向量化,格式归一,特征计算等
3)DNN服务模块
加载深度学习模型,预测答案得分
4)后处理模块
基于动态规划选取最佳答案输出

根据任务的不同,可分为以下几种情况:

答案填空,类似完形填空。

给定文本内容,预测问题中缺失的单词或短语。这类问题的数据集形态,大多是【背景,问题,答案】三元组,比如:
在这里插入图片描述

答案选择,类似做选择题。

给定文本内容,并给定问题对应的若干答案候选,对这些答案候选进行排序并选出可能性最大的答案候选.这类问题的数据集,通常是英语考试阅读理解,比如:
在这里插入图片描述
3)答案抽取,片段抽取。
根据给定的问题从文本中抽取答案。这里的答案可能是文本中的任意片段。这类问题的数据集形态大多数为【原文,问题,答案】三元组。
在这里插入图片描述

答案摘要,自由问答。

根据给定问题和文本,生成一段可以回答问题的摘要,这里的答案片段可能并没有出现在对应的文本中。这类问题的数据集形态大多数为: ID 文本 ID 文本 ID 问题 [标签] 答案 [标签]
在这里插入图片描述

基于知识的机器阅读理解(Knowledge-Based MRC)

需要借助外部知识才能获取到的答案。这里问题的数据集形态通常为:一个领域若干条文本概述,围绕给出的文本进行对话问答,对话比较短,通常只有一两对对话。比如:
在这里插入图片描述

不可答问题的机器阅读理解(MRC with Unanswerable Questions)

根据上下文以及外部知识也无法获得的答案。
在这里插入图片描述

对话型问题回答(Conversational Question Answering)

给定一个问答,A提问题,B回复答案,然后A根据答案继续提问题。这个方式有点类似多轮对话。
在这里插入图片描述
总之,不管哪一种任务,都是需要阅读和理解给定的文本段落,然后根据其回答问题。

二:方法

基于预训练模型的方法
(1)近年来NLP领域通过大量通用领域数据进行训练,诞生了一批如ELMO、GPT、BERT、ENRIE等优秀的预训练语言模型。在具体的阅读理解任务时,可以通过进行领域微调、数据微调、任务微调,来把学到的句子特征信息应用到具体的任务。(BERT:结合 GPT 与 ELMO 的优势, 引入 Transformer 编码模型, 采用双向的语言模型, 训练时增加了掩码语言模型以及判 断 句 子 顺 序 的 任 务 , 可 以 获 取 更 多 的 语 言 表 征 )
在这里插入图片描述
query和context concat后输入bert中获取每个token的向量表示,输入形式: CLS “query” SEP context ,经过BERT训练,找到需要抽取的span.
(2)基于知识增强的对比提示调整框架(KECP)是一种小样本学习算法,采用Prompt-Tuning作为基础学习范式,在仅需要标注极少训练数据的情况下,在给定文章中抽取满足要求的文本作为答案。
在这里插入图片描述
在这里插入图片描述

三:示例工程

1:easyNLP

工程地址:https://github.com/alibaba/EasyNLP
工程描述:收藏 1.4K,clone 179,并且一直有人维护,几小时前还有更新,是阿里云团队曾经被顶会EMNLP2022收录的工程。
论文:KECP: Knowledge-Enhanced Contrastive Prompting for Few-shot Extractive Question Answering https://arxiv.org/abs/2205.03071
讲解:算法 KECP 被顶会 EMNLP 收录,极少训练数据就能实现机器阅读理解
https://zhuanlan.zhihu.com/p/590024650

2:DuReader

工程地址:https://github.com/baidu/DuReader/tree/master/DuReader-2.0
工程收藏 998,clone 312,是百度团队曾经被顶会ACL2022收录的工程。但是这是一种开放域问答系统,数据集形态复杂,数据集噪声多,需要的数据量较大。
论文:DuReadervis: A Chinese Dataset for Open-domain Document Visual Question Answering https://aclanthology.org/2022.findings-acl.105/
讲解:ACL2022 | 面向中文真实搜索场景的开放域文档视觉问答数据集
https://blog.csdn.net/qq_27590277/article/details/125326071
该工程已经落地应用与汽车行业:《汽车说明书跨模态智能问答》
地址:https://aistudio.baidu.com/aistudio/projectdetail/4049663

四.结论

机器阅读理解问答(MRCQA)是一种给出文章,然后根据文章提问并解答作为标签,去训练。在训练过程中,
首先,为了获得更准确的与问题相关的词与句子,很多Attention机制被提出,这块是很值得研究的一个点。
其次,从任务细分的几种情况来看,大多是的MRC解决方案都是从原文档中匹配检索答案,这其实与人的阅读理解不一样的(人或多或少会用上先验知识),所以,如何使得模型获得先验知识也是我们值得研究的地方。
切入到我们目前实际的问答任务,个人认为:
数据集形态的确定,我们借鉴kecp,输入不是常规的Q+P,而是Qprompt +P,这里的Qprompt
相对于Q,已经可以看作是在数据层面做了Attention。

知识图谱问答(Knowledge Base Question Answering,KBQA)

一:任务

知识图谱(Knowledge Base / Knowledge Graph)中包括三类元素:实体(entity)、关系(relation),以及属性(literal)。实体代表一些人或事物,关系用于连接两个实体,表征它们之间的一些联系。KBQA,就是将问题解析、转换成在知识图谱中的查询,查询得到结果之后进行筛选、翻译成答案输出。
应用场景:多应用于结构化数据场景,比如电商,医药等,最具有代表性的知识图谱问答系统是各种搜索引擎,比如百度,谷歌等。
下面是一个简单的例子:
在这里插入图片描述
问题:”商鞅变法”发生在哪个朝代?
知识图谱问答系统分5步得出答案:
1:确定问题中提到的实体;2:将问题的其他部分分段;3:通过web接口获取包含该实体的所有三元组;4,计算“关系”和分割词之间的相似度,5:基于相似性结果对那些三元组进行排序以返回正确答案;

二:方法

1:知识图谱的构建

What:KBQA,首先在知识图谱的构建,也就是数据集构建上,是非常重要的过程。根据不同领域,构建不同领域的知识图谱,比如阿里巴巴商品知识图谱,zego元宇宙知识图谱等,数据集构建好之后,为其增加一个 QA 系统,就成了一个能解答XX相关问题的机器人。
How: (1)可以通过Neo4j简单构建自己的知识图谱数据集
具体实操过程,可参考:https://blog.csdn.net/jesseyule/article/details/110453709
(2)通过OpenNRE构建
实操参考:http://pelhans.com/2019/01/04/kg_from_0_note9/
ccks2019_sample subset:结构化三元组形态,是目前应用最广的。
在这里插入图片描述

2:所提问题到图谱查询的转化

这一步可以通过语义分析,从而构建这个问题的图谱查询,得到答案;也可以基于信息抽取,从问题中抽取实体,再去已有的知识图谱中匹配问题,最后排序选择结果。
这里有一篇美团知识图谱问答解析:https://tech.meituan.com/2021/11/03/knowledge-based-question-answering-in-meituan.html

三:示例工程

一:NBA 相关问题的问答系统:https://github.com/wey-gu/nebula-siwi/
二:KBQA-BERT
工程地址:https://github.com/WenRichard/KBQA-BERT
工程收藏 1.3K,clone 342,最近更新在4年前,用bert做文档特征提取与句子相似度计算。比较老的方法。
三:基于医药知识图谱的智能问答系统QASystemOnMedicalKG
工程地址:https://github.com/liuhuanyong/QASystemOnMedicalKG
工程收藏 4.7K,clone 1.8K,最近更新在3年前。类似的,还有基于犯罪知识图谱的智能问答系统,基于军事知识图谱的智能问答系统等,这些比较冷门,工程热度较低。
四:haystack
工程地址:https://github.com/deepset-ai/haystack
工程收藏 6.9K,clone 1K,并且一直有人维护,几小时前还有更新,实现基于文档的语义分析和问答,可以快速构建类似Chatgpt的问题答案,语义搜索,文本生成等,是一种端到端的框架。参考文档:https://docs.haystack.deepset.ai/docs/knowledge_graph
五:intelligent_question_answering_v2
工程地址:https://github.com/milvus-io/bootcamp/tree/master/solutions/nlp/question_answering_system
工程收藏 1.1K,clone 442,最近更新在3个月前。用Milvus做相似度计算和搜索,找到所问问题与数据集中相似问题,然后匹配相似问题的答案,fastAPI做交互式界面,搭建比较简单。

四 结论:

(1)KBQA与MRC相比,MRC的语料是一问一答式,容易获取,KBQA需要有结构化的知识库,获取比较难。
(2)KBQA流程是识别出问题的实体,然后构建图谱查询,而MRC需要理解一堆非结构化的语料,两者不管是在速率还是效率上,都是KBQA优于MRC。
(3)切入到我们目前实际的问答任务,个人认为:
①如果想算法快速落地,推荐使用MRC,因为其数据集容易获取且清洗。
②如果想追求响应时间快,准确率高,推荐使用KBQA,那构建我们自己的知识图谱尤为重要,后面模型出的答案是否准确,跟知识图谱有很大关系。

社区问答(Community Question Answering,CQA)

一:任务

技术点在于语义文本匹配问题,计算文本与文本之间的相似度和关联度的问题。根据任务划分,可以将CQA还分为:

1.FAQ

用户频繁会问到的业务知识类问题的自动解答。
https://github.com/Bennu-Li/ChineseNlpCorpus
例如法律文书匹配样例:
在这里插入图片描述

2.CQA

问答对来自于社区论坛中用户的提问和回答,较为容易获取,没有人工标注,相对质量较低。

二:方法

常用孪生网络,比较两个输入的相似度
在这里插入图片描述
可以当分类任务,输出sentenceA 与sentenceB是否相似,也可以当回归任务,输出sentenceA 与sentenceB相似的程度。

四 结论:

CQA主要用于语义相似度匹配,比如医疗问答匹配,某某客服问题匹配,某某需求与成果匹配等,跟我们目前实际问答任务相关性较弱,没有过多调研。

表格问答(Table Question Answering,TQA)

一:任务:

在这里插入图片描述
TQA任务流程分为以上5步,分别为:
(1)表格检索:从一堆表格中检索出跟问题相关性较大的表格
(2)语义解析:将非结构化的文本问题,转化为SQL语句
(3)问题生成:围绕上述语义解析,产生相关问题输出。同时对这些问题与所提问题做相似度排序。
(4)对话:对上述产生的问题进行解答。
(5)文本生成:将上述排列最考前的问题与答案,用自然语言描述出来,作为答案输出。

视觉问答(Visual Question Answering,VQA)

一:任务

VQA(Visual Question Answering)指的是,给机器一张图片和一个开放式的的自然语言问题,要求机器输出自然语言答案。这是目前比较新也比较火的方向。VQA细分,还可以分为图片问答,视频问答,图片文本问答,图表问答等。
在这里插入图片描述

三:示例工程

一:ERNIE-Layout:版面知识增强的文档理解预训练
1:论文地址:https://arxiv.org/pdf/2210.06155v2.pdf
2:工程地址:https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/ernie-layout
3:体验:https://huggingface.co/spaces/PaddlePaddle/ERNIE-Layout
输入一张图片,再根据那张图片图片提问,eg:
问:这是一份什么材料?
系统自动答:不动产信息查询结果告知单
并且自动在上传的图上标出信息位置。
在这里插入图片描述
二:vilt
体验:https://huggingface.co/tasks/visual-question-answering
在这里插入图片描述

四 结论:

VQA语料是图片,跟我们目前实际问答任务相关性较弱,但是个人感觉这块的应用前景比较好,值得研究。

相关文章:

问答系统(QA)调研

引言 智能问答系统广泛用于回答人们以自然语言形式提出的问题,经典应用场景包括:智能语音交互、在线客服、知识获取、情感类聊天等。根据QA任务,可以将QA大致分为5大类,分别为: 文本问答(text-based QA&am…...

商务租车的三大优势吸引企业以租代购

随着社会机经济的高速发展,租车模式的日益盛行,租车不仅仅是受个体户的青睐,而作为环保经济的出行方式也让越来越多的企业开始选择以租代买,据调查统计,最早开始商务租车的群体是外企。而近几年,国内的很多…...

蓝桥杯的比赛流程和必考点

蓝桥杯的比赛流程和必考点 距省赛仅1个多月!蓝桥杯的比赛流程和必考点,你还不清楚? “巷子里的猫很自由,却没有归宿;围墙里的狗有归宿,终身都得低头。人生这道选择题,怎么选都会有遗憾。” 但不…...

【数据结构】红黑树

红黑树一、红黑树的概念二、红黑树的接口2.1 插入三、验证四、源码一、红黑树的概念 红黑树也是一个二叉搜索树,他是通过对任何一条从根到叶子的路径上各个结点着色方式的限制,最长路径长度不超过最短路径长度的 2 倍保持近似平衡。他在每个节点添加了一…...

从C++的角度理解C#的Event

由于技术背景是C起家的,所以对于C的概念很清楚,遇到C#的EVENT时候,总感觉这个概念比较抽象,不容易理解,但是当使用函数指针和回调函数来理解EVENT的时候,这个概念就清晰了。 首先对于EVENT来讲&#xff0c…...

商城进货记录交易-课后程序(JAVA基础案例教程-黑马程序员编著-第七章-课后作业)

【实验7-2】商城进货记录交易 【任务介绍】 1.任务描述 每个商城都需要进货,而这些进货记录整理起来很不方便,本案例要求编写一个商城进货记录交易的程序,使用字节流将商场的进货信息记录在本地的csv文件中。程序具体要求如下: …...

【正点原子FPGA连载】第十七章双核AMP实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第十七章双核AMP…...

内存管理框架---页(一)

文章目录物理内存的模型非一致内存访问--NUMA一致内存访问模型--UMA内存管理架构页页框管理页描述符页描述符字段flags字段详解gfp_mask 标志获得页alloc_pages__get_free_pages获得填充为0的页释放页kmallocvmalloc参考资料你用心写的每一篇文章,可能会带别人和自己…...

华为OD机试真题Python实现【流水线】真题+解题思路+代码(20222023)

流水线 题目 一个工厂有m条流水线 来并行完成n个独立的作业 该工厂设置了一个调度系统 在安排作业时,总是优先执行处理时间最短的作业 现给定流水线个数m 需要完成的作业数n 每个作业的处理时间分别为 t1,t2...tn 请你编程计算处理完所有作业的耗时为多少 当n > m时 首先…...

「JVM 编译优化」Graal 编译器

文章目录1. 历史背景2. 构建编译调试环境3. JVMCI 编译器接口4. 代码中间表示5. 代码优化与生成1. 历史背景 Graal 编译器在 JDK 9 以 Jaotc 提前编译工具的形式首次加入到官方的 JDK 中,JDK 10 开始提供替换(得益于 HotSpot 编译器接口,Jav…...

蓝牙标签操作指南

一、APP安装指南 1.APP权限问题 电子标签APP安装之后,会提示一些权限的申请,点击允许。否则某些会影响APP的正常运行。安装后,搜索不到蓝牙标签,可以关闭App,重新打开。 2.手机功能 运行APP时候,需要打开…...

嵌入式 Linux Shell编程

目录 1、shell脚本 2、执行shell脚本 3、shell脚本编写 3.1 shell变量 3.2 标准变量或环境变量 3.4 变量赋值有五种格式 3.5 运算符和表达式 关系运算符 布尔运算符 3.6 Test命令用法 1、判断表达式 2、判断字符串 3.判断整数 4、判断文件 3.7 数组 1、数组定义…...

Web前端学习:一

编辑器的基础使用 编辑器推荐使用: HBuilderx(免费中文)(建议使用) Sublime(免费英文) Sublime中文设置方法,下载语言插件: 1、进入Sublime后,ShiftCtrlP…...

SpringBoot集成Redis实现分布式会话

在单体应用的时代,Session 会话直接保存在服务器中,实现非常简单,但是随着微服务的流行,现代应用架构基本都是分布式架构,请求随机的分配到后端的多个应用中,此时session就需要共享,而存储在red…...

2023年关于身份安全的4 个预测

如果您身处技术领域,就会知道现在是时候盘点过去的一年,展望未来 365 天将影响业务、创新以及我们工作方式的因素的季节。这不是一门精确的科学,我们也不总是对的。但是推测很有趣,当我们看到其中一些趋势成为现实时会更有趣。本文…...

Linux期末考试应急

Linux期末考试应急 虚拟机添加硬盘、分区、格式化、挂载、卸载 fdisk -l#查看系统现有分区fdisk <指定磁盘>#指定磁盘分区sudo mkfs.ext3 <指定分区>#格式化磁盘###挂载磁盘1.新建一个目录sudo mkdir /mnt/test2.将指定分区挂载到对应目录sudo mount /dev/sdb10 /…...

mars3d对geojson图层分属性设置样式

开发中可能会遇到如下需求&#xff0c;在全省的数据中按某个属性⾼亮展示某市区。此时就需要使⽤分属性样式的api了。⽂档如下。GeoJsonLayer - Mars3D API文档属性是根据⽮量数据的属性进⾏匹配。可以通过 layer.graphics[0]?.attr ⽅式获取。 指导有哪些属性之后先设置…...

三、锁相关知识

文章目录锁的分类可重入锁、不可重入锁乐观锁、悲观锁公平锁、非公平锁互斥锁、共享锁深入synchronized类锁、对象锁synchronized的优化synchronized实现原理synchronized的锁升级重量锁底层ObjectMonitor深入ReentrantLockReentrantLock和synchronized的区别AQS概述加锁流程源…...

C语言数据类型

C 数据类型 在 C 语言中&#xff0c;数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间&#xff0c;以及如何解释存储的位模式。 C 中的类型可分为以下几种&#xff1a; 1 基本类型&#xff1a; 它们是算术类型&#xff0c;…...

华为OD机试真题Python实现【水仙花数】真题+解题思路+代码(20222023)

水仙花数 题目 所谓的水仙花数是指一个n位的正整数其各位数字的n次方的和等于该数本身, 例如153 = 1^3 + 5^3 + 3^3,153是一个三位数 🔥🔥🔥🔥🔥👉👉👉👉👉👉 华为OD机试(Python)真题目录汇总 输入 第一行输入一个整数N, 表示 N 位的正整数 N 在3…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...