最近在研究Attention机制在自然语言处理中的应用,查找了一些文献。
文献:Hierarchical Attention Networks for Document Classification
GitHub实现代码
GitHub实现代码
参考博客:Text Classification, Part 3 - Hierarchical attention network
开始正题:
文章主要的两个贡献:
- 第一: 利用文档原有的层次结构特性(句子是由单词组成,文档是由句子组成),先使用单词的词向量表示句子,再此基础上以句子向量构建文档的信息表示。
- 第二:在文档中,句子对文档的重要性贡献有差异,在句子中单词对句子的重要性贡献也有差异。而单词和句子的重要性依赖于上下文环境。相同的单词,在不同的上下文中所表现出的重要性是不一样的。为了描述这种情况,引入了Attention机制来描述这种重要性。
- 文章分别从句子级和文档级两个层次使用Attention机制。
- Attention机制可以带来两个优点:一个可以提升分类性能,第二个可以提升识别出在影响最终分类决策的单词或句子的重要性。
主要思路
- 网络结构:包括五层网络,词向量编码(GRU),词向量Attention层,句子向量编码(GRU),句子向量Attention层,softmax输出层.
网络结构
Attention机制应用的假设是对句子的含义,观点,情感等任务,每个单词的贡献是不相同的。因此,使用Attention机制去抽取更重要的单词
单词词向量:
查询词向量表(比如GloVe,Word2Vec等)生成句子中每个单词的词向量,并将句子表示为单词词向量的连接
句子。
这里面:
表示的就是句子中每个单词的词向量表示,句子的总长度为T。
这种表示方法就表示了以某个单词为中心的句子相关信息。
单词级Attention
因为句子中每个单词的重要性不相同,因此使用Attention机制描述每个单词的重要性,抽取相对句子含义重要的那些单词,使用这些重要的词的词向量组成句子的向量表示
将GRU输出的词的引隐状态向量,作为MLP(Multi Layer Percetron)的输入,计算得到词向量隐状态的新的表示。
这里有个问题:uw是如何来的?bw是如何计算的?uw初始时随机初始化为,在训练阶段学习获得。bw也是学习获得。
按照和单词级的向量表示一样的方式,计算句子级的向量表示。
将最后句子级向量表示的文档输入softmax层,计算分类。
使用的loss是交叉熵
最终结果: