数据准备
预计学习时间:30分钟
高质量的训练数据是微调成功的关键前提。数据准备阶段的工作质量直接影响最终模型的性能表现。
数据准备的关键步骤
1. 数据收集与清洗
- 数据来源选择:公开数据集(如GLUE、ImageNet)、企业内部数据、网络爬虫采集数据
- 数据清洗:
- 文本数据:去除无关字符、修正拼写错误、统一格式(大小写、标点)
- 图像数据:筛选低质量图片、校正尺寸与色彩、去除重复样本
- 结构化数据:处理缺失值、异常值检测与处理、特征标准化
2. 数据标注与质量控制
- 标注方法:人工标注、半自动标注(主动学习)、众包标注
- 质量控制:
- 建立明确的标注指南
- 多人交叉验证
- 设置验证样本测试标注质量
- 定期审核与更新标注标准
3. 数据预处理
- 文本数据:
- 分词(Tokenization)
- 序列填充(Padding)
- 序列截断(Truncation)
from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
def preprocess_function(examples):
return tokenizer(
examples['text'],
truncation=True,
max_length=512,
padding='max_length'
)
- 图像数据:
- 归一化(Normalization)
- 调整大小(Resize)
- 数据增强(Data Augmentation):旋转、翻转、裁剪
4. 数据集划分
- 典型划分比例:训练集70-80%、验证集10-15%、测试集10-15%
- 划分策略:
- 随机划分:适用于iid(独立同分布)数据
- 分层采样:保持各类别比例一致
- 时间划分:用于时序数据,避免数据泄露
from sklearn.model_selection import train_test_split
train_data, test_data = train_test_split(
dataset, test_size=0.2, random_state=42, stratify=dataset['label']
)
val_data, test_data = train_test_split(
test_data, test_size=0.5, random_state=42, stratify=test_data['label']
)
数据增强技术
对于数据量有限的场景,数据增强是提升模型泛化能力的有效手段。
文本数据增强
- 同义词替换:使用WordNet或词嵌入模型找到相似词
- 回译:将文本翻译成另一种语言再翻译回来
- EDA(Easy Data Augmentation):随机插入、删除、替换词语
图像数据增强
- 几何变换:旋转、翻转、裁剪、缩放
- 颜色变换:亮度、对比度、色相调整
- 噪声添加:高斯噪声、椒盐噪声
实战案例:IMDb数据集准备
以下是使用Hugging Face Datasets库准备IMDb电影评论数据集的代码示例:
# 加载IMDb数据集
from datasets import load_dataset
dataset = load_dataset('imdb')
# 查看数据集结构
print(dataset)
# 输出: DatasetDict({
# train: Dataset({features: ['text', 'label'], num_rows: 25000})
# test: Dataset({features: ['text', 'label'], num_rows: 25000})
# })
# 数据预处理
from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
def preprocess_function(examples):
return tokenizer(
examples['text'],
truncation=True,
max_length=512,
padding='max_length',
return_tensors='pt'
)
# 应用预处理
tokenized_dataset = dataset.map(
preprocess_function,
batched=True,
remove_columns=['text']
)
# 设置数据集格式
tokenized_dataset.set_format(
type='torch',
columns=['input_ids', 'attention_mask', 'label']
)
print("数据预处理完成,准备进行微调...")
小结
高质量的数据准备能够显著提升微调效果:
- 确保数据质量:清洗、标注准确性是基础
- 合理的预处理:针对模型架构选择合适的预处理方法
- 合理的数据集划分:避免数据泄露,保证评估的有效性
- 数据增强:在数据有限时提升模型泛化能力
下一节,我们将探讨如何选择合适的微调框架。