本项目实现了一个基于超图神经网络(Hypergraph Neural Network)+ 注意力机制的中文短文本情感分类模型,用于二分类情感分析任务。
核心创新点:
- 超图结构建模:通过滑动窗口构建超边,捕获词语间的高阶关系
- 注意力机制:对超边进行加权聚合,提升关键信息的表达能力
- 端到端训练:从文本到超图结构的完整训练流程
.
├── data/ # 数据处理模块
│ ├── prepare_data.py # 数据预处理脚本
│ └── README.md # 数据集说明
│
├── model/ # 模型训练模块
│ ├── dataset.py # 数据集加载
│ ├── model.py # 超图神经网络模型
│ ├── train.py # 训练脚本
│ ├── config.yaml # 实验配置
│ └── artifacts/ # 训练产物
│ ├── sentiment_hgnn.pt # 模型文件
│ └── vocab.json # 词表文件
│
├── system/ # 系统部署模块
│ ├── backend/ # FastAPI 后端
│ │ ├── app.py # 推理 API
│ │ └── requirements.txt
│ └── frontend/ # 前端界面
│ ├── index.html # 单页面应用
│ └── package.json
│
└── requirements.txt # 项目依赖
- Python 3.8+
- PyTorch 2.0+
- CUDA(推荐,用于 GPU 训练)
pip install -r requirements.txt从 HuggingFace 加载 ChnSentiCorp 数据集并构建超图结构:
python data/prepare_data.py输出:
data/chnsenticorp/train_hypergraph.jsonl- 训练集data/chnsenticorp/test_hypergraph.jsonl- 测试集
数据格式:
{
"nodes": ["词1", "词2", "词3"],
"hyperedges": [["词1", "词2"], ["词2", "词3"]],
"label": 1
}python model/train.py训练过程:
==================================================
超图神经网络情感分类训练
==================================================
使用设备: cuda
GPU: NVIDIA H100 80GB HBM3
加载数据集...
数据集大小: 9600
词表大小: 8000
开始训练 (共 10 轮)...
--------------------------------------------------
Epoch 1/10, Loss: 0.6234
Epoch 2/10, Loss: 0.4521
...
Epoch 10/10, Loss: 0.1234
--------------------------------------------------
训练完成!
✅ 模型已保存: model/artifacts/sentiment_hgnn.pt
✅ 词表已保存: model/artifacts/vocab.json
✅ 模型加载成功!
启动后端服务:
cd system/backend
pip install -r requirements.txt
python app.py访问前端界面:
# 直接打开浏览器
open system/frontend/index.html
# 或使用 HTTP 服务器
cd system/frontend
python -m http.server 3000
# 访问 http://localhost:3000输入文本
↓
分词 (jieba)
↓
超图构建 (滑动窗口)
↓
词嵌入层 (Embedding)
↓
超图消息传递层 1
├─ 节点 → 超边聚合
├─ 注意力机制 (Softmax)
└─ 超边 → 节点回传
↓
超图消息传递层 2
↓
全局平均池化
↓
MLP 分类器
↓
情感标签 (正面/负面)
配置文件:model/config.yaml
batch_size: 16
lr: 0.001
epochs: 10
embedding_dim: 128
hidden_dim: 64
num_classes: 2请求:
{
"text": "这个酒店非常好,服务态度很棒"
}响应:
{
"text": "这个酒店非常好,服务态度很棒",
"sentiment": "正面",
"confidence": 0.9523,
"label": 1
}获取模型统计信息
响应:
{
"vocab_size": 8000,
"embedding_dim": 128,
"hidden_dim": 64,
"num_classes": 2,
"device": "cuda"
}ChnSentiCorp(中文情感分析语料库)
- 来源:HuggingFace datasets (
seamew/ChnSentiCorp) - 任务:二分类情感分析(正面/负面)
- 领域:酒店评论
- 规模:约 12,000 条标注数据
超图构建策略:
- 分词工具:jieba
- 窗口大小:3
- 超边生成:滑动窗口方式
如在论文中使用本项目,可参考以下描述:
本文实验数据选用公开的中文情感分析数据集 ChnSentiCorp。为适配超图神经网络模型,对原始文本进行分词并通过滑动窗口方式构建超图结构表示,其中节点为分词后的词语,超边通过窗口大小为 3 的滑动窗口生成。模型采用两层超图消息传递层,结合注意力机制对超边进行加权聚合,最终通过 MLP 分类器输出情感标签。
Q: 数据集下载失败怎么办?
A: 脚本会自动创建示例数据用于测试。如需使用完整数据集,请确保网络连接正常或手动下载 ChnSentiCorp 数据集。
Q: 训练时显示 CPU 而非 GPU?
A: 检查 PyTorch 是否安装了 CUDA 版本:
python -c "import torch; print(torch.cuda.is_available())"Q: 如何调整超图构建策略?
A: 修改 data/prepare_data.py 中的 window_size 参数,或实现自定义的超边构建逻辑。
Q: 如何使用自己的数据集?
A: 将数据转换为 jsonl 格式,每行包含 nodes、hyperedges、label 字段,放入 data/ 目录即可。
- 深度学习框架: PyTorch 2.0+
- 数据处理: HuggingFace datasets, jieba
- 后端框架: FastAPI
- 前端: 原生 HTML/CSS/JavaScript
- 配置管理: PyYAML
本项目为学术研究项目,用于探索超图神经网络在中文短文本情感分析中的应用。
MIT License
- ChnSentiCorp 数据集提供者
- HuggingFace datasets 社区
- PyTorch 开发团队