Python处理与格式化微调数据集的完整流程
本文讲解如何利用Python结合datasets、pandas与jsonlines工具,完成从预训练语料读取、自定义问答数据解析到Prompt模板格式化的完整流程。适用于大语言模型微调前的数据准备阶段,提供可直接运行的代码示例与结构整理方法。
环境准备与核心库导入
第1步:安装并引入数据处理依赖
处理大规模文本与结构化问答数据,通常需要流式加载、表格操作与序列化写入能力。建议提前通过终端安装相关包:
pip install pandas datasets jsonlines
在脚本中导入核心模块:
import itertools
import pandas as pd
import jsonlines
from pprint import pprint
from datasets import load_dataset
各库作用:pandas负责读取CSV/Excel/JSON表格;jsonlines用于高效读写逐行JSON文件;datasets是标准数据集加载器,支持内存映射与流式读取;itertools提供切片迭代工具;pprint优化控制台打印排版。
加载原始数据与样本核对
第2步:流式加载开源预训练数据集
以allenai/c4英文语料为例,采用流式模式(streaming)可避免全量载入导致内存溢出:
pretrained_dataset = load_dataset(
"allenai/c4", "en", split="train", streaming=True
)
第3步:提取前N个样本进行预览
使用itertools.islice安全截取头部数据,确认字段结构是否符合预期:
n = 5
top_n = itertools.islice(pretrained_dataset, n)
for sample in top_n:
pprint(sample)
自定义问答数据格式化
第4步:读取本地JSON Lines指令集
假设已准备好包含question与answer字段的lamini_docs.jsonl文件,直接转为DataFrame便于索引:
filename = "lamini_docs.jsonl"
instruction_df = pd.read_json(filename, lines=True)
print(instruction_df.head())
第5步:定义Prompt模板并拼接文本
大语言模型微调通常要求固定的输入输出格式。使用Python字符串模板可将问答对转为标准指令:
PROMPT_TEMPLATE_QA = """### Question:
{question}
### Answer:
{answer}"""
# 测试单条拼接效果
sample_q = instruction_df["question"].iloc[0]
sample_a = instruction_df["answer"].iloc[0]
formatted_text = PROMPT_TEMPLATE_QA.format(question=sample_q, answer=sample_a)
pprint(formatted_text)
构建微调数据集并持久化保存
第6步:批量转换并划分数据类型
遍历全部样本,分别生成纯文本序列(用于继续预训练)与问答配对序列(用于指令微调),并存入列表:
num_samples = len(instruction_df)
text_only_data = []
qa_pair_data = []
for i in range(num_samples):
q = instruction_df["question"].iloc[i]
a = instruction_df["answer"].iloc[i]
# 纯文本格式
text_only_data.append({"text": PROMPT_TEMPLATE_QA.format(question=q, answer=a)})
# 问答配对格式
qa_pair_data.append({
"question": f"### Question:\n{q}",
"answer": a
})
第7步:写入JSONL文件
注意:覆盖写入前请务必备份原始数据。jsonlines支持批量写入,速度远优于传统逐行追加:
output_file = "lamini_docs_processed.jsonl"
with jsonlines.open(output_file, mode='w') as writer:
writer.write_all(qa_pair_data)
第8步:验证本地数据集加载状态
处理完成后,推荐使用datasets库重新挂载本地文件,检查元数据分区是否正确:
processed_ds = load_dataset("json", data_files=output_file)
print(processed_ds)
至此,原始问答数据已成功转换为符合主流训练框架规范的JSONL格式。后续可直接接入LoRA、全参数微调等流程。以上就是利用Python处理与格式化微调数据集的详细内容,更多关于大语言模型数据清洗与指令对齐的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









