Back to Bettafish

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

SentimentAnalysisModel/WeiboSentiment_Finetuned/GPT2-Lora/README.md

3.0.04.7 KB
Original Source

微博情感识别模型-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. 无损原模型:原始预训练模型权重保持不变,避免灾难性遗忘

环境依赖

安装所需依赖:

bash
pip install -r requirements.txt

主要依赖包:

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

使用方法

1. 安装依赖

bash
pip install -r requirements.txt

2. 训练模型

bash
python train.py

训练过程会自动:

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

3. 情感分析预测

bash
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),大大减少了参数量

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