Um modelo de linguagem é um modelo matemático que descreve uma linguagem humana como uma distribuição de probabilidade sobre seu vocabulário. Para treinar uma rede de aprendizagem profunda para modelar uma linguagem, você precisa identificar o vocabulário e aprender sua distribuição de probabilidade. Você não pode criar o modelo do nada. Você precisa de um conjunto de dados com o qual seu modelo possa aprender.
Neste artigo, você aprenderá sobre conjuntos de dados usados para treinar modelos de linguagem e como obter conjuntos de dados comuns de repositórios públicos.
Vamos começar.
Um bom conjunto de dados para treinar um modelo de linguagem
Um bom modelo de linguagem deve aprender o uso correto da linguagem, livre de preconceitos e erros. Ao contrário das linguagens de programação, as linguagens humanas carecem de gramática e sintaxe formais. Eles evoluem continuamente, impossibilitando catalogar todas as variações linguísticas. Portanto, o modelo deve ser treinado a partir de um conjunto de dados em vez de elaborado a partir de regras.
Configurar um conjunto de dados para modelagem de linguagem é um desafio. Você precisa de um conjunto de dados grande e diversificado que represente as nuances da linguagem. Ao mesmo tempo, deve ser de alta qualidade, apresentando uso correto da linguagem. Idealmente, o conjunto de dados deve ser editado e limpo manualmente para remover ruídos como erros de digitação, erros gramaticais e conteúdo não linguístico, como símbolos ou tags HTML.
Criar tal conjunto de dados do zero é caro, mas vários conjuntos de dados de alta qualidade estão disponíveis gratuitamente. Conjuntos de dados comuns incluem:
- Rastreamento comum. Um enorme conjunto de dados continuamente atualizado de mais de 9,5 petabytes com conteúdo diversificado. É usado pelos principais modelos, incluindo GPT-3, Llama e T5. No entanto, por ser proveniente da Internet, contém conteúdo duplicado e de baixa qualidade, além de preconceitos e materials ofensivo. Limpeza e filtragem rigorosas são necessárias para torná-lo útil.
- C4 (Corpus Rastejado Limpo Colossal). Um conjunto de dados de 750 GB extraído da net. Ao contrário do Widespread Crawl, este conjunto de dados é pré-limpo e filtrado, tornando-o mais fácil de usar. Ainda assim, espere possíveis preconceitos e erros. O modelo T5 foi treinado neste conjunto de dados.
- Wikipédia. Somente o conteúdo em inglês tem cerca de 19 GB. É enorme, mas gerenciável. É bem selecionado, estruturado e editado de acordo com os padrões da Wikipedia. Embora cubra uma ampla gama de conhecimentos gerais com alta precisão factual, seu estilo e tom enciclopédicos são muito específicos. O treinamento apenas neste conjunto de dados pode fazer com que os modelos se ajustem demais a esse estilo.
- WikiTexto. Um conjunto de dados derivado de artigos verificados e em destaque da Wikipedia. Existem duas versões: WikiText-2 (2 milhões de palavras de centenas de artigos) e WikiText-103 (100 milhões de palavras de 28.000 artigos).
- LivroCorpus. Um conjunto de dados de alguns GB de textos de livros longos, ricos em conteúdo e de alta qualidade. Útil para aprender narrativas coerentes e dependências de longo prazo. No entanto, conhece problemas de direitos autorais e preconceitos sociais.
- A pilha. Um conjunto de dados com curadoria de 825 GB de várias fontes, incluindo BookCorpus. Mistura diferentes gêneros textuais (livros, artigos, código-fonte e trabalhos acadêmicos), proporcionando ampla cobertura temática projetada para o raciocínio multidisciplinar. No entanto, esta diversidade resulta em qualidade variável, conteúdo duplicado e estilos de escrita inconsistentes.
Obtendo os conjuntos de dados
Você pode pesquisar esses conjuntos de dados on-line e baixá-los como arquivos compactados. No entanto, você precisará entender o formato de cada conjunto de dados e escrever um código personalizado para lê-los.
Como alternativa, pesquise conjuntos de dados no repositório Hugging Face em https://huggingface.co/datasets. Este repositório fornece uma biblioteca Python que permite baixar e ler conjuntos de dados em tempo actual usando um formato padronizado.

Abraçando o repositório de conjuntos de dados faciais
Vamos baixar o conjunto de dados WikiText-2 do Hugging Face, um dos menores conjuntos de dados adequados para construir um modelo de linguagem:
import random from datasets import load_dataset dataset = load_dataset(“wikitext”, “wikitext-2-raw-v1″) print(f”Tamanho do conjunto de dados: {len(dataset)}”) # imprime algumas amostras n = 5 enquanto n > 0: idx = random.randint(0, len(dataset)-1) textual content = dataset(idx)(“textual content”).strip() se texto e não textual content.startswith(“=”): imprimir(f”{idx}: {texto}”) n -= 1
importar aleatório de conjuntos de dados importar carregar_conjunto de dados conjunto de dados = carregar_conjunto de dados(“wikitexto”, “wikitext-2-raw-v1”) imprimir(f“Tamanho do conjunto de dados: {len(dataset)}”) #imprima algumas amostras n = 5 enquanto n > 0: idx = aleatório.aleatório(0, lento(conjunto de dados)–1) texto = conjunto de dados(idx)(“texto”).tira() se texto e não texto.começa com(“=”): imprimir(f“{idx}: {texto}”) n -= 1 |
A saída pode ser assim:
Tamanho do conjunto de dados: 36718 31776: As cabeceiras do Missouri acima de Three Forks se estendem muito mais rio acima do que … 29504: Variantes regionais da palavra Alá ocorrem em pré-@-@ pagãos e cristãos … 19866: Pokiri (inglês: Rogue) é um filme de ação em idioma telugu @-@ indiano de 2006, … 27397: O primeiro moinho de farinha em Minnesota foi construído em 1823 em Fort Snelling como … 10523: A indústria musical percebeu o sucesso de Carey. Ela ganhou dois prêmios no…
Tamanho do conjunto de dados: 36718 31776: As cabeceiras do Missouri acima de Three Forks estendem-se muito mais rio acima do que … 29504: Variantes regionais da palavra Allah ocorrem tanto em pré @-@ pagãos quanto cristãos … 19866: Pokiri (Inglês: Rogue) é um filme de ação em idioma Telugu @-@ indiano de 2006, … 27397: O primeiro moinho de farinha em Minnesota foi construído em 1823 em Fort Snelling como … 10523: A indústria musical percebeu o sucesso de Carey. Ela ganhou dois prêmios no… |
Se ainda não o fez, instale a biblioteca de conjuntos de dados Hugging Face:
Ao executar este código pela primeira vez, load_dataset() baixa o conjunto de dados para sua máquina native. Certifique-se de ter espaço em disco suficiente, especialmente para grandes conjuntos de dados. Por padrão, os conjuntos de dados são baixados para ~/.cache/huggingface/datasets.
Todos os conjuntos de dados Hugging Face seguem um formato padrão. O dataset object é iterável, com cada merchandise como um dicionário. Para treinamento de modelo de linguagem, os conjuntos de dados normalmente contêm sequências de texto. Neste conjunto de dados, o texto é armazenado sob o "textual content" chave.
O código acima mostra alguns elementos do conjunto de dados. Você verá strings de texto simples de comprimentos variados.
Pós-processamento dos conjuntos de dados
Antes de treinar um modelo de linguagem, você pode querer pós-processar o conjunto de dados para limpar os dados. Isso inclui reformatar o texto (recortar sequências longas, substituir vários espaços por espaços únicos), remover conteúdo não linguístico (tags HTML, símbolos) e remover caracteres indesejados (espaços extras ao redor da pontuação). O processamento específico depende do conjunto de dados e de como você deseja apresentar o texto ao modelo.
Por exemplo, ao treinar um modelo pequeno no estilo BERT que lida apenas com letras minúsculas, você pode reduzir o tamanho do vocabulário e simplificar o tokenizer. Aqui está uma função geradora que fornece texto pós-processado:
def wikitext2_dataset(): dataset = load_dataset(“wikitext”, “wikitext-2-raw-v1”) para merchandise no conjunto de dados: textual content = merchandise(“textual content”).strip() if not textual content or textual content.startswith(“=”): proceed # pule as linhas vazias ou linhas de cabeçalho produza textual content.decrease() # gere a versão em minúsculas do texto
definição wikitext2_dataset(): conjunto de dados = carregar_conjunto de dados(“wikitexto”, “wikitext-2-raw-v1”) para merchandise em conjunto de dados: texto = merchandise(“texto”).tira() se não texto ou texto.começa com(“=”): continuar # pula as linhas vazias ou linhas de cabeçalho colheita texto.mais baixo() # gera versão minúscula do texto |
Criar uma boa função de pós-processamento é uma arte. Deve melhorar a relação sinal-ruído do conjunto de dados para ajudar o modelo a aprender melhor, preservando ao mesmo tempo a capacidade de lidar com formatos de entrada inesperados que um modelo treinado pode encontrar.
Leituras Adicionais
Abaixo estão alguns recursos que você pode achar úteis:
Resumo
Neste artigo, você aprendeu sobre conjuntos de dados usados para treinar modelos de linguagem e como obter conjuntos de dados comuns de repositórios públicos. Este é apenas um ponto de partida para a exploração do conjunto de dados. Considere aproveitar as bibliotecas e ferramentas existentes para otimizar a velocidade de carregamento do conjunto de dados, para que não se torne um gargalo no seu processo de treinamento.
