前面几天看了下Jason Weston等人在对话系统方面的工作,可以看成是对Memory Networks的扩展吧,应用到了对话领域中,主要看了下面三篇论文,基本上是按照发表时间顺序来的,接下来我们逐篇来介绍一下其主要工作内容:
这篇文章是15年发表的,主要贡献是提出一个评估端到端对话系统性能的指标以及相关的数据集。目前对话系统可以分成三个类别:
1,传统的对话系统中常常使用对话状态跟踪组件+对话相应生成组件来完成对话,这样就需要结合预先定义好的状态结构、用户话语、上一轮对话以及一些别的外部信息,而且每一轮对话都需要标记其内部状态并精准的分析用户意图,这就导致其很难推广到大规模应用。
2,基于神经网络的端到端对话系统,其不需要状态跟踪组件,直接根据对话的上下文和用户当前输入生成回复,并且可实现端到端的反向传播训练。但是这就导致了其没有办法使用之前的数据集进行训练和测试(都针对状态跟踪设计)。所以目前一般使用人工评分(很难扩展)或者BLEU得分来评价模型的效果,但是往往不能够达到评价的标准。
3,本文提出的数据集和模型,第二种方法的缺点主要在于BLEU在带有目的性的对话中不能够起到很好的效果,比如特定的领域,电影推荐、餐厅助手等。
本文作者认为一个对话系统应该具有下面的四种能力才可以很方便的推广到其他领域中。作者以电影推荐助手为切入点,使用OMDb、MovieLens、Reddit构建了四个数据集,分别解决四个问题。如下:
最终作者分别使用了Memory Networks、Supervised Embedding models、LSTMs、QA、SVD、IR等方法对上述五个任务进行了测试,发现MemNN和Supervised Embedding效果比较好,而相比之下,MemNN效果是最好的。结果如下图所示:
本文还提出了一个比较好的想法就是将记忆分为Long-Term Memory和Short-Term Memory,其中Long指的是KB等知识库的记忆,用于回答一些客观的问题,使用三元组存储,而Short指的是当前对话的对话历史,更切合每条数据本身的记忆,可以得到一些对用户主观的了解和回答。这样综合使用Long和Short可以有比较好的回答效果,而且可以很方便地将4个任务joint起来进行训练。
从论文题目可以看出,本文提出基于对话的语言学习,与此同时训练得到一个对话系统。主要贡献在于其提出了10个基于对话的监督任务数据集,如下所示:
这10个监督数据及是基于bAbI和movieQA两个数据集构建的,在此之上,作者又提出了下面四种使用数据进行训练的策略:
论文仍然使用MemNN作为模型进行训练,如下图所示:
这篇文章Memory Network实现了end-to-end的任务型对话系统,旨在对于Goal-Oriented的对话系统构建一个比较完善的数据集和训练方法。因为端到端的深度学习的模型在chit-chat领域已经取得了比较好的效果,但是在Goal-Oriented领域与传统模型还存在一定的Gap,本文提出了一个给予餐厅预定领域的数据集。
首先该数据集中有一个全局的知识库,主要用于保存餐厅信息(菜种类、位置、价格、评分、地址、电话、桌子大小等),该KB可以通过API调用的方式进行访问(类似于SQL查询),然后对话数据可以分为四个任务:Issuing API calls,Updating API calls,Displaying options,Providing extra information,分别对应着根据用户需求调用API(用户需要输入餐厅信息,包括上面提到的存在KB中的餐厅的几个属性),用户更改需求够重新调用API,展示满足条件的结果,最终用户确定某个餐厅后将其位置、电话等信息显示出来的四个任务。以及最中将四个任务连接在一起进行训练。数据集如下图所示:
最终每个任务的数据集除了正常构建的测试集之外还会额外构建一个OOV的测试集,以测试模型是否可以应对不在词汇表中的对话这种情况,而且为了验证模型在其他数据上的效果,作者还将DSTC2(真实的人机对话)的数据集改造成本文所需要的形式,并测试模型在该数据集上的效果。最终作者也尝试了Rule-based System、IR model、Supervised Embedding Model、Memory Networks等几个模型在本任务上面的效果,结果如下图所示:
本文基于TensorFlow的实现方案可以参考下面的链接:
Memory Network实现方案
Supervised Embedding Model实现方案
上面两个实现方案均达到了论文中的效果,大概看了下代码,其实跟End-To-End MemNN基本上没有任何区别,原因就是这里所谓的对话系统并不涉及到对话生成这一块,其所回复的答案仍然是模板,也就是从候选答案池中选择一个作为答案进行回复,这跟用MemNN做QA没有本质的区别,所以模型也基本不需要改变。甚至他们的数据集构建的方法都是那么的相似==
但是这几篇论文怎么说呢,一方面是自己之前还没怎么接触过对话系统这个领域,看这几篇论文相当于是在入门,另外一方面可能相关的论文也好、数据集也好、模型也好都还不是怎么了解,所以整体看下来感觉这几篇论文写的有些不符合我对对话系统的认知==#然后一个就是感觉都把主要精力放在了数据集的构建上,貌似模型的创新和改动都比较少,基本上都是直接把MemNN拿过来用,答案也是模板生成,直接从候选答案中选择即可。所以整体给人的感觉就是创新性不是很大,更多的是在构建不同的数据集以寻找一种更好的对话系统的任务、模板等。