Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Recolección y Preprocesamiento de Datos | Construcción y Entrenamiento de Modelos Generativos
IA Generativa

bookRecolección y Preprocesamiento de Datos

El entrenamiento de modelos generativos requiere no solo una buena arquitectura y funciones de pérdida, sino también datos limpios, bien estructurados y diversos. Esta sección presenta conjuntos de datos de alta calidad en modalidades de visión, texto y audio, proporciona técnicas detalladas de preprocesamiento adecuadas para flujos de trabajo generativos modernos y analiza estrategias sólidas de partición de datos con herramientas prácticas.

Recolección de datos

La recolección de datos para el modelado generativo depende del dominio, la disponibilidad de fuentes, la escala y las licencias. Para datos de texto y visión, las fuentes comunes incluyen conjuntos de datos abiertos, contenido extraído y repositorios estructurados (por ejemplo, archivos académicos, redes sociales o plataformas de comercio electrónico).

Técnicas de Web Scraping

Cuando los conjuntos de datos no están fácilmente disponibles, los datos pueden recopilarse de la web utilizando herramientas de scraping. El web scraping permite extraer información de páginas HTML de manera programática. Es un enfoque potente para recolectar datos del mundo real y no estructurados cuando las API no están disponibles. Sin embargo, el scraping conlleva responsabilidades técnicas y éticas.

Los métodos de scraping suelen implicar:

  • Enviar solicitudes HTTP para recuperar páginas web. Esto permite acceder al contenido HTML bruto de una página;
  • Analizar el contenido HTML para extraer datos estructurados. Herramientas como BeautifulSoup convierten HTML no estructurado en etiquetas y elementos accesibles;
  • Navegar por páginas dinámicas utilizando automatización de navegadores. Los sitios web con mucho JavaScript requieren herramientas como Selenium para renderizar completamente el contenido;
  • Almacenar los datos extraídos en formatos utilizables como CSV o JSON. Esto garantiza la compatibilidad con los pasos posteriores de preprocesamiento y entrenamiento del modelo.

A continuación se presentan dos estrategias comunes de scraping:

Extracción de texto con BeautifulSoup

BeautifulSoup es una biblioteca de Python utilizada para analizar páginas HTML estáticas.

1234567891011
import requests from bs4 import BeautifulSoup url = "https://docs.python.org/3/" response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") # Extract paragraphs paragraphs = [p.text for p in soup.find_all('p')] text = "\n".join(paragraphs) print(text)
copy

Extracción de imágenes con Selenium

Selenium automatiza un navegador para extraer contenido de páginas renderizadas con JavaScript.

123456789101112131415161718
# INSTALL SELENIUM # THIS CODE DOWNLOAD IMAGES (I NEED JUST VIZUALIZATION) from selenium import webdriver import time import urllib.request url = "https://example.com/gallery" driver = webdriver.Chrome() driver.get(url) time.sleep(2) images = driver.find_elements("tag name", "img") for idx, img in enumerate(images): src = img.get_attribute('src') if src: urllib.request.urlretrieve(src, f"image_{idx}.jpg") driver.quit()
copy
Note
Nota

Siempre revisar los términos de servicio de un sitio web antes de realizar scraping. Utilizar tasas de solicitud adecuadas y respetar el archivo robots.txt. El scraping inapropiado puede resultar en bloqueos de IP o consecuencias legales.

En contextos de GenAI, la extracción de datos web suele ser un paso previo para la construcción de conjuntos de datos de preentrenamiento, especialmente para lenguajes específicos de dominio o de bajos recursos. Herramientas como Scrapy, playwright o APIs sin navegador también se utilizan frecuentemente para tareas a gran escala.

Técnicas de preprocesamiento

El preprocesamiento de datos debe adaptarse a la modalidad, el tipo de modelo y las restricciones de calidad. Para la modelización generativa a nivel de producción, los flujos de trabajo suelen incluir transformaciones específicas del dominio, adaptación de resolución y filtrado basado en el contenido.

Preprocesamiento de imágenes

  • Redimensionamiento: igualar la resolución del conjunto de datos con la entrada del modelo (por ejemplo, 64x64 para GANs tempranos, 512x512 para modelos de difusión);
  • Normalización: escala los valores de los píxeles a un rango estándar, típicamente [−1, 1] o [0, 1];
  • Manejo del espacio de color: asegurar la consistencia del color — convertir a RGB o escala de grises. Para generación condicional, conservar los canales alfa si están presentes;
  • Aumento de datos: introduce variación durante el entrenamiento mediante transformaciones.

Preprocesamiento de texto

  • Limpieza: elimina caracteres especiales, espacios en blanco adicionales y ruido;
12345
import re text = "Example text — with symbols!" cleaned = re.sub(r"[^\w\s]", "", text) cleaned = re.sub(r"\s+", " ", cleaned).strip() print(cleaned)
copy
  1. r"[^\w\s]":

    • \w: coincide con cualquier carácter alfanumérico (letras A-Z, a-z, dígitos 0-9) y guion bajo _;
    • \s: coincide con cualquier carácter de espacio en blanco (espacios, tabulaciones, saltos de línea);
    • [^...]: clase de caracteres negada—coincide con cualquier cosa que no esté listada dentro;
    • Significado: este patrón coincide con todos los caracteres excepto letras, dígitos, guiones bajos y espacios en blanco. Por lo tanto, elimina signos de puntuación y símbolos (como , !, etc.).
  2. r"\s+":

    • \s: coincide con cualquier carácter de espacio en blanco;
    • +: coincide con uno o más del token anterior;
    • Significado: esto reemplaza múltiples caracteres consecutivos de espacio en blanco por un solo espacio.
  3. .strip(): elimina los espacios en blanco al inicio y al final de la cadena limpia final.

Para más información sobre la sintaxis de RegEx, consulte la documentación.

  • Conversión a minúsculas: estandariza el texto a minúsculas para mantener la consistencia. Aplicar de forma selectiva, ya que modelos como BERT pueden ser sensibles a mayúsculas/minúsculas;
12
text = "This Is A Sentence." print(text.lower())
copy
  • Tokenización: divide el texto en tokens o subpalabras para el modelado;
1234
from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("gpt2") encodings = tokenizer(["Example text."], padding="max_length", truncation=True, max_length=128, return_tensors="pt")
copy
  • Stemming/Lematización: poco frecuente en flujos de trabajo de aprendizaje profundo, pero utilizada en PLN tradicional o filtros de preentrenamiento;
1234
from nltk.stem import PorterStemmer stemmer = PorterStemmer() print(stemmer.stem("running"))
copy
  • Relleno/Truncamiento: ver el ejemplo anterior con max_length.
1234
from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("gpt2") inputs = tokenizer("Short text.", max_length=10, padding="max_length", truncation=True, return_tensors="pt")
copy
Note
Nota

Construcción de flujos de preprocesamiento modulares con enfoque en la reproducibilidad. Uso de DVC, wandb artifacts o huggingface/datasets con streaming + caching.

Estrategias de división de datos

La división efectiva de datos es esencial para la generalización, especialmente en el modelado generativo donde el sobreajuste a modos o la memorización es común.

División Entrenamiento/Validación/Prueba

  • Proporciones convencionales: 80/10/10 o 70/15/15 según el tamaño del conjunto de datos;
  • División consciente del contenido: estratificación por clase (visión), tema (texto).
  • Caso de uso:
    • Entrenamiento: optimización del modelo;
    • Validación: guía para checkpointing, detención temprana y ajuste de métricas (por ejemplo, FID);
    • Prueba: completamente reservada hasta la evaluación final del modelo.

Ejemplo usando train_test_split:

Para conjuntos de datos de Hugging Face:

Validación cruzada y bootstrapping

  • Para dominios de pocos recursos o zero-shot, utilizar validación cruzada K-fold (por ejemplo, K=5 o 10);
  • En modelos de difusión, emplear FID/LPIPS bootstrapped para evaluar la estabilidad de la generación;
  • La inspección visual o perceptual debe acompañar la validación numérica.

Ejemplo de configuración K-fold:

Conjuntos de datos comúnmente utilizados

La selección del conjunto de datos adecuado depende de la modalidad, la escala de los datos, las licencias y el objetivo generativo específico (por ejemplo, generación incondicional, síntesis condicional o transferencia de estilo).

Conjuntos de datos de visión por computadora

  • CIFAR-10: 60,000 imágenes RGB de baja resolución (32×32) en 10 clases. Ligero, ideal para prototipado rápido, pruebas unitarias y evaluación de bucles de entrenamiento para GANs de imágenes;
  • CelebA: más de 200,000 rostros de celebridades alineados y anotados con 40 atributos binarios. Utilizado frecuentemente en generación condicionada por atributos, edición de rostros preservando la identidad y modelos codificador-decodificador;
  • LSUN: conjunto de datos de escenas a gran escala que contiene millones de imágenes en categorías como dormitorios, iglesias y comedores. Esencial para síntesis de alta resolución y entrenamiento progresivo de GANs;
  • ImageNet: más de 14 millones de imágenes de alta calidad etiquetadas en 20,000 clases. Utilizado principalmente para aprendizaje por transferencia, preentrenamiento de modelos de difusión y como conjunto base para generación guiada por estilo.

Conjuntos de datos de texto

  • WikiText: artículos limpios de Wikipedia (WikiText-2: 2M tokens, WikiText-103: más de 100M). Valioso para la evaluación de modelos de lenguaje y ajuste fino de modelos solo-decodificador como GPT;
  • BookCorpus: más de 11,000 novelas gratuitas. Fundamental para generación de estilo narrativo, transformadores de contexto largo y preentrenamiento de modelos fundamentales (por ejemplo, BERT, GPT-2);
  • Common Crawl / C4: datos web multilingües a escala de petabytes. C4 es una variante deduplicada y filtrada, curada para entrenamiento de modelos de lenguaje de alta calidad (por ejemplo, T5);
  • The Pile: 825GB de datos diversos (libros, ArXiv, StackExchange, GitHub, etc.). Diseñado para entrenar modelos tipo GPT de manera competitiva con los LLMs de OpenAI.

Resumen

  • Selección de conjuntos de datos basada en calidad, licencias, escala y alineación con los objetivos generativos;
  • Aplicación de procesos de preprocesamiento adaptados a cada modalidad utilizando herramientas robustas de nivel de producción;
  • Garantía de estrategias rigurosas de partición para favorecer la reproducibilidad, evitar fugas y permitir una evaluación justa.

1. ¿Por qué la calidad de los datos es más importante que la cantidad al entrenar modelos generativos de IA?

2. ¿Cuál es un desafío común al recopilar datos diversos para entrenar modelos generativos?

3. ¿Cuál es el objetivo principal de la aumentación de datos en el contexto del entrenamiento de IA generativa?

question mark

¿Por qué la calidad de los datos es más importante que la cantidad al entrenar modelos generativos de IA?

Select the correct answer

question mark

¿Cuál es un desafío común al recopilar datos diversos para entrenar modelos generativos?

Select the correct answer

question mark

¿Cuál es el objetivo principal de la aumentación de datos en el contexto del entrenamiento de IA generativa?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 1

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Awesome!

Completion rate improved to 4.76

bookRecolección y Preprocesamiento de Datos

Desliza para mostrar el menú

El entrenamiento de modelos generativos requiere no solo una buena arquitectura y funciones de pérdida, sino también datos limpios, bien estructurados y diversos. Esta sección presenta conjuntos de datos de alta calidad en modalidades de visión, texto y audio, proporciona técnicas detalladas de preprocesamiento adecuadas para flujos de trabajo generativos modernos y analiza estrategias sólidas de partición de datos con herramientas prácticas.

Recolección de datos

La recolección de datos para el modelado generativo depende del dominio, la disponibilidad de fuentes, la escala y las licencias. Para datos de texto y visión, las fuentes comunes incluyen conjuntos de datos abiertos, contenido extraído y repositorios estructurados (por ejemplo, archivos académicos, redes sociales o plataformas de comercio electrónico).

Técnicas de Web Scraping

Cuando los conjuntos de datos no están fácilmente disponibles, los datos pueden recopilarse de la web utilizando herramientas de scraping. El web scraping permite extraer información de páginas HTML de manera programática. Es un enfoque potente para recolectar datos del mundo real y no estructurados cuando las API no están disponibles. Sin embargo, el scraping conlleva responsabilidades técnicas y éticas.

Los métodos de scraping suelen implicar:

  • Enviar solicitudes HTTP para recuperar páginas web. Esto permite acceder al contenido HTML bruto de una página;
  • Analizar el contenido HTML para extraer datos estructurados. Herramientas como BeautifulSoup convierten HTML no estructurado en etiquetas y elementos accesibles;
  • Navegar por páginas dinámicas utilizando automatización de navegadores. Los sitios web con mucho JavaScript requieren herramientas como Selenium para renderizar completamente el contenido;
  • Almacenar los datos extraídos en formatos utilizables como CSV o JSON. Esto garantiza la compatibilidad con los pasos posteriores de preprocesamiento y entrenamiento del modelo.

A continuación se presentan dos estrategias comunes de scraping:

Extracción de texto con BeautifulSoup

BeautifulSoup es una biblioteca de Python utilizada para analizar páginas HTML estáticas.

1234567891011
import requests from bs4 import BeautifulSoup url = "https://docs.python.org/3/" response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") # Extract paragraphs paragraphs = [p.text for p in soup.find_all('p')] text = "\n".join(paragraphs) print(text)
copy

Extracción de imágenes con Selenium

Selenium automatiza un navegador para extraer contenido de páginas renderizadas con JavaScript.

123456789101112131415161718
# INSTALL SELENIUM # THIS CODE DOWNLOAD IMAGES (I NEED JUST VIZUALIZATION) from selenium import webdriver import time import urllib.request url = "https://example.com/gallery" driver = webdriver.Chrome() driver.get(url) time.sleep(2) images = driver.find_elements("tag name", "img") for idx, img in enumerate(images): src = img.get_attribute('src') if src: urllib.request.urlretrieve(src, f"image_{idx}.jpg") driver.quit()
copy
Note
Nota

Siempre revisar los términos de servicio de un sitio web antes de realizar scraping. Utilizar tasas de solicitud adecuadas y respetar el archivo robots.txt. El scraping inapropiado puede resultar en bloqueos de IP o consecuencias legales.

En contextos de GenAI, la extracción de datos web suele ser un paso previo para la construcción de conjuntos de datos de preentrenamiento, especialmente para lenguajes específicos de dominio o de bajos recursos. Herramientas como Scrapy, playwright o APIs sin navegador también se utilizan frecuentemente para tareas a gran escala.

Técnicas de preprocesamiento

El preprocesamiento de datos debe adaptarse a la modalidad, el tipo de modelo y las restricciones de calidad. Para la modelización generativa a nivel de producción, los flujos de trabajo suelen incluir transformaciones específicas del dominio, adaptación de resolución y filtrado basado en el contenido.

Preprocesamiento de imágenes

  • Redimensionamiento: igualar la resolución del conjunto de datos con la entrada del modelo (por ejemplo, 64x64 para GANs tempranos, 512x512 para modelos de difusión);
  • Normalización: escala los valores de los píxeles a un rango estándar, típicamente [−1, 1] o [0, 1];
  • Manejo del espacio de color: asegurar la consistencia del color — convertir a RGB o escala de grises. Para generación condicional, conservar los canales alfa si están presentes;
  • Aumento de datos: introduce variación durante el entrenamiento mediante transformaciones.

Preprocesamiento de texto

  • Limpieza: elimina caracteres especiales, espacios en blanco adicionales y ruido;
12345
import re text = "Example text — with symbols!" cleaned = re.sub(r"[^\w\s]", "", text) cleaned = re.sub(r"\s+", " ", cleaned).strip() print(cleaned)
copy
  1. r"[^\w\s]":

    • \w: coincide con cualquier carácter alfanumérico (letras A-Z, a-z, dígitos 0-9) y guion bajo _;
    • \s: coincide con cualquier carácter de espacio en blanco (espacios, tabulaciones, saltos de línea);
    • [^...]: clase de caracteres negada—coincide con cualquier cosa que no esté listada dentro;
    • Significado: este patrón coincide con todos los caracteres excepto letras, dígitos, guiones bajos y espacios en blanco. Por lo tanto, elimina signos de puntuación y símbolos (como , !, etc.).
  2. r"\s+":

    • \s: coincide con cualquier carácter de espacio en blanco;
    • +: coincide con uno o más del token anterior;
    • Significado: esto reemplaza múltiples caracteres consecutivos de espacio en blanco por un solo espacio.
  3. .strip(): elimina los espacios en blanco al inicio y al final de la cadena limpia final.

Para más información sobre la sintaxis de RegEx, consulte la documentación.

  • Conversión a minúsculas: estandariza el texto a minúsculas para mantener la consistencia. Aplicar de forma selectiva, ya que modelos como BERT pueden ser sensibles a mayúsculas/minúsculas;
12
text = "This Is A Sentence." print(text.lower())
copy
  • Tokenización: divide el texto en tokens o subpalabras para el modelado;
1234
from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("gpt2") encodings = tokenizer(["Example text."], padding="max_length", truncation=True, max_length=128, return_tensors="pt")
copy
  • Stemming/Lematización: poco frecuente en flujos de trabajo de aprendizaje profundo, pero utilizada en PLN tradicional o filtros de preentrenamiento;
1234
from nltk.stem import PorterStemmer stemmer = PorterStemmer() print(stemmer.stem("running"))
copy
  • Relleno/Truncamiento: ver el ejemplo anterior con max_length.
1234
from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("gpt2") inputs = tokenizer("Short text.", max_length=10, padding="max_length", truncation=True, return_tensors="pt")
copy
Note
Nota

Construcción de flujos de preprocesamiento modulares con enfoque en la reproducibilidad. Uso de DVC, wandb artifacts o huggingface/datasets con streaming + caching.

Estrategias de división de datos

La división efectiva de datos es esencial para la generalización, especialmente en el modelado generativo donde el sobreajuste a modos o la memorización es común.

División Entrenamiento/Validación/Prueba

  • Proporciones convencionales: 80/10/10 o 70/15/15 según el tamaño del conjunto de datos;
  • División consciente del contenido: estratificación por clase (visión), tema (texto).
  • Caso de uso:
    • Entrenamiento: optimización del modelo;
    • Validación: guía para checkpointing, detención temprana y ajuste de métricas (por ejemplo, FID);
    • Prueba: completamente reservada hasta la evaluación final del modelo.

Ejemplo usando train_test_split:

Para conjuntos de datos de Hugging Face:

Validación cruzada y bootstrapping

  • Para dominios de pocos recursos o zero-shot, utilizar validación cruzada K-fold (por ejemplo, K=5 o 10);
  • En modelos de difusión, emplear FID/LPIPS bootstrapped para evaluar la estabilidad de la generación;
  • La inspección visual o perceptual debe acompañar la validación numérica.

Ejemplo de configuración K-fold:

Conjuntos de datos comúnmente utilizados

La selección del conjunto de datos adecuado depende de la modalidad, la escala de los datos, las licencias y el objetivo generativo específico (por ejemplo, generación incondicional, síntesis condicional o transferencia de estilo).

Conjuntos de datos de visión por computadora

  • CIFAR-10: 60,000 imágenes RGB de baja resolución (32×32) en 10 clases. Ligero, ideal para prototipado rápido, pruebas unitarias y evaluación de bucles de entrenamiento para GANs de imágenes;
  • CelebA: más de 200,000 rostros de celebridades alineados y anotados con 40 atributos binarios. Utilizado frecuentemente en generación condicionada por atributos, edición de rostros preservando la identidad y modelos codificador-decodificador;
  • LSUN: conjunto de datos de escenas a gran escala que contiene millones de imágenes en categorías como dormitorios, iglesias y comedores. Esencial para síntesis de alta resolución y entrenamiento progresivo de GANs;
  • ImageNet: más de 14 millones de imágenes de alta calidad etiquetadas en 20,000 clases. Utilizado principalmente para aprendizaje por transferencia, preentrenamiento de modelos de difusión y como conjunto base para generación guiada por estilo.

Conjuntos de datos de texto

  • WikiText: artículos limpios de Wikipedia (WikiText-2: 2M tokens, WikiText-103: más de 100M). Valioso para la evaluación de modelos de lenguaje y ajuste fino de modelos solo-decodificador como GPT;
  • BookCorpus: más de 11,000 novelas gratuitas. Fundamental para generación de estilo narrativo, transformadores de contexto largo y preentrenamiento de modelos fundamentales (por ejemplo, BERT, GPT-2);
  • Common Crawl / C4: datos web multilingües a escala de petabytes. C4 es una variante deduplicada y filtrada, curada para entrenamiento de modelos de lenguaje de alta calidad (por ejemplo, T5);
  • The Pile: 825GB de datos diversos (libros, ArXiv, StackExchange, GitHub, etc.). Diseñado para entrenar modelos tipo GPT de manera competitiva con los LLMs de OpenAI.

Resumen

  • Selección de conjuntos de datos basada en calidad, licencias, escala y alineación con los objetivos generativos;
  • Aplicación de procesos de preprocesamiento adaptados a cada modalidad utilizando herramientas robustas de nivel de producción;
  • Garantía de estrategias rigurosas de partición para favorecer la reproducibilidad, evitar fugas y permitir una evaluación justa.

1. ¿Por qué la calidad de los datos es más importante que la cantidad al entrenar modelos generativos de IA?

2. ¿Cuál es un desafío común al recopilar datos diversos para entrenar modelos generativos?

3. ¿Cuál es el objetivo principal de la aumentación de datos en el contexto del entrenamiento de IA generativa?

question mark

¿Por qué la calidad de los datos es más importante que la cantidad al entrenar modelos generativos de IA?

Select the correct answer

question mark

¿Cuál es un desafío común al recopilar datos diversos para entrenar modelos generativos?

Select the correct answer

question mark

¿Cuál es el objetivo principal de la aumentación de datos en el contexto del entrenamiento de IA generativa?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 1
some-alt