Recolecció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.
1234567891011import 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)
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()
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;
12345import re text = "Example text — with symbols!" cleaned = re.sub(r"[^\w\s]", "", text) cleaned = re.sub(r"\s+", " ", cleaned).strip() print(cleaned)
-
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.).
-
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.
-
.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;
12text = "This Is A Sentence." print(text.lower())
- Tokenización: divide el texto en tokens o subpalabras para el modelado;
1234from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("gpt2") encodings = tokenizer(["Example text."], padding="max_length", truncation=True, max_length=128, return_tensors="pt")
- Stemming/Lematización: poco frecuente en flujos de trabajo de aprendizaje profundo, pero utilizada en PLN tradicional o filtros de preentrenamiento;
1234from nltk.stem import PorterStemmer stemmer = PorterStemmer() print(stemmer.stem("running"))
- Relleno/Truncamiento: ver el ejemplo anterior con
max_length.
1234from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("gpt2") inputs = tokenizer("Short text.", max_length=10, padding="max_length", truncation=True, return_tensors="pt")
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?
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Awesome!
Completion rate improved to 4.76
Recolecció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.
1234567891011import 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)
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()
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;
12345import re text = "Example text — with symbols!" cleaned = re.sub(r"[^\w\s]", "", text) cleaned = re.sub(r"\s+", " ", cleaned).strip() print(cleaned)
-
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.).
-
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.
-
.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;
12text = "This Is A Sentence." print(text.lower())
- Tokenización: divide el texto en tokens o subpalabras para el modelado;
1234from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("gpt2") encodings = tokenizer(["Example text."], padding="max_length", truncation=True, max_length=128, return_tensors="pt")
- Stemming/Lematización: poco frecuente en flujos de trabajo de aprendizaje profundo, pero utilizada en PLN tradicional o filtros de preentrenamiento;
1234from nltk.stem import PorterStemmer stemmer = PorterStemmer() print(stemmer.stem("running"))
- Relleno/Truncamiento: ver el ejemplo anterior con
max_length.
1234from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("gpt2") inputs = tokenizer("Short text.", max_length=10, padding="max_length", truncation=True, return_tensors="pt")
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?
¡Gracias por tus comentarios!