LLM 数据集格式 101:Hugging Face 开发者无废话指南
数据集是大型语言模型(LLM)的无名英雄。
如果没有干净、结构化的数据,即使是最好的模型架构也只是昂贵的矩阵乘法。
保持简单,保持高效,让 Python 发挥其魔力! (っ◔◡◔)っ
四大数据集格式(及其重要性)
1. CSV/TSV
是什么
最原始、最简单的格式。CSV/TSV 文件非常适合简单、结构化的示例,如带标签的提示/响应或微调对(例如,["instruction", "output"]
)。
代码示例
from datasets import load_dataset
dataset = load_dataset("csv", data_files="your_data.csv")
何时使用
- 你在原型开发阶段,需要简单性。
- 你的数据规模较小,不需要更复杂格式的额外开销。
2. JSON/JSONL
是什么
数据格式的瑞士军刀。JSONL(JSON Lines)在现代 LLM 管道中广泛采用,因为每行都是一个独立的 JSON 对象——非常适合嵌套和多字段数据。
代码示例
# Sample content of data.jsonl:
{"text": "LLMs are amazing.", "metadata": {"source": "arxiv"}}
{"text": "Fine-tuning improves performance.", "metadata": {"source": "github"}}
from datasets import load_dataset
dataset = load_dataset("json", data_files="data.jsonl")
何时使用
- 你的数据包含多个字段或嵌套结构。
- 你需要流式处理大型数据集,而无需将所有数据加载到内存中。
3. Parquet
是什么
一种列式二进制存储格式,针对速度进行了优化。Parquet 有效地压缩数据并最大限度地减少 I/O 操作,使其成为训练大规模数据集(例如 100GB+)的理想选择。
代码示例
from datasets import load_dataset
dataset = load_dataset("parquet", data_files="s3://my-bucket/data.parquet")
何时使用
- 你正在扩展分布式训练。
- 你正在使用云存储或需要优化成本和性能。
4. 原始文本文件
是什么
极简主义者的选择。使用原始文本文件(例如 .txt
)来存储非结构化数据,例如小说、代码或日志。如果需要,只需使用分隔符(如 \n\n
)分隔文档即可。
代码示例
from datasets import load_dataset
dataset = load_dataset("text", data_dir="my_texts/")
何时使用
- 在大规模非结构化语料库上预训练 LLM。
- 你正在执行低级分词或希望从原始数据获得最大吞吐量。
根据任务匹配格式
选择正确的格式不仅仅是文件类型的问题——它是关于数据与模型任务的对齐。以下是一个快速细分:
🔧 预训练
格式:原始文本或 Parquet
理由:预训练需要巨大的吞吐量。原始文本提供了简单性,而 Parquet 则在大规模下提供了效率。🎯 微调
格式:JSONL 或 CSV
理由:微调受益于结构化的对(输入/输出),这使得元数据添加和一致性变得容易。📊 RLHF/评估
格式:带嵌套结构的 JSON
理由:人类反馈强化学习 (RLHF) 等任务需要捕获复杂的层次结构(例如,{"prompt": "...", "responses": [{"text": "...", "reward": 0.8}, ...]}
).
🚀 生产
格式:Parquet 或云优化格式(例如,存储在 S3 或 Hugging Face Hub 上的数据集)
理由:在生产中,延迟和成本很重要。Parquet 等列式格式有助于满足这些要求。
专业提示:Hugging Face 的秘密武器
Hugging Face 的 datasets
库自动解决了很多难题。
- 洗牌:随机化数据以减少训练偏差。
- 流式传输:即时处理数据以防止 RAM 过载。
- 版本控制:轻松跟踪数据集版本。
- 格式间转换:无需编写额外代码即可在不同格式之间切换。
示例
from datasets import load_dataset
dataset = load_dataset("imdb") # Yes, it’s that easy!
将其与 Hugging Face Hub 上的数据集查看器结合使用,可即时交互式地可视化你的数据。
TL;DR
- 小数据?坚持使用 CSV/JSON。
- 大数据?使用 Parquet。
- 原始文本大块数据?使用普通的
.txt
文件。 - 始终使用
datasets.load_dataset()
以避免样板代码并简化工作流程。
你的模型的好坏取决于它所“吃”的数据。
为你的任务选择正确的格式是关键,无论你是进行预训练、微调、评估还是部署到生产环境。
这些都是你可以采取的步骤,以确保你的模型/LLM/代理高效运行。
由 tegridydev 于 2025 年 1 月发布
如需更多关于 LLM 开发和基于 AI 的漫谈指南和技巧,请随时关注或发表评论!:D