LLM 数据集格式 101:Hugging Face 开发者无废话指南

社区文章 发布于 2025 年 2 月 1 日

数据集是大型语言模型(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

社区

注册登录 评论