一个Hierarchical Attention神经网络的实现

2023-10-31

最近我突然有了一些富余的整块时间。于是我实现了一些有意思的论文的idea, 其中印象最深的还是《Hierarchical Attention Networks for Document Classification》。我把相关代码放到这里了:
https://github.com/triplemeng/hierarchical-attention-model

综述

今天,基本上所有的NLP方面的应用,如果想取得state-of-art的结果,就必须要经过attention model的加持。比如machine translation, QA(question-answer), NLI(natural language inference), etc, etc…. 但是这里有个问题: 传统上的attention的应用,总是要求我们的task本身同时有源和目标的概念。比如在machine translation里, 我们有源语言和目标语言,在QA里我们有问题和答案,NLI里我们有sentence pairs …… 而Attention常常被定义为目标和源的相关程度。

但是还有很多task不同时具有源和目标的概念。比如document classification, 它只有原文,没有目标语言/文章, 再比如sentiment analysis(也可以看做是最简单的一种document classification),它也只有原文。那么这种情况下attention如何展开呢? 这就需要一个变种的技术,叫intra-attention(或者self-attention), 顾名思义,就是原文自己内部的注意力机制。

intra-attention有不同的做法。比如前一段Google发的那篇《Attention is All You Need》,在machine translation这个任务中,通过把attention机制formularize成Key-Value的形式,很自然的表达出源语言和目标语言各自的intra-attention. 这么做的好处是在句子内部产生清晰的1.语法修饰 2. 语义指代关系 方面的理解,也就是说对句子的结构和意义有了更好的把控。

如下盗图所示:
一种self-attention的结果

如上两图分别代表了原文在两个不同子空间的投影的注意力结果(具体做法见原Google的论文,这里的介绍从略)。我们可以看到清晰的指代关系和修饰关系。文章引入的self-attention机制加上positional embedding的做法,可能是将来的一个发展方向。

方法

这篇论文采取了非常不一样的做法。它引入了context vector用来发现每个词语和每个句子的重要性。

它基于这样的observation:

每个document由多个句子组成,而在决定文章的类型时,每个句子有不同的重要性。有的更相关一些,有的用处不大。比如说在一篇有关动物科学的文章中,某些句子和文章的主题相关性就很高。比如包含类似于“斑马”或者“猎食者”,“伪装”这样词语的句子。我们在建造模型时,最好能够给这样的句子更多的“attention”。 同样的,对于每个句子而言,它所包含的每个词语的重要性也不一样,比如在IMDB的review中, 如like, amazing, terrible这样的词语更能够决定句子的sentiment

所以,在分类任务中,如果我们给模型一篇文章,我们想问模型的问题是:1. 在这篇文章中,哪些句子更重要,能够决定它的分类? 2. 在这篇文章的某个句子中,哪些词语最重要,能够影响句子在文章里的重要性?

那么,如何向模型提出这样的问题呢? 或者说如何让模型理解我们的意图呢? 作者是通过引入context vector做到的。这个context vector 有点天外飞仙的感觉, 之所以给我这样的感觉,是因为:

  1. context vector是人工引入的,它不属于task的一部分。它是随机初始化的。

  2. 它代替了inter-attention中目标语言/句子,能够和task中的原文产生相互作用,计算出原文各个部分的相关程度,也就是我们关心的attention。

  3. 它是jointly learned。 也就是说,它本身,也是学习得来的 !!

具体而言,网络的架构如下:
hierarchical attention网络结构

网络由四个部分组成:word sequence layer, word-attention layer, sentence sequence layer, and sentence-attention layer

如果没有图中的

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

一个Hierarchical Attention神经网络的实现 的相关文章

随机推荐

  • Python报错:from torchvision import _C解决办法

    原因 很有可能是torch装的是cpu 而torchvision装的是gpu版本 解决办法 到pytorch官方网站下载对应版本的torchvision cpu版本
  • python怎么打包_如何将一整个python工程打包

    匿名用户 1级 2016 05 14 回答 1 下载并安装py2exe 可下载最新版本 2 编写安装脚本 比较简单 不过多解释 如下 Screenshot setup py usr bin env python coding utf 8 f
  • 直线拟合的三种方法

    近日考虑直线拟合相关的知识 大概有所了解 所以打算进行一些总结 直线拟合常用的三种方法 一 最小二乘法进行直线拟合 二 梯度下降法进行直线拟合 三 高斯牛顿 列 马算法进行直线拟合 一 使用最多的就是最小二乘法 这里我也对最小二乘法进行了一
  • 有道翻译JS逆向最新版本,包含解密部分

    话不多说 首先抓包 发现提交的POST参数中 有一个值会变的sign参数 一看是32位的长度 就判断是一个MD5的加密 我们要做的就是调试出这个参与MD5加密的字符串 然后搜索关键字sige 找到JS的关键位置 发现是一个v方法 V方法又调
  • 【LeetCode】MySQL:数据库简单题(181)

    181 超过经理收入的员工 1 题目描述 2 具体实现 Write your MySQL query statement below 法一 子查询 执行时间 905 ms select name as Employee from Emplo
  • 排队论mm1和mms

    排队论 分类 mm1模型 介绍 代码 结果截图 mms模型 介绍 代码 结果截图 分类 mm1模型 介绍 代码 clear clc 初始化顾客源 需要改动的地方就只有仿真时间 到达率和服务率 服务率一般很难提升 但是到达率可以减小 比如肯德
  • RPC:时钟轮解决定时任务以及超时检测

    定时任务带来了什么问题 我们来看一下RPC框架是如何处理超时请求的 RPC中 无论是同步调用还是异步调用 调用端内部实行的都是异步 调用端在向服务端发送消息之前会创建一个Future 并存储这个消息标识与这个Future的映射 当服务端收到
  • 计算机网络 ping中ttl,ping命令TTL什么意思 ping值ttl多少算正常

    很多人都在问ping命令TTL是什么意思 ping值ttl多少算正常 为什么ping数据的时候有的TTL 52 也有TTL 112 甚至还有TTL 255不等的数值 针对大家的这个网络提问 下面ITmemo就给大家解答下 让您完全明白这是怎
  • 使用 apifm 插件进行 Flutter 云开发——图形验证码

    知识点回顾 使用 apifm 插件进行 Flutter 云开发 安装篇 功能说明 图形验证码的使用场景很多 很多需要考虑安全的场合下都需要使用图形验证码来屏蔽机器人的自动化 批量操作 功能点 App上显示图形验证码 点击更换验证码图片 输入
  • 【HJ74】参数解析

    题目描述 在命令行输入如下命令 xcopy s c d e 各个参数如下 参数1 命令字xcopy 参数2 字符串 s 参数3 字符串c 参数4 字符串d e 请编写一个参数解析程序 实现将命令行各个参数解析出来 解析规则 1 参数分隔符为
  • U盘“文件或目录损坏且无法读取”错误的修复

    U盘mp3移动硬盘 文件或目录损坏且无法读取 错误的修复 cmd 后回车 输入 chkdsk 移动硬盘所在盘符 R 回车 按提示操作即可 这个方法应该同样适用于U盘 MP3等大容量移动存储设备 附 CHKDSK命令参数 检查磁盘并显示状态报
  • Android开发实例:打电话

    1 首先建立一个android工程Phone 这里不再演示 PhoneActivity java文件如下 package jiao jiao import android app Activity import android conten
  • Qt项目使用NSIS工具打包发布

    1 安装NSIS工具 在将要发布的文件夹中添加程序安装图标 卸载图标及License txt文件 如下图 注意生成图标时候像素选择大点 如256 256 License txt文件内容可自行定义 1 安装NSIS 双击运行nsis setu
  • python发送邮件附件中文名乱码_处理 python3 邮件附件中文名乱码的问题

    最近接手了一个 py 机器人的开发 发现不论传入的附件路径是变量 字符串 先编码后解码的字符串都解决不了名称乱码 打开源码一看 是这个逻辑 def send smtp mail server None port 25 psw None se
  • 数据结构——如何定义与建立

    1 顺序线性表的定义 define maxsize 100 typedef struct int aa maxsize int size Sqlist 2 栈的定义 define STACK INIT SIZE 100typdef stru
  • (转载)计算机英语名词简释

    计算机英语名词简释 一 著名公司及其商标名 Microsoft 有时缩略为MS 是全球最著名的软件商 美国软件巨头微软公司的名字 Microsoft其实是由两个英语单词组成 Micro意为 微小 Soft意为 软的 此处应为 Softwar
  • Vue-Router 配置路由的步骤

    Vue Router是vue官方发布的 与vue高度集成的一款路由管理器 有以下基本步骤 1 npm安装 npm install save Vue Router 2 引用 import VueRouter from Vue Router 3
  • torch.pow()的使用举例

    参考链接 torch pow 功能 实现张量和标量之间逐元素求指数操作 或者在可广播的张量之间逐元素求指数操作 代码实验展示 Microsoft Windows 版本 10 0 18363 1256 c 2019 Microsoft Cor
  • 单片机错误笔记

    记录下使用单片机过程中的一些错误 便于以后查询 单片机型号 STC15F2K60S2 晶振 18 432 报错代码 WARNING L1 UNRESOLVED EXTERNAL SYMBOL SYMBOL REC DAT1 MODULE O
  • 一个Hierarchical Attention神经网络的实现

    最近我突然有了一些富余的整块时间 于是我实现了一些有意思的论文的idea 其中印象最深的还是 Hierarchical Attention Networks for Document Classification 我把相关代码放到这里了 h