Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

覃立波原创作者覃立波,车万翔,李扬名,文灏洋,刘挺论文作者

EMNLP 2019结合单词级别意图识别的stack-propagation框架进行口语理解

论文名称: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,公式如下:

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

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.

哈工大SCIR
哈工大SCIR

哈尔滨工业大学社会计算与信息检索研究中心

理论EMNLP 2019口语理解任务意图识别
3
相关数据
刘挺人物

哈工大人工智能研究院副院长,国内NLP方向领军人物。

自然语言理解技术

自然语言理解是人工智能的核心课题之一,也被广泛认为是最困难和最具标志性的任务。最经典的两个人工智能思想实验——图灵测试和中文房间,都是围绕自然语言理解来构建的。自然语言理解在人工智能技术体系中的重要性不言而喻,它一方面承载着机器和人的交流,另一方面直达知识和逻辑。自然语言理解也是人工智能学者孜孜以求的圣杯,机器学习的巨擘 Michael I. Jordan 就曾经在 Reddit 上的 AMA(Ask Me Anything)栏目中畅想用十亿美元建立一个专门用于自然语言理解的实验室。

损失函数技术

在数学优化,统计学,计量经济学,决策理论,机器学习和计算神经科学等领域,损失函数或成本函数是将一或多个变量的一个事件或值映射为可以直观地表示某种与之相关“成本”的实数的函数。

注意力机制技术

我们可以粗略地把神经注意机制类比成一个可以专注于输入内容的某一子集(或特征)的神经网络. 注意力机制最早是由 DeepMind 为图像分类提出的,这让「神经网络在执行预测任务时可以更多关注输入中的相关部分,更少关注不相关的部分」。当解码器生成一个用于构成目标句子的词时,源句子中仅有少部分是相关的;因此,可以应用一个基于内容的注意力机制来根据源句子动态地生成一个(加权的)语境向量(context vector), 然后网络会根据这个语境向量而不是某个固定长度的向量来预测词。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

准确率技术

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

推荐文章
暂无评论
暂无评论~