Saltar al contenido principal

Capítulo 2: Recolección y preprocesamiento de datos

Introducción​

La calidad y diversidad de los datos de entrenamiento determina fundamentalmente las capacidades del modelo. Los LLMs modernos se entrenan con billones de tokens provenientes de fuentes diversas.

Fuentes de datos​

Common Crawl​

  • Petabytes de datos web
  • Requiere filtrado intensivo
  • Punto de partida más común

Fuentes curadas​

data_sources = {
"Wikipedia": "Alta calidad, enciclopédico",
"Books": "Texto extenso y coherente",
"ArXiv": "Artículos científicos",
"GitHub": "Código y documentación",
"StackOverflow": "Formato de preguntas y respuestas",
}

Pipeline de procesamiento de datos​

Datos web crudos → Eliminación de duplicados → Filtrado de calidad → Tokenización → Datos de entrenamiento

1. Eliminación de duplicados​

from datasketch import MinHash, MinHashLSH

def create_minhash(text, num_perm=128):
"""Crear firma MinHash para eliminación de duplicados."""
m = MinHash(num_perm=num_perm)
for word in text.split():
m.update(word.encode('utf8'))
return m

2. Filtrado de calidad​

def quality_filter(text):
"""Filtrar documentos de baja calidad."""
# Filtro por longitud
if len(text.split()) < 50:
return False

# Filtro por repetición
lines = text.split('\n')
unique_lines = set(lines)
if len(unique_lines) / len(lines) < 0.5:
return False

# Detección de idioma
if not is_english(text):
return False

return True

3. Tokenización​

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b")

def tokenize_dataset(texts, max_length=2048):
"""Tokenizar y fragmentar textos para entrenamiento."""
all_tokens = []
for text in texts:
tokens = tokenizer.encode(text)
all_tokens.extend(tokens)

# Crear fragmentos de longitud fija
chunks = [
all_tokens[i:i+max_length]
for i in range(0, len(all_tokens), max_length)
]
return chunks

Escala del conjunto de datos​

ModeloTokens de entrenamientoTamaño de datos
GPT-3300B~570 GB
LLaMA1.4T~1.4 TB
LLaMA 22T~2 TB

Puntos clave​

Summary
  1. Calidad de los datos > cantidad de datos
  2. Eliminación de duplicados es fundamental para la eficiencia del entrenamiento
  3. Fuentes diversas mejoran la generalización del modelo