Re 40:读论文 GL-GIN: Fast and Accurate Non-Autoregressive Model for Joint Multiple Intent Detection and

2023-05-16

诸神缄默不语-个人CSDN博文目录

论文名称:GL-GIN: Fast and Accurate Non-Autoregressive Model for Joint Multiple Intent Detection and Slot Filling
论文下载地址:https://aclanthology.org/2021.acl-long.15或https://arxiv.org/abs/2106.01925
论文官方GitHub项目地址:yizhen20133868/GL-GIN

本文是2021年ACL论文,关注意图识别(intent detection)和槽填充(slot filling)任务,这两个任务本来就常常被联合建模,以利用其间的关系。
场景是multi-intent SLU(每个句子需要识别多个意图),以前的工作用的都是AR范式,缺点是推理慢、信息泄露(……其实我不是很懂为什么会泄露,从左到右还泄露个啥?),本文是第一篇用NAR范式做这个任务的工作。

文章目录

  • 1. 背景介绍
  • 2. Global-Locally Graph-Interaction Network (GLGIN)
    • 2.1 Self-attentive Encoder
    • 2.2 Token-Level Intent Detection Decoder
    • 2.3 Slot Filling Decoder
      • 2.3.1 Slot-aware LSTM
      • 2.3.2 Global-locally Graph Interaction Layer
      • 2.3.3 Slot Prediction
    • 2.4 Joint Training
  • 3. 实验
    • 3.1 数据集
    • 3.2 baseline
    • 3.3 实验设置
    • 3.4 主实验结果
    • 3.5 模型分析
      • 3.5.1 速度
      • 3.5.2 ablation study
      • 3.5.3 可视化
      • 3.5.4 定性分析 - 案例分析
      • 3.5.5 预训练模型的功效
  • 4. 代码复现

1. 背景介绍

  1. AR和NAR的区别:
    在这里插入图片描述
  2. multiple intent detection:对每句话识别出多个意图(多任务文本分类的感觉)
  3. 槽填充slot filling:序列标注任务。比如需要知道用户要在什么时间订房,就在输入句中标注时间

在这里插入图片描述

2. Global-Locally Graph-Interaction Network (GLGIN)

联合训练,同时用NAR范式生成目标和槽
逻辑上是先表征输入文本,然后预测intent,然后再用intent预测的信息来预测slot,整个过程是耦合的
在这里插入图片描述

(图右下角)local slot-aware graph layer:槽隐藏层互联,建模槽依赖关系,缓解NAR造成的uncoordinated slot problem1

(图右上角)global intent-slot interaction layer:sentence-level intent-slot interaction
global graph由all tokens with multiple intents构造,并行生成槽序列,加速解码过程
(以前的工作仅考虑 token-level intent-slot interaction)

加上预训练语言模型RoBerta2后效果更好

参考了:A Stack-Propagation Framework with Token-Level Intent Detection for Spoken Language Understanding

2.1 Self-attentive Encoder

BiLSTM + self-attention
BiLSTM的输出和self-attention的输出进行concat

2.2 Token-Level Intent Detection Decoder

对每个token预测多个意图,然后在所有token上投票,得到最终的结果

  1. 过BiLSTM(E是输入表征)
    在这里插入图片描述
  2. 预测token对应的意图(2层MLP):
    在这里插入图片描述
  3. 得到最终意图:
    在这里插入图片描述
    直接投票(超过一半token支持该意图)

2.3 Slot Filling Decoder

2.3.1 Slot-aware LSTM

在这里插入图片描述

2.3.2 Global-locally Graph Interaction Layer

  1. Vanilla Graph Attention Network
    masked self-attention layers
  2. Local Slot-aware Graph Interaction Layer
    构图:节点是每一个word slot(用对应slot的隐藏层表征初始化),边是slot连接一个窗口内的所有其他slot
    Information Aggregation:
    在这里插入图片描述
  3. Global Slot-Intent Graph Interaction Layer
    可以实现并行输出output slot sequences(说是这么个意思,但是我记得transformer和GNN等价来着3,所以跟直接用transformer是不是差不多啊……)
    构图:
    • 节点
      意图和slot token(上一层得到的)
      (这一部分的叙述我总感觉有点问题,但是总之:)
      在这里插入图片描述
      • intent-slot connection:slot连接所有被预测的intent
      • slot-slot connection:以指定window size连接相邻slot(slot依赖和incorporate the bidirectional contextual information)
      • intent-intent connection:全连接
        参考:4
  4. Information Aggregation:大概来说就是分别把slot和intent的信息聚合后求和
    在这里插入图片描述

2.3.3 Slot Prediction

用slot的表征过MLP:
在这里插入图片描述

2.4 Joint Training

参考Slot-Gated Modeling for Joint Slot Filling and Intent Prediction
2个任务损失函数的加权求和

在这里插入图片描述

3. 实验

3.1 数据集

数据集都下载自4的官方项目:https://github.com/LooperXX/AGIF

MixSNIPS5
Mix-ATIS6

GL-GIN处理后的数据样本格式都是:

list O
california B-state_name
airports O
, O
list O
la B-city_name
and O
how O
many O
canadian B-airline_name
airlines I-airline_name
international I-airline_name
flights O
use O
aircraft O
320 B-aircraft_code
atis_airport#atis_city#atis_quantity

3.2 baseline

略。

3.3 实验设置

略。

3.4 主实验结果

对具体指标的介绍略。
在这里插入图片描述

3.5 模型分析

3.5.1 速度

在这里插入图片描述

3.5.2 ablation study

在这里插入图片描述

3.5.3 可视化

Global intent-slot GAL的注意力值
在这里插入图片描述

3.5.4 定性分析 - 案例分析

在这里插入图片描述

3.5.5 预训练模型的功效

在这里插入图片描述

用Roberta2替换Self-attentive Encoder,进行微调
consider the first subword label if a word is broken into multiple subwords(参考7

4. 代码复现

我是直接用之前配好的一个有PyTorch的环境,然后单独安了所需的包:
pip install fitlog
pip install ordered-set

直接使用GitHub的README文件给出的执行代码即可:
MixATIS数据集的运行命令(跑了5个小时):python train.py -g -bs=16 -dd=./data/MixATIS_clean -sd=./save/MixATIS_clean -nh=4 -wed=128 -ied=128 -ehd=256 -sdhd=128 -dghd=64 -nldg=2 -sgw=2 -ne=200
运行结果:slot f1: 0.8737, intent f1: 0.785428378059492, intent acc: 0.7729468599033816, exact acc: 0.4190821256038647

MixSNIPS数据集的运行命令:python train.py -g -bs=16 -dd=./data/MixSNIPS_clean -sd=./save/MixSNIPS_clean -nh=8 -wed=64 -ied=128 -ehd=256 -sdhd=128 -dghd=128 -nldg=2 -sgw=1 -ne=100
运行结果:
在这里插入图片描述

这个代码写得非常清晰,我辈楷模!

  1. 我看作者是哈工大的,为什么要用复旦开发的贼难用的fitlog,小编也很好奇!
    我写的fitlog笔记博文:fitlog使用教程(持续更新ing…)
  2. train.py:代码入口
  3. config.py:超参设置(也可以通过命令行传参)
  4. loader.py
    1. DatasetManager
      1. __init__:词/slot/intent分别建立Alphabet、raw text、序列化text
      2. quick_build:把3个数据集文件里的数据添加到__init__中构建的三个实例中,新建保存路径,保存Alphabet到本地
      3. add_file:把单个数据集文件里的数据添加到__init__中构建的三个实例中
      4. __read_file:读取单个文件里的数据(返回texts, slots, intents的原始文本)
      5. show_summary:打印数据集和超参
    2. Alphabet:感觉可以理解成泛词典这种感觉
      1. __init__
      2. add_instance:把token加进对象(#是考虑到类似atis_capacity#atis_flight
      3. save_content:保存对象到本地
  5. module.py
    1. ModelManager:整个模型
      在这里插入图片描述
      1. __intent_decoder:2层MLP
      2. __intent_embedding:这个是构图时候用的intent表征
      3. generate_global_adj_gat
      4. generate_slot_adj_gat
    2. Encoder:LSTMEncoder和SelfAttention的输出concat起来
    3. LSTMEncoder:Dropout→单层Bi-LSTM
    4. SelfAttention:Dropout→QKVAttention
    5. QKVAttention:QKV分别进行线性转换,然后Q×K^T,过softmax,开方(多头),×V,过dropout
    6. LSTMDecoder:slot过GAT后和intent合并,再过一次GAT,过2层MLP,取出slot表征
      1. __slot_graph:GAT
      2. __global_graph:GAT
    7. GAT:这个是作者手动实现的
    8. GraphAttentionLayer

别的我就不写了。


  1. 可参考我写的另一篇博文:BIO序列标注中标签不协调的问题及其解决方案 ↩︎

  2. RoBERTa: A Robustly Optimized BERT Pretraining Approach ↩︎ ↩︎

  3. 可以参考一篇博文。
    中文版:原来Transformer就是一种图神经网络,这个概念你清楚吗?
    英文原文:Transformers are Graph Neural Networks | NTU Graph Deep Learning Lab ↩︎

  4. AGIF: An Adaptive Graph-Interactive Framework for Joint Multiple Intent Detection and Slot Filling ↩︎ ↩︎

  5. Snips Voice Platform: an embedded Spoken Language Understanding system for private-by-design voice interfaces ↩︎

  6. The ATIS Spoken Language Systems Pilot Corpus ↩︎

  7. A Stack-Propagation Framework with Token-Level Intent Detection for Spoken Language Understanding ↩︎

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Re 40:读论文 GL-GIN: Fast and Accurate Non-Autoregressive Model for Joint Multiple Intent Detection and 的相关文章

  • ORB-SLAM3: An Accurate Open-Source Library for Visual, Visual-Inertial and Multi-Map SLAM

    摘要 ORB SLAM3是第一个能够让单目 立体相机和RGB D相机与针孔和鱼眼镜头模型解耦进行视觉 视觉 43 惯性和多地图SLAM的系统 第一个主要的创新是一个基于特征的紧密集成视觉 43 惯性SLAM系统 xff0c 它完全依赖于最大
  • jsoninclude.include.non_null 不起作用问题

    在开发过程中 xff0c 遇到在属性上加jsoninclude include non null注解 xff0c 有些属性起了作用 xff0c 有些却没有起作用 xff0c 下面使用代码简要说明一下 xff1a 64 Data public
  • PR and MR

    GitHub 的 Pull Request 是指什么意思 xff1f 作者 xff1a 知乎用户 链接 xff1a https www zhihu com question 21682976 answer 79489643 来源 xff1a
  • 使用D435i+Avia跑Fast-LIVO

    前言 最近Fast LIVO开源了 xff0c 之前看它的论文的时候发现效果很优秀 xff0c 于是用实验室现有的设备尝试一下 这里主要记录一下使用不带外触发功能的D435i 43 Avia跑Fast LIVO的过程 xff0c 为了适配代
  • vmware-workstation-and-device-credential-guard-are-not-compatible

    1 off hyper v feature 2 bcdedit set hypervisorlaunchtype off
  • warning: control reaches end of non-void function

    用gcc编译一个程序的时候出现这样的警告 xff1a warning control reaches end of non void function 它的意思是 xff1a 控制到达非void函数的结尾 就是说你的一些本应带有返回值的函数
  • SFTP get数据提示错误:cannot download non-regular file

    原因 xff1a 这是由于sftp基本客户端不允许进行递归下载 xff0c 或者是对一个文件夹下载 解决方案 xff1a 需要进去目录下载一个具体的文件 可以看看这个报错是否由于自己讲一个文件夹当成了自己需要下载的文件进行了下载
  • ROS-TCP-Connector and ROS-TCP-Endpoint

    Unity官方提供了和ROS交互的接口 xff1a ROS TCP Connector and ROS TCP Endpoint 有了这两个Unity就能够更好的和真实机器人做交互 两个接口的实现基于ROS ros bridge xff0c
  • 【VINS论文翻译】VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator

    回到目录 写在前面 港科大的VINS Mono作为目前state of the art的开源VIO项目 xff0c 是研究视觉与IMU紧耦合的必读算法 xff0c 网上的论文解读与代码实现也非常丰富 xff08 感谢 xff01 xff09
  • go集成gin处理error

    1 gin的使用 gin在go开发web的占比是挺大的 很好用的web框架 xff0c 简单快速高效 但是呢 xff0c 在使用gin的过程中 xff0c 如何去统一去处理error和数据返回给客户端呢 xff1f 原始的做法如下 xff1
  • 【VINS论文翻译】VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator

    回到目录 写在前面 港科大的VINS Mono作为目前state of the art的开源VIO项目 xff0c 是研究视觉与IMU紧耦合的必读算法 xff0c 网上的论文解读与代码实现也非常丰富 xff08 感谢 xff01 xff09
  • Golang

    欢迎关注 全栈工程师修炼指南 公众号 点击 下方卡片 即可关注我哟 设为 星标 每天带你 基础入门 到 进阶实践 再到 放弃学习 专注 企业运维实践 网络安全 系统运维 应用开发 物联网实战 全栈文章 等知识分享 花开堪折直须折 莫待无花空
  • GoLang之使用uber-go/dig进行依赖注入

    文章目录 GoLang之使用uber go dig斤进行依赖注入 1 依赖输注入介绍 2 main函数反面例子 3 下载DI依赖 4 main函数使用DI优化 5 注意点 GoLang之使用uber go dig斤进行依赖注入 注 本文是基
  • gin 十. gin-contrib之secure 支持https与安全设置

    目录 一 实现https 二 防止XSS CSRF 一 实现https gin默认是http接口 前面也了解到gin中存在一个子包 gin contrib secure 内部提供了一些安全相关的中间件 例如HTTPS重定向 内容安全策略 C
  • go 进阶 gin底层原理相关: 四. gin中间件底层原理

    目录 一 gin 中间件基础 二 中间件初始化流程 1 初始化中间件保存到RouterGroup的HandlersChain数组中 HandlersChain是什么 2 整合中间件函数与业务相关的mainHandler构建前缀树 三 中间件
  • go语言有哪些web框架

    前言 由于工作需要 这些年来也接触了不少的开发框架 Golang的开发框架比较多 不过基本都是Web 框架 为主 这里稍微打了个引号 因为大部分 框架 从设计和功能定位上来讲 充其量都只能算是一个组件 需要项目使用的话得自己四处再去找找其他
  • Gin框架结合gorm使用

    Gin框架结合Gorm使用 目录 Gin框架结合Gorm使用 前言 一 介绍 二 使用步骤 1 创建项目 2 开始main go 3 router的初始化 4 controller的初始化 5 services的初始化 6 models的初
  • golang web开发

    目录 文章目录 前言 一 golang web是什么 二 搭建流程 1 模块划分 2 详细开发步骤 总结 前言 例如 习惯了java springboot 开发方式 比较疑惑golang web开发的流程和模块化的区分 就golang we
  • gin 三.请求数据的映射

    数据解析绑定 基础解释 ShouldBindWith 请求数据映射示例 ShouldBindHeader 将请求头绑定到一个结构体或接口示例 MustBindWith 方式 基础解释 解释 例如后端获取调用方参数 通常会使用一个结构体 或一
  • GoLong的学习之路,进阶,Viper(yaml等配置文件的管理)

    本来有今天是继续接着上一章写微服务的 但是这几天有朋友说 再写Web框架的时候 遇到一个问题 就是很多的中间件 redis 微信 mysql mq 的配置信息写的太杂了 很不好管理 希望我能写一篇有管理配置文件的 所以这篇就放到今天写吧 微

随机推荐