前沿重器
栏目主要给大家分享各种大厂、顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。
近期,我再次总结了我的历史文章,累积起来有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版的。
这段对话内,是一个给用户推荐商品的过程,用户会有一些商品需求,需要根据用户的需求找到符合用户需求的产品,这里其实更像是带条件的搜索了,而如果是能考虑到用户画像和习惯,甚至可以做一些个性化,形成一个推荐系统,这里的问题就更热闹了,而其特点就在于,是带有用户条件的,这里其实更像是个性化搜索,不过是对话系统场景了,从产品上,我们不仅要考虑推荐的内容,还需要考虑生成的回复话术,简单的可以考虑是固定的,但都是复杂的可能还会有一些结合产品特定的生成或者拼接。