SentimentAnalysisModel/WeiboSentiment_SmallQwen/readme.md
本文件夹专门用于基于阿里Qwen3系列模型的微博情感分析任务。根据最新的模型评测结果,Qwen3的小参数模型(0.6B、4B、8B)在话题识别、情感分析等相对简单的自然语言处理任务上表现优异,超越了传统的BERT等基础模型。
qwen 0.6B模型加线性分类器,做特定领域的文本分类和序列标注,优于bert,也优于235B的qwen3 few shot learning。在算力有限的情况下,性价比很高...
在经过了一些相关的调研之后,我觉的将Qwen3的一些小参数模型用在本系统中是一个不错的选择。
虽然这个参数在LLM时代算小,但作为个人开发者计算资源有限,微调他们还是实属不易,在一张A100上训练了整整四天,求求star了
另外我也比较好奇一个问题:例如对于Qwen3-Embedding-0.6B跟Qwen3-0.6B这两个模型,前者我接一个分类头做情感二分类,后者我进行lora微调,在同样的数据集上训练,哪个的效果更好,各有什么优势?
在绝大多数情况下,使用 Qwen3-0.6B 进行 LoRA 微调的效果会显著优于使用 Qwen3-Embedding-0.6B 外接分类头,但性能不如直接接分类头的。
因此本模块对于所有参数的都提供微调与嵌入再接分类头两个版本,供大家取舍。
我们通过一个表格来清晰地展示两者的区别和优劣势:
| 特性 / 维度 | 方法 A: Qwen3-Embedding-0.6B + 分类头 | 方法 B: Qwen3-0.6B + LoRA 微调 |
|---|---|---|
| 核心思想 | 表示学习 (Representation Learning) | 指令遵循 (Instruction Following) |
| 模型学习方式 | 冻结Embedding模型,只训练一个非常小的分类头(如nn.Linear),学习从固定文本向量到情感标签的映射。 | 冻结大部分基础模型参数,通过训练LoRA“适配器”来微调模型内部的注意力机制和知识表达,使其学会按指令生成特定答案。 |
| 性能上限 | 较低。模型的理解能力被Qwen3-Embedding-0.6B的通用语义表示所限制,无法学习你数据集中特有的、细微的情感模式。 | 更高。模型在微调中调整了自身对语言的理解方式,以适应你的特定任务和数据分布,能更好地捕捉讽刺、网络用语等复杂情感。 |
| 灵活性 | 低。模型只能做这一件事:输出分类标签。无法扩展。 | 高。模型学会的是一个“任务技能”。你可以轻松修改指令,让它输出“积极/消极/中性”,甚至“为什么这是积极的?”。 |
| 训练资源开销 | 极低。只需训练一个几KB到几MB的分类头,普通CPU都能完成。显存占用非常小。 | 较高。虽然LoRA效率很高,但仍需在GPU上进行,需要加载整个0.6B模型和LoRA参数到显存中进行反向传播。 |
| 推理速度/成本 | 极快、极低。一次前向传播即可获得Embedding向量,分类头计算可忽略不计。非常适合大规模、低延迟的生产环境。 | 较慢、较高。需要进行自回归生成(一个词一个词地蹦),即使答案很短(如“积极”),也比一次性前向传播慢几个数量级。 |
| 实现复杂度 | 简单。遵循BERT时代的技术范式,流程成熟,代码直观。 | 中等。需要构建指令模板、配置LoRA参数、使用SFTTrainer等,比前者稍复杂,但已有成熟框架支持。 |
# 安装依赖
pip install -r requirements.txt
# 激活pytorch环境
conda activate 你的环境名
Embedding + 分类头方法:
python qwen3_embedding_universal.py
# 程序会询问选择模型大小(0.6B/4B/8B)
LoRA微调方法:
python qwen3_lora_universal.py
# 程序会询问选择模型大小(0.6B/4B/8B)
命令行参数:
# 直接指定模型
python qwen3_embedding_universal.py --model_size 0.6B
python qwen3_lora_universal.py --model_size 4B
# 自定义参数
python qwen3_embedding_universal.py --model_size 8B --epochs 10 --batch_size 16
交互式预测:
python predict_universal.py
# 程序会让你选择具体的模型和方法
命令行预测:
# 指定模型预测
python predict_universal.py --model_type embedding --model_size 0.6B --text "今天天气真好"
# 加载所有模型
python predict_universal.py --load_all --text "这个电影太棒了"
显存要求:
数据格式:每行格式为文本内容\t标签,标签为0(负面)或1(正面)
模型选择:初次使用建议从0.6B模型开始测试
训练时间:LoRA微调比Embedding方法耗时更长,建议使用GPU加速