引言
主要讲解三篇论文,主要思想是把自然语言理解、对话管理和自然语言生成三部分整合到一起。
先导知识
数据集
- CamRest676
- MultiWOZ
都是用的自回归语言模型
- causal
- GPT-2、Transformer Decoder
一个概念:delexicalization
- 通过相应的占位符替换特定的槽值
- 占位符作为特定的token,不关心具体的取值
- 学习取值无关的参数
首先来看第一篇论文
SimpleTOD
来自论文A Simple Language Model for Task-Oriented Dialogue。
主要做的工作是:
- 采用causal 语言模型(GPT-2)
- 把整个TOD转换成序列预测问题
- 损失函数为最大似然
- 把整个TOD分为几个子任务,建模子任务之间的依赖
TOD指任务导向型的对话系统。
模型的输入是所有的对话历史:
C
t
=
[
U
0
,
S
0
,
⋯
,
U
t
]
C_t=[U_0,S_0,\cdots, U_t]
Ct=[U0,S0,⋯,Ut]
其中
U
0
U_0
U0是用户输入的第一句话;
S
0
S_0
S0是系统回复的第一句话;
然后把这个上下文输入给SimpleTOD模型:
B
t
=
SimpleTOD
(
C
t
)
B_t =\text{SimpleTOD}(C_t)
Bt=SimpleTOD(Ct)
会输出一个belief state,包含domain,slot_name和value。相当于做了NLU+DST的工作。
接下来要做对话动作生成,此时把
C
t
,
B
t
C_t,B_t
Ct,Bt和查询结果
D
t
D_t
Dt拼接起来,再输入给SimpleTOD模型:
A
t
=
SimpleTOD
(
[
C
t
,
B
t
,
D
t
]
)
A_t =\text{SimpleTOD}([C_t, B_t, D_t])
At=SimpleTOD([Ct,Bt,Dt])
生成动作
A
t
A_t
At。
最后生成响应时把上面所有结果拼接,输入给SimpleDOT模型:
S
t
=
SimpleTOD
(
[
C
t
,
B
t
,
D
t
,
A
t
]
)
S_t =\text{SimpleTOD}([C_t, B_t, D_t,A_t])
St=SimpleTOD([Ct,Bt,Dt,At])
来生成回复。这里会涉及到delexicalization,比如上图中的[value count]
,这里表示这个值是从数据库中查询的结果,不关心具体的值。
训练过程如上图所示,a)训练就是把用户的输入、系统的回复、belif state、DB查询结果、生成的动作等基于语言模型的要求作为一个token序列喂给SimpleTOD。
其中
x
=
(
x
1
,
⋯
,
x
n
)
x=(x_1,\cdots,x_n)
x=(x1,⋯,xn);
x
t
=
[
C
t
;
B
t
;
D
t
;
A
t
;
S
t
]
x^t=[C_t;B_t;D_t;A_t;S_t]
xt=[Ct;Bt;Dt;At;St]。
b)推理也是先把 C t C_t Ct拼接起来,送给模型,然后会得到一个belief state,然后再把预测的 B t B_t Bt(和查询到的 D t D_t Dt)也拼起来继续喂给模型得到 A t A_t At,基于这些来生成回复。
SOLOIST
来自论文SOLOIST: Building Task Bots at Scale with Transfer Learning and Machine Teaching。
采用预训练-微调范式
- 自回归语言模型
- 使用更大的对话语料库预训练
- 使用一些任务相关的对话微调
使用的模型是Unified Language Model。
我们来看下它的输入和输出。
输入:
- 历史对话
- belief state
- DB state(DB查询结果)
- delexicalized response
可以用 x = ( s , b , c , r ) x=(s,b,c,r) x=(s,b,c,r)来表示。
预训练时使用task-grouded的预训练,包含
- 多任务目标
- 自监督
在微调时用了machine teaching的方法。
模型的训练目标,也是分为说那个任务:Belief State Prediction(DST+NLU)、Grounded Response Generation(NLG)和Contrastive Objective(自监督)。
它输入中的历史对话和SimpleTOD有一些区别,这里只有用户说的话,没有系统的回复。
通过以下方式建模:
其中主要有两个任务:
最后使用对比损失,将输入中的词以50%的概率随机替换:
上面说的machine teacher实际是指通过人工更正模型输出的结果:
UBAR
来自论文UBAR: Towards Fully End-to-End Task-Oriented Dialog System with GPT-2
作者尝试把完整的对话历史喂给模型,还是基于GPT-2模型,基于用户的输入,需要预测blief state、system action和system response。
架构类似SimpleTOD和SOLOIST的结合体,任务类似SOLOIST的。
从上图可以看到,其中最上面表示模型的输入,是完整的对话历史。U代表用户的输入;B是需要预测的Blief State,A是Action,R是Response,D是数据库查询。
上面是一个输入的范例。
在belief state中对domain和slot value进行解耦;同时在system act中也对domain和action进行解耦。
参考
- 贪心学院课程
- A Simple Language Model for Task-Oriented Dialogue
- SOLOIST: Building Task Bots at Scale with Transfer Learning and Machine Teaching
- UBAR: Towards Fully End-to-End Task-Oriented Dialog System with GPT-2