HAN论文笔记

Hierarchical Attention Network

《Hierarchical Attention Network》一文提出了一种层次化的注意力网络。在Seq2Seq里的注意力机制,我们其实做的是word-level的attention,而这篇文章的亮点在于它提出双层attention,即word-level和token-level。

Model Structure

整个HAN其实主要包含三大部分:

  • Word Encoder
  • Word-level Attention
  • Sentence-level Attention

模型结构如下:

在这里插入图片描述

我们分别来解析

Word Encoder

HAN模型的Word Encoder采用的是双向GRU(当然我觉得用LSTM问题也不大)。先来回顾一下GRU的基本原理,GRU是RNN的带有门控机制的变体之一,GRU在将原先LSTM的三个门浓缩为两个门:update gate z t z_t zt 和 reset gate r t r_t rt
z t   =   σ ( W z x t + U z h t + b z ) r t   =   σ ( W r x t + U r h t + b r ) z_t\ =\ \sigma(W_zx_t+U_zh_t+b_z)\\ r_t\ =\ \sigma(W_rx_t+U_rh_t+b_r) zt = σ(Wzxt+Uzht+bz)rt = σ(Wrxt+Urht+br)
GRU的流程如下:

  1. 获得当前输入的信息: h t ~   =   t a n h ( W r x t + r t ⨀ ( U r h t − 1 ) + b r ) \widetilde {h_t}\ =\ tanh(W_rx_t+r_t\bigodot (U_rh_{t-1})+b_r) ht  = tanh(Wrxt+rt(Urht1)+br),简单说就是上一层的隐状态和重置门做一个element wise的相乘,结果再和 t t t时刻输入信息拼接,最后用 t a n h tanh tanh激活。
  2. 获得当前时刻的隐状态: h t   =   ( 1 − z t ) ⨀ h t − 1 + z t ⨀ h t ~ h_t\ =\ (1-z_t) \bigodot h_{t-1}+z_t\bigodot \widetilde {h_t} ht = (1zt)ht1+ztht ,这里更新门控同时实现了遗忘和记忆两个工作

由于是双向的GRU,因此我们会获得forward、backward两个方向的隐状态 h i t f h^{f}_{it} hitf h i t b h^{b}_{it} hitb,我们将这两个concatenate到一起作为 t t t时刻的隐状态
h i t   =   [ h i t f ,   h i t b ] h_{it}\ =\ [h^{f}_{it},\ h^{b}_{it}] hit = [hitf, hitb]
这里 i i i表示的是第 i i i个句子。

Word-level Attention

Word Encoding完成后,接下来首先是Word-level Attention。这一部分与我们在Seq2Seq里的Attention是一样的
u i t   =   t a n h ( W w h i t + b w ) α i t   =   e x p ( u i t T u w ) ∑ t e x p ( u i t T u w ) s i   =   ∑ t α i t h i t u_{it}\ =\ tanh(W_wh_{it}+b_w)\\ \alpha_{it}\ =\ \frac{exp(u^{T}_{it} u_w)}{\sum_{t}exp(u^T_{it}u_w)}\\ s_i\ =\ \sum_{t}\alpha_{it}h_{it} uit = tanh(Wwhit+bw)αit = texp(uitTuw)exp(uitTuw)si = tαithit
最后我们得到的 s i s_i si就作为下一层Attention的每个句子向量表征

Sentence-level Attention

Word-level的Attention完成后,我们获得了每个句子的特征向量 s i s_i si,接下来的工作就是本文的创新点,对句子再做一次Attention,流程其实还是一样的:
u i   =   t a n h ( W s h i + b s ) α i   =   e x p ( u i T u s ) ∑ i e x p ( u i T u s ) v   =   ∑ i α i h i u_{i}\ =\ tanh(W_sh_{i}+b_s)\\ \alpha_{i}\ =\ \frac{exp(u^{T}_{i} u_s)}{\sum_{i}exp(u^T_{i}u_s)}\\ v\ =\ \sum_{i}\alpha_{i}h_{i} ui = tanh(Wshi+bs)αi = iexp(uiTus)exp(uiTus)v = iαihi
最终我们得到的向量 v v v就是整个document的向量表示,我们再用一个分类器进行分类即可

Experiment

本文作者在六个大型数据集上进行了实验,相较于一些baseline(n-gram、CNN、RNN等),HAN在各个数据集上均取得了令人满意的效果

在这里插入图片描述

Analysis

Context dependent attention weights

作者提到HAN模型很好的提取到了文本中的上下文关系。比如在电影评论中,出现good不一定就是正面评论,因为可能是not good或者只是某一方面good。因此作者绘制了good和bad这两个词的attention weight的distribution

在这里插入图片描述

在这里插入图片描述

Visualization of attention

作者还将attention做了可视化用于证明HAN模型较好的提取到了一些比较重要的信息

在这里插入图片描述

Figure 5是sentiment analysis任务,可以看到像terrible、delicious、amazing这种情感比较强烈的词语,HAN都很好的捕捉到了并且attention weight很高。Figure 6展示了对于topic prediction任务,HAN也能很好的捕捉到相关信息,比如zebras、web、browser等等。

Reflection

这篇文章的创新性在于对句子的attention,其实模型的结构并不复杂,attention机制也是最原始的attention机制,但作为一篇5年前的SOTA,这篇文章给了我一些关于文本处理的启发。

ention,其实模型的结构并不复杂,attention机制也是最原始的attention机制,但作为一篇5年前的SOTA,这篇文章给了我一些关于文本处理的启发。

但是有一点质疑在于,文中对于句子向量的attention是否是多余的?attention的目的是计算某种重要性,那么句子的重要性是否是由其中的单词所决定的?可以考虑只用word-level attention与HAN做一个对比,比较一下效果差异。

PyTorch HAN,全称为PyTorch Hierarchical Attention Network(PyTorch层次化注意力网络),是基于深度学习框架PyTorch开发的一种层次化注意力模型。 HAN模型在处理文本分类问题时,能够有效地考虑文本的层次结构特点。在语义理解任务中,通常需要考虑文本的段落、句子和单词层次的信息。HAN模型通过使用两层的注意力机制,能够在不同层次上对文本进行建模并自动学习到不同层次的重要信息。 HAN模型的结构主要分为两个层次:文档层次和句子层次。在文档层次中,通过使用GRU(门控循环单元)或LSTM(长短时记忆网络)对文档进行编码。然后,通过注意力机制对不同句子的重要程度进行学习,将句子向量进行加权平均得到文档向量。在句子层次中,再次使用GRU或LSTM对每个句子进行编码,并通过注意力机制学习句子中不同单词的重要程度得到句子向量。 HAN模型的注意力机制能够自动学习到不同层次的重要信息,并将其融合到向量表示中。通过考虑文本的层次结构,模型可以更好地理解文本中的内容和语义。与传统的词袋模型或循环神经网络相比,HAN模型通过学习到不同层次的重要信息,能够提取更加丰富和准确的特征。 总之,PyTorch HAN是一个强大的文本分类模型,通过层次化的注意力机制,在处理文本数据时能够更好地建模和学习不同层次的重要信息,进而提升模型的性能和准确度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值