本文转载自: https://blog.csdn.net/liuchonge/article/details/73610734
最近看了”Hierarchical Attention Network for Document Classification”一篇文章,也在网上找了一些资料结合理解,发现在此之前有篇文章跟他提出的模型架构基本相似,只不过不包含attention机制:“Document Modeling with Gated Recurrent Neural Network
for Sentiment Classification”,也就是说本篇论文是基于这篇论文作了一些改进的。所以这里主要结合两篇论文进行介绍文档的分层架构模型。
Non-Attention
第一篇文章主要是使用两个神经网络分别建模句子和文档,采用一种自下向上的基于向量的文本表示模型。首先使用CNN/LSTM来建模句子表示,接下来使用双向GRU模型对句子表示进行编码得到文档表示,这里论文中提到在情感分类任务中,GRU往往比RNN效果要好。模型架构如下图所示:
再上图中,词向量是从语料库中使用Word2vec模型训练出来的,保存在词嵌入矩阵中。然后使用CNN/LSTM模型学习句子表示,这里会将变长的句子表示成相同维度的向量,以消除句子长度不同所带来的不便。也就是说之后的GRU模型的输入是长度相同的句子向量。
卷积模型如下图所示,filter的宽度分别取1,2,3来编码unigrams,bigrams和trigrams的语义信息。最后使用一个Average层捕获全局信息并转化为固定长度的输出向量。
接下来进行文本层面建模,使用GRU模型,输入是变长的句子向量,输出固定长度的文本向量,这里会对最后每个单元的输出向量进行取平均操作,虽然会忽略句子顺序的信息,但是相对来说较为简单方便,如下图所示,其中GNN代表GRU的一个基础计算单元:
With-Attention HAN模型
接下来我们介绍一下本篇文章的模型架构,其实主要的思想和上面的差不多,也是分层构建只不过加上了两个Attention层,用于分别对句子和文档中的单词、句子的重要性进行建模。其主要思想是,首先考虑文档的分层结构:单词构成句子,句子构成文档,所以建模时也分这两部分进行。其次,不同的单词和句子具有不同的信息量,不能单纯的统一对待所以引入Attention机制。而且引入Attention机制除了提高模型的精确度之外还可以进行单词、句子重要性的分析和可视化,让我们对文本分类的内部有一定了解。模型主要可以分为下面四个部分,如下图所示:
- a word sequence encoder,
- a word-level attention layer,
- a sentence encoder
- a sentence-level attention layer.
、
这里对Attention机制进行一个补充介绍,可以参考论文“FEED-FORWARD NETWORKS WITH ATTENTION CAN SOLVE SOME LONG -TERM MEMORY PROBLEMS”里面的插图:
这里的word sequence encoder也是使用的双向GRU模型,与上篇文章不同。无聊的堆砌一下公式,四个部分分别对应下面四个:
- Word Encoder:
- Word Attention:
- Sentence Encoder:
- Sentence Attention:
这里不进行过多的解释,主要针对Attention部分说一下,结合上图,我们会发现ui是使用一个简单的神经网络对hi的隐层表示,然后α是其softmax之后的结果,然后使用α对hi进行加权计算得到最终的输出向量即可。总结如下图:
最后是一个文本分类层,其实就是一个简单的softmax,然后目标函数使用负对数似然函数。