Hub documentation
Editando conjuntos de dados
Editando conjuntos de dados
O Hub permite a curadoria colaborativa de conjuntos de dados da comunidade e de pesquisa. Incentivamos você a explorar os conjuntos de dados disponíveis no Hub e contribuir para sua melhoria, ajudando a fazer crescer a comunidade de ML e acelerar o progresso para todos. Todas as contribuições são bem-vindas!
Comece criando uma conta no Hugging Face Hub, caso ainda não tenha uma.
Editar usando a interface do Hub
Esta funcionalidade está disponível apenas para conjuntos de dados em CSV, TSV e Parquet, por enquanto.
A interface web do Hub permite que usuários sem qualquer conhecimento técnico editem um conjunto de dados.
Abra a página do conjunto de dados e navegue até a aba Data Studio para começar a editar.

Clique em Alternar para o modo de edição para habilitar a edição do conjunto de dados.


Edite quantas células quiser e, por fim, clique em Commit para confirmar suas alterações e deixar uma mensagem de commit.


Usando a biblioteca de clientes huggingface_hub
A biblioteca huggingface_hub pode gerenciar repositórios do Hub, incluindo a edição de conjuntos de dados.
Por exemplo, aqui está como editar um arquivo CSV usando a Hugging Face FileSystem API:
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)Você também pode aplicar a edição localmente no seu disco e commitar as alterações:
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")Para ter o repositório de dados inteiro localmente e editar muitos arquivos de uma vez, use
snapshot_downloadeupload_folderem vez dehf_hub_downloadeupload_file
Acesse a documentação da biblioteca de cliente para saber mais.
Bibliotecas integradas
Se um conjunto de dados no Hub for compatível com uma biblioteca suportada, carregar, editar e enviar o conjunto de dados leva apenas algumas linhas.
Aqui está como editar um arquivo CSV com Pandas:
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")Bibliotecas como Polars e DuckDB também implementam o protocolo hf:// para ler, editar e gravar arquivos no Hugging Face. E outras bibliotecas são úteis para editar conjuntos de dados compostos por muitos arquivos, como Spark, Dask ou 🤗 Datasets. Veja a lista completa de bibliotecas suportadas aqui
Para informações sobre como acessar o conjunto de dados no site, você pode clicar no botão “Use this dataset” na página do conjunto de dados para ver como fazer isso.
Por exemplo, samsum mostra como fazer isso com 🤗 Datasets abaixo.


Envie apenas os novos dados
O armazenamento da Hugging Face é impulsionado pelo Xet, que usa a deduplicação de blocos para tornar os uploads mais eficientes. Diferente do armazenamento em nuvem tradicional, o Xet não exige que o conjunto de dados inteiro seja reenviado para commitar alterações. Em vez disso, ele detecta automaticamente quais partes do conjunto de dados foram alteradas e instrui a biblioteca do cliente a enviar apenas as partes atualizadas. Para fazer isso, o Xet usa um algoritmo inteligente para encontrar blocos de 64kB que já existem na Hugging Face.
Vamos ver nosso exemplo anterior com 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")Este código primeiro carrega um conjunto de dados e, em seguida, o edita.
Quando as edições são concluídas, to_csv() materializa o arquivo na memória, o divide em blocos, pergunta ao Xet quais blocos já estão no Hugging Face e quais foram alterados, e então faz o upload apenas dos novos dados.
Edição otimizada de Parquet
A quantidade de dados a serem enviados depende das edições e da estrutura do arquivo.
O formato Parquet é colunar e comprimido no nível de página (as páginas têm cerca de ~1MB). Otimizamos o Parquet para o Xet com Parquet Content Defined Chunking, o que garante que dados inalterados geralmente resultem em páginas inalteradas.
Por exemplo, este código faz o upload do conteúdo de df e, em seguida, para edited_df, o upload é mais rápido, pois ele só faz o upload dos blocos que foram alterados:
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,
)Os chunks têm ~64kB e o Parquet salva os dados coluna por coluna, então, na prática, é o que acontece ao editar um arquivo Parquet Otimizado:
- adicione uma nova coluna -> apenas os blocos da nova coluna são enviados
- adicionar/editar/excluir uma linha -> um chunk por coluna é enviado
E, além disso, os blocos do rodapé do Parquet que contêm metadados também são enviados.
Verifique se sua biblioteca suporta Parquet Otimizado na página bibliotecas suportadas.
Streaming
Para conjuntos de dados grandes, são recomendadas bibliotecas com recursos de streaming de datasets para pipelines de streaming de ponta a ponta. Nesse caso, o processamento do conjunto de dados é executado de forma progressiva à medida que os dados antigos chegam e os novos dados são enviados ao Hub.
Verifique se sua biblioteca oferece suporte a streaming na página bibliotecas compatíveis.
Update on GitHub