文章目录
- 1 什么是Dialogue State Tracking
- 2 数据集
- 3 两个挑战
- 4 经典模型
本文为李弘毅老师【Dialogue State Tracking (as Question Answering)】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。
下文中用到的图片均来自于李宏毅老师的PPT,若有侵权,必定删除。
文章索引:
上篇 - 7-12 Controllable Chatbot
下篇 - 无
总目录
1 什么是Dialogue State Tracking
Dialogue State Tracking是Task-oriented Dialogue的一个子模块。先来讲一下Task-oriented Dialogue是什么。Task-oriented Dialogue的输入是用户当前说的话和历史的对话记录,如果用户的输入是语音,会有一个额外的ASR模块将输入转成文字,同时也会有一个额外的TTS模块将输出转为语音。用户的输入会经过一个理解模块NLU(Natural language understanding),输出会交给state tracker,也就是本文的核心内容。state tracker会从当前的输入中抽取有用的信息,保存下来。同时历史的输入都会以相同的形式把有用的信息保存下来。这些存下来的信息会以state的形式交给决策模块(Policy)。Policy会告诉生成模块NLG(natural language generation)该输出什么内容。最后NLG输出回应用户的话。
说了一大堆,其实简单来说Dialogue State Tracking就是上面的state tracker,目标是把用户说的话简化为一个有用的信息库,也可以理解为做了摘要。下图比较形象地说明了这一过程。这么多的对话,最终变成了key-value的键值对。
这些keys是人为事先定义好的内容,而value都是选择题,也是人为规定好的选项。因为现在的Dialogue State往往有很多的keys,所以key会有domain和slot两个部分组成,用来区别和归类不同的keys,方便模型处理,也方面模型的迁移。
总之,Dialogue State Tracking就是根据对话内容,填写事先设定好的keys的values是什么的问题。
2 数据集
Dialogue State Tracking比较著名的数据集有MultiWOZ 2.0,SGD,CrossWOZ等等。这里的这个WOZ就是取自绿野仙踪(The Wizard of Oz),绿野仙踪里最终的大BOSS是一个老头子在幕后操纵的。这里的数据集也是用人来伪装成AI和人对话得到的数据,没错就是人和人对话,AAI(Artificial Artificial Intelligence)。
3 两个挑战
Dialogue State Tracking的values要做成很多个选项是因为之前的方案都把这个当作一个分类问题,输出的是一个类别,但比如电话号码,时间等一些难以穷举的选项,这个方法就行不通了,这是一个挑战。
另一个挑战是有新的keys进来,模型就要重新train过,数据也要重新构造过,迁移成本大。
总结一下:
- 有些value难以穷举
- 新的key进来,迁移成本大
这两个问题,都可以用QA(Question Answering)的方法解决。QA的结构如下图所示,我们把Dialogue history作为source输入,然后根据key问出相应的问题让模型来回答即可。这样模型回去从source中找一个span作为答案,解决了value难以穷举的问题。然后针对domain不同,slot相同的问题,改一下问题的domain即可,解决了迁移的问题。当然前提是这个QA模型是ok的。
4 经典模型
Dialogue State Tracking比较经典的模型就是TRADE,其结构如下图所示。Dialogue会经过一个encoder抽取特征,同时key的domain和slot会分别取embedding,然后加在一起作为question部分的输入,同时也会和Dialogue的encoder输出作一个attention。attention的结果会是一个slot gate,决定了是PTR(从对话中抽取一个span),还是DONTCARE(用户不在乎),还是NONE(还没提到这个key)。根据这个决定,state generator会输出最终的结果。
因为key会分别抽取domain和slot的embedding,所以这个方法是可以适用于应的key的,这也意味着是可以解zero-shot的问题的。
有些key会有一些description,抽取这些description的embedding也是解决zero-shot问题的方法。
其他还有一些变形,比如Slot Carryover Prediction认为每说一句话都要把所有的keys问一遍太费时费力了,于是就设计了一个“是否同上”的classifier来帮助避免问一些已经知道且没有被修改的keys;DST QA认为有些keys之间的values是有关联的,比如知道了要订哪家饭店,那么叫的出租车的目的地很可能就是这家饭店,然后设计了一个模块来解决这个问题;SimpleTOD基于GPT-2设计了一个end-to-end的方法,用户说一句话,模型输出一句话,效果出奇地好。