手把手教程:用Google Colab免费GPU训练「劳动法分类模型」(新手友好)
(目标:自动分类法律咨询属于「加班工资」「劳动合同解除」等劳动法场景)
一、准备工作(5分钟)
-
打开Colab并挂载Google Drive
from google.colab import drive drive.mount('/content/drive') # 授权后会生成文件夹
-
启用GPU(关键!)
点击菜单栏 → Runtime → Change runtime type → 选择 GPU(免费版为Tesla T4,8GB显存)。 -
验证GPU是否可用
import torch print("GPU状态:", "可用" if torch.cuda.is_available() else "不可用") # 应输出“可用”
二、数据准备(10分钟)
📌 劳动法示例数据(2类:加班工资、合同解除)
- 从GitHub下载示例数据(含200条标注数据),或手动创建:
import pandas as pd data = [ ["周末加班没调休,能拿多少工资?", "加班工资"], ["公司没签合同,离职可以索赔吗?", "劳动合同解除"], # 更多数据... ] df = pd.DataFrame(data, columns=["text", "label"]) df.to_csv("/content/drive/MyDrive/labor_data.csv", index=False) # 保存到Drive
🔧 数据预处理(文本清洗+标签转换)
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.preprocessing import LabelEncoder
# 1. 加载数据
df = pd.read_csv("/content/drive/MyDrive/labor_data.csv")
# 2. 划分训练集/测试集(8:2)
train_text, test_text, train_label, test_label = train_test_split(
df["text"], df["label"], test_size=0.2, random_state=42
)
# 3. 文本向量化(TF-IDF)
vectorizer = TfidfVectorizer(max_features=1000) # 新手友好,比BERT轻量
X_train = vectorizer.fit_transform(train_text)
X_test = vectorizer.transform(test_text)
# 4. 标签转数字(0/1)
le = LabelEncoder()
y_train = le.fit_transform(train_label)
y_test = le.transform(test_label)
三、模型训练(15分钟,含GPU加速)
🔥 选择新手友好模型:FastText(轻量+高效)
from sklearn.linear_model import SGDClassifier
from sklearn.metrics import accuracy_score
# 1. 定义模型(指定GPU:无需额外代码,Sklearn自动用CPU?不,此处用CPU,下方演示BERT的GPU)
# (注:Sklearn默认CPU,若需GPU需换框架,如PyTorch Lightning)
# 👉 新手优先跑通流程,以下为更适合GPU的BERT微调示例:
from transformers import AutoTokenizer, AutoModelForSequenceClassification, Trainer, TrainingArguments
# 1. 加载预训练模型(中文法律BERT,比通用BERT更准)
model_name = "hfl/chinese-legal-bert-base" # 法律领域专用模型
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2).to("cuda") # 强制GPU
# 2. 数据预处理(转换为BERT输入格式)
train_encodings = tokenizer(train_text.tolist(), truncation=True, padding=True)
test_encodings = tokenizer(test_text.tolist(), truncation=True, padding=True)
# 3. 定义训练参数(限制显存使用)
training_args = TrainingArguments(
output_dir="/content/drive/MyDrive/labor_model",
num_train_epochs=3, # 新手建议先跑3轮
per_device_train_batch_size=8, # 8G显存安全值
per_device_eval_batch_size=8,
logging_dir="/content/drive/MyDrive/logs",
save_strategy="epoch",
fp16=True, # 启用混合精度,加速训练
)
# 4. 训练!(GPU利用率90%+,约10分钟)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_encodings,
eval_dataset=test_encodings,
)
trainer.train()
四、测试与应用(5分钟)
📝 预测新问题(如用户提问)
# 加载最佳模型
from transformers import pipeline
classifier = pipeline("text-classification", model=model, tokenizer=tokenizer, device=0) # device=0指定GPU
# 测试案例
questions = [
"怀孕被公司辞退,怎么办?",
"法定节假日加班,工资是3倍吗?"
]
results = classifier(questions)
for q, r in zip(questions, results):
print(f"问题:{q}\n分类:{le.inverse_transform([r[0]['label']])[0]}(置信度:{r[0]['score']:.2f})\n")
输出示例:
问题:怀孕被公司辞退,怎么办?
分类:劳动合同解除(置信度:0.98)
问题:法定节假日加班,工资是3倍吗?
分类:加班工资(置信度:0.95)
五、关键问题解决(新手必看)
-
显存不足?
- 降低
per_device_train_batch_size
至4或2 - 关闭其他Colab标签页,释放内存
- 降低
-
训练超时(Colab免费版12小时)?
- 每训练1轮保存模型:
trainer.save_model()
- 下次从
model_name="/content/drive/MyDrive/labor_model"
继续训练
- 每训练1轮保存模型:
-
数据不够?
- 爬取中国裁判文书网(需合规)
- 用ChatGPT生成模拟数据(提示:“生成100条劳动法咨询,分为加班、合同、工伤3类”)
✅ 总结:从环境配置到预测,全程约35分钟,新手可直接复制代码运行。重点关注:
- 确保GPU启用(
torch.cuda.is_available()
为True) - 数据路径正确(所有文件存放在Drive的
MyDrive
下) - 训练时不要关闭浏览器(Colab会在后台运行,断网后保留进度1小时)