0%

Neural Belief Tracker: Data-Driven Dialogue State Tracking

论文地址,作者是 Nikola Mrkšić,发表于 2016 年。

摘要

现代口语对话系统的核心组成部分之一是 belief tracker,它可以在对话的每一步估计用户的目标。然而,目前大多数方法难以扩展到更大、更复杂的对话领域。这是由于他们依赖:a)口语理解(Spoken Language UnderstandingSLU)模型,需要大量注释的训练数据;或者 b)手工制作的词汇表,用于捕捉用户语言中的一些词语变种。我们提出了一个新的 Neural Belief TrackingNBT)框架,通过将模型建立在表征学习(最新进展的表征学习,即以前没有人用词向量去做过 DST)上以此克服了这些问题。NBT 模型对预训练的词向量进行推理,学习将它们组合成用户话语(user utterances)和对话上下文(dialogue context)的分布式表示。我们对两个数据集的评估表明……(你懂得,不翻译了)。

引言

口语对话系统(Spoken dialogue systems, SDS)允许用户通过交谈的方式与计算机进行交互。

  • 基于任务的系统帮助用户实现目标,比如找酒店或者预定航班。SDS 的其中一个模组 dialogue state tracking (DST) 用于解释用户输入并更新 belief state(系统对会话状态的内部表示(Young et al., 2010))。这是下游 dialogue manager 用于决定系统下一步应执行操作的 dialogue states 的概率分布(Su et al., 2016a,b);然后 system action 由自然语言生成器(NLG)描述(Wen et al., 2015a,b; Dušek, Jurcicek, 2015)。
  • The Dialogue State Tracking ChallengeDSTC)系列公开任务提供了一个带标记数据集的通用评估框架(Williams et al., 2016)。该框架由 domain ontology 支持,ontology 定义一系列 slots 和 每个 slot 可采用的 values。系统必须跟踪用户表达的搜索约束(goals or informable slots)以及询问用户对搜索结果(request)的问题。这需要考虑每个用户的话语(通过语音识别器的输入)和对话上下文(dialogue context)(例如,系统刚刚说了什么)。图 1(博主注:我一般在论文笔记中不放图,但这张图可以对 DST 有一个直观的了解,推荐去原论文看一下)中给出了一个例子,DST 模块依赖于识别用户话语中的 ontology items。
  • 在一个对话回合内,传统统计方法使用一个单独的 SLU 模组去处理词汇多样性的问题。然而,训练这些模型需要大量特定领域的标注。
    • 另外,由 Henderson et al. (2014d) 所展示的,turn-level SLUcross-turn DST 可以合并成单独一个模型以实现更好的 belief tracking 性能。这样的耦合模型通常依赖于人工构造的语义词典来识别所提到的多样的(词汇上或形态上) ontology items。图 2 给出了三个 slot-value 对的词典示例。
  • 本文提出了一个新模型——NBT,SLU 和 DST 的组合版

背景

Separate SLU

传统的 SDS 管道使用 SLU 解码器去探测在 ASR 输出中的 slot-value pair。然后下游 DST 模型将这一信息与上一轮的对话上下文结合,以此更新 belief state。

Joint SLU/DST

Joint model 通常依赖一个被称为 delexicalisation 策略,凭此,文本中出现的 slots 和 values 被替换为通用的单词。

Neural Belief Tracker

  • 功能:在对话过程中,用于检测在给定轮次的情况下的 slot-value 对(即用户的目的)。
  • 输入:它的输入是用户进行输入之前的 system dialogue actsuser utterance 以及一个候选 slot-value pair
  • 例子:模型也许要决定 'I’m looking for good pizza' 是否表达出了目的 FOOD=ITALIAN。要执行 belief tracking,NBT 模型要迭代所有的候选 slot-value pairs(由本体定义),并且做出决定刚才是否有一个 pair 被用户表达出来了。

图 3 呈现了模型中的信息流程。NBT 架构的第一层在给定三个输入的情况下执行表征学习(representation learning),产生用户话语(user utterance) r,当前候选 slot-value c 以及 system dialogue acts \(t_q, t_s, t_v\) 的向量表征。然后,学习到的向量表征通过 context modellingsemantic decoding 子模组交互,得到中间 interaction summary 向量 \(d_r, d_c\) and d。它们被用作最终 decision-making 模组的输入,该模组决定用户是否表达了由候选 slot-value pair 表示的意图(即二元分类)

Representation Learning

训练向量表征,以一个向量表示一句话。

  • NBT-DNN:用 n-grams(1, 2, 3) 向量之和表示 utterance 向量。
  • NBT-CNN:使用 CNN 训练,得到 utterance 向量。

Semantic Decoding

博主注:Semantic Decoding 指的是用户的 utterance 和 一个 slot-value pair 进行计算,最后得到向量 d。然后再与向量 m 进行计算,得到一个二维的向量,以此来断定该 slot-value pair 是否与 utterance 有关。

其次,不管有无关系,都会执行下一次的匹配。即再次输入用户的 utterance 和下一个 slot-value pair 进行匹配。

以此反复,直到迭代完所有的 slot-value(预定义在系统中)。最后得到想要的多个/一个/零个 slot-value pair。

图 3 的 NBT 图示显示了 utterance 表征 r 和候选 slot-value pair c 直接通过 semantic decoding 模组交互。该组件决定用户是否清晰地表达出与当前候选对匹配的意图(即不考虑对话上下文)

这种匹配的例子包括 'I want Thai food''food=Thai',或者要求更高的食物,如 a pricey restaurant'price=expensive'

这是使用高质量的预训练词向量发挥的作用:delexicalisation-based model 可以处理前一个例子,但在后一种情况下是无能为力的,除非人类专家提供了一个语义词典来列出 domain ontology 中的每个值的所有可能的替换。

让候选对的 slot name and value 的向量空间表示 由 \(c_s\)\(c_v\) 给出(多个单词的 slot name/value 向量相加)。NBT 模型学习将这个元组映射成一个向量 c,该向量的维数与 utterance 表征 r 相同。然后,这两个表征被强制交互,以学习一个相似性度量标准: \[ c = \sigma(W^s_c(c_s + c_v) + b^s_c) \\ d = r \otimes c \]

其中 \(\otimes\)博主注:论文中是用的这个符号,但是 Hadamard product 应该是使用 \(\circ\) 或者 \(\odot\)) 代表 element-wise 相乘(Hadamard 乘积)。点积,看起来像更直观的相似性度量,但是它会把 d 中丰富的特性集减少为单个标量(博主注:即向量点积的结果是一个值,而不是向量)。元素乘法允许下游网络通过学习 rc 中特征集之间的非线性交互,更好地利用其参数。

Context Modelling

这个 decoder 还不足以从人机对话的 utterances 中提取意图,为了理解一些查询,belief tracker 必须注意 context,即 the flow of dialogue leading up to the latest user utterance。虽然所有之前的系统和用户的语句都很重要,但是最相关的一句是上一句系统语句,对话系统可以执行以下两个 system acts(除去其他的行为)中的一个:

  1. System Requests:系统询问用户关于一个特定 slot \(T_q\) 的值。如果系统的语句为:'what price range whould you like?',而用户回答了 any,那么模型必须推断出 price range slot,而不是推断出其他的 slots,比如 area 或者 food
  2. System Confirm:系统询问用户以确认一个特定 slot-value pair(\(T_s, T_v\)) 是否是他们所需约束的一部分。例如,如果用户对问题 'how about Turkish food?' 回复 'yes',模型就必须感知到 system act 以准确更新 belief state。

如果我们使马尔科夫决策只考虑最后一组 system act,我们就可以将 context modelling 纳入 NBT 中。使 \(t_q\) 和 (\(t_s, t_v\)) 作为 system request 和 confirm acts 的参数的词向量(如果没有,则为零向量)。该模型计算 system acts、候选对(\(c_s, c_v\))和 utterance 表征 r 之间的相似性,衡量标准如下所示: \[ m_r = (c_s \cdot t_q) r \\ m_c = (c_s \cdot t_s) (c_v \cdot t_v) r \] 其中 \(\cdot\) 表示 dot product。计算出的相似度项作为 gating mechanisms只有当系统询问当前的候选 slot 或 slot-value pair 时,该机制才传递 utterance 表征这种类型的交互对于确认 system act 特别有用:如果系统要求用户确认,用户可能不会提到任何 slot values,而只是肯定或否定。这意味着模型必须考虑 utterance,候选 slot-value pair 和系统提供的 slot value pair 三者之间的交互,如果(且仅当)后两者相同,二元决策才认为用户同意。

  1. 比如系统询问:“你觉得中餐怎么样?”,用户回复:“可以。”。那么系统的 slot-value 就是 food=chinese,显而易见只有当候选 slot-value 等于 food=chinese 时(博主注:NBT 模型的做法是迭代所有预定义的 slot-value 对),\((c_s \cdot t_s) (c_v \cdot t_v)\) 的积才是最大的,所以语句“可以。”得以传入到二元决策层。在此可能有疑惑,电脑怎么知道“可以。”代表同意呢?实际上就是词向量那一套,在不断的训练之中,“可以。”就含有了同意的意思。
  2. 如果系统询问:“你觉得中餐怎么样?”,用户回复:“不行,我要吃意大利菜。”。逻辑是一样的,当候选 slot-value 等于 food=chinese 时,才允许“不行,我要吃西餐。”通过。但是不要忘了用户的语句也要与候选 slot-value 进行计算。虽然 \(m_c\) 蕴含了信息,但是 d 却匹配不通过,d 的 slot-value 必须是 food=italian。因此 food=chinese 二元决策输出“否”,即 food=chinese 不是当前对话状态的一部分。
  3. 以上解释了 \(m_c\) 的用途,但是对于 \(m_r\),论文中并没有明确说明。我猜测是使用候选 slot \(c_s\) 与系统请求语句 \(t_q\) 进行语义匹配。只有 \(d\)\(m_r\)\(m_c\) 的值都很大时才允许输出“是”。

Binary Decision Maker

中间表示通过另一个隐藏层,然后合并。如果 \(\phi_{dim}(x) = \sigma(Wx+b)\) 是将输入向量 x 映射到 dim 大小向量的层,则输入到最终的 binary softmax(表决策)表示为: \[y = \Phi_2 (\Phi_{100}(d) + \Phi_{100}(m_r) + \Phi_{100}(m_c)) \]

Belief State Update Mechanism

在 SDS 中,belief tracking 模型在 ASR 上进行操作。尽管语音识别有所改外,但是随着对话系统越来越频繁地在 noisy environments 中使用,目前仍有必要使用不完善的 ASR 系统。

本工作,我们定义了一个简单的 rule-based belief state 更新机制,可以应用到 ASR N-best lists 中(博主注:这样做的原因是来自 ASR 的不准确性,目前语音识别领域还不完善,所以语音识别总归还是有点差错。用户语句可能被语音识别系统预测出多个版本,我们需要根据这些版本的概率来估计 slot-value 的概率)。对于 dialogue turn t,令 \(sys^{t-1}\) 表示之前的系统输出(即上一轮对话中,系统说的话),令 \(h^t\) 表示后验概率为 \(p^t_i\) 的 N 个 ASR 假设 \(h^t_i\) 的列表。对于任意一个假设 \(h^t_i\),slot s 以及 slot value v \(\in V_s\),NBT 模型估计 \(\mathbb{P}(s, v | h^t_i, sys^{t-1})\) 的概率,这是 (s, v) 在给定假设中表示的(turn-level)概率。对此类 N 个假设的预测如下所示进行相加: \[\mathbb{P}(s,v | h^t, sys^{t-1}) = \sum^N_{i=1} p^t_i \mathbb{P}(s,v | h^t_i, sys^{t-1}) \]

按理说,到此步为止,就已经将 (s, v) 的概率计算出来了,即 \(\mathbb{P}(s,v | h^t, sys^{t-1})\)

但是上文中其实一直提到一个概念,即 turn-level。我们需要计算 turn level 的 (s, v) 的概率。所以我们还要继续计算,也就是下面的两步。最终结果为 \(\mathbb{P}(s,v | h^{1:t},sys^{1:t-1})\),意思是使用一个系数 \(\lambda\) 将以前 turn-level 的概率都加起来。最后的概率才是 (s, v) 的概率。(虽然我不知道原理是什么,但是看起来有点像指数加权平均。此外该论文其实给出了参考文献,该文献貌似讲述了 turn-level 的概念。)

然后,这个 turn-level belief state estimate 与相加到时间 (t-1) 为止的 (cumulative) belief state 组合,以获得更新过的 belief state estimate: \[\mathbb{P}(s,v | h^{1:t},sys^{1:t-1}) = \lambda \mathbb{P}(s,v | h^t, sys^{t-1}) + (1 - \lambda) \mathbb{P}(s,v | h^{1:t-1}, sys^{1:t-2}) \]

\(\lambda\) 是决定 turn-level 和 前一轮的 belief state estimate 的相对权重的系数。对于 slot s,在 turn t 时,它的 detected value 集合由下所示: \[ V^t_s = \{v \in V_s | \mathbb{P}(s,v | h^{1:t},sys^{1:t-1}) \geq 0.5\} \]

上面的公式应该指的是用 NBT 进行二元分类所得到的所有 (s, v),再一次经过 Belief State Update Mechanism 后,会产生一个新的概率,如果这个概率大于等于 0.5,那么我们就认为它是与用户输入的话相关的 (s,v)。

比如我们经过 NBT 二元分类得到 {(food, chinese), (food, italian), (pricerange, cheap)},概率分别为 [0.7, 0.59, 0.67]。而经过 Belief State Update Mechanism 之后,概率变为 [0.8, 0.44, 0.53]。那么我们认为 {(food, chinese), (pricerange, cheap)} 就是我们想要的结果(由于 food=italian 小于 0.5 被剔除了)。

对于 informable slots(即 goal-tracking),¥%……&*(&……%¥。对于 requests,\(V^t_{req}\) 中的所有 slots 都被视为已被请求。由于 requestable slots 用于模拟 single-turn 用户查询,因此它们在轮次中不需要 belief tracking。