Hub documentation

データセットの編集

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

データセットの編集

Hubは、コミュニティおよび研究用データセットの共同キュレーションを可能にします。Hubで利用可能なデータセットを探索し、その改善に貢献することで、MLコミュニティの成長とすべての人のための進歩の加速に協力してください。すべての貢献を歓迎します!

アカウントをお持ちでない場合は、まず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")

データセットリポジトリ全体をローカルに取得して一度に多くのファイルを編集するには、hf_hub_download と upload_file の代わりに snapshot_download と upload_folder を使用します。

詳細については、クライアントライブラリのドキュメントをご覧ください。

統合ライブラリ

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 などのライブラリは、多数のファイルで構成されるデータセットの編集に役立ちます。サポートされているライブラリの完全なリストは、こちらをご覧ください。

Webサイト上でデータセットにアクセスする方法については、データセットページの「Use this dataset」ボタンをクリックすると、その方法を確認できます。 例えば、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 Content Defined Chunkingにより、変更されていないデータは通常、変更されていないページになることを保証しています。

例えば、このコードは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はカラムごとにデータを保存するため、Optimized Parquetファイルを編集する際に実際に起こることは以下の通りです。

  • 新しい列を追加 -> 新しい列のチャンクのみがアップロードされます
  • 行の追加/編集/削除 -> 各カラムごとに1つのチャンクがアップロードされます

さらに、メタデータを含むParquetフッターのチャンクもアップロードされます。

サポートされているライブラリのページで、お使いのライブラリがOptimized Parquetに対応しているかご確認ください。

ストリーミング

大規模なデータセットの場合、エンドツーエンドのストリーミングパイプラインに対応したデータセットストリーミング機能を持つライブラリが推奨されます。 この場合、データセットの処理は、古いデータが到着し、新しいデータがHubにアップロードされるにつれて段階的に実行されます。

サポートされているライブラリのページで、お使いのライブラリがストリーミングに対応しているかご確認ください。

Update on GitHub