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의 웹 인터페이스는 기술적 전문 지식이 없는 사용자도 데이터셋을 편집할 수 있도록 합니다.

데이터셋 페이지를 열고 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와 같은 다른 라이브러리는 여러 파일로 구성된 데이터셋을 편집하는 데 유용합니다. 지원되는 라이브러리의 전체 목록은 여기에서 확인하세요.

웹사이트에서 데이터셋에 액세스하는 방법에 대한 정보는 데이터셋 페이지의 “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,
)

Chunk은 약 64kB이며 Parquet는 컬럼별로 데이터를 저장하므로, 실제로 Optimized Parquet 파일을 편집할 때 다음과 같은 일이 발생합니다:

  • 새로운 열을 추가하면 -> 새로운 열의 청크만 업로드됩니다
  • add/edit/delete a row -> 컬럼당 하나의 chunk가 업로드됩니다

그리고 이 외에도 메타데이터를 포함하는 Parquet 푸터의 청크도 업로드됩니다.

지원되는 라이브러리 페이지에서 해당 라이브러리가 Optimized Parquet을 지원하는지 확인해 보세요.

스트리밍

대용량 데이터셋의 경우, 끝에서 끝까지(streaming) 처리되는 파이프라인을 위한 데이터셋 스트리밍 기능이 있는 라이브러리를 권장합니다. 이 경우, 데이터셋 처리는 기존 데이터가 도착하고 새 데이터가 Hub에 업로드되는 동안 점진적으로 실행됩니다.

지원되는 라이브러리 페이지에서 라이브러리가 스트리밍을 지원하는지 확인하세요.

Update on GitHub