基于图注意力网络(Graph Attention Network, GAT)的文本分类算法详解
基于图注意力网络(GAT)的文本分类算法,是将文本视为图结构数据,并利用图注意力网络来捕捉文本单元(如词、句子)间复杂、非局部依赖关系的一种先进方法。传统文本分类模型(如CNN、RNN)主要处理序列结构,难以显式建模远距离的语义关联。GAT通过将文本元素构建为图中的节点,并利用注意力机制自适应地聚合邻居节点的信息,从而学习到更丰富的文本表示,提升分类性能。
接下来,我将详细拆解这个算法的核心思想、具体步骤和实现细节。
一、 算法核心思想与问题定义
- 核心问题:给定一个文本文档(如一篇新闻、一条评论),目标是将其自动划分到预定义的类别中(如体育、财经、科技等)。
- 传统方法的局限:卷积神经网络(CNN)依赖局部窗口,难以捕获长距离依赖;循环神经网络(RNN)虽能处理序列,但顺序计算和梯度问题限制了其对全局信息的整合。
- GAT的解决思路:
- 图结构建模:将文本中的每个单元(例如,经过预训练词向量表示的每个词)视为图中的一个节点。节点之间的连接(边)可以基于多种语义或结构关系来构建,例如:
- 基于滑动窗口的共现关系。
- 基于语法依存树(Dependency Tree)的句法关系。
- 基于文档内词语的语义相似度(如余弦相似度)。
- 注意力机制聚合:对于图中的每个节点,GAT并不平等地看待其所有邻居节点。它通过一个可学习的注意力机制,计算该节点与其每个邻居节点的“关联强度”(注意力系数),然后根据这个系数对邻居节点的特征进行加权求和,从而更新该节点的表示。这意味着模型可以动态地、有区分地聚焦于最重要的邻居信息。
- 图结构建模:将文本中的每个单元(例如,经过预训练词向量表示的每个词)视为图中的一个节点。节点之间的连接(边)可以基于多种语义或结构关系来构建,例如:
二、 算法步骤详解
假设我们已经构建好了一个文本图,共有N个节点。每个节点i有一个初始的D维特征向量 \(\vec{h}_i\)。GAT的一层操作旨在为每个节点生成一个新的D'维特征向量 \(\vec{h}_i'\)。
步骤1:计算注意力系数
这是GAT最核心的一步。对于任意一对相邻的节点i和j(j ∈ Ni, Ni表示节点i的邻居节点集合,通常包括i自身),我们计算一个未归一化的注意力系数 \(e_{ij}\)。
- 首先,用一个共享的权重矩阵 \(W\) (形状为 D'×D)对每个节点的特征进行线性变换,将其投射到一个新的特征空间:\(\vec{z}_i = W \vec{h}_i\)。
- 然后,计算节点i和j之间的相关性。GAT采用一个单层前馈神经网络
a来实现,其参数是一个权重向量 \(\vec{a}\) (形状为 2D' × 1)。计算公式为:
\(e_{ij} = \text{LeakyReLU}(\vec{a}^T [\vec{z}_i || \vec{z}_j])\)。
这里||表示向量拼接,LeakyReLU是一个非线性激活函数(带负斜率),用于引入非线性。e_{ij}表示了节点j的特征对于节点i的重要性。
步骤2:归一化注意力系数
为了使不同节点间的注意力系数易于比较,我们使用softmax函数对节点i的所有邻居(包括其自身)的 e_{ij} 进行归一化,得到最终的注意力权重 \(\alpha_{ij}\)。
\(\alpha_{ij} = \frac{\exp(e_{ij})}{\sum_{k \in \mathcal{N}_i} \exp(e_{ik})}\)。
\alpha_{ij} 是一个标量,其值在0到1之间,且对节点i的所有邻居求和为1。它量化了在更新节点i时,来自节点j的信息的贡献比例。
步骤3:加权聚合与特征更新
使用步骤2计算出的归一化注意力权重,对邻居节点的变换后特征进行加权求和,并通常通过一个非线性激活函数σ(如ELU或ReLU)得到节点i的新特征表示。
\(\vec{h}_i' = \sigma(\sum_{j \in \mathcal{N}_i} \alpha_{ij} \vec{z}_j)\)。
这个过程即为图注意力层的核心操作。每个节点的新表示,都是其邻居节点(根据注意力权重筛选过)信息的聚合。
步骤4:多头注意力(可选但常用)
为了稳定学习过程并增强模型的表达能力,通常会采用类似Transformer中的“多头注意力”机制。
- 独立执行K次步骤1到步骤3(每次使用不同的参数矩阵 \(W^k\) 和注意力向量 \(\vec{a}^k\)),得到K个不同的输出特征 \(\vec{h}_i^{'k}\)。
- 对于中间层,通常将这些多头输出在特征维度上进行拼接:
\(\vec{h}_i' = ||_{k=1}^{K} \sigma(\sum_{j \in \mathcal{N}_i} \alpha_{ij}^k W^k \vec{h}_j)\)。 - 对于最后一层(输出层),为了得到固定维度的表示,通常采用平均而不是拼接:
\(\vec{h}_i' = \sigma(\frac{1}{K} \sum_{k=1}^{K} \sum_{j \in \mathcal{N}_i} \alpha_{ij}^k W^k \vec{h}_j)\)。
步骤5:图分类与模型训练
- 节点表示到图表示:经过多层的GAT传播后,我们得到了所有节点的最终表示。为了对整个文档(整张图)进行分类,需要将所有节点的表示聚合为一个图级表示。常用的聚合方法包括:
- 全局平均/最大池化:对所有节点的特征向量取平均或逐元素取最大值。
- 引入虚拟节点:在图中添加一个与所有节点相连的虚拟节点(“图节点”),其最终表示即为图表示。
- 注意力池化:使用另一个注意力机制,学习每个节点对于图级别表示的重要性权重,然后加权求和。
- 分类与训练:将得到的图级表示输入一个全连接层,再通过softmax函数输出属于各个类别的概率分布。模型通过最小化预测分布与真实标签之间的交叉熵损失函数进行端到端的训练。
三、 总结与特点
- 优点:
- 高效:注意力系数的计算可以在所有边上并行进行,聚合操作可以在所有节点上并行进行。
- 灵活:可以处理任意结构的图,不依赖于完整的图结构(如拉普拉斯矩阵),适用于归纳式学习。
- 可解释性:学习到的注意力权重 \(\alpha_{ij}\) 可以被解释为节点j对节点i的重要性,为理解模型决策提供了一定依据。
- 强大:能够显式地建模文本中非连续、长距离的语义依赖,克服了传统序列模型的某些局限。
- 挑战:
- 图构建的质量:如何为不同的文本任务定义和构建高质量的图结构(节点和边)是关键,且直接影响模型性能。
- 计算复杂度:理论上注意力机制需要计算所有节点对,但通过将注意力限制在一阶邻居,可以控制计算量。对于大规模稠密图,计算开销依然较大。
基于GAT的文本分类算法,通过将图神经网络与注意力机制巧妙结合,为建模文本的复杂结构关系提供了一个强有力的框架,是当前图神经网络在NLP领域应用的一个经典代表。