论文:A Network-based End-to-End Trainable Task-oriented Dialogue System
github:https://github.com/shawnwun/NNDIAL
作者:来自剑桥大学Dialogue System Group的博士生Tsung-Hsien Wen,该组专门研究chatbot相关技术,发表过大量与之相关的paper
发表时间:2016年5月20日发表于arxiv上
1 摘要
构建一个诸如宾馆预订或技术支持服务的 task-oriented 的对话系统是一个很有挑战性的问题,主要是因为难以获取训练数据。现有两种方式解决问题:
将这个问题看做是 partially observable Markov Decision Process (POMDP),利用强化学习在线与真实用户交互。但是语言理解和语言生成模块仍然需要语料去训练。而且为了让 RL 能运作起来,state 和 action space 必须小心设计,这就限制了模型的表达能力。同时 rewad function 很难设计,运行时也难以衡量。
-
利用 seq2seq 来做,在一个非常庞大的open-domain数据集上进行训练,得到一些效果不错的模型,但难以应用到具体task中,这又需要大量语料训练。同时,这类模型无法做到与数据库交互以及整合其他有用的信息,从而生成实用的response。
本文针对task-oriented的bot问题,平衡了两种流行方案的优缺点,提出了一套有参考价值的、具有实际意义的seq2seq解决方案。
2 模型介绍
本文将对话系统视为用对话历史记录(由对话状态追踪器建模)和当前的数据库搜索结果(由数据库操作员建模)进行扩展的序列映射问题。如图1所示。首先其模型中Intent Network可以理解为seq2seq的encoder部分,将用户的输入encode成一个vector z(t)。然后在Belief Trackers,这个也就是Dialogue State Tracking(DST),这里是输入原对话输出一个informable slot和requestable slot的概率分布,作用就是原来的作用,获取到预先定好的知识图谱中每个slot的分布,跟踪对话的状态。而后在Policy Network结合前面两者加上从 数据库查询的相应”知识“,形成决策,输出给Generation Network进行文本生成。
该模型可以完全分为编码器和解码器模块。
* The encoder modules contain:
- LSTM encoder : an LSTM network that encodes the user utterance.
- RNN+CNN tracker : a set of slot trackers that keep track of each slot/value pair across turns.
- DB operator : a discrete database accessing component.
* The decoder modules contain:
- Policy network : a decision-making module that produces the conditional vector for decoding.
- LSTM decoder : an LSTM network that generates the system response.
① Intent network 根据source query得到user intent vector;
② Belief Tracker 得到每个 informable slot的多元概率分布,和每个requestable slot的二项分布。用于在db中检索。
③ Database Operator 数据库中根据 informable slot项检索, 返回一个vector,符合的entry记为1,其他为0,entity指针指向vector label为1中的一个餐厅(这个pointer到Generation Network中用到)。
④ Policy Network 融合①,②,③中得到的vector,得到新的vector,表示当前状态
⑤ Generation Network 用seq2seq的方法,根据④得到的vector 生成整句话,然后用③中pointer所指向的db中的那个entity替换句中的一些项。
整个过程可追溯,出了badcase可以知道是哪个模块可以再进行优化;文中虽然用了”Policy Network”,也不是Reinforcement Learning里的策略,容易迁移;
2.1 Intent Network
这个部分可以理解为seq2seq的encoder部分,将用户的输入encode成一个vector z(t)。encoder部分分别用了lstm和cnn两种模型对该输入进行建模。这两种句子表示的方法在之前的文章中都有介绍。
lstm最后一个隐层状态作为vector z(t)
cnn取经过max-pool和avg-pool得到的vector作为vector z(t),具体参考CNN for NLP
2.2 Belief Tracker
这个部分又被称作是 Dialogue State Tracking (DST),是 task-oriented spoken dialogue system 的核心部件。本文虽然是基于文本内容的,但是保留了该组件,具有以下的作用:
支持各种形式的自然语言被映射成一个有限 slot-value 对集合中的元素,用于在数据库中进行 query。
追踪对话的state,避免去学习那些复杂而不必要的长距离依赖信息。
使用了一种 weight tying strategy,可以极大地减少训练数据的需求。
未来容易扩展到 spoken system。
这个组件的任务是根据每一轮用户的输入,输出每个informable slot s的可能value 的多项式分布概率, 和每个 requestable slot 的二项分布概率,这里的 informable slot 是指 food type,price range(以订餐为例),用来约束数据库中的查询,requestable slot 是指address,phone,postcode 等一些可以被询问的值。这里会定义一个针对具体task的知识图谱,来表示这些slot之间的关系,本体G中的每一个slot都有自己的专用跟踪器,每个跟踪器都是一个Jordan类型的带有cnn特征提取器的RNN,如上图所示,我们将每个value v的RNN权重联系在一起,但是在更新每个pre-softmax激活g时改变特征。 slot s的更新方程是:
,矩阵
,偏差项
,和标量
是参数。
是用户直到第t轮还没有提到那个slot的概率,可以通过用等式5的
表示由one-hot输入向量得到的大小为N的词向量表示。为了使tracker知道什么时候对slot或者value应用delexicalisation,slot-value专用的CNN operator不仅仅是提取最上面一层的句子表示,而且提取由delexicalised token的位置确定的中间层的n-gram-like embedding在每个话语中。如果观察到多个匹配,则对相应的嵌入求和。另一方面,如果没有匹配特定的插槽或值,空n-gram嵌入填充零。为了跟踪delexicalisation token的位置,在每个卷积操作之前,句子的两边用零填充。矢量的数量由CNN的过滤器大小确定。图2显示了提取多个位置特定特征的整个过程
概念delexicalisation和lexicalisation在论文The Dialog State Tracking Challenge Series- A Review中定义,前一个的意思是将句子中的slot-value用特定的token来替换,像是一种抽象,比如用food来代替对话中的各种食物名称;后一个的意思是将句子中的特定token还原回具体的value。
这里会定义一个针对具体任务的知识图谱,来表示这些 slot 之间的关系,每个 slot 都会定义一个 tracker,tracker 的模型如上图所示,包括一个 CNN 特征提取模块和一个 Jordan 型的 RNN 模块 (recurrence from output to hidden layer),CNN 不仅仅对当前的输入进行处理,还对上一轮的机器响应进行处理,综合起来作为 RNN 的输入。
这个组件的意义在于获取到预先定好的知识图谱中每个slot的分布,就是说弄清楚用户在这轮对话中的需求是哪个词或者词组。
2.3. Database Operator
数据库查询的输入来自于Belief Trackers的输出,即各种slot的概率分布,取最大的那个作为DB的输入,进行查询,获取到相应的值。
2.4. Policy Network
这个组件是像一个胶水,起到粘合其他上面三个组件的作用。输入是上面三个组件的输出,输出是一个向量。
2.5. Generation Network
最后一个组件是生成模型,本质上是一个语言模型,输入是Policy Network的输出,输出是生成的response,再经过一些处理之后可以返回给用户了。这里的处理主要是将response中的slot,比如s.food还原成真实的值。生成部分用简单的LSTM-LM可以做,用Attention Model也可以做,效果会更好。
3. 数据
提出了一个新颖的众包版本的OZ(WOZ)范式(Kelley,1984),用于收集领域特定的语料库。
任务:找餐馆
数据:众标,标了680轮对话,共1500个turns,都是人工写的。
db中有99家餐厅,可根据 口味/地点/价格(这三个叫informable slot) 查询餐厅, 选定餐厅后可查询 电话、邮编等其他6项(这6个叫requestable slot)信息。
4. 实验
训练过程
-
使用交叉熵预先训练belief tracker的参数
其中,y代表真实label。
对于完整的模型,我们有三个informable追踪器(食品,价格范围,面积)
和七个requestable追踪器(地址,电话,邮编,姓名,以及三个slot)。 -
在固定了tracker的参数之后,使用来自生成网络语言模型的交叉熵损失函数对模型的其余部分进行训练,
分别在第t轮decoder第j步的时候输出的target token和预测 token。
我们将每个对话视为一个批次,并使用随机梯度下降和小的l2正则化项来训练模型。
收集的语料库按3:1:1的比例划分为训练,验证和测试集。
early stopping是基于正则化的验证集来实现的,并且梯度裁剪被设置为1.所有隐藏层大小被设置为50,并且所有权重在-0.3和0.3之间被随机初始化,包括字嵌入。输入和输出的词汇大小大约为500,其中可以灵活化的去掉罕见单词和可以被delexicalisation的单词。
我们对实验中的所有CNN使用了三个卷积层,并且所有滤波器大小都设置为3.池化操作仅在最后的卷积层之后应用。
梯度裁剪(Gradient Clipping)
梯度裁剪是一种在非常深度的网络(通常是循环神经网络)中用于防止梯度爆炸(exploding gradient)的技术。执行梯度裁剪的方法有很多,但常见的一种是当参数矢量的 L2 范数(L2 norm)超过一个特定阈值时对参数矢量的梯度进行标准化,这个特定阈值根据函数:新梯度=梯度* 阈值/L2范数(梯度)
{new_gradients = gradients * threshold / l2_norm(gradients)}确定。
基于语料的评估
在该评估中,模型使用了三个评估指标:
- BLEU评分(on top-1 and top-5 candidates):我们使用实体值替换进行lexicalising之前,在模板输出句子上计算BLEU分数。
- 实体匹配率:通过确定每个对话结束时实际选择的实体是否与用户指定的任务相匹配来计算实体匹配率。我们通过确定每个对话结束时实际选择的实体是否与指定给用户的任务相匹配来计算实体匹配率。 如果(1)所提供的实体匹配,并且(2)系统回答来自用户的所有相关信息请求(例如,地址是什么),则对话被标记为成功。
- 客观任务成功率。
人为评估
每位参加评估的志愿者被要求遵循一个给定的任务并评估模型的性能。 我们评估了主观成功率,以及对感知理解能力和反应的自然性赋予1到5的评分。使用了具有注意力和加权解码的完整模型,并且在总共245次对话中测试了该系统。 从表3可以看出,平均主观成功率为98%,这意味着系统能够完成大部分任务。 此外,理解能力和自然度得分均为平均值超过5中的4。
5. 实验结果
对tracker的评估
表1显示了tracker性能的评估。 由于delexicalisation,CNN型tracker和N-gram型tracker(Henderson et al。,2014)都具有很高的准确率,但N-gram跟踪器的召回率较差。 这个结果表明,与简单的Ngrams相比,CNN类型的跟踪器可以更好地推广到具有长距离依赖性和更复杂的句法结构的句子。
基于语料的评估
表2显示了平均5个随机初始网络的基于语料库的评估结果。 baseline模块显示了两个baseline模型:第一个模型是一个简单的序列模型序列(Sutskever等,2014),而第二个模型引入了一个额外的recurrence来建模对于对话历史的依赖性,参照Serban等人(Serban 等,2015b)的工作。 可以看出,加入recurrence改善了BLEU评分。 但是,由于模型未对数据库进行任何规定,因此无法计算基准任务成功率和匹配率。
表2的Variant部分展示了提出的端到端模型的两种变体。 对于第一个,没有使用requested tracker,只使用information tracker。 因此,对用户request建模的任务完全依赖于intent network。 我们发现在没有明确建模用户requested slot的情况下,该模型任务成功率很低(30%)差,即使它可以在大多数时间可以匹配正确的实体(90%)。 并且,我们发现,在整个模型中加入一个明确的内部语义表示(如下所示)会更加高效并且非常有效。
对于第二个变体,LSTM intent network由CNN替代。BLEU成绩很好,但任务成功仍然相当差(成功率为58%)。 我们认为这是因为CNN通过捕捉几个本地特征来编码意图,但缺乏句子的全局视图,导致了过拟合。
解码策略不能显著提高BLEU得分,但它大大提高了任务成功率(~3%)。 Rt术语对此改进贡献最大,因为它在解码期间注入了额外的特定于任务的信息。尽管如此,提高绩效的最有效和最优雅的方式是使用基于注意力的机制(+ att。)动态聚合tracker beliefs(第2.4节)。它使BLEU得分略有提高(0:01),并且在任务成功率(5%)方面获得很大收益。最后,通过将加权解码与注意模型相结合(+ att。+ weighted),我们可以进一步改进。
另一方面,我们使用t-SNE(der Maaten和Hinton,2008)生成一个降维视图,该视图嵌入了前三个生成的输出词(完整模型,不注意)嵌入,绘制和标记,该图如下图所示。
人为评估
我们可以看到基于系统意图类型的清晰集群,尽管我们没有使用对话行为对它们进行明确的建模。
模块化结构网络和端对端系统的比较
我们还对NN模型和由handcrafted 语义分析器,基于规则的策略和信念跟踪器以及基于模板的生成器组成的人工模块化基准系统(HDC)进行比较。 结果可以在表4中看到。
HDC系统实现了大约95%的任务成功率,这表明它是一个强大的基线,即使大部分组件都是经过设计的。 在所测试的164个对话中,在所比较的所有指标上,NN系统(NN)被认为比手工系统(HDC)好。 虽然两个系统的成功率相似,但NN系统(NN)更有效率,并提供了更有吸引力的对话(更低的转数和更高的偏好)。 此外,神经网络系统的理解能力和自然度也被评为较高,这表明学习系统被认为比手工设计的系统更自然。
future work
目前的模型是一个基于文本的对话系统,它不能直接处理噪声语音识别输入,也不能在用户不确定时要求用户确认。 事实上,这种类型的模型在多大程度上可以扩展到更大更广的领域,这仍然是希望在今后的工作中追求的一个悬而未决的问题。