mlcommons/croissant

GitHub: mlcommons/croissant

Croissant 是一种面向机器学习数据集的高阶标准化元数据格式,将元数据、资源、结构和 ML 语义整合为单一文件,使数据集更易被发现、加载和跨工具使用。

Stars: 857 | Forks: 117

# Croissant 🥐 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/14e90a6e66185432.svg)](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/14e90a6e66185432.svg) [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/) ## 简介 Croissant 🥐 是一种用于机器学习数据集的高阶格式,它将元数据、资源文件描述、数据结构以及默认的 ML 语义结合在一个文件中;它适用于现有数据集,使其更易于被工具发现、使用和支持。Croissant 构建于 schema.org 及其 Dataset 词汇表之上,这是一种广泛用于在 Web 上表示数据集并使其可搜索的格式。您可以在配套论文 [Croissant:用于 ML 就绪数据集的元数据格式](https://doi.org/10.1145/3650203.3663326) 中找到详细的入门介绍。 ## 试用 Croissant 目前正由社区积极开发中。您可以尝试 Croissant 的实现 `mlcroissant`: 安装(需要 Python 3.10+): ``` pip install mlcroissant ``` 加载示例数据集: ``` import mlcroissant as mlc ds = mlc.Dataset("https://raw.githubusercontent.com/mlcommons/croissant/main/datasets/1.0/gpt-3/metadata.json") metadata = ds.metadata.to_json() print(f"{metadata['name']}: {metadata['description']}") for x in ds.records(record_set="default"): print(x) ``` 在您的 ML 工作流中使用它: ``` # 1. 指向本地或远程的 Croissant 文件 import mlcroissant as mlc url = "https://huggingface.co/api/datasets/zalando-datasets/fashion_mnist/croissant" # 2. 检查元数据 print(mlc.Dataset(url).metadata.to_json()) # 3. 在你的 ML 工作负载中使用 Croissant 数据集 import tensorflow_datasets as tfds builder = tfds.core.dataset_builders.CroissantBuilder( jsonld=url, record_set_ids=["fashion_mnist"], file_format='array_record', ) builder.download_and_prepare() # 4. 划分训练/测试集 train, test = builder.as_data_source(split=['default[:80%]', 'default[80%:]']) ``` 请查看 [notebook 配方](python/mlcroissant/recipes) 获取更多示例。 ## 为什么需要针对 ML 数据集的标准格式? 数据集是机器学习 (ML) 的源代码,但处理 ML 数据集却异常困难,因为每个数据集都有独特的文件组织方式以及将文件内容转换为数据结构的方法,因此需要一种全新的方式来使用这些数据。我们需要一种标准的数据集格式,以便更容易地发现和使用 ML 数据集,特别是用于开发创建、理解和改进 ML 数据集的工具。 ## Croissant 格式 Croissant 🥐 是一种用于机器学习数据集的高阶格式。Croissant 将四个丰富的层次结合在一起(我们希望它既美味又易用 😉): - 元数据:数据集的描述,包括负责任的 ML 相关内容 - 资源:包含原始数据的一个或多个文件或其他来源 - 结构:原始数据如何组合并整理成可供使用的数据结构 - ML 语义:数据在 ML 上下文中最常用的使用方式 ## 简单的格式示例 这是一个极其简单的 Croissant 格式示例,注释中展示了这四个层次。为简便起见,省略了 `@context` 前导部分。本仓库的 `datasets` 文件夹中包含了适用于各种数据集的完整 Croissant 定义。 ``` { "@type": "sc:Dataset", "name": "minimal_example_with_recommended_fields", "description": "This is a minimal example, including the required and the recommended fields.", "license": "https://creativecommons.org/licenses/by/4.0/", "url": "https://example.com/dataset/recipes/minimal-recommended", "conformsTo": "http://mlcommons.org/croissant/1.0", "distribution": [ { "@type": "cr:FileObject", "@id": "minimal.csv", "name": "minimal.csv", "contentUrl": "data/minimal.csv", "encodingFormat": "text/csv", "sha256": "48a7c257f3c90b2a3e529ddd2cca8f4f1bd8e49ed244ef53927649504ac55354" } ], "recordSet": [ { "@type": "cr:RecordSet", "name": "examples", "description": "Records extracted from the example table, with their schema.", "field": [ { "@type": "cr:Field", "name": "name", "description": "The first column contains the name.", "dataType": "sc:Text", "source": { "fileObject": { "@id": "minimal.csv" }, "extract": { "column": "name" } } }, { "@type": "cr:Field", "name": "age", "description": "The second column contains the age.", "dataType": "sc:Integer", "source": { "fileObject": { "@id": "minimal.csv" }, "extract": { "column": "age" } } } ] } ] } ``` ## 资源 - [GitHub 仓库](https://github.com/mlcommons/croissant) - 规范说明书 - 示例 - 验证器 - [共享云端硬盘](https://drive.google.com/corp/drive/folders/1StGRO4CGWUsX9kHdM5aOQNOF1L5e2y97) - 需求文档 - 负责任的 AI 方法