多轮对话(一):概述(意图识别+槽填充)

一、对话系统

多轮对话(一):概述(意图识别+槽填充)_第1张图片

基于流水线的面向任务的对话系统包含了四个关键部分:

  • 语言理解。它被称为自然语言理解(NLU),它把用户话语解析为预定义的语义槽。
  • 对话状态跟踪器。它管理每一轮的输入与对话历史,输出当前对话状态。
  • 对话策略学习。它根据当前对话状态学习下一步动作。
  • 自然语言生成(NLG)。它将选择的动作映射到其表层,生成回复。

因为我现在做的是意图识别,所以我这里只介绍NLU相关内容,其余部分可以参考第四篇参考文献和第五篇参考文献,里面还有案例,非常容易理解。

NLU示例

NLU:把自然语言转换成机器可以处理的领域(domain)/意图(intention)和槽植对(slot-value pairs)。它的输入Xn是用户的Utterance,输出Un=(In, Zn), In是intention,Zn是槽植对。In=f(Xn) , 就是意图分类,一般分类方法都行。Zn=f(Xn),Zn = { 1, 2, 3…},是序列标注问题(槽填充),传统的CRF、HMM都行,RNN、LSTM、GRU等也可以。

对话系统按功能来划分的话,分为闲聊型、任务型、知识问答型和推荐型。在不同类型的聊天系统中,NLU也不尽相同。

  • 闲聊型对话中的NLU就是根据上下文进行意图识别、情感分析等, 并作为对话管理(DM)的输入。
  • 任务型对话中的NLU就是领域分类和意图识别、槽填充。他的输入是用户的输入Utterance,输出是Un=(In, Zn), In是intention,Zn是槽植对。
  • 知识问答型对话中的NLU主要是根据用户的问题,进行问句类型识别与问题分类,以便于更精准的进行信息检索或文本匹配而生成用户需要的知识(知识、实体、片段等)。
  • 推荐型对话系统中的NLU就是根据用户各种行为数据和爱好进行兴趣匹配,以便于找到更精准的推荐候选集。

二、多轮对话的定义

多轮对话的目的是将初步用户意图转化为明确用户指令。

多轮对话是一种,在人机对话中,初步明确用户意图之后,获取必要信息以最终得到明确用户指令的方式。多轮对话与一件事情的处理相对应。

将“识别用户意图之后,为了获取必要信息,与用户进行的有目的的多轮对话”称为封闭域多轮对话,区别于识别用户意图之前,为了利用上文信息,所采用的『上下文替换』、『主体补全』等技术,也即开放域多轮对话

封闭域对话有很明显的两个特征:

  • 输入和输出是可枚举的
    即对于用户的某特定意图,必须填充指定数量的槽位后,才能完成回答。
  • 对话有明确的目的,且有流程
    当有槽位缺失时,需要使用澄清话术。即当用户的需求中缺乏一些「必要信息」时,需要对话系统主动发问,引导用户将「必要信息」填充完整。

三、槽的定义

  • 理解一段文字的一种方法是标记那些对句子有意义的单词或记号。在自然语言处理领域,这个问题被称为语义槽填充。
  • 从大规模的语料库中抽取给定实体(query)的被明确定义的属性(slot types)的值(slot fillers)。槽可以理解为:实体已明确定义的属性。
  • 填槽指的是为了让用户意图转化为用户明确的指令而补全信息的过程。

槽是多轮对话过程中将初步用户意图转化为明确用户指令所需要补全的信息。一个槽与一件事情的处理中所需要获取的一种信息相对应。

将“利用用户话中关键词填写的槽”叫做词槽,“利用用户画像以及其他场景信息填写的槽”叫做接口槽

我将可能包含多种填槽方式的称为槽组(对应着一种信息),槽组下面可能存在任意多个槽位,也即任意多种填槽方式,而每个槽位又都对应着『词槽』与『接口槽』两种槽位类型之一。

槽组(也即与一种信息)平级的概念还有一个,叫做澄清话术。澄清话术是对话机器人希望获取某种信息时所使用的问句。比如『目的地』对应的澄清话术就是『您想从哪出发呢?』。

上文将多轮对话定义为一件事情的处理,槽组/槽定义为一种信息的获取,槽位定义为信息的一种获取方式。这里我倾向于将多轮对话树结构中的一个节点定义为处理事情的一个步骤

一件事情的处理包含多个步骤,每个步骤中需要补全一种或多种信息,每种信息存在一种或多种获取方式。

多轮对话(一):概述(意图识别+槽填充)_第2张图片

完整的多轮对话过程通常会以树的形式存在,树中包含多个节点,代表处理这件事情的一个步骤。而每个节点,都应当有其特别的准入条件。树的根节点往往需要限制 NLU 模块的输出,也即明确什么样的用户意图将会由该棵多轮对话树来处理;树的中间及叶子节点往往需要根据前序槽组的填槽结果以及其他背景信息进行条件限制。

从一个开放域转入到封闭域,或者从一个封闭域转入到另一个封闭域,中间的跳转是需要逻辑判断的,而这个逻辑判断就是准入条件

填槽的意义:结合上文,我们需要了解到,填槽的意义有两个:作条件分支多轮对话作信息补全用户意图。换言之,填槽不仅是补全用户意图的方式,而且前序槽位的填写还会起到指导后续信息补全走向的作用。

四、论文介绍

纯意图识别的论文不是很多,而且大多是比较早期的,主要是RNN、LSTM等模型,详情可以参考总结|对话系统中的口语理解技术(SLU)(一)。

纯槽填充的论文也不是很多,大多也很古老,主要是CRF、RNN等模型。

随后,越来越多的研究开始将意图识别和槽填充结合起来,逐渐成为主流,详情可以参考总结|对话系统中的口语理解技术(SLU)(二)。

Awesome-SLU-Survey资源库

参考文献:
填槽与多轮对话 | AI产品经理需要了解的AI技术概念
AI说 | 你接触的各种机器人,他们是怎么和你聊上天的?
槽填充(Slot Filling)的定义、用途、意义及其他
任务型对话系统公式建模&&实例说明
对话系统综述:新进展新前沿
近期任务型对话系统综述以及百度UNIT,理论和实践,我全都要!
新分类!全总结!最新Awesome-SLU-Survey资源库开源!

你可能感兴趣的:(NLP,人工智能,自然语言处理,深度学习)