1、认识微调数据
第 28 章中,我们希望模型完成一件很具体的事:读一段中文文本,抽取能够概括主题的关键词,只使用英文分号 ; 分隔,不输出解释。
现在把这个要求变成训练样本。沿用第 28 章的图书馆教学示例,它不属于课程数据文件:
输入:市图书馆周末开设儿童阅读课,读者可通过公众号预约。
请提取关键词,只输出关键词,并使用英文分号分隔。
参考答案:市图书馆;儿童阅读课;公众号预约输入告诉模型“读什么、做什么”,参考答案告诉它“希望怎样回答”。制作自己的数据时,这份答案可能来自人工标注,也可能由另一个模型起草后再审核;不能把未经检查的回复直接当成正确答案。
现在只找本机 案例与源码-4-微调/ 中的 keywords_data_sharegpt_small.jsonl,它是本章的起点。第 5 节再使用清洗脚本和处理结果,训练、预测与导出文件在后续章节用到时查找。
先认识案例文件。 在课程仓库中打开 案例与源码-4-微调/,主要文件如下。先找到 small 样本、清洗脚本和处理结果目录,其他文件用到时再展开。
案例与源码-4-微调/
├── README.md # 数据与使用说明
├── keywords_data_sharegpt_small.jsonl # 本章使用的 2,000 条关键词样本
├── keywords_data_sharegpt.jsonl # 约 5 万条,供扩展练习使用
├── prepare_keywords_dataset.py # 清洗、去重并划分数据
├── evaluate_keywords_predictions.py # 第 32 章评分,清洗脚本也复用其格式检查
├── convert_keywords_predictions.py # 第 32 章转换预测文件
├── processed/ # 已处理的数据
│ └── keywords-clean/ # 课程使用的训练集、验证集和测试集
│ ├── keywords_train.jsonl # 训练集:1,600 条,用于学习和更新参数
│ ├── keywords_validation.jsonl # 验证集:200 条,训练中检查表现
│ ├── keywords_test.jsonl # 测试集:200 条,方案确定后检查最终效果
│ ├── cleaning_report.json # 清洗报告:检查了什么、修改了什么
│ ├── manifest.json # 数据说明单:条数、划分规则与文件校验值
│ └── dataset_info.json # 数据集登记:告诉训练工具怎样读取三份数据
├── document-qa-demo/ # 第 4 节的文档问答练习
├── configs/ # 后续训练、预测和导出配置
├── examples/ # 提示词、模板、标注审核与预处理示例
└── results/ # 后续章节用到的训练曲线和预测结果约 5 万条的完整数据为本目录中的 keywords_data_sharegpt.jsonl,主线跟做使用 small 文件即可。它包含 small 样本,不能把两者分别当成互不重叠的训练集和测试集。
上面列的是案例目录的主要入口,不都是训练数据。 三份数据集是 keywords-clean/ 里的 keywords_train.jsonl、keywords_validation.jsonl 和 keywords_test.jsonl;Python 脚本负责处理数据,配置文件告诉工具怎样运行,报告和记录则保存处理、运行的结果。
本课程从 small 文件的 2,000 条样本出发,经过处理和划分,得到 1,600 条训练集、200 条验证集和 200 条测试集。这三份数据都保留了输入与参考答案,只是用途不同:训练集用于更新模型参数,验证集用于训练中检查表现但不更新参数,测试集留到方案确定后再使用,不参与训练或调参。
processed/keywords-clean/ 是课程附带的处理结果。第 5 节会带你运行脚本,另存到 keywords-clean-repro/,并说明怎样划分、为什么要分开。这里先认识文件和用途。
现在打开 keywords_data_sharegpt_small.jsonl。文件名里的 small 表示它是供练习使用的小份数据,共 2,000 条;不是一种新的数据格式。
这个文件是 JSONL:一行就是一条 JSON 记录。第 1 条样本介绍“高氟铍矿石”的冶炼处理,原始一行很长;下面按原字段和值自动换行,只是为了看清结构,没有改写数据内容。
文件中的样本保存了用户输入和助手参考答案,主要字段如下:
conversations:这条样本中的整段对话;role:这句话是谁说的;content:这句话的具体内容。
本例中,user 消息包含待抽取的文本和任务指令,assistant 消息保存参考关键词答案。
在图中找到三处:待处理的文章、“找出上文中的关键词”这句要求,以及最后用分号分隔的答案。它们与上面的图书馆例子一一对应。
图中展示的是文件中的源记录;标题“模型到底会看到什么”先帮助我们认识文章和参考答案,实际送入模型的内容还要经过第 6 节的模板处理。图内长行有溢出,完整文字见下方展开内容。
<details> <summary>展开阅读第 1 条完整记录(原字段与内容保留)</summary>\{
"conversations": [
\{
"content": "高氟铍矿石在熔炼过程中配入氢氧化铝来脱除其中的氟.结果表明,在配入5%Na2CO3、9.3%Al(OH)3、1400~1500℃熔炼20 min的情况下,BeO回收率达到96%以上,脱氟效果良好(铍玻璃F/BeO能控制在15%以内).为高氟铍矿石的工业应用探索出新的冶炼途径.\n找出上文中的关键词",
"role": "user"
\},
\{
"content": "高氟铍矿;配料;熔炼;回收率;脱氟率",
"role": "assistant"
\}
]
\}
这里只为阅读展开排版,保存为 JSONL 时仍是一条物理行,消息中的换行写作 \n。
数据准备工作:
从文章到训练文件,中间还有几件事:选取符合任务的文章、核对答案、修正格式、处理重复样本,再分出训练和检查时使用的数据。把这些工作连起来,就是微调中的数据工程,也就是本章要完成的数据准备。