任务型对话系统简介

任务型对话系统简介

1 三种对话系统概览

对于一个对话机器人而言,常见的对话形式有三种,分别是问答型(QA)任务型(Task)闲聊型(Chat)

  • 问答型(QA):简单的一问一答的形式,机器人对用户提出的问题进行解析,在知识库已有的内容中查找并返回正确答案。对于机器人而言,每次问答均是独立的,与上下文信息无关。
  • 任务型(Task):主要指机器人为满足用户某一需求而产生的多轮对话,机器人通过理解、澄清等方式确定用户意图,继而通过答复、调用 API 等方式完成该任务。在该任务内,机器人需要理解上下文信息并作出下一步的动作。
  • 闲聊型(Chat):闲聊型对话大多为开放域的对话,主要以满足用户的情感需求为主,通过产生有趣、富有个性化的答复内容,与用户进行互动。

对于一个对话机器人而言,并非只包含一种类型的对话,通常是多种对话类型的组合。1

2 任务型对话系统(Task-Oriented Dialogue System)

对话系统的具体实现一般分为两种,一种是端到端的(End-to-End),即从用户的输入到系统的输出均由一个神经网络实现,好处是结构简单,但是需要大量的训练数据支持,另一种是我们接下来将要介绍的模块化任务型对话系统。

任务型对话的框架图如下所示2

任务型对话系统框架图
任务型对话系统框架图

以一个做咖啡的对话场景为例解释以上过程:

User 1:I would like a cup of coffee.

Assistant 1:What coffee would you like?

User 2:What coffee do you serve?

Assistant 2:We serve Espresso, Americano, Latte, Mocha, etc.

User 3:I would like a cup of Latte.

Assistant 3:Hot Latte or Iced Latte?

User 4:Hot Latte.

Assistan 4t:What cup size do you want?

User 5: Tall.

...

2.1 SLU

把自然语言转换成机器可以处理的领域(domain)/意图(intention)和槽值对(slot-value pairs),他的输入是代表用户输入的 \(X_n\),输出是 \(U_n\)

  • \(X_n\):用户的输入
  • 输出 \(U_n = (I_n, Z_n)\)\(I_n\) 是意图,\(Z_n\) 是槽值对
    • \(I_n=f(X_n)\)\(f(X)\) 是意图分类,一般分类方法都行,也可采用 DBN、DCN 等方法
    • \(Z_n=g(X_n)\)\(g(X)\) 是槽值对构建方法

在多轮对话过程中,系统为完成任务而需要获取的关键信息我们称之为槽位,例如“订机票”这个意图所包含的槽位就是[出发地]、[目的地]和[出发时间];而槽位内的信息我们称之为槽值,在“订机票”这个例子中,[出发地]这一槽位内的槽值可以是用户说的“上海”;而系统把“上海”这两个字填充到[出发地]这个槽位的过程,则被称之为“填槽”,即 Slot filling。[^1]

Input:\(X_3\) = “I would like a cup of Latte.”

Output:\(U_3=\{I_3, 3\}\)\(I_3=\rm{Order}\)\(3: \rm{\{CoffeeType=Latte\}}\)

...

2.2 DST

作用是根据领域(domain)/意图(intention) 、槽值对(slot-value pairs)、之前的状态以及之前系统的 Action 等来追踪当前状态。它的输入是 \(U_n\)\(A_{n-1}\)\(S_{n-1}\),输出是 \(s_n\)

  • 输出 \(S_n = \{G_n,U_n,H_n\}\)
    • \(G_n\) 是用户目标
    • \(U_n\) 是 SLU 的输出结果
    • \(H_n\) 是聊天的历史,\(H_n= \{U_0, A_0, U_1, A_1, ... , U_{n-1}, A_{n-1}\}\)
    • \(G_n = f(S_{n-1},A_{n-1},U_n)\)

Input:

  • \(U_3=\rm{\{ Intention=Order, \{CoffeeType=Latte\} \}}\)
  • \(A_2=\rm{\{Action=Inform, \{CoffeeType=Espresso, Americano, Latte, Mocha\}\}}\)
  • \(S_2 =\{G_2, U_2, H_2\}\)
    • \(G_2=\rm{\{CoffeeType=?, Size=?, Temp=?\}}\)
    • \(U_2=\rm{\{Intention=Ask, {CoffeeType=?}\}}\)
    • \(H_2=\{U_1, A_1\}\)

Output:

  • \(S_3 = \{G_3, U_3, H_3\}\)
    • \(G_3 = \rm{\{CoffeeType=Latte, Size=?, Temp=?\}}\)
    • \(U_3 = \rm{\{ Intention=Order, \{CoffeeType=Latte\} \}}\)
    • \(H_3 = \{U_1, A_1, U_2, A_2\}\)

2.3 DPL

基于当前状态(state)决定系统需要采取的 action。它的输入是 \(S_n\),输出是 \(A_n\)

  • \(A_n\) 是系统的 Action,\(A_n =\{D_n, \{Attr_i, V_i\}\}\)\(D_n\) 是对话类型,\(Attr_i\)\(V_i\) 是第 \(i\) 轮对话的 attribute 和其 value

Input:

  • \(S_3 = \{G_3, U_3, H_3\}\)
    • \(G_3 = \rm{\{CoffeeType=Latte, Size=?, Temp=?\}}\)
    • \(U_3 = \rm{\{ Intention=Order, \{CoffeeType=Latte\} \}}\)
    • \(H_3 = \{U_1, A_1, U_2, A_2\}\)

Output:

  • \(A_3=\rm{\{Action=Ask, \{CoffeeType=Latte, Temp=?\}}\)

2.4 NLG

把系统的 Action 转换成用 \(Y_n\) 表示的自然语言形式的系统 response。它的输入是 \(A_n\),输出是 \(Y_n\)

Input:\(A_3=\rm{\{Action=Ask, \{CoffeeType=Latte, Temp=?\}}\)

Output:\(Y_3\) = "Hot Latte or Iced Latte?”


  1. 对话机器人系列——任务型对话系统介绍 - 知乎 (zhihu.com)

  2. 任务型对话系统公式建模&&实例说明 - 知乎 (zhihu.com)


任务型对话系统简介
https://onlyar.site/2023/10/22/NLP-TODS-intro/
作者
Only(AR)
发布于
2023年10月22日
许可协议