在LLM微调工程化实践中,数据预处理的标准化流程是确保模型效果的关键环节。本文将基于LoRA和Adapter两种微调方案,详细介绍可复现的数据预处理流程。
标准化流程设计
1. 数据清洗与格式统一
import pandas as pd
from datasets import Dataset
def clean_data(df):
# 移除空值和重复行
df = df.dropna().drop_duplicates()
# 统一文本格式
df['text'] = df['text'].str.strip()
return df
# 加载数据
raw_data = pd.read_csv('training_data.csv')
df_cleaned = clean_data(raw_data)
2. Prompt模板标准化
# LoRA微调中的Prompt构建
prompt_template = "请根据以下输入生成回复:{input}\n回答:"
def build_prompt(input_text, output_text):
return prompt_template.format(input=input_text, output=output_text)
# 构建训练数据集
train_dataset = Dataset.from_dict({
'prompt': [build_prompt(row['input'], row['output']) for _, row in df_cleaned.iterrows()],
'response': df_cleaned['output'].tolist()
})
3. 数据分词与截断处理
from transformers import AutoTokenizer
# 加载tokenizer
model_name = "bert-base-chinese"
tokenizer = AutoTokenizer.from_pretrained(model_name)
# 分词并截断
def tokenize_function(examples):
return tokenizer(
examples["prompt"],
examples["response"],
truncation=True,
padding="max_length",
max_length=512
)
# 应用分词
train_dataset = train_dataset.map(tokenize_function, batched=True)
Adapter微调特化处理
在Adapter微调中,需额外添加适配器层的输入标记:
# 添加Adapter标记
adapter_prompt = "[ADAPTER]"
full_prompt = adapter_prompt + prompt_template
该标准化流程确保了数据预处理的一致性,为LoRA和Adapter微调方案提供了可靠的数据基础。

讨论