基于层次化注意力网络(Hierarchical Attention Network, HAN)的文档分类算法详解
题目描述
在自然语言处理中,文档分类(Document Classification)是一项基础任务,目标是将整篇文档(如新闻文章、长评论、学术论文等)划分到预定义的类别中。传统的文档分类模型(如词袋模型、简单神经网络)通常忽略文档的两个关键结构特性:1)词语在句子中的重要性不同;2)句子在文档中的重要性也不同。层次化注意力网络(Hierarchical Attention Network, HAN)是一种专门为文档分类设计的深度学习模型,它通过引入两层注意力机制(词语级注意力和句子级注意力),让模型能够自动关注文档中更重要的词语和句子,从而提升分类性能。本题目将详细讲解HAN的模型架构、注意力机制原理、训练过程以及其优势。
解题过程
第一步:问题建模与输入表示
- 任务定义:给定一篇文档,它由多个句子组成,每个句子又由多个词语组成。目标是预测文档的类别标签(如体育、政治、科技等)。
- 输入表示:
- 文档表示为 \(D = \{S_1, S_2, ..., S_L\}\),其中 \(L\) 是文档中的句子数量。
- 每个句子 \(S_i\) 表示为词语序列 \(S_i = \{w_{i1}, w_{i2}, ..., w_{iT}\}\),其中 \(T\) 是句子长度(可填充或截断到固定长度)。
- 每个词语 \(w_{ij}\) 通过词嵌入(如Word2Vec、GloVe或随机初始化)映射为词向量 \(x_{ij} \in \mathbb{R}^d\),其中 \(d\) 是词向量维度。
第二步:词语编码与词语级注意力
- 词语编码:
- 对于每个句子 \(S_i\),将词向量序列 \(\{x_{i1}, x_{i2}, ..., x_{iT}\}\) 输入一个双向GRU(Gated Recurrent Unit)编码器,以捕捉词语的上下文信息。
- 双向GRU包括前向GRU(从左到右)和后向GRU(从右到左)。对于词语 \(w_{ij}\),其隐状态为:
\[ h_{ij} = [\overrightarrow{h_{ij}}, \overleftarrow{h_{ij}}] \]
其中 $ h_{ij} \in \mathbb{R}^{2h} $,$ h $ 是单向GRU的隐层大小,$ [\cdot, \cdot] $ 表示向量拼接。
- 整个句子的词语隐状态集合为 \(\{h_{i1}, h_{i2}, ..., h_{iT}\}\)。
- 词语级注意力:
- 目标:自动学习句子中每个词语的重要性,并加权聚合词语表示以形成句子向量。
- 计算词语重要性得分:
\[ u_{ij} = \tanh(W_w h_{ij} + b_w) \]
\[ \alpha_{ij} = \frac{\exp(u_{ij}^\top u_w)}{\sum_{t=1}^{T} \exp(u_{it}^\top u_w)} \]
其中 $ W_w \in \mathbb{R}^{h_w \times 2h} $,$ b_w \in \mathbb{R}^{h_w} $,$ u_w \in \mathbb{R}^{h_w} $ 是词语级注意力向量(可学习参数),$ h_w $ 是注意力隐藏层大小。$ \alpha_{ij} $ 是词语 $ w_{ij} $ 的重要性权重。
- 句子向量 \(s_i\) 通过加权求和得到:
\[ s_i = \sum_{t=1}^{T} \alpha_{it} h_{it} \]
$ s_i \in \mathbb{R}^{2h} $ 是第 $ i $ 个句子的向量表示,它聚焦于句子中重要的词语。
第三步:句子编码与句子级注意力
- 句子编码:
- 将句子向量序列 \(\{s_1, s_2, ..., s_L\}\) 输入另一个双向GRU编码器,以建模句子间的上下文依赖。
- 对于句子 \(S_i\),其隐状态为:
\[ h_i = [\overrightarrow{h_i}, \overleftarrow{h_i}] \]
其中 $ h_i \in \mathbb{R}^{2h'} $,$ h' $ 是句子级GRU的隐层大小。
- 句子级注意力:
- 目标:自动学习文档中每个句子的重要性,并加权聚合句子表示以形成文档向量。
- 计算句子重要性得分:
\[ u_i = \tanh(W_s h_i + b_s) \]
\[ \alpha_i = \frac{\exp(u_i^\top u_s)}{\sum_{t=1}^{L} \exp(u_t^\top u_s)} \]
其中 $ W_s \in \mathbb{R}^{h_s \times 2h'} $,$ b_s \in \mathbb{R}^{h_s} $,$ u_s \in \mathbb{R}^{h_s} $ 是句子级注意力向量(可学习参数),$ h_s $ 是注意力隐藏层大小。$ \alpha_i $ 是句子 $ S_i $ 的重要性权重。
- 文档向量 \(v\) 通过加权求和得到:
\[ v = \sum_{t=1}^{L} \alpha_t h_t \]
$ v \in \mathbb{R}^{2h'} $ 是整篇文档的向量表示,它聚焦于文档中重要的句子。
第四步:文档分类与模型训练
- 分类层:
- 将文档向量 \(v\) 输入一个全连接层,然后通过Softmax函数得到类别概率分布:
\[ p = \text{softmax}(W_c v + b_c) \]
其中 $ W_c \in \mathbb{R}^{C \times 2h'} $,$ b_c \in \mathbb{R}^{C} $,$ C $ 是类别数,$ p \in \mathbb{R}^{C} $ 是预测概率。
- 损失函数:
- 使用交叉熵损失函数:
\[ \mathcal{L} = -\sum_{c=1}^{C} y_c \log p_c \]
其中 $ y $ 是真实标签的one-hot向量。
- 训练过程:
- 通过反向传播和优化器(如Adam)最小化损失函数,更新所有参数(包括词嵌入、GRU权重、注意力参数和分类层权重)。
- 由于HAN是端到端可微的,注意力机制可以自动从数据中学习词语和句子的重要性,无需人工标注。
第五步:HAN的优势与总结
- 层次化结构:模拟文档的自然结构(词语→句子→文档),符合人类阅读文档的方式。
- 双重注意力机制:词语级和句子级注意力让模型具有可解释性,例如可以可视化注意力权重以查看哪些词语和句子对分类决策更重要。
- 适用性:特别适合长文档分类任务(如新闻分类、情感分析、主题分类),在多个公开数据集(如Yelp、IMDB、Reuters)上表现出色。
- 扩展性:HAN的框架可扩展到其他层次化数据(如段落-句子-词语),或结合预训练语言模型(如用BERT替换词嵌入层)进一步提升性能。
关键点回顾:
- HAN通过两层GRU编码器分别建模词语和句子的上下文信息。
- 两层注意力机制动态计算重要性权重,聚焦关键信息形成文档表示。
- 最终文档向量用于分类,整个模型端到端训练。
- 注意力权重提供了一定的可解释性,有助于理解模型决策依据。