本文原载于微信公众号:AI部落联盟(AI_Tribe),AI研习社获授权转载,欢迎关注 AI部落联盟 微信公众号、知乎专栏 AI部落、及 AI研习社博客专栏。
任务型对话的框架图:
SLU:把自然语言转换成机器可以处理的领域(domain)/意图(intention) 和槽植对(slot-value pairs),他的输入是代表用户输入Utterance的Xn,输出是Un。
Xn就是用户说的话,一般是几个到几十个词。
Un=(In, Zn), In是intention,Zn是槽植对。
In=f(Xn) , 就是意图分类,一般分类方法都行,也可采用DBN、DCN等方法。
Zn=f(Xn),Zn = {𝑧1,𝑧2,𝑧3…},是序列标准问题,传统的CRF、HMM都行,RNN、LSTM、GRU等也可以。
另外为了解决领域数据不足的问题,SLU还有很多迁移学习(Transfer Learning)方面的工作。比如实例迁移、模型适配、参数迁移、领域关系迁移等。
DST:作用是根据领域(domain)/意图(intention) 、曹植对(slot-value pairs)、之前的状态以及之前系统的Action等来追踪当前状态。它的输入是Un、An-1和Sn-1,输出是Sn。
S𝑛 = {Gn,Un,Hn},Gn是用户目标、Un同上、Hn是聊天的历史,Hn= {U0, A0, U1, A1, ... , U𝑛−1, A𝑛−1},S𝑛 =f(S𝑛−1,A𝑛−1,U𝑛)。
DST涉及到两方面内容:状态表示、状态追踪。具体方法和论文后续我会一一放出(其实早就整理好了,还在想用什么形式来出更容易理解,有好的建议的欢迎提出来)。
另外为了解决领域数据不足的问题,DST还有很多迁移学习(Transfer Learning)方面的工作。比如基于特征的迁移学习、基于模型的迁移学习等。
DPL( 也叫DPO)基于当前状态(state)决定系统需要采取action。它的输入是Sn,输出是An。
S𝑛 = {Gn,Un,Hn},An是系统的Action,A𝑛 ={Dn, {Ai, Vi}},Dn是对话类型,Ai、Vi是第i轮对话的attribute和其value。DST一般会建模成强化学习或深度强化学习(从不同维度区分的话有非常多的变种,后面一一介绍)。
另外为了解决领域数据不足的问题,DPL还有很多迁移学习(Transfer Learning)方面的工作。比如线性模型迁移学习、高斯过程迁移学习、BCM迁移学习等。
NLG:把系统的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, Americano, 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:
输入:𝑿𝟑=“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?”。