基于流水线的面向任务的对话系统包含了四个关键部分:
因为我现在做的是意图识别,所以我这里只介绍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也不尽相同。
多轮对话的目的是将初步用户意图转化为明确用户指令。
多轮对话是一种,在人机对话中,初步明确用户意图之后,获取必要信息以最终得到明确用户指令的方式。多轮对话与一件事情的处理相对应。
将“识别用户意图之后,为了获取必要信息,与用户进行的有目的的多轮对话”称为封闭域多轮对话,区别于识别用户意图之前,为了利用上文信息,所采用的『上下文替换』、『主体补全』等技术,也即开放域多轮对话。
封闭域对话有很明显的两个特征:
- 理解一段文字的一种方法是标记那些对句子有意义的单词或记号。在自然语言处理领域,这个问题被称为语义槽填充。
- 从大规模的语料库中抽取给定实体(query)的被明确定义的属性(slot types)的值(slot fillers)。槽可以理解为:实体已明确定义的属性。
- 填槽指的是为了让用户意图转化为用户明确的指令而补全信息的过程。
槽是多轮对话过程中将初步用户意图转化为明确用户指令所需要补全的信息。一个槽与一件事情的处理中所需要获取的一种信息相对应。
将“利用用户话中关键词填写的槽”叫做词槽,“利用用户画像以及其他场景信息填写的槽”叫做接口槽。
我将可能包含多种填槽方式的槽称为槽组(对应着一种信息),槽组下面可能存在任意多个槽位,也即任意多种填槽方式,而每个槽位又都对应着『词槽』与『接口槽』两种槽位类型之一。
与槽组(也即与一种信息)平级的概念还有一个,叫做澄清话术。澄清话术是对话机器人希望获取某种信息时所使用的问句。比如『目的地』对应的澄清话术就是『您想从哪出发呢?』。
上文将多轮对话定义为一件事情的处理,槽组/槽定义为一种信息的获取,槽位定义为信息的一种获取方式。这里我倾向于将多轮对话树结构中的一个节点定义为处理事情的一个步骤。
一件事情的处理包含多个步骤,每个步骤中需要补全一种或多种信息,每种信息存在一种或多种获取方式。
完整的多轮对话过程通常会以树的形式存在,树中包含多个节点,代表处理这件事情的一个步骤。而每个节点,都应当有其特别的准入条件。树的根节点往往需要限制 NLU 模块的输出,也即明确什么样的用户意图将会由该棵多轮对话树来处理;树的中间及叶子节点往往需要根据前序槽组的填槽结果以及其他背景信息进行条件限制。
从一个开放域转入到封闭域,或者从一个封闭域转入到另一个封闭域,中间的跳转是需要逻辑判断的,而这个逻辑判断就是准入条件。
填槽的意义:结合上文,我们需要了解到,填槽的意义有两个:作条件分支多轮对话、作信息补全用户意图。换言之,填槽不仅是补全用户意图的方式,而且前序槽位的填写还会起到指导后续信息补全走向的作用。
纯意图识别的论文不是很多,而且大多是比较早期的,主要是RNN、LSTM等模型,详情可以参考总结|对话系统中的口语理解技术(SLU)(一)。
纯槽填充的论文也不是很多,大多也很古老,主要是CRF、RNN等模型。
随后,越来越多的研究开始将意图识别和槽填充结合起来,逐渐成为主流,详情可以参考总结|对话系统中的口语理解技术(SLU)(二)。
Awesome-SLU-Survey资源库
参考文献:
填槽与多轮对话 | AI产品经理需要了解的AI技术概念
AI说 | 你接触的各种机器人,他们是怎么和你聊上天的?
槽填充(Slot Filling)的定义、用途、意义及其他
任务型对话系统公式建模&&实例说明
对话系统综述:新进展新前沿
近期任务型对话系统综述以及百度UNIT,理论和实践,我全都要!
新分类!全总结!最新Awesome-SLU-Survey资源库开源!