0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

对话系统中的多路召回和排序

深度学习自然语言处理 来源:CS的陋室 作者:CS的陋室 2022-12-07 11:05 次阅读

最近和一些和对话系统不太了解的朋友聊了一下,发现其实很多人会把对话系统误解为一个简单、单一的系统,然而实际上对话系统内部的结构可以很复杂,这个原因很多吧,可能被一些文章给误导吧,其实一个比较成熟的对话系统,内部的结构和组件是可以很多的,比较突出的就是多路召回以及其对应的排序系统。这一期给大家介绍一下这两个模块。

工业界,可能会因为各种原因,我们需要采用多路召回的方式来处理对话系统,即分头考虑多种答案的可能性,然后再筛选出最优的回答。这一期就给大家介绍多路召回和排序的来龙去脉,以及常见的解决方案。

多路召回的原因

上一期(心法利器[78] | 端到端任务的拆解设计)我们有提到,对于一个任务,如果比较复杂,我们是希望把任务进行拆解的,拆解之后各个击破然后组装回来,那么对于一个完整的对话系统也是如此,当然这也是它能被称之为“系统”的理由,一般情况,我们会因为这些原因,把整个内容回复部分做拆解,形成多路召回:

回复内容的来源比较多样。如一些问答类的,可能是问天气、百科,这些资源的来源可能都不一样,此时我们肯定是需要拆分多路召回逐个获取的,甚至有些内容就是生成的,例如闲聊之类的。

不同内容的数据结构不同,要构造不同的存储和检索方案,例如结构化的内容,用mysql,文本检索用ES,向量检索可以用faiss,还有图谱等。

有些可能是因为检索内容和对象不同,例如QQ和QA匹配,例如改写前后的匹配等。

一些回复需要特别的构造,如追问(你要问的是XXX吗)、疑似问(你要问的问题是否在下面)、风控兜底(你说的这话不合适,对不起我还在学习)等。

因为很多原因,我们需要做多路召回,把多种不同内容、不同数据结构的资源,分路进行各自的召回,各自处理好后再排序。

多路的召回形式

由于上述原因,我们需要对对话系统进行多路召回,那么召回上,主要有哪些召回的链路呢。

检索式

首先,是比较经典的检索技术,这个其实对应的比较经典的检索式对话,其实现在仍旧被广泛使用,一些依赖数据、依赖知识背景的场景,这种检索来找到合适的答案的方式是非常重要的,例如一些人物问答“鲁迅的生卒年份”,客服场景“冰箱维修”,非常依赖检索式,一般比较常用的检索工具,有这些,大家可以根据实际情况进行选择。当然,篇幅和时间原因,这里我只会提一些名词,一些只是细节欢迎根据我提到的关键词进行更加深入的学习。

对于结构化的知识,就是能形成关系表的那种,mysql是一个比较好的选择,毕竟结构化查询语言比较成熟,各种处理会比较简单。

对于长文本、非结构化的检索,技术上用的就是传统搜索中的倒排索引,工具上,单机其实可以自己写,也可以用,python写个dict就可以了,具体的可以参考之前我写的词典匹配的这篇(把后面dict中的value改成长文本id即可),但是由于一般资源会比较多,所以更倾向于用分布式的方式,Elasticsearch是很好的选择。

向量检索,应该是现在比较潮流的玩法,在我们有一套比较好的向量的时候,就要做向量检索,这个向量检索的工具,单机推荐annoy,分布式推荐faiss,另外前面说的elasticseatch加上一些插件,如hnswlib也是可以用的。

另外还有一些更加前言的技术,例如知识图谱,这个我具体没有接触,听到比较多的是neo4j,其他的有熟悉这个的伙伴欢迎在评论区补充。

生成式

当然,除了经典的检索式对话,还有大家比较喜欢聊起来的生成式,其实我的视角,工业界对生成式一直是比较谨慎的,主要原因有这么几个:

生成式虽然非常直接,但是内容不可控,很多时候会有一些不太合适的回答,作为面向用户的产品,可控性要求很高,例如一些不小心的涉黄涉暴,其实风险很高的,甚至有一些问句和答句分别看着很合适但是放一起就不合适的情况,虽然不多,但是一旦出现被封号下架没了就很血亏了。

生成式其实也会有很多领域以来知识支撑,一旦没有知识,是会出现“一本书正经的胡说八道”的情况。

写到这,发现自己之前的对话系统系列文章写过类似的文章,有关内容生成的,在这里:前沿重器[24] | 聊聊对话系统:内容输出。

多轮

但说到这里,仍旧还有一种比较特殊的召回情况,需要说,就是多轮。多轮是一种对话系统一种特有的形式,另外这里会分强多轮和弱多轮,简单解释下:

强多轮是进入到一个比较狭窄的多轮通道,基本都会限制在这个对话链路里,一般是一些任务型的对话可能会这么做,例如定机票,多半需要将对话封闭起来做多轮的追问。一般无明确的打断,都更倾向于封闭处理,不大会和其他链路一起排序。

弱多轮是做对话内容的信息继承,在聊天过程可能会根据上轮信息给出进一步的回复,这种情况多半会比较宽松,通常都会参与和其他召回链路一起排序。

因此,如果是弱多轮,其实就是增加一个多轮的链路处理就好了,而对于强多轮,一般会增加一个打断判断,如果不打断,就这一路多轮召回就好了,如果需要打断,再让位给其他链路即可。

值得注意的是,多轮只是一个对话系统里的特殊情况,多轮里面的内容,多半也逃不开检索式和生成式这样的形式。

多路召回下的排序

既然要分,后续肯定要合,多路召回对半就需要进行了排序。因为不同系统的不太一样,所以简单取一些情况简单聊聊。

有用户反馈

类似搜索和推荐系统,有些场景的推荐系统,是可以有用户反馈的,例如一些客服系统之类的,用户会给回复打分,例如“满足”or“未满足”,那就可以根据情况进行调整。既然有用户的反馈,就可以开始利用起来,甚至是有些类似搜索的精排模型可以做。

因为不同系统中,用户的反馈的占比、形式、可靠程度不同,采取的策略不太一样,有些质量比较差或者比例比较低的,甚至直接抛弃,这个其实很考验算法对现状和自己手里方案的理解,因为资料看的还不太够,我先不展开吧,后面有机会展开聊。我可以明确的是,直接套用搜索或者推荐那一套,很多时候是真不可行。

无用户反馈

无用户反馈往往是对话系统中最常见的情况,一般有这几个原因:

产品原因,很多产品没有明确的用户回复,一般给了答案用户就走了。

多答案的问题,一个提问可能有很多的回答方式,可能都是合理的,但用来做模型训练也不好评估。

答案形式的丰富性,多种答案类型做统一表征存在困难,本身表征建模也不好做。

因此,大部分对话系统很难有用户反馈和有监督的方式,这点真的得靠评测产品运营来做综合评估然后来优化的,在多链路的合并时,往往是使用比较简单的规则和简单的认为评分进行分级排序,根据每个链路的质量、可靠性来进行综合评估打分排序似乎是一个比较常规而且成本不高的方法。

这点不要以为非常罕见或者非常low,对于比较早起的搜索和排序系统,也是用的类似的方式来做综合排序的,毕竟这个方式可靠简单。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据结构
    +关注

    关注

    3

    文章

    564

    浏览量

    39900
  • 检索
    +关注

    关注

    0

    文章

    26

    浏览量

    13097
  • 对话系统
    +关注

    关注

    0

    文章

    7

    浏览量

    2171

原文标题:对话系统中的多路召回和排序

文章出处:【微信号:zenRRan,微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    十大排序算法总结

    排序算法是最经典的算法知识。因为其实现代码短,应该广,在面试中经常会问到排序算法及其相关的问题。一般在面试中最常考的是快速排序和归并排序等基本的排序
    的头像 发表于 12-20 10:39 721次阅读

    python升序和降序排序代码

    Python是一种简洁而强大的编程语言,提供了许多实用的函数和方法来排序数据。在本文中,我们将详细讨论Python中的升序和降序排序。我们将深入探讨不同的排序算法、它们的复杂度以及如何在Python
    的头像 发表于 11-21 15:20 975次阅读

    排序算法有哪些

    1. 归并排序(递归版) 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治策略,即分为两步:分与治。 分:先递归分解数组成子数组 治:将分阶段得到的子数组按顺序
    的头像 发表于 10-11 15:49 324次阅读
    <b class='flag-5'>排序</b>算法有哪些

    排序算法之选择排序

    选择排序: (Selection sort)是一种简单直观的排序算法,也是一种不稳定的排序方法。 选择排序的原理: 一组无序待排数组,做升序排序
    的头像 发表于 09-25 16:30 844次阅读
    <b class='flag-5'>排序</b>算法之选择<b class='flag-5'>排序</b>

    如何在DS-5 Dtsl选项对话框1.0版创建ETR配置选项卡

    ( ETR) 路由调试器( ETMC) 将追踪数据储存在目标平台的系统记忆。 因为记忆地图可以改变, TMC 可用的记忆的位置和数量可能不会在调试会话持续, 我们在 DTTTSTR 选项
    发表于 08-28 06:47

    FPGA排序-冒泡排序介绍

    排序算法是图像处理中经常使用一种算法,常见的排序算法有插入排序、希尔排序、选择排序、冒泡排序、归
    发表于 07-17 10:12 671次阅读
    FPGA<b class='flag-5'>排序</b>-冒泡<b class='flag-5'>排序</b>介绍

    Python实现的常见内部排序算法

    排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因
    发表于 07-06 12:35 257次阅读
    Python实现的常见内部<b class='flag-5'>排序</b>算法

    如何对SAR ADC电源进行排序

    电源排序可以防止损坏并延长电源以及设计中任何敏感IC和FPGA的使用寿命。除了控制启动时序以控制电流消耗外,电源轨还需要保持在FPGA的耐压要求范围内。随着新工艺技术的出现,这些容差变得更加严格,以至于可能需要3%的总内核电压容差。可以通过多种方式对系统中的电源进行
    的头像 发表于 06-27 11:29 607次阅读
    如何对SAR ADC电源进行<b class='flag-5'>排序</b>

    常见排序算法分类

    本文将通过动态演示+代码的形式系统地总结十大经典排序算法。 排序算法 算法分类 —— 十种常见排序算法可以分为两大类: 比较类排序:通过比较
    的头像 发表于 06-22 14:49 634次阅读
    常见<b class='flag-5'>排序</b>算法分类

    利用强化学习来探索更优排序算法的AI系统

    前言 DeepMind 最近在 Nature 发表了一篇论文 AlphaDev[2, 3],一个利用强化学习来探索更优排序算法的AI系统。 AlphaDev 系统直接从 CPU 汇编指令的层面入手
    的头像 发表于 06-19 10:49 398次阅读
    利用强化学习来探索更优<b class='flag-5'>排序</b>算法的AI<b class='flag-5'>系统</b>

    问答对话文本数据,构建智能问答对话系统的基础

    在人工智能领域的发展中,问答对话系统显得尤为重要。一方面,它为我们提供了常用的人机交互方式;另一方面,它也对互联网公司和其他机构提供了一种新的商业模式。不过,对话系统的核心技术之一就是
    的头像 发表于 06-18 23:02 351次阅读

    C语言经典排序算法总结

    本文将通过动态演示+代码的形式系统地总结十大经典排序算法。
    发表于 06-05 10:56 393次阅读
    C语言经典<b class='flag-5'>排序</b>算法总结

    4芯、12芯、48芯、96芯、126芯光缆颜色排序-科兰

    多次有朋友留言问到,光纤熔接颜色如何排序,这个在实际应用中还是比较多的,那么今天我们就不讲原理了,直接用图文简单明了讲光纤熔接色谱,大家可以了解下。 一、常规排序 1、4芯的排序
    的头像 发表于 05-18 10:57 4372次阅读
    4芯、12芯、48芯、96芯、126芯光缆颜色<b class='flag-5'>排序</b>-科兰

    使用MAX16046系统管理IC进行排序

    CPU、ASIC、FPGA 和存储器等复杂器件通常需要电源排序。MAX16046为排序、监视和电源裕量调节提供高度集成的方案。本应用笔记给出了使用具有特定时序要求的多个器件的示例系统,并提供了使用MAX16046的分步实现。
    的头像 发表于 05-09 11:19 458次阅读
    使用MAX16046<b class='flag-5'>系统</b>管理IC进行<b class='flag-5'>排序</b>

    如何在Mx1051的FlexCAN1配置简单信号多路复用和扩展信号多路复用?

    我们正在研究 FlexCAN1 的 mxrt1051。我们是第一次在 FlexCAN 上工作,请协助以下几点: - 如何在 Mx1051 的 FlexCAN1 配置简单信号多路复用和扩展信号
    发表于 05-05 11:05