基于Siamese网络的zero-shot意图分类

原文地址:Zero-Shot Intent Classification with Siamese Networks

通过零样本意图分类有效定位域外意图

2021 年 9 月 24 日

意图识别是面向目标对话系统的一项重要任务。意图识别(有时也称为意图检测)是使用标签对每个用户话语进行分类的任务,该标签来自预定义的标签集。

分类器在标记数据上进行训练,并学习区分哪个话语属于哪个类别。如果一个看起来不像任何训练话语的话语来到分类器,有时结果会很尴尬。这就是为什么我们也会对“域外”话语进行分类,这些话语根本不属于域。

img

意图分类器对话语进行分类。在这里,示例领域是机票预订和“嘿,兄弟,你是机器人吗?”是一个域外的话语。作者图片

问题是用户和我们开发人员生活在不同的语言中。开发人员希望留在语义丛林中的安全农场(所谓的领域),但用户并不十分了解分类器或聊天机器人NLU是如何工作的(他们也不必知道)。你不能指望用户保持在正确的语义领域,相反,你应该赋予你的聊天机器人处理良好话语的技能。

img

你的安全语义农场在口语的野性。你永远不知道从野外来的是什么!作者图片

在这篇文章中,我们将讨论如何通过检测哪些话语属于域,哪些话语不在域内来保持域的完整性,Chris是我们的司机语音助手。首先,我将介绍Chris域和话语,然后我们将讨论什么zero-shot学习文本分类与Siamese网络。

Chris Domain and Data

Chris是司机的语音助手。我们的Chris是一个驾驶助手,由德国自动实验室制造。Chris可以发送/阅读短信,WhatsApp消息,打电话给电话联系人,播放音乐,导航,响应天气查询和聊天。

img

img

我们的 Chris,在左边。Chris和他的能力,在右边。图片来自德国汽车实验室网站。

Chris是一个以任务为导向的会话代理,因此用户的话语通常简洁而切中要害。这些是典型的用户话语:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
play music
some music please
stop the music
send a message
send a message to Tess
send a whatsapp
read my messages
do I have any new messages
display the latest message
start the navigation
show navigation
show the map
stop the navigation
nearest gas station
find a parking spot
read it
no cancel
cancel
yes
next
no next
tell me the time
how is the weather today

意图名称由子域名和动作名称组成。以下是与上述话语相对应的一些意图名称:

1
2
3
4
5
6
7
8
9
10
11
music.play
music.pause
messages.write
messages.read
navigation.start
navigation.stop
universals.accept
universals.reject
universals.next
misc.time
misc.weather

域外话语呢?下面是一些例子:

1
2
3
4
5
6
7
8
9
10
11
hey siri
launch siri
wake up siri
open my instagram
share my video on instagram
delete my facebook account
play my audibooks
set an alarm
show alarms
please delete all alarms
open the doors

这是完全正常的用户要求一些功能,你的聊天机器人根本没有。例如,打开车门根本不在克里斯的技能范围内。尽管UX团队在每个包装中都包含了关于Chris技能的指导方针,但用户可能会跳过它..这就是为什么您的聊天机器人NLU应该始终准备好处理广泛的域外话语,用户要求的是他们可以想象到的聊天机器人可以实现的能力,而不是用户手册中写的那些。

简短的话语乍一看可能很“容易”,但也有一些挑战。语音识别错误可能会给人带来困难,特别是在短的话语中,因为语义上至关重要的单词可能会从话语中丢失(例如“play music”中的“play”)。此外,语音引擎必须在正确的时间开始倾听,否则它可能会错过一个单词,短的话语,如“yes”,“no”,这对解决上下文至关重要。从WER的角度来看,仅仅缺少3个字母并不是一个严重的ASR错误,但如果您的代理多次要求用户批准,则可能会给用户带来挫败感。所有的语音机器人都有声学和语义方面的挑战,永远不要低估使用语音的挑战。

什么是zero-shot文本分类?

零短文本分类是在一组类标签上训练分类器,并用分类器在训练集中没有看到的类标签来测试分类器的任务。NLP最近的工作集中在更广泛的背景下的zero-shot学习,zero-shot学习NLP现在意味着训练一个模型来完成它没有明确训练的任务。GPT-3是一个zero-shot学习者,吸引了相当多的关注。

在zero-shot分类中,我们用一些视觉线索或类名向分类器描述一个看不见的类。对于zero-shot文本分类,通常使用意图名称来描述意图的语义。当我第一次开始做Chris NLU时,数据是用于“常规”意图分类的。然后我开始尝试,并找到了我们的类命名方案**域。动作(音乐)。玩,导航。开始等等)确实非常适合zero-shot学习。

将标签和话语嵌入到同一空间

zero-shot文本分类的常用方法是将意图名称和话语嵌入到同一空间中。这种zero-shot算法可以像我们人类一样,通过语义组来学习意图名称和话语之间的语义关系。这根本不是一个新想法,研究人员使用单词向量来表示固定维度的文本和意图名称(例如在Veeranna at all.2016)。通过Transformers的发明,密集表示经历了一场革命,现在我们有了更多高质量的句子和单词Embeddings。

在我们的研究中,我们首先使用平均池词向量来表示话语,然后使用BERT对我们的话语进行编码来生成话语向量。首先让我们看看当我们使用词向量时意图名称是如何与话语结合在一起的。我们使用了100维手套向量。我们通过平均一个话语的词向量来生成句子Embedding。为了得到标签的Embedding(例如music.play),我们平均了域(music)和动作(play)的Embeddings。在为所有话语生成Embedding之后,我们使用t-SNE将数据集转换为二维(出于可视化目的)。下面的散点图显示了所有数据集的话语和意图名称,具有相同意图的话语用相同的颜色表示:

img

Chris的话语,每种颜色都代表一种意图。

这就是话语和意图名称的排列方式:

img

Embedding意图名称和话语到同一空间

如果我们放大一点,我们会看到意图名称和相应的话语确实非常一致:

img

放大到上面的视觉效果

数据集的话语创建了一个相当漂亮的散点图,没有太多的异常值,相同的意图的话语与意图名称组合在一起。

如果我们想用BERT嵌入话语和意图名称呢?这对话语很有效,但意图名称不是真实的句子和简短的表达。BERT是针对完整句子进行训练的,对于像我们的意图名称这样的简短表达可能不太有效。在这种情况下,我们可以通过BERT为话语创建768维Embeddings,并通过词向量为意图名称创建100维Embeddings。为了将它们嵌入到相同的空间中,我们需要计算一个投影矩阵φ,将768个模糊的话语向量投影到100维意图向量上。由于我们有标注的数据,我们可以通过回归来学习投影矩阵。(尽管包含正则化以防止过拟合很重要)。然后我们有一个类似于上面的视觉对齐。

用于zero-shot文本分类的Siamese网络

上面的探索性数据分析告诉我们,意图名称和话语之间的语义相似性是非常明显和可学习的。然后我们可以要求Siamese神经网络学习意图名称和话语之间的相似性。

传统的意图分类器输入一个话语并生成一个类标签。通常我们用LSTM或BERT对话语进行编码,然后将编码后的话语输入到Dense层并得到一个类标签:

img

传统的意图分类器。by作者

我们的zero-shot意图分类器会学习标签和话语在语义上是否相似。我们使用了Siamese网络架构,这对于计算语义相似度非常有用。我们的Siamese网络输入一个意图名称和一个话语;输入相关或不相关的输出。

架构与我在我之前的SiameseNN文章中描述的相同。该体系结构包括

  • LSTM/BERT层对话语和标签进行编码
  • 然后是距离层,计算话语和标签之间的语义距离
  • 最后是一个Dense层,将距离向量压缩为二进制值

该体系结构仍然是一个文本分类器,但此时输入数为2,输出向量维数仅为1。输出为二进制,0表示标签与话语不相关;1表示该话语属于该标签的类。

img

Siamesezero-shot意图分类器。作者图片

我们可以向Siamese分类器询问任何我们想要的标签(即使分类器以前从未见过这个标签),只要我们能为标签提供一个良好的Embedding。这对于域外的话语来说是很好的,因为即使你没有任何标记好的类数据或只有几个例子,Siamese zero-shot分类器仍然可以决定一个话语是否与Chris域相关或与域不相关。

Siamese网络用于语义相似已经有很长一段时间了,但是玩一些技巧可以让我们毫不费力地获得zero-shot意图预测模型。有时候,这个想法一直就在你面前,但你必须从不同的角度去看待它。

在本文中,我们继承了一种全新的方法来解决“传统”的意图分类问题。首先,我们对Chris的话语进行了语义分组。然后,我们刷新了关于Siamese网络的知识。最后,我们看到了如何使用Siamese网络进行zero-shot分类。

我希望所有的读者都喜欢我们的Chris的能力和数据,并希望在更多的Chris文章中见到你。在那之前,请保持关注和健康❤️

参考文献

  • Language Models are Few-Shot Learners, https://arxiv.org/abs/2005.14165
  • Are Pretrained Transformers Robust in Intent Classification?
    A Missing Ingredient in Evaluation of Out-of-Scope Intent Detection https://arxiv.org/pdf/2106.04564.pdf
  • Detecting Out-Of-Domain Utterances Addressed to a Virtual Personal Assistant https://www.microsoft.com/en-us/research/wp-content/uploads/2014/09/IS14-Orphan2.pdf
  • Using Semantic Similarity for Multi-Label Zero-Shot
    Classification of Text Documents , https://www.esann.org/sites/default/files/proceedings/legacy/es2016-174.pdf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/500007.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

指针的传递使用场景

C语言函数调用时为值传递,实参赋值给形参,形参值改变不会影响实参(原理:两个参数地址不同),若要函数改变实参值,应当传递实参的地址,参考以下实例。 代码展示: #includ…

MySQL-MHA搭建、故障测试

一、架构说明 MHA(Master High Availability)是一个用于 MySQL 主从复制管理和自动故障转移的开源工具集。MHA 的主要目的是提供 MySQL 环境的高可用性和自动故障转移功能,确保在主库发生故障时能够快速切换到备库,降低业务中断时…

在Windows中安装PyTorch

文章目录 1. 创建虚拟环境2. 检查显卡版本和CUDA3. 下载链接4. 下载5. 等待6. 检测 1. 创建虚拟环境 具体查看我之前写的 《在Windows中利用Python的venv和virtualenv创建虚拟环境》 2. 检查显卡版本和CUDA 这种情况是需要电脑上有单独的英伟达的显卡、或者英伟达的显卡和集显…

「MySQL」增删查改

在操作数据库中的表时,需要先使用该数据库: use database;新增 创建表 先用 use 指定一个数据库,然后使用 create 新增一个表 比如建立一个学生表 mysql> use goods; mysql> create table student(-> name varchar(4),-> age int,-> …

2024-02-29(Flink)

1.Flink原理(角色分工) 2.Flink执行流程 on yarn版: 3.相关概念 1)DataFlow:Flink程序在执行的时候会被映射成一个数据流模型; 2)Operator:数据流模型中的每一个操作被称作Operat…

从0到1使用C++实现一个模拟器-1-【实现最简CPU】

文章目录 uint64_tstdstd::arrayCPU和CU类构造函数size_tstatic_caststd::ifstreamriscv64-unknown-elf-objcopy -O binary add-addi add-addi.binriscv64-unknown-elf-gcc -Wl,-Ttext0x0 -nostdlib -o add-addi add-addi.s-wlstd::hex std::setw() std::setfill()各自的用法he…

【Leetcode每日一刷】动态规划算法: 62. 不同路径、63. 不同路径 II

博主简介:努力学习和进步中的的22级计科生博主主页: Yaoyao2024每日一句: “ 路虽远,行则将至。事虽难,做则可成。” 前言 前言:动规五部曲 以下是《代码随想录》作者总结的动规五部曲 确定dp数组(dp tab…

iSlide插件2024免费版(包含52 个PPT设计辅助功能,9 大在线资源库,以及超 50 万 专业)

一、功能介绍 iSlide是一款专为PowerPoint设计的插件,它集合了众多设计与效率提升的功能,帮助用户更快速、更美观地制作演示文稿。 主题设计:提供多种设计主题,用户只需一键应用,即可为幻灯片赋予统一的视觉风格。智…

islide2024免费版PPT插件下载

一、功能概览 iSlide PPT插件是一款专为PowerPoint用户设计的辅助工具,其功能全面且实用,主要包括但不限于以下几点: 设计元素库:提供丰富的设计元素,如主题、布局、图标、配色等,用户可以直接拖拽使用&a…

Unity(第十八部)物理力学,碰撞,触发、关节和材质

1、重力 刚体组件 英文中文描述RigidBody刚体组件physics->rigidbody ,刚体组件使一个物体有了质量,重力等。,use gravity 勾选后,物体才会受到重力,会自动下落,取消勾选就不会。,&#xf…

Android 性能优化--APK加固(1)混淆

文章目录 为什么要开启混淆如何开启代码混淆如何开启资源压缩代码混淆配置代码混淆后,Crash 问题定位结尾 本文首发地址:https://h89.cn/archives/211.html 最新更新地址:https://gitee.com/chenjim/chenjimblog 为什么要开启混淆 先上一个 …

数据结构之树结构(下)

各种各样的大树 平衡二叉树 (AVL树) 普通二叉树存在的问题 左子树全部为空,从形式上看,更像一个单链表 插入速度没有影响 查询速度明显降低(因为需要依次比较),不能发挥BST的优势,因为每次还需要比较左子…