You need to sign in or sign up before continuing.
Name Last Update
..
dataset Loading commit data...
README.md Loading commit data...
predict.py Loading commit data...
requirements.txt Loading commit data...
train.py Loading commit data...

微博情感识别模型-GPT2-LoRA微调

项目说明

这是一个基于GPT2的微博情感二分类模型,采用LoRA(Low-Rank Adaptation)微调技术。通过PEFT库实现的LoRA微调,只需训练极少量参数就可以让模型适应情感分析任务,大幅降低计算资源需求和模型体积。

数据集

使用微博情感数据集(weibo_senti_100k),包含约10万条带情感标注的微博内容,正负向评论各约5万条。数据集标签:

  • 标签0:负面情感
  • 标签1:正面情感

文件结构

GPT2-Lora/
├── train.py                  # 训练脚本(基于PEFT库的LoRA实现)
├── predict.py                # 预测脚本(交互式使用)
├── requirements.txt          # 依赖包列表
├── models/                   # 本地存储的预训练模型
│   └── gpt2-chinese/        # 中文GPT2模型及配置
├── dataset/                  # 数据集目录
│   └── weibo_senti_100k.csv # 微博情感数据集
└── best_weibo_sentiment_lora/ # 训练好的LoRA权重(训练后生成)

技术特点

  1. 极度参数高效:相比全参数微调,仅训练约0.1%-1%的参数
  2. 使用PEFT库:基于Hugging Face官方的参数高效微调库,稳定可靠
  3. 模型性能保持:在仅训练极少参数的情况下,保持良好的分类性能
  4. 部署友好:LoRA权重文件小,便于模型部署和分享

LoRA技术优势

LoRA (Low-Rank Adaptation) 是目前最流行的参数高效微调技术:

  1. 超低参数量:通过低秩分解,将大矩阵分解为两个小矩阵的乘积
  2. 插件式设计:LoRA权重可以动态加载和卸载,一个基础模型支持多个任务
  3. 训练速度快:参数少,训练时间短,内存占用小
  4. 无损原模型:原始预训练模型权重保持不变,避免灾难性遗忘

环境依赖

安装所需依赖:

pip install -r requirements.txt

主要依赖包:

  • Python 3.8+
  • PyTorch 1.13+
  • Transformers 4.28+
  • PEFT 0.4+
  • Pandas, NumPy, Scikit-learn

使用方法

1. 安装依赖

pip install -r requirements.txt

2. 训练模型

python train.py

训练过程会自动:

  • 下载并本地保存中文GPT2预训练模型
  • 加载微博情感数据集
  • 使用LoRA技术训练模型
  • 保存最佳LoRA权重到 ./best_weibo_sentiment_lora/

3. 情感分析预测

python predict.py

运行后将进入交互模式:

  • 在控制台输入要分析的微博文本
  • 系统会返回情感分析结果(正面/负面)和置信度
  • 输入'q'退出程序

模型配置

  • 基础模型: uer/gpt2-chinese-cluecorpussmall 中文预训练模型
  • 模型本地保存路径: ./models/gpt2-chinese/
  • LoRA配置:
    • rank (r): 8 - 低秩矩阵的秩
    • alpha: 32 - 缩放因子
    • target_modules: ["c_attn", "c_proj"] - 目标线性层
    • dropout: 0.1 - 防止过拟合

性能对比

方法 可训练参数占比 模型文件大小 训练时间 推理速度
全参数微调 100% ~500MB
Adapter微调 ~3% ~50MB 中等 中等
LoRA微调 ~0.5% ~2MB

使用示例

使用设备: cuda
LoRA模型加载成功!

============= 微博情感分析 (LoRA版) =============
输入微博内容进行分析 (输入 'q' 退出):

请输入微博内容: 这部电影真是太好看了,我非常喜欢!
预测结果: 正面情感 (置信度: 0.9876)

请输入微博内容: 服务态度差,价格还贵,一点都不推荐
预测结果: 负面情感 (置信度: 0.9742)

请输入微博内容: q

注意事项

  1. 首次运行:首次运行 train.py 时会自动下载预训练模型,请确保网络连接
  2. GPU推荐:虽然LoRA参数少,但建议使用GPU加速训练
  3. 模型加载:预测时需要先有训练好的LoRA权重文件
  4. 兼容性:基于PEFT库实现,与Hugging Face生态系统完全兼容

扩展功能

  • 多任务支持:可以为不同任务训练不同的LoRA权重,共享同一个基础模型
  • 权重合并:可以将多个LoRA权重合并,或将LoRA权重合并到基础模型中
  • 动态切换:支持运行时动态加载和切换不同的LoRA权重

技术原理

LoRA通过在原始线性层旁边添加两个小的矩阵A和B,使得:

h = W₀x + BAx

其中:

  • W₀是冻结的预训练权重
  • B ∈ ℝᵈˣʳ, A ∈ ℝʳˣᵏ是可训练的低秩矩阵
  • r << min(d,k),大大减少了参数量

这种设计既保持了预训练模型的知识,又能高效地适应新任务。