微调数据预处理标准化流程实践
在LLM微调工程化实践中,数据预处理是决定模型效果的关键环节。本文将分享一套可复现的LoRA微调数据预处理标准化流程。
标准化流程概述
原始数据 → 数据清洗 → 格式转换 → Tokenize → Batch构建 → 输出
具体实现步骤
1. 数据清洗与格式化
import json
def preprocess_data(raw_data):
cleaned = []
for item in raw_data:
# 去除空行和特殊字符
text = item['text'].strip()
if len(text) > 10: # 过滤过短文本
cleaned.append({
'instruction': item.get('instruction', ''),
'input': item.get('input', ''),
'output': item['output']
})
return cleaned
2. Adapter微调格式转换
from transformers import AutoTokenizer
# 使用LoRA微调时需要的格式
def format_for_adapter(data, tokenizer):
formatted = []
for item in data:
prompt = f"{item['instruction']} {item['input']}")
response = item['output']
# 构建输入输出对
full_prompt = f"<|startofprompt|>{prompt}<|endofprompt|>"
formatted.append({
'input_ids': tokenizer.encode(full_prompt, add_special_tokens=False),
'labels': tokenizer.encode(response, add_special_tokens=False)
})
return formatted
3. Batch构建与优化
from torch.utils.data import Dataset
class CustomDataset(Dataset):
def __init__(self, data, tokenizer):
self.data = data
self.tokenizer = tokenizer
def __len__(self):
return len(self.data)
def __getitem__(self, idx):
item = self.data[idx]
return {
'input_ids': torch.tensor(item['input_ids']),
'labels': torch.tensor(item['labels'])
}
这套标准化流程确保了数据质量一致性,为后续LoRA和Adapter微调提供可靠输入。
适用场景
- 多轮对话数据预处理
- 指令跟随任务数据准备
- 代码生成模型微调数据构建

讨论