- 人工智能
- 深度学习
- 微调
- NLP
- 机器学习
【免费下载链接】category-trainer
category-trainer是一款基于 all-MiniLM-L12-v2 的文本分类微调工具,专门用于文本类目识别:只需提供一份「名字 + 分类」两列的 CSV 数据,即可自动完成训练、评估与预测,帮你快速搭建商品类目识别、商品名称归类等 NLP 分类场景。整个项目代码精简、开箱即用,非常适合刚接触 Transformer 微调的新手入门学习。
一、为什么选择 all-MiniLM 做文本类目识别微调
类目识别(把商品名自动归入「手机」「耳机」「服装」等类目)本质上是一个文本多分类问题。category-trainer 选择 all-MiniLM-L12-v2 作为底座模型,原因很简单:
| 特性 | all-MiniLM-L12-v2 | 对新手的好处 |
|---|---|---|
| 模型体积 | 轻量级(约 12 层) | CPU 上也能训练 |
| 输出向量 | 384 维,支持 128 token 序列 | 商品名称长度完全够用 |
| 预训练 | 微软开源 sentence-transformer | 微调起点高,小数据也能收敛 |
基于 all-MiniLM 的文本类目识别微调架构示意
💡 项目的 trainer.py 中,
MiniLMClassifier在预训练模型之上仅接了一个 Dropout + 线性分类头,是典型的「预训练 + 轻量分类头」微调范式,代码量极小,非常适合作为学习 HuggingFace 微调的模板。
二、快速上手:5 分钟跑通你的第一个类目识别模型
1. 一键安装环境
仓库提供 Makefile 构建命令,make init会自动安装依赖并拉取预训练模型:
# 初始化环境(安装依赖 + 拉取模型) make init # 或手动安装 pip install torch transformers scikit-learn pandas numpy matplotlib seaborn仓库同时提供 requirements.txt.cpu(CPU 环境)与 requirements.txt.780M(GPU 环境)两套依赖清单,按需选择即可。
2. 准备一份两列 CSV 数据
数据格式非常简单,只需要「名字」和「分类」两列:
名字,分类 iPhone 15 Pro,手机 MacBook Pro,笔记本电脑 Nike Air Max,运动鞋项目内置示例数据 覆盖了 7 个类目(手机、笔记本电脑、运动鞋、耳机、平板电脑、服装、饮品),可以直接用来跑通全流程。
category-trainer 示例类目识别数据格式
3. 选择设备并开始训练
在 src/config.py 中修改DEVICE参数即可切换计算设备:
| 设备 | 配置 | 说明 |
|---|---|---|
| CPU | DEVICE = "cpu" | 默认值,适合小数据集 |
| CUDA GPU | DEVICE = "cuda" | 需安装 CUDA 版 PyTorch |
| 昇腾 NPU | DEVICE = "npu" | 先执行make install-npu安装支持 |
# 默认参数训练(日志自动写入 docs/train_logs/) make run # 或手动指定数据列名 python3 main.py --data_path your_data.csv --name_column 名字 --category_column 分类训练入口 main.py 会把整个流程打印成清晰的 5 个步骤:加载数据 → 划分数据集 → 初始化训练器 → 开始训练 → 评估模型,新手跟着日志就能理解每一步在做什么。
三、项目结构:每个模块负责什么
category-trainer 采用「小文件、单职责」的组织方式,5 个核心模块各司其职:
| 模块 | 职责 | 关键技术 |
|---|---|---|
| main.py | 训练入口,串联全流程 | argparse 命令行参数 |
| src/config.py | 全部训练参数集中配置 | 类属性配置 |
| src/data_processor.py | 读 CSV、清洗空值、划分数据集 | pandas + sklearn LabelEncoder |
| src/trainer.py | 模型定义、训练、评估、保存/加载 | PyTorch + transformers |
| src/evaluator.py | 分类报告、混淆矩阵热力图 | seaborn 可视化 |
| post_trained_validate.py | 加载 checkpoint 批量推理验证 | 置信度统计 |
| post_trained_diagnose.py | 模型健康检查与配置诊断 | 逐项体检报告 |
| test/test_data_processor.py | 数据处理器单元测试 | pytest |
| models/all-MiniLM-L12-v2-Concise/ | 预训练模型权重与分词器 | config.json + pytorch_model.bin |
训练日志自动保存到docs/train_logs/(make run时以时间戳命名),方便回溯每次训练的 loss 与准确率曲线。
四、训练流程全景:从 CSV 到 best_model.pt
一次完整的 category-trainer 训练包含 5 个阶段,这也是理解「文本分类微调」的最佳路径:
- 加载数据— data_processor.py 用 pandas 读取 CSV,自动过滤名字或分类为空的脏数据,并打印类目数量与列表,先让你看清数据全貌;
- 划分数据集— 按
TEST_SIZE = 0.2分层采样切分训练/测试集,保持两个集合的类目分布一致,避免小类目被「切没」; - 标签编码—
LabelEncoder仅在训练集上拟合,再对测试集编码,从机制上杜绝数据泄露; - 微调训练— trainer.py 用 AdamW + 线性 warmup 学习率调度,每个 epoch 结束后在测试集上评估;
- 评估可视化— evaluator.py 输出 accuracy、precision、recall、F1 分类报告,并用 seaborn 绘制混淆矩阵热力图。
训练结束后你会得到两份产物:
output/model/best_model.pt— 保存的是测试准确率最高的那个 checkpoint(而非最后一个 epoch),内含模型权重、类别映射与配置信息,可直接用于推理;output/confusion_matrix.png— 混淆矩阵图,一眼看出模型把哪些类目互相「认混了」。
all-MiniLM 文本分类微调训练流程五阶段示意
五、四大训练特性:新手最该知道的细节
- 🔒数据泄露防护:LabelEncoder 只在训练集上 fit,测试集复用同一编码器。很多教程会忽略这一点,导致准确率虚高;
- ⏸️早停机制:连续
EARLY_STOP_PATIENCE个 epoch 无提升自动停止,小数据集上防止过拟合; - 🏆最佳模型保存:按训练 loss 追踪并保存最优 checkpoint,而不是「最后练成什么样就用什么样」;
- 📦完整 checkpoint:模型权重 + 类别顺序 + 配置参数一起落盘,推理脚本无需额外维护类别映射。
六、关键配置参数速查表
所有参数集中在 src/config.py 的Config类中,改一个文件即可全局生效:
| 参数 | 说明 | 新手建议 |
|---|---|---|
MODEL_NAME | 预训练模型路径,默认指向本地 models 目录 | 保持默认 |
MAX_LENGTH | 最大序列长度(128) | 商品名一般不用改 |
BATCH_SIZE | 批次大小 | 显存/内存不足时调小 |
LEARNING_RATE | 学习率(默认 5e-5) | 置信度低时可尝试 1e-5~1e-4 |
NUM_EPOCHS | 最大训练轮数 | 有早停兜底,可放心设大 |
EARLY_STOP_PATIENCE | 早停耐心值 | 数据少时调小 |
TEST_SIZE | 测试集比例(0.2) | 保持默认 |
DEVICE | cpu/cuda/npu | 按硬件选择 |
七、训练之后:验证与诊断双脚本
category-trainer 没有止步于「训练完成」,而是提供了两个后训练脚本:
1. 批量推理验证— post_trained_validate.py 加载best_model.pt,对整份 CSV 逐条输出「预测类目 + 置信度 + 原文」,并统计平均置信度;若整体置信度低于 0.5,会主动给出三条改进建议(增加每类 20-30 条数据、调整学习率、检查训练准确率是否达标)。
2. 模型健康体检— post_trained_diagnose.py 从文件是否存在、能否加载、类别数量是否正确等 5 个维度逐项检查,输出诊断报告,帮你快速定位「模型不收敛」到底卡在哪一环。
想跑单元测试的话,一条命令即可:
python3 -m pytest test/ -v八、常见问题排查
| 现象 | 可能原因 | 解决思路 |
|---|---|---|
| 测试准确率高但新文本预测乱 | 数据量太少,泛化不足 | 每类至少准备 20-30 条样本 |
| 平均置信度 < 0.5 | 模型欠拟合或学习率不当 | 调整LEARNING_RATE到 1e-5~1e-4 |
| 中文类目名在图中变方块 | 系统缺少中文字体 | 安装 Noto Sans CJK SC 等字体 |
| GPU 显存不足 | BATCH_SIZE过大 | 调小 batch size,或改用make test-gpu检查 GPU 可用性 |
| NPU 报错 | 未安装 torch_npu | 执行make install-npu后用make test-npu验证 |
写在最后
category-trainer 用最小的代码量展示了文本分类微调的完整工程闭环:数据清洗 → 防泄露划分 → 轻量微调 → 早停与最佳模型保存 → 报告与混淆矩阵 → 推理验证与诊断。它既可以直接用来解决商品类目识别这类真实问题,也是一款出色的 HuggingFace 微调学习范本。
如果你想动手试试,从 sample_data.csv 开始,一条make init+ 一条make run,几分钟后就能拥有属于自己的第一版文本类目识别微调模型。
- 人工智能
- 深度学习
- 微调
- NLP
- 机器学习
【免费下载链接】category-trainer
相关推荐
完整教程:4 步用 Python 读取通达信本地日线数据
完整教程:4 步用 Python 读取通达信本地日线数据 mootdx 是一个用 Python 读取通达信本地数据的开源封装:它直接解析通达信客户端安装目录下的
金融科技数据分析HsMod:50+ 项功能的免费炉石插件,三步装好、一键 8 倍速开包
HsMod:50+ 项功能的免费炉石插件,三步装好、一键 8 倍速开包 HsMod 是一款基于 BepInEx(.NET 游戏模组框架)的免费炉石传说插件:变速
游戏开发MiniCPM-SALA 微调实战:基于 Transformers Trainer / DeepSpeed / Accelerate 与 LLaMA-Factory 的全参数与 LoRA 微调指南
MiniCPM SALA 微调实战:基于 Transformers Trainer / DeepSpeed / Accelerate 与 LLaMA Facto
人工智能大模型基础模型本地部署微调模型量化预训练openBMB
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考