这是今年8月发布在SIGDial 2019的关于任务完成型对话系统方面的论文。 源网址:https://arxiv.org/abs/1909.11833 英文题目:SIM: A Slot-Independent Neural Model for Dialogue State Tracking 中文题目:SIM:用于对话状态跟踪的插槽无关型神经模型
我应该是最早读这篇论文的人之一了,这篇论文的先修知识还是不少的,包括但不限于《A Network-based End-to-End Trainable Task-oriented Dialogue System》和《Global-Locally Self-Attentive Dialogue State Tracker》这两篇论。建议先读完上述两篇,再读此篇。
我们知道,对话系统可以分成FAQ型、闲聊型、任务完成型等多种。而这篇就是关于任务完成型的。任务(task)完成型对话是当前最重要,也是最困难的对话系统,因为它最面向工业界的。优秀的任务完成型系统必须满足“全面”、“实用”两大特点,“全面”的意思是开放域,什么样的query都能回答;“实用”的意思是能够面向具体业务,完成用户的目标。这个要求传统的对话系统是很难满足的。像闲聊型,什么问题都能回答,倒是全面了,但是没有用(难以应用到具体task);FAQ型,倒是有用了,但是说白了就是个文本匹配,发出不了诸如查天气,查饭馆,制定旅游路线等复杂的动作,而且鲁棒性极差,用户的问题千奇百怪,再大的语料库也不可能全面应对。
因为完成一个任务往往要经历多轮,所以可以把机器完成任务的过程抽象成一个以用户输入和历史对话信息为state(称为对话状态),以机器回复为action(称为系统动作),以完成任务为target的RL问题。而**对话状态跟踪(DST,dialogue state tracking,也叫belief tracking)**是面向任务的对话系统中的重要组成部分,用于在对话进行时识别用户的目标和请求。过去大多数较为成熟的模型,都依赖于对话槽位(slot),通过槽位解析来逐渐具体化用户的意图。这样带来的问题是,当槽的数量增加时,模型的复杂性将急剧上升,槽位设计与参数训练都会变得非常困难。所以,在本文中,作者提出了一种与对话slots相独立的state tracking模型(也就是SIM了),使得模型的复杂性不随着slot改变。
此外,该模型有2个思想:
基于语法信息和CNN,将用户输入和对话状态合并成更好的特征表示(feature representation)引入用户话语和系统动作之间的注意力机制(cross and self attention)。最后作者宣称他们的模型不仅模型复杂度远小于以往模型,训练速度快,而且准确率还更好,可以说是很牛x了。
语义解码(semantic decoding)是经典对话系统中一个重要步骤,目的是将用户输入(users utterance)映射到预定义的对话状态(dialog states)。这些对话状态是通过严谨典型的slots和values表示的。slot表征信息的类别,values具体化信息的内容。所以语义解码任务往往与槽位解析任务一体化。语义解码经典方法很多,但是无一例外都需要设计slot-specific的网络结构。这样的缺点有:(1)当对话任务涉及的topic和slots越来越多时,模型将越来越笨重;(2)由于标签的稀疏,并没有足够充足的数据给slot去训练。
很多人早就意识到了这个问题,而解决的办法,就是实现对话状态跟踪模型与dialogue slots的分离。但是怎样才能让网络从slots中独立出来,一直没有好的办法。
然后作者说他们想出了好的办法。如果说想办法让网络依赖于slots和用户输入的语言相似度,而非依赖于slot-specific moduls呢?这是本文核心的创新点。这样一搞,一方面参数大大减少,而另一方面用于slot-specific的参数就没有了。为了补偿后者,作者便基于语法信息和CNN,将用户输入和对话状态合并成特征表示(feature representation)。再加上cross and self attention,这样一来模型就差不多离了。
如经典多轮对话系统设计,对于每一轮(turn)对话,用户输入被decode成slot-values对的一个集合。 slots可以分成2类:
Goal slots indicate the category, e.g. area, food, and the values specify the constraint given by users for the category, e.g. South, Mediterranean.Request slots refer to requests, and the value is the category that the user demands, e.g. phone, area.用户的每一轮就这样被decode成了轮次目标(turn goals)和轮次请求(turn requests)。此外,为了将截止当前的用户目标概括起来,从过去到当前轮次的所有的goals被合并,定义为joint goals.
同理,系统的动作,也就是机器的回应,通过来自上一轮次的一系列slot-values对的集合进行标注表示。
不多说,上图。
如图所示,本体O中,每一个slot s都配有它的values,用V(s)表示。 特别地,request slot用req表示。 对话状态跟踪任务,即是当给定当前轮的用户输入和上一轮的系统动作,预测所有的turn goals和turn requests。 第i轮次的joint goals就是从1到i所有预测的turn goals的并(union)。
通常,这个预测任务可以看做一个二分类问题,对于每一个slot-value对(s, v),判别其是否应该属于预测的turn goals/requests。 f为模型要学习的映射函数。
终于到本文的主角SIM了。如前文所说,SIM要解除模型对slots的依赖。具体的办法原文如下。
Therefore, we propose that in the classification process, the model needs to rely on the semantic similarity between the user’s utterance and slot-value pair, with system action information. In other words, the model should have only a single global neural structure independent of slots.
模型应当仅有一个全局的神经网络结构,其对于slots独立。 分析结构图:将用户输入、系统动作和本体三者各自的嵌入表示分别通过一个线性自注意模型进行encode,得到相应的三个上下文表示向量,接着两两计算得到相似度得分,加权得到最终的分数y,代表生成概率。最顶层为模型的损失函数。
首先是输入表示。 用户输入表示: 假设第i轮的输入语句包含m个words,则输入U = ( ω 1 \omega_1 ω1, ω 2 \omega_2 ω2,…, ω n \omega_n ωn)。 对于 ω i \omega_i ωi,准备其如下几个向量:
e i e_i ei:GloVe word embedding; c i c_i ci:character-CNN embedding ; P O S i POS_i POSi:POS embedding ; N E R NER NER:NER embedding ; E M i EM_i EMi:exact match feature 。其中POS和NER标签是通过spaCy算法抽取,并映射到一个固定长度的向量得到的。EM特征有2个比特,指出word及其lemma能否在slot-value pair representation中找到。最终用户输入user utterance被表示为矩阵XU,如下所示。 系统动作表示与本体表示: 对于本体或系统动作中的所有槽值对 (s,v),通过拼接它的slot和value的内容来构造其文本表示(text representation)。由于文本中的word是用GloVe表示的,所以,来自系统动作的槽值对被表示成a×d的矩阵XA,来自本体的槽值对被表示成o×d的矩阵XO。a和o是相应文本中words的数量。
此时我们已经获取了三个输入表示XU、XA、XO。接下来是构造上下文表示。为了表征上下文信息,作者对输入表示施加了一个双向RNN层。 以XU为例,经过一个Bi-LSTM得到一个矩阵RU,其维度是m×drnn RNN的输入用了variational dropout。dropout mask对time steps全局共享。
这里的variational dropout是dropout的一种变体,详情参见论文https://arxiv.org/abs/1506.02557
在通过RNN之后,使用线性自注意力机制得到相对于用户输入的单一概括向量(single summarization vector)sU。具体如下: 同理得到sA和sO。
现在,我们已经得到了三个上下文表示向量sU、sA和sO,接下来的任务是,如何确定当前的用户输入是否指向一个存在于本体中的(s, v)。本文模型采用的方法是,在用户输入、系统动作和本体三者之间施加inter-attention,计算得分。
此处的基本思想与结构类似于Global-Locally Self-Attentive Dialogue State Tracker中的GLAD,只不过原文里的两个输入源在本文改成了两个交互源(sources of interactions),通过为两个交互源分别打分、加权求和,得到最终分数。
第一个源是用户输入(用嵌入向量RU表示)与每一个来自本体(s, v)的槽值对(用嵌入向量sO表示)之间的相似度。通过与sO作标准化内积,我们将RU中的向量线性地组合起来,最终计算得到相似度分数y1. α = R U s O \alpha=R^Us^O α=RUsO p 1 = s o f t m a x ( α ) p1=softmax(\alpha) p1=softmax(α) q 1 = ( R U ) T p 1 q_1=(R^U)^Tp1 q1=(RU)Tp1 y 1 = ω 1 T q 1 + b 1 y_1=\omega^T_1q1+b1 y1=ω1Tq1+b1
第二个源就涉及到系统动作了,理由是。如果系统需要过往轮次中的特定信息,说明用户很可能会在这一轮次给出指向该问题的回答,比如yes或no。因此,我们首先从用户输入中关注系统动作,然后将其与本体结合,获得相似度分数。假设系统动作中有L个槽值对,分别用 s 1 A s^A_1 s1A到 s L A s^A_L sLA表示,那么按下式计算系统动作与本地的相似度y2: p 2 = s o f t m a x ( { s j A T s U } j = 1 L ) p_{2}=softmax\left( \left\{{s^{A^{T}}_{j}s^{U}}\right\}^L_{j=1} \right) p2=softmax({sjATsU}j=1L) q 2 = ∑ j = 1 L p j s j A q_2=\sum^L_{j=1}p_js^A_j q2=j=1∑LpjsjA y 2 = q 2 T s O y_2=q^T_2s^O y2=q2TsO
最终的相似度分数计算公式为: p ( s , v ) = σ ( y 1 + β y 2 ) p_{(s,v)}=\sigma (y_1+\beta y_2) p(s,v)=σ(y1+βy2) β \beta β是待学习的权重系数。
最后的损失函数定义为本体中所有槽值对的二元交叉熵之和: L ( θ ) = − ∑ ( s , v ) ∈ O y ( s , v ) l o g p ( s , v ) + ( 1 − y ( s , v ) ) l o g ( 1 − p ( s , v ) ) L(\theta)=-\sum_{(s,v)\in O}y_{(s,v)}logp_{(s,v)}+(1-y_{(s,v)})log(1-p_{(s,v)}) L(θ)=−(s,v)∈O∑y(s,v)logp(s,v)+(1−y(s,v))log(1−p(s,v)) 其中, y ( s , v ) y_{(s,v)} y(s,v)是取值0到1内的groundtruth
论文将本文的SIM模型与几种baseline系统进行了对比。在WoZ数据集上,SIM喜闻乐见地实现SOTA效果,goal准确率比GLAD提升了1.4%,request准确率比GLAD提升0.2%。在DSTC2数据集上也与GLAD可比。但是重要的是,就如前文所说,由于SIM的slots与网络独立,所以其模型远比以往的模型小得多,参数数量仅为GLAD的约20%。
本文的slot无关型SIM,通过组合构建更强大的特征表示,减少模型复杂度的同时提升性能。 未来论文团队计划进行一个更加泛化的slot-free对话跟踪模块,可以应用到更多样化的领域,彼时,模型将在真实应用场景上更加的灵敏。