源文地址:https://zhuanlan.zhihu.com/p/48268358
任务型对话系统框架图:
1. SLU(spoken language understanding)
作用:将自然语言转化成机器可以处理的领域(domain)/意图(intention) 和槽值对(slot-value pairs),他们的输入是指用户的输入的Xn,输出为Un。
Xn 是用户输入的内容,为文本内容。
Un = (In, Zn),In 是intention(意图),Zn 是槽值对。
In = f(Xn),就是意图分类,一般的分类方法都可以。
Zn = f(Xn),Zn = {1,2,3,。。},表示序列标注问题,传统的crf,hmm都可以。
另外为了解决领域数据不足的问题,SLU还有很多迁移学习(Transfer Learning)方面的工作。比如实例迁移、模型适配、参数迁移、领域关系迁移等。
2. DST(dialogue state tracking)
作用:根据领域(domain)/意图(intention) 、曹植对(slot-value pairs)、之前的状态以及之前系统的Action等来追踪当前状态。它的输入是Un, An-1和Sn-1,输出为Sn。
S = {Gn,Un,Hn}
Gn是用户目标
Un是意图和槽值对
Hn是聊天的历史;Hn= {U0, A0, U1, A1, ... , Un−1, An−1}
S =f(Sn−1,An−1,Un )。
DST涉及到两方面内容:状态表示、状态追踪。
另外为了解决领域数据不足的问题,DST还有很多迁移学习(Transfer Learning)方面的工作。比如基于特征的迁移学习、基于模型的迁移学习等。
3. DPL(dialogue policy learning)
作用:基于当前状态(state)决定系统需要采取action。它的输入是Sn,输出是An。
Sn = {Gn,Un,Hn}
An是系统的Action,A ={Dn, {Ai, Vi}}
Dn是对话类型,
Ai、Vi是第i轮对话的attribute和其value
DST一般会建模成强化学习或深度强化学习(从不同维度区分的话有非常多的变种)。
另外为了解决领域数据不足的问题,DPL还有很多迁移学习(Transfer Learning)方面的工作。比如线性模型迁移学习、高斯过程迁移学习、BCM迁移学习等。
4. NLG(natural language generation)
作用:把系统的Action转换成用Yn表示的自然语言形式的系统response。它的输入是An,输出是Yn。
NLG方法非常多,比如基于规则的、基于模板的、基于短语的、基于token的、基于句法树的( 变种也不少,不过大同小异,大多是trick层面的)、基于corpus的、基于神经网络的(变种很多,如RNN、RNN+CNN、RNN+LM、LSTM+SC等)、基于神经网络+句法树的等等
其中A ={Dn, {Ai, Vi}},Yn = {y1,y2, y3…},yi是第i轮的系统回复(response)。
另外为了解决领域数据不足的问题,NLG还有很多迁移学习(Transfer Learning)方面的工作。比如线在原始领域预训练然后在目标领域(Target domain)做fine-tuning、基于实例的迁移学习、基于参数的迁移学习等。
示例
为了在抽象的建模的基础上加深理解,看个小例子:
1: I would like a cup of coffee.
1: What coffee would you like?
2: What coffee do you serve?
2: We serve Espresso, America, Latte, Mocha, etc.
3: I would like a cup of Latte.
3: Hot Latte or Iced Latte?
4: Hot Latte.
4: What cup size do you want?
5: Tall.
slu:
输入:X = ‘I would like a cup of Latte.’
输出:U = (l3,3),其中l3: intention=order, 3: {CoffeeType=Latte}
dst:
输入:S2 ={G2, U2, H2},
其中:G2= {CoffeeType=?, Size=?, Temp=?} # 用户目标 (什么咖啡,杯/罐单位,温度)
U2={Intention=Ask, {CoffeeType=?}} # (意图,槽值对)
H2 ={U1, A1} # 聊天历史,
A2={Action=Inform, {CoffeeType=Espresso, Americano, Latte, Mocha}}
U3 ={Intention=Order, {CoffeeType=Latte}}
输出:S3 ={G3, U3, H3},
其中:G3= {CoffeeType=Latte, Size=?, Temp=?}
U3={Intention=Order, {CoffeeType=Latte}}
H3 ={U1, A1, U2, A2}
dpl:
输入:S3
输出:A3= {Action=Ask, {CoffeeType=Latte, Temp=?}}
nlg:
输入: A3
输出:Y3= "Hot Latte or Iced Latte?”