EMNLP 2019 | 哈工大SCIR,结合单词级别意图识别的 stack-propagation 框架进行口语理解

本文转自公众号哈工大SCIR,转载请联系原公众号 论文名称:A Stack-Propagation Framework with Token-Level Intent Detection for Spoken Language Understanding 下载地址:https://arxiv.org/abs/1909.02188 论文作者:覃立波,车万翔,李扬名,文灏洋,刘挺 本文作者:覃立波 编辑:唐里

1.任务

口语理解任务(Spoken Language Understanding,SLU)主要包括两个子任务,意图识别(intent detection)和槽位填充(slot filling)任务,如图1所示:

图1 示例。每句话属于一个意图,每个单词属于一个槽位

对于句子“watch action movie”,SLU任务识别该句子意图为“WatchMovie”,填充句子中每一个单词的槽位。

2.动机

槽位填充和意图识别两个任务不是相互独立的,槽位填充任务也高度依赖于意图识别的结果[1], 例如,对于句子“watch action movie”,如果预测了该句子的意图为“WatchMovie”,那么每一个单词的槽位更容易识别为电影(movie)相关,而不是音乐(music)相关。很多前人工作将两个任务联合起来建模来充分利用两个任务共有的知识。Zhang [2], Liu [3] 等人采用multi-task框架来联合建模两者之间共享的知识并取得了很好的效果。但是他们的工作没有为槽位填充任务显式的建模意图的信息。近年来Goo [1]和Li [4] 等人采用门控机制来显示给槽位填充任务利用意图信息,尽管他们取得了很好的效果,仍然具有以下不足:(1)他们都是采用门控机制来控制意图信息,在本文中我们表明门控机制不能充分的总结和记住意图信息,并且由于他们框架中槽位填充和意图识别的交互是通过隐藏向量来交互,造成了整个框架的可解释性低。(2)他们都是利用句子级别的意图信息作用给槽位填充任务,可能会导致错误级联问题,一当句子意图识别错误,则会融入错误意图信息,误导所有单词的槽位预测。

为了解决这两个问题,在我们的工作中,我们提出了一个结合单词级别的意图识别机制的Stack-Propagation 框架来解决自然语言理解问题 (SLU)。对于第一个缺点,我们采用stack-propagation框架,直接将意图识别的输出作为槽位填充任务的输入,不仅直接利用了意图的信息来指导槽位填充任务,并在最后实验阶段设计oracle 意图信息的实验来直观的说明意图对于槽位填充的作用,提高了模型可解释性。对于第二个问题,我们创新性的提出单词级别的意图识别机制,对于每一个单词,我们进行意图识别,最终整个句子的意图,通过每个单词的意图结果进行投票决定。进行单词级别的意图识别,然后指导给对应单词的槽位预测可以缓解一定的错误级联问题,因为即使有一些单词的意图预测错误,其它预测正确的单词仍然可以给对应的单词的槽位进行正确的指导。最后,我们在框架中探索了分析了目前比较强的预训练模型BERT [5]。

3.模型

3.1 背景介绍

• 任务介绍

  • 意图识别可以看做是句子的分类任务,识别一个句子的意图
  • 槽填充任务可以看做是序列标注任务,将句子输入序列

转化为对应槽值序列

• Stack-Propagation框架与多任务框架比较(如图2)

图2 multi-task框架和stack-propagation框架对比图

对于两个相关的任务A和任务B来说,多任务框架(Figure1 (a))可以通过共享的编码器Encoder来学习到两个任务的相关性,但是该框架无法显式将任务A的有用信息传给任务B。对于Stack-propagation框架(Figure (b))来说,则可以弥补这个缺点,任务B可以直接利用任务A的信息,并仍能保证端到端训练,不断微分。

3.2 整体框架

整体框架图如图3:

图3 整体模型框架图

下面我们将从编码器,意图分类解码器和槽填充解码器分别解释各个组件。

3.3 自我注意力机制的编码器

对于输入序列

首先通过BiLSTM [6] 得到隐层表示

。为了捕获单词之间的上下文信息,我们对于输入序列采用自我注意力机制获得相关表示C,公式如下:

最后我们将H和C进行连接,得到我们最后的编码表示

3.4 意图分类

在本文中,我们将意图分类转化为单词级别的分类任务,对于每一个单词,我们都进行分类。在训练过程,我们将一句话的意图打给每个单词上作为该单词正确的意图标签进行分类。在给定句子的编码表示

,我们采用一个单项的LSTM作为意图识别解码器,对于每一个时刻的隐层状态

,可以由下面公式

得到,其中

是上一时刻隐层状态,

是上一时刻decoder输出结果。最后可以通过分类层得到每个单词的分类结果

最终整句话的意图结果采用所有单词的投票结果进行决定:

其中m是句子的单词个数,

是意图标签的总个数。

进行单词级别意图分类,主要有以下两个优点:

  1. 执行单词级别的意图检测可以在我们的框架中为槽填充提供每个单词意图的信息,可以缓解错误传播并保留更多有用的意图信息。与句子级别的意图检测相比,如果整个句子的意图被错误地预测,那么错误的意图可能会对所有单词的槽位预测产生负面影响。但是在单词级别的意图检测中,如果句子中的某些单词被错误地预测,其他正确的单词的意图信息仍可以正确的指导槽位的预测。
  2. 由于每个单词通过自注意编码器已经获得整个句子上下文信息,因此我们可以将每个单词的意图预测看做对该句子意图的单独预测。因此,类似于集成神经网络,这种方法将减少预测的方差并提高意图检测的性能。并且我们在实验部分经验上证明了单词级别意图识别的有效性。

3.5 槽填充

对于槽填充任务,类似于意图识别,仍采用单向LSTM作为解码器。对于第i时刻的隐层状态表示如下:

与意图分类不同的是,在槽填充任务中,我们通过stack-propagation框架直接将第i个时刻的意图分类结果

作为输入指导槽位的预测。同样,可以通过分类层得到槽位预测结果:

3.6 联合训练

对于意图分类任务,损失函数如下:

同理,槽填充的损失函数如下:

我们将两个loss联合起来更新:

4.实验

4.1 数据集

我们采用公开的ATIS和SNIPS数据集进行试验,训练集,开发集和测试集划分采用[1]的公开标准划分。

4.2 评价指标

对于意图识别,我们采用准确率(Acc)来评价。

对于语义槽填充,我们采用F值来评价。

我们也采用句准确率(Overall Acc)来衡量一句话领域分类、意图识别和语义槽填充的综合能力,即以上三项结果全部正确时候才算正确,其余均算错误。

4.3 整体结果

表1 整体model性能对比表

通过表1结果,我们可以看出:

  1. 我们的框架达到了state-of-the-art的性能,相比于上一个sota的模型Bi-Model,我们在SNIPS数据集上的overall (acc) 超过了3.1%,在ATIS数据集上超过了0.8%。
  2. 通过Oracle的实验,我们给槽填充任务加入了正确的意图one-hot向量信息,可以发现在SNIPS上的Slot信息有1.9%大幅度的提升,在ATIS上也有0.1%的提升,在ATIS上较小的提升结果,我们猜测是ATIS数据集已经达到了很好的性能,所以意图信息的帮助并没有很显著。

4.4 辅助实验

表2 消融实验结果对比表

我们首先验证了单词级别的意图识别效果,单独做了意图识别任务,lstm+token-level代表采用单词级别的意图识别,lstm+last-hidden代表采用lstm的最后一个隐层状态进行分类,通过结果可以发现,单词级别的意图分类要优于句子级别的意图分类结果。对于其他框架机制,我们也进行的消融实验,通过表2可以发现各个模块对最终的性能都有一定的提升效果。

最后我们还进行了BERT的探索实验。

表3 BERT相关实验分析表

其中Intent detection (BERT), Slot filling (BERT)代表用BERT单独进行两个任务的实验,并没有联合建模。BERT SLU 是chen [7]等人直接将BERT出来的表示进行简单联合建模,没有显式的交互模块。

根据表3可以得到:

  1. 在BERT基础上,联合建模意图识别和槽填充任务仍然能够促进两个任务的性能。
  2. 显式给槽填充任务利用意图信息能够促进两个任务的表现,并且我们的框架和BERT的作用是相互垂直的,即使在BERT基础上,我们的框架仍然能够超过共享编码层表示的模型。

5.结论

在本文中,我们提出了一种使用Stack-Propagation框架来更好地结合意图信息以进行时槽填充的联合模型,不仅简单有效并且能够直观的体现意图信息是如何作用于槽位预测,提高了模型的可解释性。此外,我们创新性执行单词级别的意图检测,以提高意图检测性能并进一步缓解错误传播。我们在两个公开数据集上进行的实验验证了所提出模型的有效性,并达到了最好的性能。此外,我们探索并分析了的预训练BERT模型纳入SLU任务的效果。在使用BERT的基础上,结果达到了新的最高性能。

参考文献

[1] Chih-Wen Goo, Guang Gao, Yun-Kai Hsu, Chih-Li Huo, Tsung-Chieh Chen, Keng-Wei Hsu, and Yun-Nung Chen. 2018. Slot-gated modeling for joint slot filling and intent prediction. In Proc. of NAACL.

[2] Xiaodong Zhang and Houfeng Wang. 2016. A joint model of intent determination and slot filling for spoken language understanding. In Proc. of IJCAI.

[3] Bing Liu and Ian Lane. 2016. Attention-based recur-rent neural network models for joint intent detection and slot filling. arXiv preprint arXiv:1609.01454.

[4] Changliang Li, Liang Li, and Ji Qi. 2018. A self-attentive model with gate mechanism for spoken lan-guage understanding. In Proc. of EMNLP.

[5] Jacob Devlin, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. 2018. Bert: Pre-training of deep bidirectional transformers for language understanding. arXiv preprint arXiv:1810.04805.

[6] Sepp Hochreiter and J¨urgen Schmidhuber. 1997. Long short-term memory. Neural computation, 9(8).

[7] Qian Chen, Zhu Zhuo, and Wen Wang. 2019. Bert for joint intent classification and slot filling. arXiv preprint arXiv:1902.10909.

本文分享自微信公众号 - AI科技评论(aitechtalk)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏微信公众号【Java技术江湖】

为了学好Java,我尝试了这 6 个方法

怎么学Java,一个简单的命题,我自己也折腾了好几年,现在虽不能说是Java高手,但也算是小有所成,至少还不至于搞不懂一些基本概念和技术原理。

9120
来自专栏测试开发社区

用Python拨打电话

跟selenium操作浏览器原理类似,这是用appium操作移动设备的一个自动化功能,自娱自乐,主要是通过小案例引出相关技术

15930
来自专栏TeamsSix的网络空间安全专栏

漏洞复现 | WordPress 4.2.0-4.5.1 flashmediaelement.swf 反射型 XSS

首先来看存在漏洞的输出, 99%的Flash XSS都是由于ExternalInterface.call函数的参数注入导致的, 当然本次也不例外. 拿到源码之后...

8420
来自专栏美团技术团队

Litho在动态化方案MTFlexbox中的实践

MTFlexbox是美团内部应用的非常成熟的一种跨平台动态化解决方案,它遵循了CSS3中提出的Flexbox规范来抹平多平台的差异。MTFlexbox适用于重展...

12220
来自专栏安全漏洞环境学习

ES文件浏览器(CVE-2019-6447)漏洞复现

适用于Android的ES文件浏览器文件管理器应用程序是一款基于Android系统的多功能手机文件,程序和进程管理器,它支持在手机,电脑,远程和蓝牙间浏览管理文...

15260
来自专栏arebirth重生者的IT之路

SpringMVC运行原理

按照上边的执行流程图,我们可以看出一个SpringMVC整体的一个执行轮廓,下面我们具体来分析下

13340
来自专栏每天学点Android知识

Flutter状态管理(2)——单Stream和广播Stream

在Flutter状态管理(1)——InheritedWidget中介绍了状态管理以及如何使用InheritedWidget来实现全局状态的管理。这篇博客将介绍如...

13730
来自专栏安全漏洞环境学习

Android4 漏洞环境简单挑战

今天给各位分享的是一个Android虚拟机环境的简单渗透。按照我们一般的渗透流程大概分为:

12710
来自专栏Android技术分享

Android性能优化之APK 极限压缩(资源越多,效果越显著)

随着项目的不断迭代,代码量跟资源文件不断增多。那么就会出现打包后的 APK 文件越来越大,如果突然有一天你们老板或领导叫你优化 APK 大小,你还不知道怎么优化...

16830
来自专栏.Net Core技术分享

手撸一套纯粹的CQRS实现

关于CQRS,在实现上有很多差异,这是因为CQRS本身很简单,但是它犹如潘多拉魔盒的钥匙,有了它,读写分离、事件溯源、消息传递、最终一致性等都被引入了框架,从而...

4710

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励