一、前言
本文是文本分类的第二篇,来介绍一下微软在2016年发表的论文《Hierarchical Attention Networks for Document Classification》中提出的文本分类模型 HAN(Hierarchy Attention Network)。同时也附上基于 Keras 的模型实现,代码解读,以及通过实验来测试 HAN 的性能。
这里是文本分类系列:
文本分类模型第二弹:HAN(Hierarchy Attention Network)
文本分类模型第三弹:BoW(Bag of Words) + TF-IDF + LightGBM
二、相关论文
说到模型结构和原理,我们还是先来读读原论文吧:
(1)Document Modeling with Gated Recurrent Neural Network for Sentiment Classification
(2)Hierarchical Attention Networks for Document Classification
说到 HAN,不可不读的论文有两篇。首先第一篇论文《Document Modeling with Gated Recurrent Neural Network for Sentiment Classification》是哈工大在2015年发表的,而第二篇论文《Hierarchical Attention Networks for Document Classification》则是在第一篇的基础之上,加入了 Attention 机制,因此这里就依次对两篇论文进行解读。
1、Document Modeling with Gated Recurrent Neural Network for Sentiment Classification.
在 LDA 主题模型的思想中,一篇文章首先是由单词组成了主题,再由不同的主题来组成文章。而这篇论文的思想也非常相似,认为一篇文章首先由单词组成句子,再由句子组成文章。如此一来我们要想对一篇文章进行分类,就需要分两步来进行,首先从单词层面分析每个句子的语义。总结出每个句子的语义后,再将句子综合起来表征整篇文章的语义,并对其进行分类。这个思想很好的体现在本篇论文所提出的模型结构上,我们就po出论文中提出的模型来看看:
从下往上来解读模型,首先每个虚线框中为一句话所包含的单词,蓝色的 vector 为每个单词的词向量,也就是词的表示(Word Representation)。通过 CNN/LSTM 来提取一句话中包含所有单词的语义特征,形成句子的特征向量(Sentence Representation)。再经过一个 Bi-Directional Gated Neural Network(LSTM/GRU) 以及一些列的操作,最终生成整个文章的特征向量(Document Representation)。最后通过Softmax来进行文章分类。
当使用 CNN 作为句子级别的特征抽取器时,其结构形如 TextCNN(TextCNN我们下一弹再来说),使用了大小分别为,, 的卷积窗口来对句子进行卷积,卷积窗口的宽度设置为1,2,3, 此举是考虑到对文本中的 uni-gram,bi-gram,tri-gram 的特征进行提取。随后对提取后的特征分别进行 average pooling,并使用 Tanh 函数进行激活。最后求出得到的三个 vector 的平均值,得到句子级别的特征向量表示,其整个结构如下图所示:
论文中并没有给出使用 LSTM 作为句子级别特征抽取器的结构,但其过程应该与文章层面特征抽取的方式如出一辙,下面来看看文章层面的特征抽取是如何进行的。
篇章级别的特征抽取器结构如上图所示。论文中介绍了两种方法,一种是使用 GNN(LSTM/GRU)最后一个时刻的隐藏层输出向量作为整个文章的特征表示,另一种则是取 GNN 每一个时刻的隐藏层输出,并对其求平均,用求平均后的向量作为整个文章的特征表示。两种方法最后都通过 Softmax 来进行最终的分类工作。
最后通过实验数据,得出了相较于 TextCNN,使用 LSTM 抽取句子级别的语义特征,搭配使用 Bi-GNN(Bi-LSTM / Bi-GRU)可以得到更好的效果。
2、Hierarchical Attention Networks for Document Classification.
第二篇论文,《Hierarchical Attention Networks for Document Classification》提出我们今天要说的模型 HAN,别看论文的题目对 GNN 只字不提,但它相较于第一篇论文而言,其实使用了向同的特征提取结构,区别就在于加入了多层注意力机制(Hierarchical Attention)。
首先我们还是来看看模型的结构吧:
模型的结构就如上图所示,分为上下两个 block,两个 block 的结构完全一致,都是由 Bi-GNN 组成特征抽取器,同时添加了注意力机制。下层的