Hub documentation
编辑数据集
编辑数据集
Hub 支持对社区和研究数据集进行协作式整理。我们鼓励您探索 Hub 上可用的数据集,并为其改进做出贡献,以帮助壮大机器学习社区并加速所有人的进步。欢迎所有贡献!
如果还没有,请先创建一个 Hugging Face Hub 账户。
使用 Hub UI 进行编辑
目前,此功能仅适用于 CSV、TSV 和 Parquet 数据集。
Hub 的 Web 界面允许没有任何技术背景的用户编辑数据集。
打开数据集页面并导航至 Data Studio 标签页以开始编辑。

点击 切换编辑模式 以启用数据集编辑。


您可以编辑任意数量的单元格,最后点击 Commit 以提交更改并留下提交信息。


使用 huggingface_hub 客户端库
huggingface_hub 库可以管理 Hub 仓库,包括编辑数据集。
例如,以下是如何使用 Hugging Face FileSystem API 编辑 CSV 文件:
from huggingface_hub import hffs
path = f"datasets/{repo_id}/data.csv"
with hffs.open(path, "r") as f:
content = f.read()
edited_content = content.replace("foo", "bar")
with hffs.open(path, "w") as f:
f.write(edited_content)你也可以在本地磁盘上应用编辑并提交更改:
from huggingface_hub import hf_hub_download, upload_file
local_path = hf_hub_download(repo_id=repo_id, path_in_repo= "data.csv", repo_type="dataset")
with open(path, "r") as f:
content = f.read()
edited_content = content.replace("foo", "bar")
with open(path, "w") as f:
f.write(edited_content)
upload_file(repo_id=repo_id, path_in_repo=local_path, repo_type="dataset")若要本地获取整个数据集仓库并一次性编辑多个文件,请使用
snapshot_download和upload_folder,而不是hf_hub_download和upload_file
访问客户端库的文档以了解更多信息。
集成库
如果 Hub 上的数据集与某个受支持的库兼容,那么加载、编辑和推送该数据集只需几行代码。
以下是如何使用 Pandas 编辑 CSV 文件:
import pandas as pd
# Load the dataset
df = pd.read_csv(f"hf://datasets/{repo_id}/data.csv")
# Edit
df = df.apply(...)
# Commit the changes
df.to_csv(f"hf://datasets/{repo_id}/data.csv")Polars 和 DuckDB 等库也实现了 hf:// 协议,用于在 Hugging Face 上读取、编辑和写入文件。此外,Spark、Dask 或 🤗 Datasets 等其他库对于编辑由许多文件组成的数据集也很有用。完整的受支持库列表请参见 此处
有关在网站上访问数据集的信息,您可以点击数据集页面上的“使用此数据集”按钮来查看操作方法。
例如,samsum 在下方展示了如何使用 🤗 Datasets 进行操作。


仅上传新数据
Hugging Face 的存储由 Xet 提供支持,它利用分块去重技术使上传更加高效。 与传统云存储不同,Xet 在提交更改时无需重新上传整个数据集。 相反,它会自动检测数据集中哪些部分发生了变化,并指示客户端库仅上传已更新的部分。 为此,Xet 使用一种智能算法来查找 Hugging Face 上已存在的 64kB 分块。
让我们看看之前使用 Pandas 的示例:
import pandas as pd
# Load the dataset
df = pd.read_csv(f"hf://datasets/{repo_id}/data.csv")
# Edit part of the dataset
df = df.apply(...)
# Commit the changes
df.to_csv(f"hf://datasets/{repo_id}/data.csv")此代码首先加载数据集,然后对其进行编辑。
编辑完成后,to_csv() 会在内存中生成文件,将其分块,询问 Xet 哪些块已存在于 Hugging Face 上以及哪些块已更改,然后仅上传新数据。
优化的 Parquet 编辑
需要上传的数据量取决于编辑内容和文件结构。
Parquet 格式采用列式存储,并在页面级别进行压缩(页面大小约为 1MB)。 我们针对 Xet 优化了 Parquet,采用了 Parquet 内容定义分块,这通常可确保未更改的数据对应未更改的页面。
例如,此代码上传 df 的内容,然后对于 edited_df,由于只上传了发生变化的块,因此上传速度更快:
import pandas as pd
df.to_parquet(
"hf://datasets/username/my_dataset/imdb.parquet",
# Optimize for Xet
use_content_defined_chunking=True,
write_page_index=True,
)
edited_df = ... # e.g. with added/modified/removed rows or columns
edited_df.to_parquet(
"hf://datasets/username/my_dataset/imdb.parquet",
# Optimize for Xet
use_content_defined_chunking=True,
write_page_index=True,
)数据块大小约为 64kB,而 Parquet 按列存储数据,因此实际编辑优化后的 Parquet 文件时,会发生以下情况:
- 添加新列 -> 仅上传新列的块
- 添加/编辑/删除一行 -> 每列上传一个数据块
此外,包含元数据的 Parquet 文件尾块也会被上传。
请在支持的库页面中查看您的库是否支持 Optimized Parquet。
流式
对于大型数据集,建议使用具备数据集流式处理功能的库,以构建端到端的流式处理管道。 在这种情况下,随着旧数据的到达和新数据上传到 Hub,数据集处理会逐步进行。
请在支持的库页面中查看你的库是否支持流式传输。
Update on GitHub