前沿重器[21] | 聊聊对话系统:概述

article/2025/10/21 15:33:42

前沿重器

栏目主要给大家分享各种大厂、顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。

近期,我再次总结了我的历史文章,累积起来有50w字,百余篇文章了,有兴趣可以拿来看看,获取方式:七夕清流,百余篇累计50w字文章合集发布。

往期回顾

  • 前沿重器[16] | 美团搜索ner技术启示(上)

  • 前沿重器[17] | 美团搜索ner技术启示(下)

  • 前沿重器[18] | KDD21-淘宝向量检索

  • 前沿重器[19] | 预训练在美团搜索广告中的应用

  • 前沿重器[20] | 文本分类和意图识别调研思考

最近整理了一轮,想系统聊聊对话系统这个问题,也说说自己这一段时间以来接触的一些理解吧,主要覆盖下面这些内容:

  • 概述。对整个对话系统有一个比较完整的综述,聊聊他的概念和一些核心技术点等。

概述之后就是对对话系统进行拆解,来讲解内部常用的技术。

  • 技术架构——对话系统是怎么运转和处理的

  • 内容理解——理解对方说什么,也就是NLU。

  • 内容输出——回复对方的内容是怎么产生的,

  • 多轮对话——多轮的信息处理和对话策略。

今天是第一篇,主要讲解的就是对话系统的基本概念和一些常见的架构,另外也会给大家介绍一些对话系统常见的技术手段和案例。

什么是对话系统

其实对话系统很好理解,对话系统就是人机对话的一个接口,人和他对话,他能给出一定的反馈,甚至完成一定的任务。举个例子,比较常见的就是淘宝的客服,问一些问题,某些有机器人后台的就会给出一些初步的回复,虽然有些沙雕,但是总能够完成部分简单常见的问题,能一定程度满足用户需求,从而降低了人工的成本。举个例子:

Q:你们商品一般什么时候发货。
A:当天发货亲。

这种很常见的简单问题,是可以通过客服系统直接回复的,简单方便。答案很多,回复也很多样,如何给出合适回复,这就是对话系统需要解决的核心问题。

而使用场景上,其实远没有大家想的那么冷门,可能大家身处互联网行业,或者是每天看的东西都是互联网而被这些信息给局限了,其实对话系统是非常常见的,除了上面说的客服,还有类似智能家居、智能助手等场景,其实非常依赖好的对话系统完成各种各种复杂的任务,我自己觉得最有幸福感的就是冬天天气很冷,在被窝里玩手机,只需要一句“帮我把卧室灯关掉”就能关了,这背后都有对话系统的身影,另外最近收到一些流调的电话,电话里的很多都是机器人在提问和记录。

所以,我其实感觉,对话系统没有想象中那么不堪,很多人觉得对话系统不赚钱没前途,我自己并不觉得悲观的,当然,对话系统的核心技术点——NLP,也因为同样的原因,其实不见得就“没前途”。

对话系统的类型划分

根据类型进行拆解,大家能够更好理解对话系统内部的本质,很多人可能都会听说类似“闲聊型”、“任务型”之类的,很多样,这里我按照我的理解做一些分类,让大家更好地理解对话系统以及其内部的一些技术思路。

说到分类,肯定是要提分类标准的,不同的分类标注肯定会得到不同的分类结果。

根据结果输出的方式分类

我把它分为检索式、生成式和混合式。

检索式顾名思义,通过查询来得到最终的答案。检索式的答案大都是有人提前进行了整理存到特定的库里面,在对用户query进行理解后即可根据结果查询到适合给用户的标准答案。这里的查询,可以是文本层面的查询,例如比较基础的ES,也可以是潮了一段时间现在被看做是baseline的向量召回,甚至是现在还比较潮的知识图谱,都可以算作是检索式。这种方式可能在对话系统中已经非常老了,但是仍旧是对话系统落地场景中最重要的方式,它具有很强的可干预性、稳定性等,结果是啥样就给的啥样,不会有什么风险,结果的正确性能够保证,而且NLP只需要关注理解和匹配问题,对答案内容可以不太关心,相比之下会简单很多。

生成式应该是现在大家看到的和分享的最多的,正因为他是比较前沿的,生成式就是通过模型或者规则的手段生成回复,可以说是非常智能的方案了。一般地,闲聊场景是非常常见的,最近看过的一次分享就是小布助手的生成式闲聊(小布助手闲聊生成式算法),就是直接能够根据用户query生成结果。这个方式的优点就是泛化能力强,对于没有提前准备答案的,知识点没覆盖的内容,他也能回复但是缺点也比较明显,就是可控性低,而且缺乏知识的生成式很可能会一本正经的胡说八道(从北京到深圳只需要2公里,这句话从通顺性上没毛病,但是逻辑上是有问题的,哪怕是GPT之类的模型也很容易出这个问题)。

混合式就是两者的混合吧,这里指的混合是指结果上的混合,检索式可以查到一些零散的信息,结合生成式可以将整个结果拼接成更为完整、更像“人话”的回复。

根据交互次数

这个划分很简单,如果只是回复一次就结束对话,上下文之间不考虑相关性,那就是单轮对话,与之相反就是多轮,毫无疑问多轮对话的难度要大于单轮,单轮对话遇到的问题多轮基本都会有,而多轮因为要考虑上下文,难度可就大很多了。

目前多轮对话的结构和思路是已经形成了一定的共识,即需要DM模块(dialog management)来对对话内容管理起来,无论是对方的还是机器的,都需要维护起来,确保一致,即DST(dialog state tracking),然后根据对话的进展以及对话管理下的内容进行综合评定给出最终回复,即DP(dialog policy),或者说是对话策略(dialog strategy)。

来几个多轮对话的例子,我就直接举翻车的例子了。

Q:今天天气怎么样。
A:今天晴,20度到25度。
Q:明天呢。
A:你希望问明天的什么呢。

Q:你今年多少岁了。
A:我今年才3岁呢。
Q:你在哪个幼儿园?
A:我已经上班了。

前者是没有把用户说的内容给记录下,后者是没有和自己的结果维持统一,而为了保证这些东西,我们是需要把对话内容给完善维护起来的。

领域范围

根据领域范围的不同,把它分为开放域和封闭域,后者也有叫做垂直域的,都行。先不聊机器和技术,就聊人的对话,本身其实是有一个背景或者一个先验知识的,这会导致不同的人在不同场景下理解会不同。同样一个说法,“上号!”,在游戏圈背景下,那就是要上对应游戏了,在技术群里说一句,说不定就是去leetcode了[狗头],这是封闭域,这个封闭域下大家有了很多的先验信息,大家对这种简单的话判断就会比较明确,但是如果在大庭广众下吼一句,估计很多人会觉得你不太正常,这就是开放域,大家认为你这个话是模糊的。说完了人,在来说说对话系统,这个和搜索系统类似,在封闭域下一些很明确的话,可能在开放域就很模糊了,“手机卡怎么办”对电信客服来说理解就是办理手机卡业务了,对手机客服来说很可能首先理解是手机卡顿,当然手机卡办理估计也会怀疑可能是,但是如果开放域这个句话就是妥妥的歧义句了。

所以,针对开放域和封闭域,都有特定的一些技术手段来保证结果的准确性,例如开放域会花费很多精力来做意图识别,而封闭域可能更倾向于根据一些信息的补充来直接给出答案。

讲一些特别的类型

这里讲一些比较特殊的场景类型吧。

首先是闲聊。闲聊应该是很多人首先接触到的场景了,顾名思义,就是人随心所欲地聊天的那种场景,这种场景小则是一些闲话,但绝对不局限于此,闲聊其实一直是一个非常复杂的问题。首先,这个对话肯定要是正常的对话,但是人正不正常不好说,很多引导性的、涉黄涉政涉暴的,要从容应对可不简单,机器人被要求友好,被骂了骂回去可不见的合适,很多时候,是需要检索式来支持的,甚至是避不开的需要;第二,有的人喜欢娱乐明星,有的人喜欢政治军事,有的人喜欢二次元,有的人喜欢打游戏,有的人喜欢机器学习,背后的知识可能会很多,知识依赖可就很高了;第三,多轮问题,懂的都懂,甚至还有人设问题(对应的身份、年龄的人做对应的事,这就是人设)。

然后是客服。客服应该是很常见的场景了,淘宝一堆,然后还有了一些类似医疗问诊、银行证券之类的,也都很需要客服,检索式应该非常常见而且关键的技术方案了,因为要保证答案准确可控,但是客服可能不局限此,一些多轮和对话策略其实在很多客服系统都是支持的,从而增强用户体验,但是这个其实是很高级的功能了。

任务型。应该是一个很典型的一种类型的对话系统了,通过不停地追问和对答案的记录,最终完成特定的任务,先来个例子吧。

Q:我要订机票。
A:要定从哪里出发的机票呢?
Q:从深圳,到北京的。
A:好的。希望什么时候出发?
Q:明天上午10点左右吧。
A:好的,系统给你找到XXX航班,明天10点05分起飞,预计13点到达,请问是否合适?
Q:可以的。
A:已经为您预定XXX航班,请点击付款完成最终操作。记得提前办理值机手续哟。

这里,通过一连串的追问获取信息,引导用户完成一个完整的订机票流程,这就是任务型,这也是多轮最典型的案例,需要记录信息并且最终完成一个任务,NER和意图识别要把对话中的要素提取,对话管理内需要维护好用户这一系列的信息,追问是一个答案生成的过程,最终还要完成这个任务。

对话推荐。这里的推荐不是指疑似问和相关问题(当然这也是一个研究的领域了),而是至一种带有一定推荐性质的对话。来一个电商场景的吧:

Q:我想买一台电脑,大概6000元,有什么推荐的吗?
A:为你找到6000左右的电脑,你看这些合适吗?
Q:有没有游戏本?
A:为你找到6000左右的游戏本,你看有合适的吗?
Q:这台XXX有没有别的配置,只有i5吗,有没有i7的。
A:有的,这是XXX-i7版的。

这段对话内,是一个给用户推荐商品的过程,用户会有一些商品需求,需要根据用户的需求找到符合用户需求的产品,这里其实更像是带条件的搜索了,而如果是能考虑到用户画像和习惯,甚至可以做一些个性化,形成一个推荐系统,这里的问题就更热闹了,而其特点就在于,是带有用户条件的,这里其实更像是个性化搜索,不过是对话系统场景了,从产品上,我们不仅要考虑推荐的内容,还需要考虑生成的回复话术,简单的可以考虑是固定的,但都是复杂的可能还会有一些结合产品特定的生成或者拼接。

e3008e5a9796429b15eac17181dab344.png


http://chatgpt.dhexx.cn/article/T6Uw4LrF.shtml

相关文章

Xenko C#开源游戏引擎

Xenko是一款用于渲染和 VR 的开源 C# 游戏引擎。该引擎具有高度模块化,旨在为游戏制作者提供更大的开发灵活性。Xenko 附带一个编辑器,允许您以直观和直观的方式创建和管理游戏或应用程序的内容。 官方网站:https://xenko.com/ g…

开源游戏引擎整合

2D: Allegro.cc - Main http://www.allegro.cc/ 老牌子了,和SDL同时是很经典两个EG开发组件,最近貌似在和PY进行联合? ClanLib - ClanLib Game SDK http://www.clanlib.org/ CLANLIB是以前听过最复杂最丰富的SDK,看看链接 http://…

开源游戏java引擎_基于Java的开源3D游戏引擎jMonkeyEngine

jMonkeyEngine简介 jMonkeyEngine是一款纯Java语言编写的游戏引擎,继承了Java应用跨平台的特性,而且是开放源代码的,遵循BSD开源协议,BSD开源协议用一句简单的话概括就是你可以用它做任何你想做的事情而不必担心版权问题。 这款游戏引擎在商业游戏中使用的不多,但是笔者觉…

<2021SC@SDUSC> 开源游戏引擎 Overload 代码模块分析 之 OvTools(七)—— 终篇总结

2021SCSDUSC 开源游戏引擎 Overload 代码模块分析 之 OvTools(七)—— 终篇总结 目录 前言回顾1、Eventing2、Filesystem3、Time4、Utils 总结下一个计划 前言 本篇是开源游戏引擎 Overload 模块 OvTools 的最后一篇了。本篇,笔者将对 OvToo…

<2021SC@SDUSC> 开源游戏引擎 Overload 代码模块分析 之 OvGame (一)—— 概况与 .rc 文件

2021SCSDUSC 开源游戏引擎 Overload 代码模块分析 之 OvGame(一)—— 概况与 .rc 文件 目录 前言OvGame 模块大纲.rc 文件 计划 前言 上一篇,笔者对 Overload 的 OvTools 分析总结完毕,想了解的可前往总结与链接集合自选查看。而…

开源游戏引擎详解

2D: Allegro.cc - Main http://www.allegro.cc/ 老牌子了,和SDL同时是很经典两个EG开发组件,最近貌似在和PY进行联合? ClanLib - ClanLib Game SDK http://www.clanlib.org/ CLANLIB是以前听过最复杂最丰富的SDK,看看链接 http://…

<2021SC@SDUSC> 开源游戏引擎 Overload 代码模块分析 之 OvGame(八)—— 终篇总结

2021SCSDUSC 开源游戏引擎 Overload 代码模块分析 之 OvGame(八)—— 终篇总结 目录 前言回顾1、.rc2、Utils3、Debug4、Core5、Main.cpp 总结 前言 本篇是开源游戏引擎 Overload 模块 OvGame 的最后一篇了。本篇,笔者将对 OvGame 做一个简单…

WickedEngine 开源游戏引擎

GitHub:https://github.com/turanszkij/WickedEngine WordEngEnter是开源跨平台C游戏引擎,支持DX12和Vulkan渲染器的光线跟踪和路径跟踪。Wicked engine既可以作为构建自己游戏引擎的底层框架,也可以作为自己的完全功能引擎,它增强…

Storm-Engine 基于 C++ 的开源游戏引擎

Storm Engine 是《海狗》和《加勒比海盗》等游戏背后的游戏引擎,该游戏引擎已在 GPLv3 许可下开源。源代码仅包括游戏引擎,并不包括上述游戏的源代码 支持的游戏 海狗加勒比海盗海盗时代 构建项目 需要安装 Conan 并将其添加到%PATH%环境变量中。此外…

阿里自主研发的互动游戏引擎Hilo开源啦!【内有详解】

Hilo,一套HTML5跨终端的互动游戏解决方案。Hilo支持了多届淘宝&天猫狂欢城等双十一大型和日常营销活动。内核极简,提供包括DOM,Canvas,Flash,WebGL等多种渲染方案,满足全终端和性能要求。支持多种模块范…

R语言基础教程1

文章目录 安装运算符判断函数递归 安装 根据自己的操作系统,下载R语言环境后,安装,并将安装路径加入到环境变量,即可从命令行进入R环境 >rR version 4.2.2 (2022-10-31 ucrt) -- "Innocent and Trusting" Copyrigh…

R、Rstudio的下载和安装教程

R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。RStudio是R的集成开发环境,使用R的UI界面Rstudio进行R编程的学习会更加方便。显然,安装Rstudio之前需要先进行R环境安装。R的下载地址…

R/RStudio详细安装流程

一、需要安装的内容 安装的是最新的R 4.2.2,如果电脑本身安装了旧版本的,需要先卸载,重新按照以下流程安装 安装的位置建议在C盘以外的盘,建一个R的目录,存放所有的安装程序,这样不会占用C系统盘的位置 所有…

MacOS下安装R语言和RStudio教程(超完整)

MacOS下安装R语言和RStudio教程 一、前提二、R语言安装三、RStudio安装到此,安装全部完成。四、可能会遇到的问题:关于macOS:在Mac上安装R-警告消息:使用“ C”设置LC_CTYPE失败错误是:解决办法: 五、在RSt…

R及RStudio软件安装教程

R是比较常用的数据处理和分析软件,该如何安装呢?下面就手把手教给大家。 主要包括两部分软件的安装,一是安装R,提供R环境;二是安装RStudio,可以更方便快捷撰写R代码。 首先先安装R软件 安装网址&#xf…

R语言4.04安装教程

R for Windows是一个免费的用于统计计算和统计制图的优秀工具,是R语言开发工具。它拥有数据存储和处理系统、数组运算工具(其向量、矩阵运算方面功能尤其强大)、完整连贯的统计分析工具、优秀的统计制图等功能。提供的图形界面,可…

R语言安装教程

主要参考的是下面这个链接: https://blog.csdn.net/xhmico/article/details/122443660 以及一个知乎的辅助:R语言安装教程-【图文版】 - 知乎 两者大差不差,只是第一个链接在安装完毕最后,多了java环境变量的配置。 安装完毕后…

【数据分析软件】【R语言】第一课:小白安装教程

R author:zoxiii R 1、下载R软件安装包2、开始安装3、打开 R软件 1、下载R软件安装包 1.1、R官网 1.2、往下翻,找到镜像地址,随意选择一个进去 1.3、选择Windows版本的安装包 1.4、选择第一次安装 1.5、开始下载 2、开始安装 2.1、打…