问答系统(QA)调研

news2024/10/3 4:33:30

引言

智能问答系统广泛用于回答人们以自然语言形式提出的问题,经典应用场景包括:智能语音交互、在线客服、知识获取、情感类聊天等。根据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语料是图片,跟我们目前实际问答任务相关性较弱,但是个人感觉这块的应用前景比较好,值得研究。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/369579.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Chemistry Development Kit (CDK) 来进行化学SMILES子结构匹配

摘要 SMILES是一种用于描述化合物结构的字符串表示法,其中子结构搜索是在大规模化合物数据库中查找特定的结构。然而,这种搜索方法存在一个误解,即将化合物的子结构视为一个独立的实体进行搜索,而忽略了它们在更大的化合物中的上…

码匠 × OpenAI :快速生成 SQL 语句,提升开发效率!

目录 使用 OpenAI 生成 SQL 码匠连接与集成 OpenAI 总结 关于码匠 在码匠中,编写 SQL 语句,并结合码匠一系列开箱即用的组件实现复杂的业务逻辑,是很常见的应用开发场景。然而,不同的数据库在 SQL 增删改查操作语法、类型字段和…

【C++进阶】一些小知识点

const限定符 用const给字面常量起个名字(标识符),这个标识符就称为标识符常量;因为标识符常量的声明和使用形式很像变量,所以也称常变量。声明方式: const int a 77; const float PI 3.14159f&#xff…

单核CPU, 1G内存,也能做JVM调优吗?

最近,笔者的技术群里有人问了一个有趣的技术话题:单核CPU, 1G内存的超低配机器,怎么做JVM调优?这实际上是两个问题。单核CPU的超低配机器,怎么充分利用CPU?单核CPU, 1G内存的超低配机器,怎么做J…

python学习之OpenCV-Python模块的部分应用示例(生成素描图和动漫图)

文章目录前言一、图片转灰度二、对图片进行二值化处理三、对图片去除噪点四、调整图片透明度五、生成素描滤镜效果图(方法结合应用)六、生成动漫卡通滤镜效果图(方法结合应用)总结前言 OpenCV 是一个图像和视频处理库&#xff0c…

由Geoscene Enterprise 2.1 升级至Geoscene Enterprise 3.1

文章目录一、升级前工作二、升级Geoscene portal三、升级Web Adaptor(针对portal门户)四、升级Server 站点(作为门户托管服务器)五、升级Web Adaptor(针对server)六、升级Data Store需求:由GeoS…

bestSync外网转内网操作

一.外网笔记本操作 设置管理员密码打开笔记本电脑,设置管理员密码(如果已经设置了的,请忽略该操作):左下角鼠标左键点击->控制面板->用户帐户和家庭安全->用户帐户->密码,密码设置完成后回到桌…

【Acwing 周赛复盘】第90场周赛复盘(2023.2.11)

【Acwing 周赛复盘】第90场周赛复盘(2023.2.11) 周赛复盘 ✍️ 本周个人排名:1488/2884 AC情况:1/3 这是博主参加的第五次周赛,这次做题的时候,感觉题目好难 😂 但是一听y总讲解,又…

ORA error集锦

1、oralce 数据客户端需要安装的问题 保存信息为: “无法连接到数据库,因为数据库客户端软件无法加载。确保已正确安装并配置数据库客户端软件” 从百度网盘下载,并安装win32 oracle client 安装包 2、ORA错误 “执行异常,ORA-00911: inval…

TCP四次挥手

TCP 四次挥手过程是怎样的? TCP 断开连接是通过四次挥手方式。 双方都可以主动断开连接,断开连接后主机中的「资源」将被释放,四次挥手的过程如下图: 客户端打算关闭连接,此时会发送一个 TCP 首部 FIN 标志位被置为 1…

Revit标注问题:尺寸界线长度和“快速尺寸定位标注”

一、 Revit中关于标注的问题 1.有时候,但我们建完模型要进行一定的标注,往往会出现这样的间题,如图1所示 按照正常的标注来说,通常它的标注的正确方式应该是这样的,尺寸界线长度应该是指向图元的,如图2所示…

【源码系列】Faster RCNN源码详解(一)——transform

系列文章目录 文章目录系列文章目录前言一、transform二、总结1.标准化2.缩放3.batch前言 Faster RCNN的源码整体可以分为7个模块,每个模块负责不同的功能。推荐B站up霹雳吧啦Wz讲解的Faster RCNN源码,已经很详细了,这里只是个人的一些理解总…

【Unity VR开发】结合VRTK4.0:创建滑块

语录: 只有经历地狱般的磨练,才能炼出创造天堂的力量。 前言: 滑块是一个非常简单的控件,它允许通过沿有限的驱动轴滑动 Interactable 来选择不同的值。我们将使用线性驱动器创建一个滑块控件,该控件允许我们根据与滑…

蓝桥杯刷题五

1.01背包问题这题就是01背包问题的模板题 回顾一下01背包 01就是这个东西选和不选01背包的表达式是f[i]max(f[i-v]w,f[i]);那么这题就可以直接做了 值得注意的是这里只用了一维数组 所以更新的时候要从后往前面更新#include <bits/stdc.h> using namespace std; const in…

【JDK8新特性之Stream流-Stream结果收集案例实操】

一.JDK8新特性之Stream流-Stream结果收集以及案例实操 二.Stream结果收集(collect函数)-实例实操 2.1 结果收集到集合中 /*** Stream将结果收集到集合中以及具体的实现 collect*/Testpublic void test01(){// 收集到List中 接口List<Integer> list Stream.of(1, 2, 3…

码住!新手容易上手的5个tiktok数据分析网站

当下短视频已经称霸了各大内容平台&#xff0c;越来越多的创作者进入到短视频赛道&#xff0c;为了更好地运营自己的内容平台&#xff0c;数据分析是必不可少的。很多人都入局了tiktok&#xff0c;对于商家或者博主红人来说&#xff0c;这是比较新平台&#xff0c;希望能在这个…

Spring Cloud Gateway的使用

Spring Cloud Gateway网关Spring Cloud Gateway三大核心概念Route(路由)Predicate(断言)Filter(过滤)开始使用动态路由配置路由断言过滤器实现TokenIP验证拦截Spring Cloud Gateway 网关&#xff1a;微服务中最边缘的服务&#xff0c;用来做用户和微服务的桥梁 没有网关❓&…

Python使用VTK对容积超声图像进行体绘制(三维重建)

目录VTK简介什么是体绘制&#xff1f;体绘制效果图流程CodeQ&AReferenceVTK简介 VTK&#xff08;Visualization Toolkit&#xff09;是一个用于3D计算机图形学、图像处理和可视化的开源软件包。它包括一组C类和工具&#xff0c;可以让用户创建和处理复杂的3D图形和数据可视…

论文投稿指南——中文核心期刊推荐(音乐)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

超纯水制备,MB-106UP抛光树脂的技术解析

超纯水&#xff08;Ultrapure water&#xff09;又称UP水&#xff0c;是指电阻率达到18 MΩ*cm&#xff08;25℃&#xff09;的水。这种水中除了水分子外&#xff0c;几乎没有什么杂质&#xff0c;更没有细菌、病毒、含氯二噁英等有机物&#xff0c;当然也没有人体所需的矿物质…