技术编程|ACL 2019 使用胶囊网络联合训练词槽填充及意图检测

论文题目:Joint Slot Filling and Intent Detection via Capsule Neural Networks
作者:Chenwei Zhang, Yaliang Li , Nan Du, Wei Fan , Philip S. Yu
机构:伊利诺斯大学 , 阿里巴巴团队 , 腾讯医疗人工智能 , 清华大学
收录会议:ACL 2019
论文背景

技术编程|ACL 2019 使用胶囊网络联合训练词槽填充及意图检测
文章图片
文章图片
我们知道 , 通常自然语言理解任务(natural language understanding, NLU)可以被分为词槽填充(slot filling)以及意图检测(intent detection)两个子任务 。例如 , 用户输入一个自然语言句子 , 词槽填充在词语层面标注出每个词的类型 , 意图检测则在句子层面对其意图进行分类 。
目前词槽填充常被作为序列标注问题进行处理 , 使用 RNN/CNN 学习得到词表示 , 再使用 CRF 来推测词槽类型 。已有的一些将两个任务联合训练的工作是将词槽填充中 RNN 的最后一个隐藏层或者注意力权重求和 , 用来训练句子层面的意图检测 。其存在的问题是没有考虑到词语、词槽以及意图之间的层级关系 。
本文提出了 CapsuleNLU , 使用带有动态路由(dynamic routing)的胶囊网络(capsule neural network)在词槽建模以及意图建模之间建立联系 , 其主要贡献有以下三点:(1)通过层次化的胶囊神经网络结构 , 将话语 , 语段和意图之间的层次关系封装起来 。(2)提出一种具有rerouting功能的动态路由方案 , 以实现联合插槽填充和意图检测的协同效果 。(3)在两个真实的数据集上展示本文模型的有效性 , 并与现有模型以及商业 NLU 服务进行比较 。
论文模型

技术编程|ACL 2019 使用胶囊网络联合训练词槽填充及意图检测
文章图片
文章图片
如图所示 , 本文提出的模型中包含三种类型的胶囊结构:
1. WordCaps 用于学习基于上下文的词表示
2. SlotCaps 通过动态路由按照插槽类型对单词进行分类 , 并通过汇总属于该插槽的单词来为每种插槽类型构造表示形式
3. IntentCaps 根据 slot 表示以及话语上下文确定话语的意图标签 。一旦 IntentCaps 确定了意图标签 , 推断出的话语级别意图就可以通过重新路由模式帮助从话语中重新识别插槽
WordCaps

技术编程|ACL 2019 使用胶囊网络联合训练词槽填充及意图检测
文章图片
文章图片
WordCaps 包含前向和后向两个 LSTM , 用于学习输入句子的词表示 。
SlotCaps

技术编程|ACL 2019 使用胶囊网络联合训练词槽填充及意图检测
文章图片
文章图片
SlotCaps 可以通过动态路由来识别插槽 , 而不是通过不直接考虑单词间依赖性的顺序标记进行插槽填充 。按协议进行的 routing 明确地对胶囊之间的层次关系进行建模 。例如 , 仅当单词表示形式与插槽表示形式具有高度一致性时 ,routing-by-agreement 机制才会将低级特征(即WordCaps中的词表示)发送到 SlotCaps 。其具体算法如下图所示:

技术编程|ACL 2019 使用胶囊网络联合训练词槽填充及意图检测
文章图片
文章图片
b_{kt} 表示对数优先级概率 , 初始化为零,即 WordCap 中的第 t 个单词同意被路由到 SlotCaps 中的第 k 个词槽胶囊 。在每次迭代(第 3 行)期间 , 通过汇总该词槽类型 {p_{k|t} |t∈T} 的所有预测向量 , 并乘以从 b_{kt}(第 5-6 行)获得的一致性值 c_{kt} , 来计算每个时隙表示 v_k 。其中将加权函数 squash(·) 应用于加权和 s_k 以获得每种词槽类型的 v_k 。一旦在当前迭代中更新了词槽表示形式 v_k , b_{kt} 就会变大 。分页标题
当点积 p_{k|t}·v_k 大时 。也就是说 , 当预测矢量 p_{k|t} 与时隙表示 v_k 更相似时 , 点积较大 , 表明该词更有可能路由到第 k 个时隙类型(第 7 行) 。更新的更大的 b_{kt} 将在下一次迭代中导致第 t 个词和第 k 个词槽之间的一致值 c_{kt} 更大 。另一方面 , 当 p_{k|t} 和 v_k 之间不一致 。通过无监督的迭代算法获知的协议值可确保迭代迭代后 , WordCaps 的输出被发送到适当的后续 SlotCaps 。

技术编程|ACL 2019 使用胶囊网络联合训练词槽填充及意图检测
文章图片
文章图片
词槽填充部分的损失函数使用的是常见的交叉熵(Cross Entropy)

技术编程|ACL 2019 使用胶囊网络联合训练词槽填充及意图检测
文章图片
文章图片
IntentCaps

技术编程|ACL 2019 使用胶囊网络联合训练词槽填充及意图检测
文章图片
文章图片
IntentCaps 同样使用动态路由来进行意图检测 , 其中对数优先级概率 q_{l|k} 表示 SlotCap 中的第 k 个词槽胶囊同意被路由到 IntentCaps 中的第 1 个意图胶囊 。之后的计算和更新方式与 SlotCaps 完全一致 。

技术编程|ACL 2019 使用胶囊网络联合训练词槽填充及意图检测
文章图片
文章图片
意图检测部分使用 Max-magrin 损失函数进行优化 。
Re-Routing
动态路由协议显示了诸如词槽之类的低级特征如何帮助构建诸如意图之类的高级特征 。高级特征还可以作为指导 , 辅助低级特征的学习 。例如 , IntentCaps 中的 AddToPlaylist 意图激活向量还可以在填充 SlotCaps 中的 Sungmin 单词期间 , 帮助增强现有的词槽 , 例如 ArtistName 。

技术编程|ACL 2019 使用胶囊网络联合训练词槽填充及意图检测
文章图片
文章图片
本文中 Re-Routing 的实现方式是在更新 SlotCaps 的 b_{kt} 时在原来的基础上引入 IntentCaps 的输出 u_z 。
论文实验
本文在 SNIPS、ATIS 数据集上对 CapsuleNLU 进行了评估 , 作为 baseline 的模型有:CNN TriCRF, RNN, Attention BiRNN, Slot-gated Full Atten (gate function in LSTM), DR-AGG (使用动态路由为文本分类聚合词层面的信息), IntentCapsNet (使用多头自注意力机制从句子中获取中间语义信息) , 此外 , 本文还与 DialogFlow, Waston Assistant, Luis, wit.ai, snips.ai, recast.ai, Amazon Lex 等商业 NLU 服务进行了对比实验 。

技术编程|ACL 2019 使用胶囊网络联合训练词槽填充及意图检测
文章图片
文章图片
结果表明 , 本文提出的的方法优于之前的一些工作 , 刷新了联合训练词槽填充与意图检测的 SOTA , 与一些商业 NLU 服务的效果也比较接近(需要注意的是 , 本文模型中并未引入 GloVe、ELMo、BERT 等预训练模型 , 其词表示全部通过 WordCaps 学习得到) 。
上表中 CapsuleNLU w/o Intent Detection 仅在 WordCaps 与 SlotCaps 之间使用了动态路由 , CapsuleNLU w/o Joint Training 在训练词槽填充时使用 L_slot 进行优化 , 使用词槽表示训练意图检测任务 , 并使用 L_intent 进行优化 。
【技术编程|ACL 2019 使用胶囊网络联合训练词槽填充及意图检测】
技术编程|ACL 2019 使用胶囊网络联合训练词槽填充及意图检测 分页标题
文章图片
文章图片