一个Hierarchical Attention神经网络的实现

最近我突然有了一些富余的整块时间。于是我实现了一些有意思的论文的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

如果没有图中的

  • 7
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 22
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值