snips数据集_《自然语言交互中的开放意图抽取》阅读笔记

题目:Open Intent Extraction from Natural Language Interactions

来源:WWW2020(最佳论文)

原文链接:https://dl.acm.org/doi/pdf/10.1145/3366423.3380268

转载请注明出处:学习ML的皮皮虾

Introduction

最近NLU的发展带动了一批语音助手的发展,如Apple Siri、Microsoft Cortana、Amazon Alexa等,这类语音助手为了有效地和用户交互,需要识别用户话语的意图,并且基于此产生应答。

随着深度学习的应用,许多研究提出了各种意图检测的模型。这些模型通常将意图分类建模成一个多类别分类任务,将输入的用户话语归到预先定义的意图类别中。然而这样的模型有以下两个问题:它们将意图定义为封闭的,只包含若干类别,因此无法识别训练集中不可见的意图类别;

它们假设一句话中只包含单个意图类别,这和实际情况中,一句话可能包含多个意图的情况不相符。

本文提出了OPINE(OPen INtent Extraction)模型,能够自动发现、识别自然语言中的意图,而无需事先定义好的意图类别集合。它能识别出在训练时没见过的新出现的意图。作者将此类“识别开放意图而无需任何关于意图模式的信息(即知识本体)”的任务称为:开放意图发现(Open Intent Discovery)。作者举了几个例子:Please make a 10:30 sharp appointment for a haircut:包含了单个意图“make a haircut appointment”;

I would like to reserve a seat and also if possible, request a special meal on my flight:包含了多个意图,分别是“a seat reservation”和“a meal request”。

本文的工作仅针对于像上面两个例子那样,具有明确意图和动作的句子,而如“Anyone knows the battery life of iPhone?”这种,没有显式的动作触发词(如make、reserve、request)、以疑问形式表达的、具有歧义的句子则不在本文的考虑范围之内。

一些工作与本文具有类似的目标,即识别标注数据以外的意图。它们中的一些将其定义为zero-shot分类的任务,需要在测试时识别出部分在训练阶段不可见的类别样本;而另一些则是将其作为检测的任务,没有去主动地发现(discover)未知意图类别。除此之外,所有的工作都仅能识别包含单个意图的句子,而本文的模型则没有上述这些限制。

不同于之前的工作(通常将意图识别建模成分类任务),本文将开放意图发现的任务建模成序列标注任务。本文提出的模型结构为BiLSTM + Multi-head self-attention + CRF。为了解决跨领域识别的问题,OPINE将提取出来的意图通过一种一致的、领域无关的方式来表示(见下一节问题定义部分)。为了进一步提高模型在低资源情况下的识别性能,作者进一步使用了对抗训练和无监督预训练的方法。

此外,作者认为ATIS和SNIPS两个数据集不足以表达真实场景下的对话意图,因为其中包含的句子模式较为简单、一致,并且每句话都是单个意图。因此作者构建了一个包含25K条数据的真实场景下的数据集,其文本收集自http://www.stackexchange.com(一个类似StackOverflow的问答网站),并采用人工标注意图。

Problem Formulation

如上所述,“Open Intent Discovery”这一任务的目标是识别(发现)文本中所有可行动的(actionable)的意图。作者将其进一步分成两个部分:动作(action):通常是一个表示意愿/任务/活动的动词或动词词组;

对象(object):表示动作作用对象的实体词或实体词组。

例如,在上面的例子“Please make a 10:30 sharp appointment for a haircut”中,“make”是action,“appointment”是object;在“I would like to reserve a seat and also if possible, request a special meal on my flight”中,“reserve”和“request”是actions,“seat”和“special meal”是objects,它们分别来自订座和订餐的意图。这里还可能有一类句子是隐含(而不是显式提及)object的,如“I want to arrive by 8:30”,这类句子也不在本文工作考虑的范围内。

由上,本文将开放意图发现的任务构建成对于3类tag:Action、Object、None的序列标注任务。这里的Action通常是名词或主语后面跟随的一个动词或动词不定式,Object通常由名词或复合名词短语组成。但是,出于几个原因,无法直接使用词性标注或语义解析工具来识别:一是这类工具无法识别句子中哪些是表达意图的部分,哪些是与意图无关的描述部分,因此识别精度较低;二是Action和Object可能间隔很远,甚至会跨越多个句子,导致这类工具较难识别。

Model

本文在模型方面没有太大创新,基本上就是传统的序列标注模型。

输入层

给定token序列

,对每一个token

,用CNN对字符级编码,得到

;在通过word embeddings look-up,得到

。然后,使用highway network将这两个特征融合,得到最终的token表示序列:

其中

表示

的拼接。

Bi-LSTM层

随后融合后的向量输入Bi-LSTM层,得到表示序列

,其中每一个时间步的隐状态都是forward和backward的隐状态拼接的结果。

对抗训练

为了提高模型对输入微小扰动的鲁棒性,作者使用了生成对抗样本的方法,通过生成和原始输入十分接近的输入样本,使得当前模型产生误判。具体而言,通过对原始输入添加一个细微的扰动(噪声),来让模型的损失下降得最多,由此得到这些对抗样本。在得到了对抗样本之后,它们将和正常的输入混合训练,以提高模型对微小扰动的鲁棒性。

本文在embedding层添加对抗噪声。设输入文本

表示为embedding

,通过生成限定范数

内的最差扰动

由于精确计算

较困难,因此这里通过fast gradient方法计算一阶近似,以获得一个给定范数

的最差扰动估计:

此外,还加了一个对抗生成的样本和原样本的语义相似度的评价,只保留cosine相似度高于阈值的对抗样本,以保证生成样本的语义和原句在整体上不会相差太多。

多头自注意力层

在Bi-LSTM层之上,使用了多头自注意力机制,来使得模型获得捕捉长距离依赖的能力。首先输入通过三组映射矩阵(query、key、value)被映射到

的向量空间,这里的

为head个数。随后通过如下公式计算第

个head的注意力分数:

为第

个token经过注意力层之后的输出。

CRF层

CRF层接收

作为输入,计算得到一个ground-truth标注的解码概率作为损失。在预测时,使用维特比算法进行解码。考虑到本问题中的特殊限制(Action和Object应该是成对出现构成意图的,因此模型不能单单预测Action或Object),因此作者这里还采用了一些先验知识对CRF解码结果进行约束,包括:动词不定式的3个token的窗口内需存在第一人称代词;

对于plan to和want to这类带有“动作计划”含义的动词词组,在其后5个token窗口内标注动作意图。

由于在解码时带有这些限制,因此传统的维特比算法计算过程不再适用。作者采用了两种不同的策略解码:beam search,并且对beam中不满足上述约束的序列进行惩罚;

将维特比算法展开成图,其本质是求最短路径,因此可以将其建模成整数规划任务,并将上述约束作为整数规划中的不等式。

从Tag生成意图

CRF将输出包含Action、Object、None三种标记的序列,在这一步中,需要将其中的Action和Object组合成意图。作者尝试了两种方法。

一种较简单的方式是基于空间上的相近程度,将距离最近的Action和Object彼此链接形成意图。这种方法假设动作和作用对象的短语在空间上彼此靠近。然而根据文本不同的措辞方式,这种假设不一定会成立。

另一种方式是训练一个多层感知机,输入为Action和Object的GloVe向量之和、两者之间的距离(经过归一化),经过两个包含ReLU的全连接层,最后映射到维度1,输出单个分数表示两者组合成意图的概率。这个分类器通过margin hinge loss(

)进行训练。

Experiment

数据集构建

作者从stackexchange上收集了75K条样本,将25K条进行标注,选取标注者认为最相关的最多3个意图。作者使用剩余的50K无标注样本进行预训练,通过斯坦福CoreNLP的语义分析工具,选取所有动词及其作用的对象,作为意图预训练。随后在80%的已标注语料上进行微调,并在剩余20%数据上进行测试。数据集统计如下图:

主实验结果

对比的若干baseline和本文提出的方法(从上到下):Cue-based Intent Detector(使用一些指示词,如want to、plan to等)

使用斯坦福依赖标注器

使用语义角色标注工具

本文提出的方法,在CRF层使用beam search

本文提出的方法,在CRF层使用带约束的整数规划方法

指标含义(从左到右):句中Action的准确率、召回率、F1

句中Object的准确率、召回率、F1

联合考虑Action和Object(构成的意图)的准确率、召回率、F1

识别出的Intent(包含Action和Object)的GloVe embedding(所有token取均值)与Ground-truth Intent的GloVe embedding之间的余弦相似度

实验结果显示在Baseline的基础上OPINE提升了将近9%的F1,这表明,OPINE可以成功过滤掉输入话语中存在的所有其他“非意图”背景信息,并且仅关注提取用户意图所需的文本。

跨领域性能

上图中“-td”表示该领域没有被包含在训练集中;“+td”表示该领域包含在训练集中。

将相似意图聚类

考虑到相同的意图可能由不同的表述方式,例如“Make a new haircut appointment for next Saturday.”和“Can you reserve a time slot in the hair salon on Saturday?”,它们提取出来的意图分别应该是“make haircut appointment”和“reserve time hair salon”。鉴于此,作者对attention层导出的表示进行了层级聚类(一开始所有数据点视为单独的类别,然后基于距离不断合并,直到所有类别距离大于阈值),t-SNE可视化如下:

其中不同颜色表示不同的domain。

Case Study

作者将其训练的OPINE模型用于几个不同的数据集:Ubuntu多轮对话数据集,以及ATIS、SNIPS等传统意图检测的数据集,并给出了若干识别样例和分析:

Ubuntu多轮对话数据集:

SNIPS:

在SNIPS上,作者发现使用OPINE识别意图的好处是,可以同时识别出意图对应的槽位(例如歌名、歌手等),不过其准确率并没有定量分析。

对于SNIPS和ATIS数据集,作者在attention层之后加分类器,发现也能取得较高性能,说明attention层提取的特征能够学到一个比较好的表示:

Conclusion

与通过分类检测意图的常规方法相比,本文通过序列标记方法OPINE引入并解决了开放意图发现的新问题。OPINE利用Bi-LSTM和CRF以及自我注意和对抗训练,它可以从用户的话语中提取多种意图类型,其中许多可能在训练过程中未出现。在现实世界的数据集上进行的大量实验表明,OPINE相比基准有了显着的改进。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值