基于问答对的问答系统方案设计
基于问答对的问答系统方案设计
- 1. 前言
- 2. 方案V1.0
- 2.1 召回
- 2.1.1 关键词匹配
- 2.1.2 问题分类
- 2.1.3 相似度计算
- 2.2 粗排
- 2.3 细排
- 3. 方案V2.0
1. 前言
基于问答对的问答系统的核心是当用户输入一个问题的时候,首先要找到跟这个问题最相近的已经存储在库里的问题,然后直接返回相应的答案即可。其本质是一种基于检索的问答,与常规的关键词检索最大区别在于:问答对的问答是从语义角度从数据库中检索答案,而关键词检索仅仅是从关键词的角度进行检索。
假设我们的库里面已有存在以下几个<问题,答案>:
<“人工智能和机器学习的关系什么?”, “其实机器学习是人工智能的一个范畴,很多人工智能的应用要基于机器学习的技术”>
<“人工智能最核心的语言是什么?”, ”Python“>
…
假设用户输入问题 “人工智能主要用到的编程语言是什么?”, 系统先去库中寻找语义最相近的问题。 在这里和 “人工智能最核心的语言是什么”是最相近的,所以直接返回它的答案 “Python”就可以了。
2. 方案V1.0
我们的方案是先召回再排序。召回部分问题再精确排序可以有效提升系统运行速度和精确度。
2.1 召回
召回是指根据用户问题,从数据库中检索相关问题集。这一步是希望尽可能的将相关问题返回,增加系统召回率。
我们采用关键词匹配和问题相似度两种方法召回。
2.1.1 关键词匹配
抽取用户问题中的关键词,用关键词从数据库中检索问题,为了增加召回率,数据库问题中只要匹配成功一个关键词即可召回。检索工具可使用ElasticSearch。
无监督关键词抽取算法可参考博客中文短文本关键词抽取方案。该方法将关键词抽取视为序列标注问题,先使用无监督的SIFRank算法标注语料,然后训练命名实体识别模型。
当没有抽取到关键词时,则使用2.1.2节方法召回。从实际情况看,极少出现没有抽取到关键词的情况。
2.1.2 问题分类
常用的问题类型有:How、What、Why、yes/no,可根据自己领域扩充问题类型。
1) How表示问题询问某个功能或方法,例如”如何开通联通4G网络?“;
2) What表示询问某个事物的定义,例如”联通畅玩卡是什么?“;
3) why表示询问原因,例如”我手机为什么停机了?“;
4) yes/no表示判断问题,例如”套餐可以叠加吗?“。
当没有抽取到用户问题中的关键词时,对用户问题分类,返回数据库中所有同类型的问题。
2.1.3 相似度计算
关键词召回的问题数量仍然非常多,计算用户问题和召回问题的向量相似度时宜采用无交互的双塔模型。这种方法可以事先计算数据库中问题的句向量,保存到数据库中,系统上线时只需计算用户问题的句向量,然后计算召回问题和用户问题两个句向量之间的cos值作为相似度。句向量计算方法可采用sentence-bert模型。
双塔模型属于监督学习方法,如果没有相似问题训练集则需要自行构造。构造方法很多,例如使用生成式模型simBert生成相似问,效果不错。
2.2 粗排
召回步骤返回的问题数量很多,直接开始细排导致计算量太大,耗时长。我们先对这些问题粗排,排序使用关键词得分和相似度值,计算方法如下:
s c o r e ( q ) = α S k + β S c score(q)=\alpha S_k + \beta S_c score(q)=αSk+βSc
α \alpha α和 β \beta β是超参数,表示权重。 S k S_k Sk表示关键词得分,召回问题中匹配的关键词数量越多该值越大,可使用百分比来表示,例如匹配到三分之一数量的关键词, S k S_k Sk为0.33。 S c S_c Sc表示向量相似度得分,可直接使用cos值。
根据score得分排序,取前N个召回问题进入到下一步,N可取10。
2.3 细排
细排的召回问题数量非常少,这时可以使用效果更好的文本匹配方法,例如阿里在ACL2019提出的交互式双塔模型RE2,优点是模型轻量且效果好。返回排序第一的问题对应的答案即可。
3. 方案V2.0
方案1.0中使用的关键词检索是搜索引擎中最基本的检索方法,这种方法无法利用同义词或近义词,只是简单的字符串匹配,例如搜索“北大”,如果数据库中只有“北京大学”而没有“北大”,则无法返回相关文档。当前深度学习中文本都使用向量表示,语义相近的词在向量空间中相近,于是用向量去检索是一种可行方案,这种方法可以实现语义检索,例如“北大”和“北京大学”语义接近,用“北大”即可搜索到“北京大学”。我们在V2.0中增加了这种语义搜索方案,使用fackbook的开源工具faiss。方案如下所示:
使用faiss检索要求存储到数据库中的是文本向量,文本向量可以离线用sentence-bert模型计算。最终结合关键词匹配得分、和cos相似度得分对问题集1打分排序,根据fasii检索的问题集2排序顺序计算得分,两个问题集合并排序取top N个问题进入细排环节。在细排步骤中可以加入关键词得分,因为语义相似度中常常会忽略关键词的重要性,关键词通常就是业务词,例如“苹果有什么功效”和“梨有什么功效”这两个句子语义相似,但是对于具体业务来看,“苹果”和“梨”是完全不同的业务,所以这两个句子是不相同的。
基于问答对的问答系统方案设计相关推荐
- 基于单片机的录音笔电路方案设计(毕业设计资料)
103[电路方案]基于单片机的录音笔电路方案设计 摘要: 基于ISD4004的录音笔设计: ●1.采用外部加放音设备,LM386驱动喇叭,电位器调节音量,构成音乐演奏器的硬件电路; 2.内置8首歌曲, ...
- 基于NLP的智能问答系统核心技术
自然语言处理涉及的几个层次?,答案( ) 形态学(morphology):形态学(又称"词汇形态学"或"词法")是语言学的一个分支,研究词的内部结构,包括屈 ...
- 基于STM32的智能小车方案设计
基于STM32的智能小车设计 前言 一.什么是STM32智能小车? 二.模块汇总 1.主控板(STM32F103ZE) 2.底板 3.电机 4.避障模块(超声波传感器,红外传感器) 5.寻迹模块(3路 ...
- 基于neo4j图谱搭建问答系统
前言 承接前文,本文介绍如何根据已有的neo4j图谱来搭建一个简单的问答系统. ps:因为是基于neo4j图谱的,所以这个问题必须是在图谱中有答案才能进行回答. 完整项目github地址:https: ...
- 基于智能合约的银行借贷方案设计与实现
摘要 针对银行借贷方式中个人.小微企业借款困难的现象,以及银行承担较高的资金风险,工作人员在借贷审核方面受主观因素影响较大的问题,基于区块链技术,提出一个基于智能合约的银行借贷方案.首先设计EBBI借 ...
- (三)基于文本的QA问答系统——SGPT:GPT Sentence Embeddings for Semantic Search解读
SGPT:GPT Sentence Embeddings for Semantic Search解读 文章目录 SGPT:GPT Sentence Embeddings for Semantic Se ...
- (二)基于文本的QA问答系统——深度检索模型概述
深度检索模型 概述 该部分用于基于上下文信息实现语境对称检索和语境非对称检索. 名词解释 语境检索semantic search指的是结合上下文语境信息的检索. 关于对称检索和非对称检索在文章SGPT ...
- 基于华为超融合的方案设计实践
[摘要]伴随着财务公司业务的发展,业务系统对网络资源.计算资源.存储资源有了更大的需求.考虑目前财务公司IT现状的同时,新搭建超融合架构的服务器集群,满足银金融外联区的运行需求.本文结合某财务公司的 ...
- matlab建模大赛程仁山,基于MATLAB的赛程安排方案设计
摘要 单循环赛是一种全面而公平的竞赛机制,赛程安排的恰当与否,在很大程度上影响比赛的结果.本文主要针对单循环赛的最优赛程安排方案建立相应的数学模型,给出最优赛程的安排方案. 对于问题一,通过直接拼凑的 ...
最新文章
- python输出n阶矩阵_python-递归计算矩阵(nxn)的行列式
- C#面向对象(一):明确几个简单的概念作为开胃菜
- Kafka broker配置介绍 (四)
- 2.0 es6中forEach以及数组操作
- C语言试题八十一之利用递归函数调用方式,将所输入的5个字符,相反顺序打印
- 现代软件工程 教学计划 适应两种难度和重点
- Lodash-一个一致性、模块化、高性能的 JavaScript 实用工具库介绍
- QT添加资源文件并使用
- 大话量子通信丨赠书名单公示
- VR全景虚拟校园提高学校的知名度和美誉度
- Matrix Operations -- Transpose +Determinant + Adjugate+ Inverse + Gram-Schimidt +LUP + QR + Eigen
- android应用程序设计答案,Android移动应用程序设计智慧职教MOOC答案
- WordPress优化教程大全
- 【毕业设计】单片机机器视觉人体识别小车 - 深度学习 yolo目标检测 人体识别 树莓派
- 嵌入式Linux驱动学习之路(二十六)DM9000C网卡驱动程序
- java 如何使用ocr_Java使用tess4J进行OCR图像识别
- DSCTF2022 fuzzerinstrospector-Wp
- tplink 703N拆机接ttl
- Python数据分析与可视化(数据分析)
- 金莹江苏省计算机学会教授,2020年江苏省大学生程序设计大赛在我校举办
热门文章
- 【JavaScript】input提示弹出框
- android gps距离计算器,计算器刷成安卓系统 刷系统千万别找设计师
- Java web--利用java操作excel文档
- mysql 文本挖掘_GitHub - HuiHuiT/dianping_textmining: 大众点评评论文本挖掘,包括点评数据爬取、数据清洗入库、数据分析、评论情感分析等的完整挖掘项目...
- STC12单片机双串口共用独立波特率发生器发生波特率
- 【游戏逆向】FPS游戏自瞄透视之堆栈分析
- 大数定理、正态分布、中心极限定理
- filezilla关闭更新检测
- 怎样利用DOI快速检索文献?
- 微信开放平台之小程序获取用户信息