Datasets documentation

Construir e carregar

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v4.8.4).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Construir e carregar

Quase todo fluxo de trabalho de deep learning começa com o carregamento de um conjunto de dados, o que o torna uma das etapas mais importantes. Com o 🤗 Datasets, há mais de 900 conjuntos de dados disponíveis para ajudar você a começar com sua tarefa de NLP. Tudo o que você precisa fazer é chamar load_dataset() para dar seu primeiro passo. Essa função é um verdadeiro cavalo de batalha em todos os sentidos, pois constrói e carrega cada conjunto de dados que você usa.

ELI5: load_dataset

Vamos começar com uma explicação básica, como se você tivesse cinco anos.

Um dataset é um diretório que contém:

  • Alguns arquivos de dados em formatos genéricos (JSON, CSV, Parquet, texto, etc.)
  • Um cartão de dataset chamado README.md que contém documentação sobre o dataset, bem como um cabeçalho YAML para definir as tags e configurações dos datasets

A função load_dataset() busca o dataset solicitado localmente ou no Hugging Face Hub. O Hub é um repositório central onde todos os datasets e modelos do Hugging Face são armazenados.

Se o conjunto de dados contiver apenas arquivos de dados, load_dataset() inferirá automaticamente como carregar os arquivos de dados com base em suas extensões (json, csv, parquet, tsfile, txt, etc.). Por baixo dos panos, o 🤗 Datasets usará um DatasetBuilder apropriado com base no formato dos arquivos de dados. Existe um builder para cada formato de arquivo de dados no 🤗 Datasets:

Leia a seção Share para saber mais sobre como compartilhar um conjunto de dados.

🤗 Datasets baixa os arquivos do dataset da URL original, gera o dataset e o faz cache em uma tabela Arrow no seu drive. Se você já baixou o dataset antes, o 🤗 Datasets o recarrega do cache para evitar o trabalho de baixá-lo novamente.

Agora que você tem uma compreensão de alto nível sobre como os conjuntos de dados são construídos, vamos dar uma olhada mais detalhada nos detalhes de como tudo isso funciona.

Criando um conjunto de dados

Ao carregar um dataset pela primeira vez, o 🤗 Datasets pega o arquivo de dados bruto e o constrói em uma tabela de linhas e colunas tipadas. Existem duas classes principais responsáveis por construir um dataset: BuilderConfig e DatasetBuilder.

BuilderConfig

BuilderConfig é a classe de configuração de DatasetBuilder. O BuilderConfig contém os seguintes atributos básicos sobre um conjunto de dados:

AtributoDescrição
nameNome curto do conjunto de dados.
versionIdentificador da versão do conjunto de dados.
data_dirArmazena o caminho para uma pasta local contendo os arquivos de dados.
data_filesArmazena os caminhos para os arquivos de dados locais.
descriptionDescrição do conjunto de dados.

Se você deseja adicionar atributos adicionais ao seu conjunto de dados, como os rótulos de classe, pode subclassear a classe base BuilderConfig. Existem duas maneiras de preencher os atributos de uma classe BuilderConfig ou subclasse:

  • Forneça uma lista de instâncias pré-definidas da classe BuilderConfig (ou de uma subclasse) no atributo DatasetBuilder.BUILDER_CONFIGS() dos datasets.

  • Quando você chama load_dataset(), quaisquer argumentos de palavra-chave que não sejam específicos do método serão usados para definir os atributos associados da classe BuilderConfig. Isso substituirá os atributos predefinidos se uma configuração específica tiver sido selecionada.

Você também pode definir o DatasetBuilder.BUILDER_CONFIG_CLASS para qualquer subclasse personalizada de BuilderConfig.

DatasetBuilder

DatasetBuilder acessa todos os atributos dentro de BuilderConfig para construir o dataset real.

Existem três métodos principais em DatasetBuilder:

  1. DatasetBuilder._info() é responsável por definir os atributos do dataset. Quando você chama dataset.info, o 🤗 Datasets retorna as informações armazenadas aqui. Da mesma forma, os Features também são especificados aqui. Lembre-se, os Features são como o esqueleto do dataset. Eles fornecem os nomes e os tipos de cada coluna.

  2. DatasetBuilder._split_generator baixa ou recupera os arquivos de dados solicitados, os organiza em splits e define argumentos específicos para o processo de geração. Este método possui um DownloadManager que baixa arquivos ou os recupera do seu sistema de arquivos local. Dentro do DownloadManager, há um método DownloadManager.download_and_extract() que aceita um dicionário de URLs para os arquivos de dados originais e baixa os arquivos solicitados. As entradas aceitas incluem: uma única URL ou caminho, ou uma lista/dicionário de URLs ou caminhos. Qualquer tipo de arquivo compactado, como arquivos TAR, GZIP e ZIP, será extraído automaticamente.

    Quando os arquivos são baixados, o SplitGenerator os organiza em splits. O SplitGenerator contém o nome do split e quaisquer argumentos de palavra-chave fornecidos ao método DatasetBuilder._generate_examples. Os argumentos de palavra-chave podem ser específicos para cada split e, tipicamente, incluem pelo menos o caminho local para os arquivos de dados de cada split.

  3. DatasetBuilder._generate_examples lê e analisa os arquivos de dados de uma divisão. Em seguida, ele gera exemplos do dataset de acordo com o formato especificado em features de DatasetBuilder._info(). A entrada de DatasetBuilder._generate_examples é, na verdade, o filepath fornecido nos argumentos de palavra-chave do último método.

    O conjunto de dados é gerado com um gerador em Python, que não carrega todos os dados na memória. Como resultado, o gerador pode lidar com conjuntos de dados grandes. No entanto, antes que as amostras geradas sejam gravadas no arquivo do conjunto de dados no disco, elas são armazenadas em um buffer ArrowWriter. Isso significa que as amostras geradas são gravadas por lote. Se as amostras do seu conjunto de dados consumirem muita memória (imagens ou vídeos), certifique-se de especificar um valor baixo para o atributo DEFAULT_WRITER_BATCH_SIZE em DatasetBuilder. Recomendamos não exceder um tamanho de 200 MB.

Manter a integridade

Para garantir que um conjunto de dados esteja completo, o load_dataset() executa uma série de testes nos arquivos baixados para verificar se tudo está presente. Dessa forma, você não se depara com surpresas quando o conjunto de dados solicitado não é gerado como esperado. O load_dataset() verifica:

  • O número de divisões no DatasetDict gerado.
  • O número de amostras em cada divisão do DatasetDict gerado.
  • A lista de arquivos baixados.
  • Os checksums SHA256 dos arquivos baixados (desativado por padrão).

Se o conjunto de dados não passar nas verificações, é provável que o autor do conjunto de dados tenha feito algumas alterações nos arquivos de dados.

Nesse caso, um erro é lançado para alertar que o conjunto de dados foi alterado. Para ignorar o erro, é necessário especificar verification_mode="no_checks" em load_dataset(). Sempre que você vir um erro de verificação, sinta-se à vontade para abrir uma discussão ou um pull request na aba “Community” do conjunto de dados correspondente, para que as verificações de integridade desse conjunto de dados sejam atualizadas.

Segurança

Os repositórios de conjuntos de dados no Hub são verificados quanto a malware; veja mais informações aqui.

Update on GitHub