Skip to content

wang2032/Hypergraph-Sentiment-Platform

Repository files navigation

基于超图神经网络的中文短文本情感分类系统

项目简介

本项目实现了一个基于超图神经网络(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 训练)

1. 安装依赖

pip install -r requirements.txt

2. 准备数据

从 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
}

3. 训练模型

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
✅ 模型加载成功!

4. 部署系统(可选)

启动后端服务:

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

API 接口

POST /predict

请求:

{
  "text": "这个酒店非常好,服务态度很棒"
}

响应:

{
  "text": "这个酒店非常好,服务态度很棒",
  "sentiment": "正面",
  "confidence": 0.9523,
  "label": 1
}

GET /stats

获取模型统计信息

响应:

{
  "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 格式,每行包含 nodeshyperedgeslabel 字段,放入 data/ 目录即可。

技术栈

  • 深度学习框架: PyTorch 2.0+
  • 数据处理: HuggingFace datasets, jieba
  • 后端框架: FastAPI
  • 前端: 原生 HTML/CSS/JavaScript
  • 配置管理: PyYAML

开发团队

本项目为学术研究项目,用于探索超图神经网络在中文短文本情感分析中的应用。

许可证

MIT License

致谢

  • ChnSentiCorp 数据集提供者
  • HuggingFace datasets 社区
  • PyTorch 开发团队

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors