基于问答对的问答系统方案设计

  • 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个问题进入细排环节。在细排步骤中可以加入关键词得分,因为语义相似度中常常会忽略关键词的重要性,关键词通常就是业务词,例如“苹果有什么功效”和“梨有什么功效”这两个句子语义相似,但是对于具体业务来看,“苹果”和“梨”是完全不同的业务,所以这两个句子是不相同的。

基于问答对的问答系统方案设计相关推荐

  1. 基于单片机的录音笔电路方案设计(毕业设计资料)

    103[电路方案]基于单片机的录音笔电路方案设计 摘要: 基于ISD4004的录音笔设计: ●1.采用外部加放音设备,LM386驱动喇叭,电位器调节音量,构成音乐演奏器的硬件电路; 2.内置8首歌曲, ...

  2. 基于NLP的智能问答系统核心技术

    自然语言处理涉及的几个层次?,答案(   ) 形态学(morphology):形态学(又称"词汇形态学"或"词法")是语言学的一个分支,研究词的内部结构,包括屈 ...

  3. 基于STM32的智能小车方案设计

    基于STM32的智能小车设计 前言 一.什么是STM32智能小车? 二.模块汇总 1.主控板(STM32F103ZE) 2.底板 3.电机 4.避障模块(超声波传感器,红外传感器) 5.寻迹模块(3路 ...

  4. 基于neo4j图谱搭建问答系统

    前言 承接前文,本文介绍如何根据已有的neo4j图谱来搭建一个简单的问答系统. ps:因为是基于neo4j图谱的,所以这个问题必须是在图谱中有答案才能进行回答. 完整项目github地址:https: ...

  5. 基于智能合约的银行借贷方案设计与实现

    摘要 针对银行借贷方式中个人.小微企业借款困难的现象,以及银行承担较高的资金风险,工作人员在借贷审核方面受主观因素影响较大的问题,基于区块链技术,提出一个基于智能合约的银行借贷方案.首先设计EBBI借 ...

  6. (三)基于文本的QA问答系统——SGPT:GPT Sentence Embeddings for Semantic Search解读

    SGPT:GPT Sentence Embeddings for Semantic Search解读 文章目录 SGPT:GPT Sentence Embeddings for Semantic Se ...

  7. (二)基于文本的QA问答系统——深度检索模型概述

    深度检索模型 概述 该部分用于基于上下文信息实现语境对称检索和语境非对称检索. 名词解释 语境检索semantic search指的是结合上下文语境信息的检索. 关于对称检索和非对称检索在文章SGPT ...

  8. 基于华为超融合的方案设计实践

     [摘要]伴随着财务公司业务的发展,业务系统对网络资源.计算资源.存储资源有了更大的需求.考虑目前财务公司IT现状的同时,新搭建超融合架构的服务器集群,满足银金融外联区的运行需求.本文结合某财务公司的 ...

  9. matlab建模大赛程仁山,基于MATLAB的赛程安排方案设计

    摘要 单循环赛是一种全面而公平的竞赛机制,赛程安排的恰当与否,在很大程度上影响比赛的结果.本文主要针对单循环赛的最优赛程安排方案建立相应的数学模型,给出最优赛程的安排方案. 对于问题一,通过直接拼凑的 ...

最新文章

  1. python输出n阶矩阵_python-递归计算矩阵(nxn)的行列式
  2. C#面向对象(一):明确几个简单的概念作为开胃菜
  3. Kafka broker配置介绍 (四)
  4. 2.0 es6中forEach以及数组操作
  5. C语言试题八十一之利用递归函数调用方式,将所输入的5个字符,相反顺序打印
  6. 现代软件工程 教学计划 适应两种难度和重点
  7. Lodash-一个一致性、模块化、高性能的 JavaScript 实用工具库介绍
  8. QT添加资源文件并使用
  9. 大话量子通信丨赠书名单公示
  10. VR全景虚拟校园提高学校的知名度和美誉度
  11. Matrix Operations -- Transpose +Determinant + Adjugate+ Inverse + Gram-Schimidt +LUP + QR + Eigen
  12. android应用程序设计答案,Android移动应用程序设计智慧职教MOOC答案
  13. WordPress优化教程大全
  14. 【毕业设计】单片机机器视觉人体识别小车 - 深度学习 yolo目标检测 人体识别 树莓派
  15. 嵌入式Linux驱动学习之路(二十六)DM9000C网卡驱动程序
  16. java 如何使用ocr_Java使用tess4J进行OCR图像识别
  17. DSCTF2022 fuzzerinstrospector-Wp
  18. tplink 703N拆机接ttl
  19. Python数据分析与可视化(数据分析)
  20. 金莹江苏省计算机学会教授,2020年江苏省大学生程序设计大赛在我校举办

热门文章

  1. 【JavaScript】input提示弹出框
  2. android gps距离计算器,计算器刷成安卓系统 刷系统千万别找设计师
  3. Java web--利用java操作excel文档
  4. mysql 文本挖掘_GitHub - HuiHuiT/dianping_textmining: 大众点评评论文本挖掘,包括点评数据爬取、数据清洗入库、数据分析、评论情感分析等的完整挖掘项目...
  5. STC12单片机双串口共用独立波特率发生器发生波特率
  6. 【游戏逆向】FPS游戏自瞄透视之堆栈分析
  7. 大数定理、正态分布、中心极限定理
  8. filezilla关闭更新检测
  9. 怎样利用DOI快速检索文献?
  10. 微信开放平台之小程序获取用户信息