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

基于问答对的问答系统方案设计,第1张

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

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5650685.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存