Capítulo 7: Conceptos Avanzados de Aprendizaje Profundo
7.4 Aprendizaje Auto-supervisado y Modelos Fundamentales
7.4.1 ¿Qué es el Aprendizaje Auto-supervisado?
El aprendizaje auto-supervisado (SSL) es un enfoque innovador en el aprendizaje automático que cierra la brecha entre el aprendizaje supervisado y no supervisado. Aprovecha la estructura inherente dentro de los datos no etiquetados para crear tareas de aprendizaje supervisado, permitiendo que el modelo aprenda por sí mismo. Este método es particularmente valioso en escenarios donde los datos etiquetados son escasos o costosos de obtener.
En su núcleo, el SSL funciona formulando tareas previas que no requieren etiquetado manual. Estas tareas están diseñadas cuidadosamente para forzar al modelo a aprender representaciones significativas de los datos. Por ejemplo, en visión por computadora, se puede pedir al modelo que prediga la posición relativa de parches de imagen o que reconstruya una imagen en color a partir de su versión en escala de grises. En procesamiento de lenguaje natural, los modelos pueden predecir palabras faltantes en una oración o determinar si dos oraciones están contextualmente relacionadas.
El poder del SSL radica en su capacidad para aprender características generalizables que se pueden transferir a una amplia gama de tareas posteriores. Una vez que un modelo ha sido preentrenado en estas tareas auto-supervisadas, puede ajustarse con una cantidad relativamente pequeña de datos etiquetados para aplicaciones específicas. Este enfoque de aprendizaje transferido ha llevado a avances significativos en varios dominios, incluidos la clasificación de imágenes, la detección de objetos, el análisis de sentimientos y la traducción automática.
Además, el SSL ha allanado el camino para el desarrollo de modelos fundamentales, que son modelos a gran escala entrenados con grandes cantidades de datos no etiquetados y que pueden adaptarse a numerosas tareas. Ejemplos incluyen BERT en procesamiento de lenguaje natural y SimCLR en visión por computadora. Estos modelos han demostrado un rendimiento notable en diversas aplicaciones, a menudo superando los enfoques tradicionales de aprendizaje supervisado.
A medida que el campo de la inteligencia artificial continúa evolucionando, el aprendizaje auto-supervisado se encuentra en la vanguardia, prometiendo formas más eficientes y efectivas de aprovechar el potencial de los datos no etiquetados y expandir las capacidades del aprendizaje automático.
7.4.2 Tareas Previas en el Aprendizaje Auto-supervisado
El aprendizaje auto-supervisado (SSL) emplea diversas tareas previas para entrenar modelos sin etiquetas explícitas. Estas tareas están diseñadas para extraer representaciones significativas de los datos. Aquí hay algunas tareas clave en SSL:
- Aprendizaje Contrastivo:
Este enfoque tiene como objetivo aprender representaciones comparando puntos de datos similares y disímiles. Crea un espacio latente donde las entradas semánticamente relacionadas están cerca y las no relacionadas están alejadas. El aprendizaje contrastivo ha demostrado un éxito notable tanto en visión por computadora como en procesamiento de lenguaje natural. Algunos marcos notables incluyen:
- SimCLR (Simple Framework for Contrastive Learning of Visual Representations): Este método utiliza aumento de datos para crear diferentes vistas de la misma imagen, luego entrena al modelo para reconocer estas como similares mientras distingue otras imágenes.
- MoCo (Momentum Contrast): Este enfoque mantiene un diccionario dinámico de representaciones codificadas, lo que permite un gran y constante conjunto de muestras negativas en el aprendizaje contrastivo.
- Modelado de Lenguaje enmascarado (MLM):
Técnica fundamental en el procesamiento de lenguaje natural (NLP), el MLM implica enmascarar aleatoriamente palabras en una oración y entrenar al modelo para predecir estas palabras enmascaradas. Esto fuerza al modelo a entender el contexto y desarrollar una comprensión profunda de la estructura del lenguaje. BERT (Bidirectional Encoder Representations from Transformers) utiliza este enfoque, lo que le permite obtener un rendimiento de vanguardia en varias tareas de NLP.
- Relleno de Imágenes (Inpainting):
Esta tarea de visión por computadora implica predecir o reconstruir partes faltantes o dañadas de una imagen. Anima al modelo a comprender relaciones espaciales y estructuras de objetos. Un concepto relacionado es el Autoencoder de eliminación de ruido, que aprende a reconstruir imágenes limpias a partir de entradas ruidosas. Estas técnicas ayudan a los modelos a aprender representaciones de características robustas que pueden generalizar bien a varias tareas posteriores.
- Colorización:
Esta tarea consiste en predecir los colores de las imágenes en escala de grises. Es particularmente efectiva porque requiere que el modelo comprenda relaciones complejas entre objetos, texturas y patrones de color típicos en escenas naturales. Por ejemplo, el modelo necesita aprender que la hierba es típicamente verde y que los cielos suelen ser azules. Esta tarea previa ha demostrado ser útil para que los modelos aprendan características ricas y transferibles que son útiles para varias tareas de visión por computadora.
Otras tareas previas notables en SSL incluyen la predicción de rotaciones, la resolución de rompecabezas (jigsaw) y la predicción de la siguiente oración. Estos enfoques diversos contribuyen colectivamente al poder y la flexibilidad del aprendizaje auto-supervisado, permitiendo que los modelos extraigan representaciones significativas de grandes cantidades de datos no etiquetados.
Ejemplo: Aprendizaje Contrastivo con SimCLR en PyTorch
Aquí tienes una implementación básica de SimCLR, un método de aprendizaje contrastivo para aprender representaciones de imágenes sin etiquetas.
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms, models
import torch.nn.functional as F
# Define a simple contrastive learning model based on ResNet
class SimCLR(nn.Module):
def __init__(self, base_model, out_dim):
super(SimCLR, self).__init__()
self.encoder = base_model
self.projection = nn.Sequential(
nn.Linear(base_model.fc.in_features, 512),
nn.ReLU(),
nn.Linear(512, out_dim)
)
self.encoder.fc = nn.Identity() # Remove the fully connected layer of ResNet
def forward(self, x):
features = self.encoder(x)
projections = self.projection(features)
return F.normalize(projections, dim=-1) # Normalize for contrastive loss
# SimCLR contrastive loss function
def contrastive_loss(z_i, z_j, temperature=0.5):
# Compute similarity matrix
batch_size = z_i.size(0)
z = torch.cat([z_i, z_j], dim=0)
sim_matrix = torch.mm(z, z.t()) / temperature
# Create labels for contrastive loss
labels = torch.arange(batch_size).cuda()
labels = torch.cat([labels, labels], dim=0)
# Mask out the diagonal (same sample comparisons)
mask = torch.eye(sim_matrix.size(0), device=sim_matrix.device).bool()
sim_matrix = sim_matrix.masked_fill(mask, -float('inf'))
# Compute loss
loss = F.cross_entropy(sim_matrix, labels)
return loss
# Define data transformations
transform = transforms.Compose([
transforms.RandomResizedCrop(size=224),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
# Load dataset (e.g., CIFAR-10)
dataset = datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
dataloader = torch.utils.data.DataLoader(dataset, batch_size=64, shuffle=True)
# Instantiate SimCLR model with ResNet backbone
base_model = models.resnet18(pretrained=True)
simclr_model = SimCLR(base_model, out_dim=128).cuda()
# Optimizer
optimizer = optim.Adam(simclr_model.parameters(), lr=0.001)
# Training loop
for epoch in range(10):
for images, _ in dataloader:
# Data augmentation (SimCLR requires two augmented views of each image)
view_1, view_2 = images.cuda(), images.cuda()
# Forward pass through SimCLR
z_i = simclr_model(view_1)
z_j = simclr_model(view_2)
# Compute contrastive loss
loss = contrastive_loss(z_i, z_j)
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f"Epoch [{epoch+1}/10], Loss: {loss.item():.4f}")
Este código implementa una versión básica de SimCLR (Marco Simple para el Aprendizaje Contrastivo de Representaciones Visuales), que es un método de aprendizaje auto-supervisado para representaciones visuales.
Aquí desglosamos los componentes clave:
- Modelo SimCLR: La clase
SimCLR
define la arquitectura del modelo. Utiliza un ResNet preentrenado como codificador y agrega una cabeza de proyección en la parte superior. - Pérdida Contrastiva: La función
contrastive_loss
implementa el núcleo del objetivo de aprendizaje de SimCLR. Calcula la similitud entre diferentes vistas aumentadas de las mismas imágenes y empuja al modelo a reconocerlas como similares mientras distingue otras imágenes. - Aumento de Datos: El código utiliza recortes redimensionados aleatorios y volteo horizontal como técnicas de aumento de datos.
- Conjunto de Datos: Se utiliza el conjunto de datos CIFAR-10 para el entrenamiento.
- Bucle de Entrenamiento: El modelo se entrena durante 10 épocas. En cada iteración, se crean dos vistas aumentadas de las mismas imágenes y se pasan por el modelo. Luego, se calcula la pérdida contrastiva y se utiliza para actualizar los parámetros del modelo.
Esta implementación demuestra los principios fundamentales del aprendizaje contrastivo, donde el modelo aprende a crear representaciones similares para diferentes vistas de la misma imagen, mientras separa las representaciones de diferentes imágenes. Este enfoque permite que el modelo aprenda características visuales útiles sin requerir datos etiquetados.
7.4.3 Modelos Fundamentales: Un Nuevo Paradigma en la IA
Los modelos fundamentales representan un cambio de paradigma en el desarrollo de la IA, introduciendo una nueva era de sistemas de aprendizaje automático versátiles y potentes. Estos modelos, caracterizados por su gran escala y preentrenamiento extenso en conjuntos de datos diversos, han revolucionado el campo de la inteligencia artificial. A diferencia de los modelos tradicionales, que se entrenan para tareas específicas, los modelos fundamentales están diseñados para aprender representaciones de propósito general que pueden adaptarse a una amplia gama de aplicaciones.
En el núcleo de los modelos fundamentales está el concepto de aprendizaje transferido, donde el conocimiento adquirido durante el preentrenamiento en conjuntos de datos a gran escala puede transferirse de manera eficiente a tareas específicas con una mínima adaptación. Este enfoque reduce significativamente la necesidad de datos etiquetados específicos para la tarea, haciendo que la IA sea más accesible y rentable para una variedad más amplia de aplicaciones.
Los modelos fundamentales suelen aprovechar arquitecturas avanzadas, como los transformadores, que sobresalen en la captura de dependencias a largo plazo en los datos. Estos modelos a menudo emplean técnicas de aprendizaje auto-supervisado, lo que les permite extraer patrones y representaciones significativas de datos no etiquetados. Esta capacidad para aprender de vastas cantidades de información no etiquetada es un factor clave en su notable rendimiento en diversos dominios.
La versatilidad de los modelos fundamentales se ejemplifica por su éxito en diversos campos. En el procesamiento de lenguaje natural, modelos como GPT-3 de OpenAI han demostrado capacidades sin precedentes en generación de texto, comprensión del lenguaje e incluso razonamiento básico. BERT (Representaciones de Codificadores Bidireccionales de Transformadores) ha establecido nuevos estándares para tareas de comprensión del lenguaje, como el análisis de sentimientos y la respuesta a preguntas.
Más allá del texto, los modelos fundamentales han logrado avances significativos en el aprendizaje multimodal. CLIP (Preentrenamiento Contrastivo de Imágenes y Texto) ha cerrado la brecha entre la visión y el lenguaje, permitiendo la clasificación de imágenes sin necesidad de ejemplos específicos para la tarea. En el ámbito de la IA generativa, modelos como DALL-E han ampliado los límites de la creatividad, generando imágenes altamente detalladas e imaginativas a partir de descripciones textuales.
El impacto de los modelos fundamentales va más allá de sus aplicaciones inmediatas. Han generado nuevas direcciones de investigación en áreas como la compresión de modelos, la afinación eficiente y la IA ética. A medida que estos modelos continúan evolucionando, prometen impulsar la innovación en industrias como la salud, la investigación científica, las artes creativas y la educación, transformando el panorama de la inteligencia artificial y su papel en la sociedad.
7.4.4 Ejemplos de Modelos Fundamentales
- BERT (Representaciones de Codificadores Bidireccionales de Transformadores):
BERT revolucionó el procesamiento de lenguaje natural con su comprensión bidireccional del contexto. Utilizando el modelado de lenguaje enmascarado (MLM), BERT aprende a predecir palabras enmascaradas considerando tanto los contextos izquierdo como derecho. Este enfoque permite que BERT capture patrones de lenguaje matizados y relaciones semánticas. Su arquitectura, basada en el modelo transformador, permite el procesamiento paralelo de secuencias de entrada, mejorando significativamente la eficiencia del entrenamiento. El preentrenamiento de BERT en grandes corpus de texto lo equipa con una profunda comprensión de la estructura del lenguaje y la semántica, lo que lo hace altamente adaptable a diversas tareas mediante la afinación.
- GPT (Transformador Generativo Preentrenado):
GPT representa un avance significativo en las capacidades de generación de lenguaje. A diferencia de BERT, GPT utiliza modelado de lenguaje causal, prediciendo cada palabra en función de las palabras anteriores en la secuencia. Este enfoque autoregresivo permite que GPT genere texto coherente y contextualmente relevante. La última iteración, GPT-3, con sus impresionantes 175 mil millones de parámetros, demuestra habilidades de aprendizaje en pocos pasos (few-shot learning) notables. Puede realizar una amplia gama de tareas sin necesidad de afinación específica para la tarea, mostrando una forma de "metaaprendizaje" que le permite adaptarse a nuevas tareas con ejemplos mínimos. La versatilidad de GPT se extiende más allá de la generación de texto a tareas como la traducción de idiomas, la resumisión y hasta el razonamiento básico.
- CLIP (Preentrenamiento Contrastivo de Imágenes y Texto):
CLIP rompe nuevos límites en el aprendizaje multimodal al cerrar la brecha entre la visión y el lenguaje. Su metodología de entrenamiento implica aprender de un vasto conjunto de datos de pares de imágenes y texto, utilizando un enfoque de aprendizaje contrastivo. Esto permite que CLIP cree un espacio de incrustaciones conjunto tanto para imágenes como para texto, lo que facilita una comprensión intermodal. Las capacidades de zero-shot de CLIP son especialmente destacables, lo que le permite clasificar imágenes en categorías arbitrarias especificadas por descripciones de texto, incluso para conceptos que no ha visto explícitamente durante el entrenamiento. Esta flexibilidad hace que CLIP sea altamente adaptable a varias tareas de visión-lenguaje sin la necesidad de conjuntos de datos específicos para la tarea o afinación, abriendo nuevas posibilidades en áreas como la respuesta a preguntas visuales y la recuperación de imágenes.
Ejemplo: Afinación de BERT para el Análisis de Sentimientos en Keras
Aquí te mostramos cómo podemos afinar BERT para el análisis de sentimientos en un conjunto de datos personalizado utilizando la biblioteca transformers
de Hugging Face.
import tensorflow as tf
from transformers import BertTokenizer, TFBertForSequenceClassification
from tensorflow.keras.optimizers import Adam
from sklearn.model_selection import train_test_split
import numpy as np
# Load the BERT tokenizer and model for sequence classification (sentiment analysis)
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = TFBertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=2)
# Tokenize the dataset
def tokenize_data(texts, labels):
inputs = tokenizer(texts, padding=True, truncation=True, max_length=128, return_tensors='tf')
return inputs, tf.convert_to_tensor(labels)
# Example data (sentiment: 1=positive, 0=negative)
texts = [
"I love this movie! It's fantastic.",
"This movie was terrible. I hated every minute of it.",
"The acting was superb and the plot was engaging.",
"Boring plot, poor character development. Waste of time.",
"An absolute masterpiece of cinema!",
"I couldn't even finish watching it, it was so bad."
]
labels = [1, 0, 1, 0, 1, 0]
# Split the data into training and validation sets
train_texts, val_texts, train_labels, val_labels = train_test_split(texts, labels, test_size=0.2, random_state=42)
# Tokenize and prepare the datasets
train_inputs, train_labels = tokenize_data(train_texts, train_labels)
val_inputs, val_labels = tokenize_data(val_texts, val_labels)
# Compile the model
optimizer = Adam(learning_rate=2e-5)
loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
model.compile(optimizer=optimizer, loss=loss, metrics=['accuracy'])
# Train the model
history = model.fit(train_inputs, train_labels,
validation_data=(val_inputs, val_labels),
epochs=5, batch_size=2)
# Evaluate the model
test_texts = [
"This film exceeded all my expectations!",
"I regret watching this movie. It was awful."
]
test_labels = [1, 0]
test_inputs, test_labels = tokenize_data(test_texts, test_labels)
test_loss, test_accuracy = model.evaluate(test_inputs, test_labels)
print(f"Test accuracy: {test_accuracy:.4f}")
# Make predictions
predictions = model.predict(test_inputs)
predicted_labels = np.argmax(predictions.logits, axis=1)
for text, true_label, pred_label in zip(test_texts, test_labels, predicted_labels):
print(f"Text: {text}")
print(f"True label: {'Positive' if true_label == 1 else 'Negative'}")
print(f"Predicted label: {'Positive' if pred_label == 1 else 'Negative'}")
print()
Desglose del Código:
- Importaciones y Configuración:
- Importamos las bibliotecas necesarias: TensorFlow, Transformers (para BERT) y scikit-learn para la división de datos.
- Se cargan el tokenizador y el modelo preentrenado de BERT, especificando dos clases de salida para la clasificación binaria de sentimientos.
- Preparación de Datos:
- Se define una función
tokenize_data
para convertir entradas de texto en IDs de tokens compatibles con BERT y máscaras de atención. - Creamos un pequeño conjunto de datos de textos de ejemplo con etiquetas de sentimiento correspondientes (1 para positivo, 0 para negativo).
- Los datos se dividen en conjuntos de entrenamiento y validación usando
train_test_split
para asegurar una evaluación adecuada del modelo.
- Se define una función
- Compilación del Modelo:
- El modelo se compila usando el optimizador Adam con una tasa de aprendizaje baja (2e-5), adecuada para la afinación.
- Utilizamos Entropía Cruzada Categórica Escasa como la función de pérdida, apropiada para etiquetas de clase codificadas como enteros.
- Entrenamiento:
- El modelo se entrena durante 5 épocas con un tamaño de lote pequeño de 2, adecuado para el pequeño conjunto de datos de ejemplo.
- Se utiliza el conjunto de validación durante el entrenamiento para monitorear el rendimiento en datos no vistos.
- Evaluación:
- Se crea un conjunto de prueba separado para evaluar el rendimiento del modelo en datos completamente nuevos.
- La precisión del modelo en este conjunto de prueba se calcula y se imprime.
- Predicciones:
- El modelo entrenado se utiliza para hacer predicciones en el conjunto de prueba.
- Para cada ejemplo de prueba, imprimimos el texto original, la etiqueta real y la etiqueta predicha, proporcionando una visión clara del rendimiento del modelo.
Este ejemplo demuestra un flujo de trabajo completo para afinar BERT para análisis de sentimientos, incluyendo la división de datos, entrenamiento del modelo, evaluación y predicción. Proporciona una base práctica para aplicar BERT en tareas de clasificación de texto en el mundo real.
7.4 Aprendizaje Auto-supervisado y Modelos Fundamentales
7.4.1 ¿Qué es el Aprendizaje Auto-supervisado?
El aprendizaje auto-supervisado (SSL) es un enfoque innovador en el aprendizaje automático que cierra la brecha entre el aprendizaje supervisado y no supervisado. Aprovecha la estructura inherente dentro de los datos no etiquetados para crear tareas de aprendizaje supervisado, permitiendo que el modelo aprenda por sí mismo. Este método es particularmente valioso en escenarios donde los datos etiquetados son escasos o costosos de obtener.
En su núcleo, el SSL funciona formulando tareas previas que no requieren etiquetado manual. Estas tareas están diseñadas cuidadosamente para forzar al modelo a aprender representaciones significativas de los datos. Por ejemplo, en visión por computadora, se puede pedir al modelo que prediga la posición relativa de parches de imagen o que reconstruya una imagen en color a partir de su versión en escala de grises. En procesamiento de lenguaje natural, los modelos pueden predecir palabras faltantes en una oración o determinar si dos oraciones están contextualmente relacionadas.
El poder del SSL radica en su capacidad para aprender características generalizables que se pueden transferir a una amplia gama de tareas posteriores. Una vez que un modelo ha sido preentrenado en estas tareas auto-supervisadas, puede ajustarse con una cantidad relativamente pequeña de datos etiquetados para aplicaciones específicas. Este enfoque de aprendizaje transferido ha llevado a avances significativos en varios dominios, incluidos la clasificación de imágenes, la detección de objetos, el análisis de sentimientos y la traducción automática.
Además, el SSL ha allanado el camino para el desarrollo de modelos fundamentales, que son modelos a gran escala entrenados con grandes cantidades de datos no etiquetados y que pueden adaptarse a numerosas tareas. Ejemplos incluyen BERT en procesamiento de lenguaje natural y SimCLR en visión por computadora. Estos modelos han demostrado un rendimiento notable en diversas aplicaciones, a menudo superando los enfoques tradicionales de aprendizaje supervisado.
A medida que el campo de la inteligencia artificial continúa evolucionando, el aprendizaje auto-supervisado se encuentra en la vanguardia, prometiendo formas más eficientes y efectivas de aprovechar el potencial de los datos no etiquetados y expandir las capacidades del aprendizaje automático.
7.4.2 Tareas Previas en el Aprendizaje Auto-supervisado
El aprendizaje auto-supervisado (SSL) emplea diversas tareas previas para entrenar modelos sin etiquetas explícitas. Estas tareas están diseñadas para extraer representaciones significativas de los datos. Aquí hay algunas tareas clave en SSL:
- Aprendizaje Contrastivo:
Este enfoque tiene como objetivo aprender representaciones comparando puntos de datos similares y disímiles. Crea un espacio latente donde las entradas semánticamente relacionadas están cerca y las no relacionadas están alejadas. El aprendizaje contrastivo ha demostrado un éxito notable tanto en visión por computadora como en procesamiento de lenguaje natural. Algunos marcos notables incluyen:
- SimCLR (Simple Framework for Contrastive Learning of Visual Representations): Este método utiliza aumento de datos para crear diferentes vistas de la misma imagen, luego entrena al modelo para reconocer estas como similares mientras distingue otras imágenes.
- MoCo (Momentum Contrast): Este enfoque mantiene un diccionario dinámico de representaciones codificadas, lo que permite un gran y constante conjunto de muestras negativas en el aprendizaje contrastivo.
- Modelado de Lenguaje enmascarado (MLM):
Técnica fundamental en el procesamiento de lenguaje natural (NLP), el MLM implica enmascarar aleatoriamente palabras en una oración y entrenar al modelo para predecir estas palabras enmascaradas. Esto fuerza al modelo a entender el contexto y desarrollar una comprensión profunda de la estructura del lenguaje. BERT (Bidirectional Encoder Representations from Transformers) utiliza este enfoque, lo que le permite obtener un rendimiento de vanguardia en varias tareas de NLP.
- Relleno de Imágenes (Inpainting):
Esta tarea de visión por computadora implica predecir o reconstruir partes faltantes o dañadas de una imagen. Anima al modelo a comprender relaciones espaciales y estructuras de objetos. Un concepto relacionado es el Autoencoder de eliminación de ruido, que aprende a reconstruir imágenes limpias a partir de entradas ruidosas. Estas técnicas ayudan a los modelos a aprender representaciones de características robustas que pueden generalizar bien a varias tareas posteriores.
- Colorización:
Esta tarea consiste en predecir los colores de las imágenes en escala de grises. Es particularmente efectiva porque requiere que el modelo comprenda relaciones complejas entre objetos, texturas y patrones de color típicos en escenas naturales. Por ejemplo, el modelo necesita aprender que la hierba es típicamente verde y que los cielos suelen ser azules. Esta tarea previa ha demostrado ser útil para que los modelos aprendan características ricas y transferibles que son útiles para varias tareas de visión por computadora.
Otras tareas previas notables en SSL incluyen la predicción de rotaciones, la resolución de rompecabezas (jigsaw) y la predicción de la siguiente oración. Estos enfoques diversos contribuyen colectivamente al poder y la flexibilidad del aprendizaje auto-supervisado, permitiendo que los modelos extraigan representaciones significativas de grandes cantidades de datos no etiquetados.
Ejemplo: Aprendizaje Contrastivo con SimCLR en PyTorch
Aquí tienes una implementación básica de SimCLR, un método de aprendizaje contrastivo para aprender representaciones de imágenes sin etiquetas.
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms, models
import torch.nn.functional as F
# Define a simple contrastive learning model based on ResNet
class SimCLR(nn.Module):
def __init__(self, base_model, out_dim):
super(SimCLR, self).__init__()
self.encoder = base_model
self.projection = nn.Sequential(
nn.Linear(base_model.fc.in_features, 512),
nn.ReLU(),
nn.Linear(512, out_dim)
)
self.encoder.fc = nn.Identity() # Remove the fully connected layer of ResNet
def forward(self, x):
features = self.encoder(x)
projections = self.projection(features)
return F.normalize(projections, dim=-1) # Normalize for contrastive loss
# SimCLR contrastive loss function
def contrastive_loss(z_i, z_j, temperature=0.5):
# Compute similarity matrix
batch_size = z_i.size(0)
z = torch.cat([z_i, z_j], dim=0)
sim_matrix = torch.mm(z, z.t()) / temperature
# Create labels for contrastive loss
labels = torch.arange(batch_size).cuda()
labels = torch.cat([labels, labels], dim=0)
# Mask out the diagonal (same sample comparisons)
mask = torch.eye(sim_matrix.size(0), device=sim_matrix.device).bool()
sim_matrix = sim_matrix.masked_fill(mask, -float('inf'))
# Compute loss
loss = F.cross_entropy(sim_matrix, labels)
return loss
# Define data transformations
transform = transforms.Compose([
transforms.RandomResizedCrop(size=224),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
# Load dataset (e.g., CIFAR-10)
dataset = datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
dataloader = torch.utils.data.DataLoader(dataset, batch_size=64, shuffle=True)
# Instantiate SimCLR model with ResNet backbone
base_model = models.resnet18(pretrained=True)
simclr_model = SimCLR(base_model, out_dim=128).cuda()
# Optimizer
optimizer = optim.Adam(simclr_model.parameters(), lr=0.001)
# Training loop
for epoch in range(10):
for images, _ in dataloader:
# Data augmentation (SimCLR requires two augmented views of each image)
view_1, view_2 = images.cuda(), images.cuda()
# Forward pass through SimCLR
z_i = simclr_model(view_1)
z_j = simclr_model(view_2)
# Compute contrastive loss
loss = contrastive_loss(z_i, z_j)
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f"Epoch [{epoch+1}/10], Loss: {loss.item():.4f}")
Este código implementa una versión básica de SimCLR (Marco Simple para el Aprendizaje Contrastivo de Representaciones Visuales), que es un método de aprendizaje auto-supervisado para representaciones visuales.
Aquí desglosamos los componentes clave:
- Modelo SimCLR: La clase
SimCLR
define la arquitectura del modelo. Utiliza un ResNet preentrenado como codificador y agrega una cabeza de proyección en la parte superior. - Pérdida Contrastiva: La función
contrastive_loss
implementa el núcleo del objetivo de aprendizaje de SimCLR. Calcula la similitud entre diferentes vistas aumentadas de las mismas imágenes y empuja al modelo a reconocerlas como similares mientras distingue otras imágenes. - Aumento de Datos: El código utiliza recortes redimensionados aleatorios y volteo horizontal como técnicas de aumento de datos.
- Conjunto de Datos: Se utiliza el conjunto de datos CIFAR-10 para el entrenamiento.
- Bucle de Entrenamiento: El modelo se entrena durante 10 épocas. En cada iteración, se crean dos vistas aumentadas de las mismas imágenes y se pasan por el modelo. Luego, se calcula la pérdida contrastiva y se utiliza para actualizar los parámetros del modelo.
Esta implementación demuestra los principios fundamentales del aprendizaje contrastivo, donde el modelo aprende a crear representaciones similares para diferentes vistas de la misma imagen, mientras separa las representaciones de diferentes imágenes. Este enfoque permite que el modelo aprenda características visuales útiles sin requerir datos etiquetados.
7.4.3 Modelos Fundamentales: Un Nuevo Paradigma en la IA
Los modelos fundamentales representan un cambio de paradigma en el desarrollo de la IA, introduciendo una nueva era de sistemas de aprendizaje automático versátiles y potentes. Estos modelos, caracterizados por su gran escala y preentrenamiento extenso en conjuntos de datos diversos, han revolucionado el campo de la inteligencia artificial. A diferencia de los modelos tradicionales, que se entrenan para tareas específicas, los modelos fundamentales están diseñados para aprender representaciones de propósito general que pueden adaptarse a una amplia gama de aplicaciones.
En el núcleo de los modelos fundamentales está el concepto de aprendizaje transferido, donde el conocimiento adquirido durante el preentrenamiento en conjuntos de datos a gran escala puede transferirse de manera eficiente a tareas específicas con una mínima adaptación. Este enfoque reduce significativamente la necesidad de datos etiquetados específicos para la tarea, haciendo que la IA sea más accesible y rentable para una variedad más amplia de aplicaciones.
Los modelos fundamentales suelen aprovechar arquitecturas avanzadas, como los transformadores, que sobresalen en la captura de dependencias a largo plazo en los datos. Estos modelos a menudo emplean técnicas de aprendizaje auto-supervisado, lo que les permite extraer patrones y representaciones significativas de datos no etiquetados. Esta capacidad para aprender de vastas cantidades de información no etiquetada es un factor clave en su notable rendimiento en diversos dominios.
La versatilidad de los modelos fundamentales se ejemplifica por su éxito en diversos campos. En el procesamiento de lenguaje natural, modelos como GPT-3 de OpenAI han demostrado capacidades sin precedentes en generación de texto, comprensión del lenguaje e incluso razonamiento básico. BERT (Representaciones de Codificadores Bidireccionales de Transformadores) ha establecido nuevos estándares para tareas de comprensión del lenguaje, como el análisis de sentimientos y la respuesta a preguntas.
Más allá del texto, los modelos fundamentales han logrado avances significativos en el aprendizaje multimodal. CLIP (Preentrenamiento Contrastivo de Imágenes y Texto) ha cerrado la brecha entre la visión y el lenguaje, permitiendo la clasificación de imágenes sin necesidad de ejemplos específicos para la tarea. En el ámbito de la IA generativa, modelos como DALL-E han ampliado los límites de la creatividad, generando imágenes altamente detalladas e imaginativas a partir de descripciones textuales.
El impacto de los modelos fundamentales va más allá de sus aplicaciones inmediatas. Han generado nuevas direcciones de investigación en áreas como la compresión de modelos, la afinación eficiente y la IA ética. A medida que estos modelos continúan evolucionando, prometen impulsar la innovación en industrias como la salud, la investigación científica, las artes creativas y la educación, transformando el panorama de la inteligencia artificial y su papel en la sociedad.
7.4.4 Ejemplos de Modelos Fundamentales
- BERT (Representaciones de Codificadores Bidireccionales de Transformadores):
BERT revolucionó el procesamiento de lenguaje natural con su comprensión bidireccional del contexto. Utilizando el modelado de lenguaje enmascarado (MLM), BERT aprende a predecir palabras enmascaradas considerando tanto los contextos izquierdo como derecho. Este enfoque permite que BERT capture patrones de lenguaje matizados y relaciones semánticas. Su arquitectura, basada en el modelo transformador, permite el procesamiento paralelo de secuencias de entrada, mejorando significativamente la eficiencia del entrenamiento. El preentrenamiento de BERT en grandes corpus de texto lo equipa con una profunda comprensión de la estructura del lenguaje y la semántica, lo que lo hace altamente adaptable a diversas tareas mediante la afinación.
- GPT (Transformador Generativo Preentrenado):
GPT representa un avance significativo en las capacidades de generación de lenguaje. A diferencia de BERT, GPT utiliza modelado de lenguaje causal, prediciendo cada palabra en función de las palabras anteriores en la secuencia. Este enfoque autoregresivo permite que GPT genere texto coherente y contextualmente relevante. La última iteración, GPT-3, con sus impresionantes 175 mil millones de parámetros, demuestra habilidades de aprendizaje en pocos pasos (few-shot learning) notables. Puede realizar una amplia gama de tareas sin necesidad de afinación específica para la tarea, mostrando una forma de "metaaprendizaje" que le permite adaptarse a nuevas tareas con ejemplos mínimos. La versatilidad de GPT se extiende más allá de la generación de texto a tareas como la traducción de idiomas, la resumisión y hasta el razonamiento básico.
- CLIP (Preentrenamiento Contrastivo de Imágenes y Texto):
CLIP rompe nuevos límites en el aprendizaje multimodal al cerrar la brecha entre la visión y el lenguaje. Su metodología de entrenamiento implica aprender de un vasto conjunto de datos de pares de imágenes y texto, utilizando un enfoque de aprendizaje contrastivo. Esto permite que CLIP cree un espacio de incrustaciones conjunto tanto para imágenes como para texto, lo que facilita una comprensión intermodal. Las capacidades de zero-shot de CLIP son especialmente destacables, lo que le permite clasificar imágenes en categorías arbitrarias especificadas por descripciones de texto, incluso para conceptos que no ha visto explícitamente durante el entrenamiento. Esta flexibilidad hace que CLIP sea altamente adaptable a varias tareas de visión-lenguaje sin la necesidad de conjuntos de datos específicos para la tarea o afinación, abriendo nuevas posibilidades en áreas como la respuesta a preguntas visuales y la recuperación de imágenes.
Ejemplo: Afinación de BERT para el Análisis de Sentimientos en Keras
Aquí te mostramos cómo podemos afinar BERT para el análisis de sentimientos en un conjunto de datos personalizado utilizando la biblioteca transformers
de Hugging Face.
import tensorflow as tf
from transformers import BertTokenizer, TFBertForSequenceClassification
from tensorflow.keras.optimizers import Adam
from sklearn.model_selection import train_test_split
import numpy as np
# Load the BERT tokenizer and model for sequence classification (sentiment analysis)
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = TFBertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=2)
# Tokenize the dataset
def tokenize_data(texts, labels):
inputs = tokenizer(texts, padding=True, truncation=True, max_length=128, return_tensors='tf')
return inputs, tf.convert_to_tensor(labels)
# Example data (sentiment: 1=positive, 0=negative)
texts = [
"I love this movie! It's fantastic.",
"This movie was terrible. I hated every minute of it.",
"The acting was superb and the plot was engaging.",
"Boring plot, poor character development. Waste of time.",
"An absolute masterpiece of cinema!",
"I couldn't even finish watching it, it was so bad."
]
labels = [1, 0, 1, 0, 1, 0]
# Split the data into training and validation sets
train_texts, val_texts, train_labels, val_labels = train_test_split(texts, labels, test_size=0.2, random_state=42)
# Tokenize and prepare the datasets
train_inputs, train_labels = tokenize_data(train_texts, train_labels)
val_inputs, val_labels = tokenize_data(val_texts, val_labels)
# Compile the model
optimizer = Adam(learning_rate=2e-5)
loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
model.compile(optimizer=optimizer, loss=loss, metrics=['accuracy'])
# Train the model
history = model.fit(train_inputs, train_labels,
validation_data=(val_inputs, val_labels),
epochs=5, batch_size=2)
# Evaluate the model
test_texts = [
"This film exceeded all my expectations!",
"I regret watching this movie. It was awful."
]
test_labels = [1, 0]
test_inputs, test_labels = tokenize_data(test_texts, test_labels)
test_loss, test_accuracy = model.evaluate(test_inputs, test_labels)
print(f"Test accuracy: {test_accuracy:.4f}")
# Make predictions
predictions = model.predict(test_inputs)
predicted_labels = np.argmax(predictions.logits, axis=1)
for text, true_label, pred_label in zip(test_texts, test_labels, predicted_labels):
print(f"Text: {text}")
print(f"True label: {'Positive' if true_label == 1 else 'Negative'}")
print(f"Predicted label: {'Positive' if pred_label == 1 else 'Negative'}")
print()
Desglose del Código:
- Importaciones y Configuración:
- Importamos las bibliotecas necesarias: TensorFlow, Transformers (para BERT) y scikit-learn para la división de datos.
- Se cargan el tokenizador y el modelo preentrenado de BERT, especificando dos clases de salida para la clasificación binaria de sentimientos.
- Preparación de Datos:
- Se define una función
tokenize_data
para convertir entradas de texto en IDs de tokens compatibles con BERT y máscaras de atención. - Creamos un pequeño conjunto de datos de textos de ejemplo con etiquetas de sentimiento correspondientes (1 para positivo, 0 para negativo).
- Los datos se dividen en conjuntos de entrenamiento y validación usando
train_test_split
para asegurar una evaluación adecuada del modelo.
- Se define una función
- Compilación del Modelo:
- El modelo se compila usando el optimizador Adam con una tasa de aprendizaje baja (2e-5), adecuada para la afinación.
- Utilizamos Entropía Cruzada Categórica Escasa como la función de pérdida, apropiada para etiquetas de clase codificadas como enteros.
- Entrenamiento:
- El modelo se entrena durante 5 épocas con un tamaño de lote pequeño de 2, adecuado para el pequeño conjunto de datos de ejemplo.
- Se utiliza el conjunto de validación durante el entrenamiento para monitorear el rendimiento en datos no vistos.
- Evaluación:
- Se crea un conjunto de prueba separado para evaluar el rendimiento del modelo en datos completamente nuevos.
- La precisión del modelo en este conjunto de prueba se calcula y se imprime.
- Predicciones:
- El modelo entrenado se utiliza para hacer predicciones en el conjunto de prueba.
- Para cada ejemplo de prueba, imprimimos el texto original, la etiqueta real y la etiqueta predicha, proporcionando una visión clara del rendimiento del modelo.
Este ejemplo demuestra un flujo de trabajo completo para afinar BERT para análisis de sentimientos, incluyendo la división de datos, entrenamiento del modelo, evaluación y predicción. Proporciona una base práctica para aplicar BERT en tareas de clasificación de texto en el mundo real.
7.4 Aprendizaje Auto-supervisado y Modelos Fundamentales
7.4.1 ¿Qué es el Aprendizaje Auto-supervisado?
El aprendizaje auto-supervisado (SSL) es un enfoque innovador en el aprendizaje automático que cierra la brecha entre el aprendizaje supervisado y no supervisado. Aprovecha la estructura inherente dentro de los datos no etiquetados para crear tareas de aprendizaje supervisado, permitiendo que el modelo aprenda por sí mismo. Este método es particularmente valioso en escenarios donde los datos etiquetados son escasos o costosos de obtener.
En su núcleo, el SSL funciona formulando tareas previas que no requieren etiquetado manual. Estas tareas están diseñadas cuidadosamente para forzar al modelo a aprender representaciones significativas de los datos. Por ejemplo, en visión por computadora, se puede pedir al modelo que prediga la posición relativa de parches de imagen o que reconstruya una imagen en color a partir de su versión en escala de grises. En procesamiento de lenguaje natural, los modelos pueden predecir palabras faltantes en una oración o determinar si dos oraciones están contextualmente relacionadas.
El poder del SSL radica en su capacidad para aprender características generalizables que se pueden transferir a una amplia gama de tareas posteriores. Una vez que un modelo ha sido preentrenado en estas tareas auto-supervisadas, puede ajustarse con una cantidad relativamente pequeña de datos etiquetados para aplicaciones específicas. Este enfoque de aprendizaje transferido ha llevado a avances significativos en varios dominios, incluidos la clasificación de imágenes, la detección de objetos, el análisis de sentimientos y la traducción automática.
Además, el SSL ha allanado el camino para el desarrollo de modelos fundamentales, que son modelos a gran escala entrenados con grandes cantidades de datos no etiquetados y que pueden adaptarse a numerosas tareas. Ejemplos incluyen BERT en procesamiento de lenguaje natural y SimCLR en visión por computadora. Estos modelos han demostrado un rendimiento notable en diversas aplicaciones, a menudo superando los enfoques tradicionales de aprendizaje supervisado.
A medida que el campo de la inteligencia artificial continúa evolucionando, el aprendizaje auto-supervisado se encuentra en la vanguardia, prometiendo formas más eficientes y efectivas de aprovechar el potencial de los datos no etiquetados y expandir las capacidades del aprendizaje automático.
7.4.2 Tareas Previas en el Aprendizaje Auto-supervisado
El aprendizaje auto-supervisado (SSL) emplea diversas tareas previas para entrenar modelos sin etiquetas explícitas. Estas tareas están diseñadas para extraer representaciones significativas de los datos. Aquí hay algunas tareas clave en SSL:
- Aprendizaje Contrastivo:
Este enfoque tiene como objetivo aprender representaciones comparando puntos de datos similares y disímiles. Crea un espacio latente donde las entradas semánticamente relacionadas están cerca y las no relacionadas están alejadas. El aprendizaje contrastivo ha demostrado un éxito notable tanto en visión por computadora como en procesamiento de lenguaje natural. Algunos marcos notables incluyen:
- SimCLR (Simple Framework for Contrastive Learning of Visual Representations): Este método utiliza aumento de datos para crear diferentes vistas de la misma imagen, luego entrena al modelo para reconocer estas como similares mientras distingue otras imágenes.
- MoCo (Momentum Contrast): Este enfoque mantiene un diccionario dinámico de representaciones codificadas, lo que permite un gran y constante conjunto de muestras negativas en el aprendizaje contrastivo.
- Modelado de Lenguaje enmascarado (MLM):
Técnica fundamental en el procesamiento de lenguaje natural (NLP), el MLM implica enmascarar aleatoriamente palabras en una oración y entrenar al modelo para predecir estas palabras enmascaradas. Esto fuerza al modelo a entender el contexto y desarrollar una comprensión profunda de la estructura del lenguaje. BERT (Bidirectional Encoder Representations from Transformers) utiliza este enfoque, lo que le permite obtener un rendimiento de vanguardia en varias tareas de NLP.
- Relleno de Imágenes (Inpainting):
Esta tarea de visión por computadora implica predecir o reconstruir partes faltantes o dañadas de una imagen. Anima al modelo a comprender relaciones espaciales y estructuras de objetos. Un concepto relacionado es el Autoencoder de eliminación de ruido, que aprende a reconstruir imágenes limpias a partir de entradas ruidosas. Estas técnicas ayudan a los modelos a aprender representaciones de características robustas que pueden generalizar bien a varias tareas posteriores.
- Colorización:
Esta tarea consiste en predecir los colores de las imágenes en escala de grises. Es particularmente efectiva porque requiere que el modelo comprenda relaciones complejas entre objetos, texturas y patrones de color típicos en escenas naturales. Por ejemplo, el modelo necesita aprender que la hierba es típicamente verde y que los cielos suelen ser azules. Esta tarea previa ha demostrado ser útil para que los modelos aprendan características ricas y transferibles que son útiles para varias tareas de visión por computadora.
Otras tareas previas notables en SSL incluyen la predicción de rotaciones, la resolución de rompecabezas (jigsaw) y la predicción de la siguiente oración. Estos enfoques diversos contribuyen colectivamente al poder y la flexibilidad del aprendizaje auto-supervisado, permitiendo que los modelos extraigan representaciones significativas de grandes cantidades de datos no etiquetados.
Ejemplo: Aprendizaje Contrastivo con SimCLR en PyTorch
Aquí tienes una implementación básica de SimCLR, un método de aprendizaje contrastivo para aprender representaciones de imágenes sin etiquetas.
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms, models
import torch.nn.functional as F
# Define a simple contrastive learning model based on ResNet
class SimCLR(nn.Module):
def __init__(self, base_model, out_dim):
super(SimCLR, self).__init__()
self.encoder = base_model
self.projection = nn.Sequential(
nn.Linear(base_model.fc.in_features, 512),
nn.ReLU(),
nn.Linear(512, out_dim)
)
self.encoder.fc = nn.Identity() # Remove the fully connected layer of ResNet
def forward(self, x):
features = self.encoder(x)
projections = self.projection(features)
return F.normalize(projections, dim=-1) # Normalize for contrastive loss
# SimCLR contrastive loss function
def contrastive_loss(z_i, z_j, temperature=0.5):
# Compute similarity matrix
batch_size = z_i.size(0)
z = torch.cat([z_i, z_j], dim=0)
sim_matrix = torch.mm(z, z.t()) / temperature
# Create labels for contrastive loss
labels = torch.arange(batch_size).cuda()
labels = torch.cat([labels, labels], dim=0)
# Mask out the diagonal (same sample comparisons)
mask = torch.eye(sim_matrix.size(0), device=sim_matrix.device).bool()
sim_matrix = sim_matrix.masked_fill(mask, -float('inf'))
# Compute loss
loss = F.cross_entropy(sim_matrix, labels)
return loss
# Define data transformations
transform = transforms.Compose([
transforms.RandomResizedCrop(size=224),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
# Load dataset (e.g., CIFAR-10)
dataset = datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
dataloader = torch.utils.data.DataLoader(dataset, batch_size=64, shuffle=True)
# Instantiate SimCLR model with ResNet backbone
base_model = models.resnet18(pretrained=True)
simclr_model = SimCLR(base_model, out_dim=128).cuda()
# Optimizer
optimizer = optim.Adam(simclr_model.parameters(), lr=0.001)
# Training loop
for epoch in range(10):
for images, _ in dataloader:
# Data augmentation (SimCLR requires two augmented views of each image)
view_1, view_2 = images.cuda(), images.cuda()
# Forward pass through SimCLR
z_i = simclr_model(view_1)
z_j = simclr_model(view_2)
# Compute contrastive loss
loss = contrastive_loss(z_i, z_j)
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f"Epoch [{epoch+1}/10], Loss: {loss.item():.4f}")
Este código implementa una versión básica de SimCLR (Marco Simple para el Aprendizaje Contrastivo de Representaciones Visuales), que es un método de aprendizaje auto-supervisado para representaciones visuales.
Aquí desglosamos los componentes clave:
- Modelo SimCLR: La clase
SimCLR
define la arquitectura del modelo. Utiliza un ResNet preentrenado como codificador y agrega una cabeza de proyección en la parte superior. - Pérdida Contrastiva: La función
contrastive_loss
implementa el núcleo del objetivo de aprendizaje de SimCLR. Calcula la similitud entre diferentes vistas aumentadas de las mismas imágenes y empuja al modelo a reconocerlas como similares mientras distingue otras imágenes. - Aumento de Datos: El código utiliza recortes redimensionados aleatorios y volteo horizontal como técnicas de aumento de datos.
- Conjunto de Datos: Se utiliza el conjunto de datos CIFAR-10 para el entrenamiento.
- Bucle de Entrenamiento: El modelo se entrena durante 10 épocas. En cada iteración, se crean dos vistas aumentadas de las mismas imágenes y se pasan por el modelo. Luego, se calcula la pérdida contrastiva y se utiliza para actualizar los parámetros del modelo.
Esta implementación demuestra los principios fundamentales del aprendizaje contrastivo, donde el modelo aprende a crear representaciones similares para diferentes vistas de la misma imagen, mientras separa las representaciones de diferentes imágenes. Este enfoque permite que el modelo aprenda características visuales útiles sin requerir datos etiquetados.
7.4.3 Modelos Fundamentales: Un Nuevo Paradigma en la IA
Los modelos fundamentales representan un cambio de paradigma en el desarrollo de la IA, introduciendo una nueva era de sistemas de aprendizaje automático versátiles y potentes. Estos modelos, caracterizados por su gran escala y preentrenamiento extenso en conjuntos de datos diversos, han revolucionado el campo de la inteligencia artificial. A diferencia de los modelos tradicionales, que se entrenan para tareas específicas, los modelos fundamentales están diseñados para aprender representaciones de propósito general que pueden adaptarse a una amplia gama de aplicaciones.
En el núcleo de los modelos fundamentales está el concepto de aprendizaje transferido, donde el conocimiento adquirido durante el preentrenamiento en conjuntos de datos a gran escala puede transferirse de manera eficiente a tareas específicas con una mínima adaptación. Este enfoque reduce significativamente la necesidad de datos etiquetados específicos para la tarea, haciendo que la IA sea más accesible y rentable para una variedad más amplia de aplicaciones.
Los modelos fundamentales suelen aprovechar arquitecturas avanzadas, como los transformadores, que sobresalen en la captura de dependencias a largo plazo en los datos. Estos modelos a menudo emplean técnicas de aprendizaje auto-supervisado, lo que les permite extraer patrones y representaciones significativas de datos no etiquetados. Esta capacidad para aprender de vastas cantidades de información no etiquetada es un factor clave en su notable rendimiento en diversos dominios.
La versatilidad de los modelos fundamentales se ejemplifica por su éxito en diversos campos. En el procesamiento de lenguaje natural, modelos como GPT-3 de OpenAI han demostrado capacidades sin precedentes en generación de texto, comprensión del lenguaje e incluso razonamiento básico. BERT (Representaciones de Codificadores Bidireccionales de Transformadores) ha establecido nuevos estándares para tareas de comprensión del lenguaje, como el análisis de sentimientos y la respuesta a preguntas.
Más allá del texto, los modelos fundamentales han logrado avances significativos en el aprendizaje multimodal. CLIP (Preentrenamiento Contrastivo de Imágenes y Texto) ha cerrado la brecha entre la visión y el lenguaje, permitiendo la clasificación de imágenes sin necesidad de ejemplos específicos para la tarea. En el ámbito de la IA generativa, modelos como DALL-E han ampliado los límites de la creatividad, generando imágenes altamente detalladas e imaginativas a partir de descripciones textuales.
El impacto de los modelos fundamentales va más allá de sus aplicaciones inmediatas. Han generado nuevas direcciones de investigación en áreas como la compresión de modelos, la afinación eficiente y la IA ética. A medida que estos modelos continúan evolucionando, prometen impulsar la innovación en industrias como la salud, la investigación científica, las artes creativas y la educación, transformando el panorama de la inteligencia artificial y su papel en la sociedad.
7.4.4 Ejemplos de Modelos Fundamentales
- BERT (Representaciones de Codificadores Bidireccionales de Transformadores):
BERT revolucionó el procesamiento de lenguaje natural con su comprensión bidireccional del contexto. Utilizando el modelado de lenguaje enmascarado (MLM), BERT aprende a predecir palabras enmascaradas considerando tanto los contextos izquierdo como derecho. Este enfoque permite que BERT capture patrones de lenguaje matizados y relaciones semánticas. Su arquitectura, basada en el modelo transformador, permite el procesamiento paralelo de secuencias de entrada, mejorando significativamente la eficiencia del entrenamiento. El preentrenamiento de BERT en grandes corpus de texto lo equipa con una profunda comprensión de la estructura del lenguaje y la semántica, lo que lo hace altamente adaptable a diversas tareas mediante la afinación.
- GPT (Transformador Generativo Preentrenado):
GPT representa un avance significativo en las capacidades de generación de lenguaje. A diferencia de BERT, GPT utiliza modelado de lenguaje causal, prediciendo cada palabra en función de las palabras anteriores en la secuencia. Este enfoque autoregresivo permite que GPT genere texto coherente y contextualmente relevante. La última iteración, GPT-3, con sus impresionantes 175 mil millones de parámetros, demuestra habilidades de aprendizaje en pocos pasos (few-shot learning) notables. Puede realizar una amplia gama de tareas sin necesidad de afinación específica para la tarea, mostrando una forma de "metaaprendizaje" que le permite adaptarse a nuevas tareas con ejemplos mínimos. La versatilidad de GPT se extiende más allá de la generación de texto a tareas como la traducción de idiomas, la resumisión y hasta el razonamiento básico.
- CLIP (Preentrenamiento Contrastivo de Imágenes y Texto):
CLIP rompe nuevos límites en el aprendizaje multimodal al cerrar la brecha entre la visión y el lenguaje. Su metodología de entrenamiento implica aprender de un vasto conjunto de datos de pares de imágenes y texto, utilizando un enfoque de aprendizaje contrastivo. Esto permite que CLIP cree un espacio de incrustaciones conjunto tanto para imágenes como para texto, lo que facilita una comprensión intermodal. Las capacidades de zero-shot de CLIP son especialmente destacables, lo que le permite clasificar imágenes en categorías arbitrarias especificadas por descripciones de texto, incluso para conceptos que no ha visto explícitamente durante el entrenamiento. Esta flexibilidad hace que CLIP sea altamente adaptable a varias tareas de visión-lenguaje sin la necesidad de conjuntos de datos específicos para la tarea o afinación, abriendo nuevas posibilidades en áreas como la respuesta a preguntas visuales y la recuperación de imágenes.
Ejemplo: Afinación de BERT para el Análisis de Sentimientos en Keras
Aquí te mostramos cómo podemos afinar BERT para el análisis de sentimientos en un conjunto de datos personalizado utilizando la biblioteca transformers
de Hugging Face.
import tensorflow as tf
from transformers import BertTokenizer, TFBertForSequenceClassification
from tensorflow.keras.optimizers import Adam
from sklearn.model_selection import train_test_split
import numpy as np
# Load the BERT tokenizer and model for sequence classification (sentiment analysis)
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = TFBertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=2)
# Tokenize the dataset
def tokenize_data(texts, labels):
inputs = tokenizer(texts, padding=True, truncation=True, max_length=128, return_tensors='tf')
return inputs, tf.convert_to_tensor(labels)
# Example data (sentiment: 1=positive, 0=negative)
texts = [
"I love this movie! It's fantastic.",
"This movie was terrible. I hated every minute of it.",
"The acting was superb and the plot was engaging.",
"Boring plot, poor character development. Waste of time.",
"An absolute masterpiece of cinema!",
"I couldn't even finish watching it, it was so bad."
]
labels = [1, 0, 1, 0, 1, 0]
# Split the data into training and validation sets
train_texts, val_texts, train_labels, val_labels = train_test_split(texts, labels, test_size=0.2, random_state=42)
# Tokenize and prepare the datasets
train_inputs, train_labels = tokenize_data(train_texts, train_labels)
val_inputs, val_labels = tokenize_data(val_texts, val_labels)
# Compile the model
optimizer = Adam(learning_rate=2e-5)
loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
model.compile(optimizer=optimizer, loss=loss, metrics=['accuracy'])
# Train the model
history = model.fit(train_inputs, train_labels,
validation_data=(val_inputs, val_labels),
epochs=5, batch_size=2)
# Evaluate the model
test_texts = [
"This film exceeded all my expectations!",
"I regret watching this movie. It was awful."
]
test_labels = [1, 0]
test_inputs, test_labels = tokenize_data(test_texts, test_labels)
test_loss, test_accuracy = model.evaluate(test_inputs, test_labels)
print(f"Test accuracy: {test_accuracy:.4f}")
# Make predictions
predictions = model.predict(test_inputs)
predicted_labels = np.argmax(predictions.logits, axis=1)
for text, true_label, pred_label in zip(test_texts, test_labels, predicted_labels):
print(f"Text: {text}")
print(f"True label: {'Positive' if true_label == 1 else 'Negative'}")
print(f"Predicted label: {'Positive' if pred_label == 1 else 'Negative'}")
print()
Desglose del Código:
- Importaciones y Configuración:
- Importamos las bibliotecas necesarias: TensorFlow, Transformers (para BERT) y scikit-learn para la división de datos.
- Se cargan el tokenizador y el modelo preentrenado de BERT, especificando dos clases de salida para la clasificación binaria de sentimientos.
- Preparación de Datos:
- Se define una función
tokenize_data
para convertir entradas de texto en IDs de tokens compatibles con BERT y máscaras de atención. - Creamos un pequeño conjunto de datos de textos de ejemplo con etiquetas de sentimiento correspondientes (1 para positivo, 0 para negativo).
- Los datos se dividen en conjuntos de entrenamiento y validación usando
train_test_split
para asegurar una evaluación adecuada del modelo.
- Se define una función
- Compilación del Modelo:
- El modelo se compila usando el optimizador Adam con una tasa de aprendizaje baja (2e-5), adecuada para la afinación.
- Utilizamos Entropía Cruzada Categórica Escasa como la función de pérdida, apropiada para etiquetas de clase codificadas como enteros.
- Entrenamiento:
- El modelo se entrena durante 5 épocas con un tamaño de lote pequeño de 2, adecuado para el pequeño conjunto de datos de ejemplo.
- Se utiliza el conjunto de validación durante el entrenamiento para monitorear el rendimiento en datos no vistos.
- Evaluación:
- Se crea un conjunto de prueba separado para evaluar el rendimiento del modelo en datos completamente nuevos.
- La precisión del modelo en este conjunto de prueba se calcula y se imprime.
- Predicciones:
- El modelo entrenado se utiliza para hacer predicciones en el conjunto de prueba.
- Para cada ejemplo de prueba, imprimimos el texto original, la etiqueta real y la etiqueta predicha, proporcionando una visión clara del rendimiento del modelo.
Este ejemplo demuestra un flujo de trabajo completo para afinar BERT para análisis de sentimientos, incluyendo la división de datos, entrenamiento del modelo, evaluación y predicción. Proporciona una base práctica para aplicar BERT en tareas de clasificación de texto en el mundo real.
7.4 Aprendizaje Auto-supervisado y Modelos Fundamentales
7.4.1 ¿Qué es el Aprendizaje Auto-supervisado?
El aprendizaje auto-supervisado (SSL) es un enfoque innovador en el aprendizaje automático que cierra la brecha entre el aprendizaje supervisado y no supervisado. Aprovecha la estructura inherente dentro de los datos no etiquetados para crear tareas de aprendizaje supervisado, permitiendo que el modelo aprenda por sí mismo. Este método es particularmente valioso en escenarios donde los datos etiquetados son escasos o costosos de obtener.
En su núcleo, el SSL funciona formulando tareas previas que no requieren etiquetado manual. Estas tareas están diseñadas cuidadosamente para forzar al modelo a aprender representaciones significativas de los datos. Por ejemplo, en visión por computadora, se puede pedir al modelo que prediga la posición relativa de parches de imagen o que reconstruya una imagen en color a partir de su versión en escala de grises. En procesamiento de lenguaje natural, los modelos pueden predecir palabras faltantes en una oración o determinar si dos oraciones están contextualmente relacionadas.
El poder del SSL radica en su capacidad para aprender características generalizables que se pueden transferir a una amplia gama de tareas posteriores. Una vez que un modelo ha sido preentrenado en estas tareas auto-supervisadas, puede ajustarse con una cantidad relativamente pequeña de datos etiquetados para aplicaciones específicas. Este enfoque de aprendizaje transferido ha llevado a avances significativos en varios dominios, incluidos la clasificación de imágenes, la detección de objetos, el análisis de sentimientos y la traducción automática.
Además, el SSL ha allanado el camino para el desarrollo de modelos fundamentales, que son modelos a gran escala entrenados con grandes cantidades de datos no etiquetados y que pueden adaptarse a numerosas tareas. Ejemplos incluyen BERT en procesamiento de lenguaje natural y SimCLR en visión por computadora. Estos modelos han demostrado un rendimiento notable en diversas aplicaciones, a menudo superando los enfoques tradicionales de aprendizaje supervisado.
A medida que el campo de la inteligencia artificial continúa evolucionando, el aprendizaje auto-supervisado se encuentra en la vanguardia, prometiendo formas más eficientes y efectivas de aprovechar el potencial de los datos no etiquetados y expandir las capacidades del aprendizaje automático.
7.4.2 Tareas Previas en el Aprendizaje Auto-supervisado
El aprendizaje auto-supervisado (SSL) emplea diversas tareas previas para entrenar modelos sin etiquetas explícitas. Estas tareas están diseñadas para extraer representaciones significativas de los datos. Aquí hay algunas tareas clave en SSL:
- Aprendizaje Contrastivo:
Este enfoque tiene como objetivo aprender representaciones comparando puntos de datos similares y disímiles. Crea un espacio latente donde las entradas semánticamente relacionadas están cerca y las no relacionadas están alejadas. El aprendizaje contrastivo ha demostrado un éxito notable tanto en visión por computadora como en procesamiento de lenguaje natural. Algunos marcos notables incluyen:
- SimCLR (Simple Framework for Contrastive Learning of Visual Representations): Este método utiliza aumento de datos para crear diferentes vistas de la misma imagen, luego entrena al modelo para reconocer estas como similares mientras distingue otras imágenes.
- MoCo (Momentum Contrast): Este enfoque mantiene un diccionario dinámico de representaciones codificadas, lo que permite un gran y constante conjunto de muestras negativas en el aprendizaje contrastivo.
- Modelado de Lenguaje enmascarado (MLM):
Técnica fundamental en el procesamiento de lenguaje natural (NLP), el MLM implica enmascarar aleatoriamente palabras en una oración y entrenar al modelo para predecir estas palabras enmascaradas. Esto fuerza al modelo a entender el contexto y desarrollar una comprensión profunda de la estructura del lenguaje. BERT (Bidirectional Encoder Representations from Transformers) utiliza este enfoque, lo que le permite obtener un rendimiento de vanguardia en varias tareas de NLP.
- Relleno de Imágenes (Inpainting):
Esta tarea de visión por computadora implica predecir o reconstruir partes faltantes o dañadas de una imagen. Anima al modelo a comprender relaciones espaciales y estructuras de objetos. Un concepto relacionado es el Autoencoder de eliminación de ruido, que aprende a reconstruir imágenes limpias a partir de entradas ruidosas. Estas técnicas ayudan a los modelos a aprender representaciones de características robustas que pueden generalizar bien a varias tareas posteriores.
- Colorización:
Esta tarea consiste en predecir los colores de las imágenes en escala de grises. Es particularmente efectiva porque requiere que el modelo comprenda relaciones complejas entre objetos, texturas y patrones de color típicos en escenas naturales. Por ejemplo, el modelo necesita aprender que la hierba es típicamente verde y que los cielos suelen ser azules. Esta tarea previa ha demostrado ser útil para que los modelos aprendan características ricas y transferibles que son útiles para varias tareas de visión por computadora.
Otras tareas previas notables en SSL incluyen la predicción de rotaciones, la resolución de rompecabezas (jigsaw) y la predicción de la siguiente oración. Estos enfoques diversos contribuyen colectivamente al poder y la flexibilidad del aprendizaje auto-supervisado, permitiendo que los modelos extraigan representaciones significativas de grandes cantidades de datos no etiquetados.
Ejemplo: Aprendizaje Contrastivo con SimCLR en PyTorch
Aquí tienes una implementación básica de SimCLR, un método de aprendizaje contrastivo para aprender representaciones de imágenes sin etiquetas.
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms, models
import torch.nn.functional as F
# Define a simple contrastive learning model based on ResNet
class SimCLR(nn.Module):
def __init__(self, base_model, out_dim):
super(SimCLR, self).__init__()
self.encoder = base_model
self.projection = nn.Sequential(
nn.Linear(base_model.fc.in_features, 512),
nn.ReLU(),
nn.Linear(512, out_dim)
)
self.encoder.fc = nn.Identity() # Remove the fully connected layer of ResNet
def forward(self, x):
features = self.encoder(x)
projections = self.projection(features)
return F.normalize(projections, dim=-1) # Normalize for contrastive loss
# SimCLR contrastive loss function
def contrastive_loss(z_i, z_j, temperature=0.5):
# Compute similarity matrix
batch_size = z_i.size(0)
z = torch.cat([z_i, z_j], dim=0)
sim_matrix = torch.mm(z, z.t()) / temperature
# Create labels for contrastive loss
labels = torch.arange(batch_size).cuda()
labels = torch.cat([labels, labels], dim=0)
# Mask out the diagonal (same sample comparisons)
mask = torch.eye(sim_matrix.size(0), device=sim_matrix.device).bool()
sim_matrix = sim_matrix.masked_fill(mask, -float('inf'))
# Compute loss
loss = F.cross_entropy(sim_matrix, labels)
return loss
# Define data transformations
transform = transforms.Compose([
transforms.RandomResizedCrop(size=224),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
# Load dataset (e.g., CIFAR-10)
dataset = datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
dataloader = torch.utils.data.DataLoader(dataset, batch_size=64, shuffle=True)
# Instantiate SimCLR model with ResNet backbone
base_model = models.resnet18(pretrained=True)
simclr_model = SimCLR(base_model, out_dim=128).cuda()
# Optimizer
optimizer = optim.Adam(simclr_model.parameters(), lr=0.001)
# Training loop
for epoch in range(10):
for images, _ in dataloader:
# Data augmentation (SimCLR requires two augmented views of each image)
view_1, view_2 = images.cuda(), images.cuda()
# Forward pass through SimCLR
z_i = simclr_model(view_1)
z_j = simclr_model(view_2)
# Compute contrastive loss
loss = contrastive_loss(z_i, z_j)
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f"Epoch [{epoch+1}/10], Loss: {loss.item():.4f}")
Este código implementa una versión básica de SimCLR (Marco Simple para el Aprendizaje Contrastivo de Representaciones Visuales), que es un método de aprendizaje auto-supervisado para representaciones visuales.
Aquí desglosamos los componentes clave:
- Modelo SimCLR: La clase
SimCLR
define la arquitectura del modelo. Utiliza un ResNet preentrenado como codificador y agrega una cabeza de proyección en la parte superior. - Pérdida Contrastiva: La función
contrastive_loss
implementa el núcleo del objetivo de aprendizaje de SimCLR. Calcula la similitud entre diferentes vistas aumentadas de las mismas imágenes y empuja al modelo a reconocerlas como similares mientras distingue otras imágenes. - Aumento de Datos: El código utiliza recortes redimensionados aleatorios y volteo horizontal como técnicas de aumento de datos.
- Conjunto de Datos: Se utiliza el conjunto de datos CIFAR-10 para el entrenamiento.
- Bucle de Entrenamiento: El modelo se entrena durante 10 épocas. En cada iteración, se crean dos vistas aumentadas de las mismas imágenes y se pasan por el modelo. Luego, se calcula la pérdida contrastiva y se utiliza para actualizar los parámetros del modelo.
Esta implementación demuestra los principios fundamentales del aprendizaje contrastivo, donde el modelo aprende a crear representaciones similares para diferentes vistas de la misma imagen, mientras separa las representaciones de diferentes imágenes. Este enfoque permite que el modelo aprenda características visuales útiles sin requerir datos etiquetados.
7.4.3 Modelos Fundamentales: Un Nuevo Paradigma en la IA
Los modelos fundamentales representan un cambio de paradigma en el desarrollo de la IA, introduciendo una nueva era de sistemas de aprendizaje automático versátiles y potentes. Estos modelos, caracterizados por su gran escala y preentrenamiento extenso en conjuntos de datos diversos, han revolucionado el campo de la inteligencia artificial. A diferencia de los modelos tradicionales, que se entrenan para tareas específicas, los modelos fundamentales están diseñados para aprender representaciones de propósito general que pueden adaptarse a una amplia gama de aplicaciones.
En el núcleo de los modelos fundamentales está el concepto de aprendizaje transferido, donde el conocimiento adquirido durante el preentrenamiento en conjuntos de datos a gran escala puede transferirse de manera eficiente a tareas específicas con una mínima adaptación. Este enfoque reduce significativamente la necesidad de datos etiquetados específicos para la tarea, haciendo que la IA sea más accesible y rentable para una variedad más amplia de aplicaciones.
Los modelos fundamentales suelen aprovechar arquitecturas avanzadas, como los transformadores, que sobresalen en la captura de dependencias a largo plazo en los datos. Estos modelos a menudo emplean técnicas de aprendizaje auto-supervisado, lo que les permite extraer patrones y representaciones significativas de datos no etiquetados. Esta capacidad para aprender de vastas cantidades de información no etiquetada es un factor clave en su notable rendimiento en diversos dominios.
La versatilidad de los modelos fundamentales se ejemplifica por su éxito en diversos campos. En el procesamiento de lenguaje natural, modelos como GPT-3 de OpenAI han demostrado capacidades sin precedentes en generación de texto, comprensión del lenguaje e incluso razonamiento básico. BERT (Representaciones de Codificadores Bidireccionales de Transformadores) ha establecido nuevos estándares para tareas de comprensión del lenguaje, como el análisis de sentimientos y la respuesta a preguntas.
Más allá del texto, los modelos fundamentales han logrado avances significativos en el aprendizaje multimodal. CLIP (Preentrenamiento Contrastivo de Imágenes y Texto) ha cerrado la brecha entre la visión y el lenguaje, permitiendo la clasificación de imágenes sin necesidad de ejemplos específicos para la tarea. En el ámbito de la IA generativa, modelos como DALL-E han ampliado los límites de la creatividad, generando imágenes altamente detalladas e imaginativas a partir de descripciones textuales.
El impacto de los modelos fundamentales va más allá de sus aplicaciones inmediatas. Han generado nuevas direcciones de investigación en áreas como la compresión de modelos, la afinación eficiente y la IA ética. A medida que estos modelos continúan evolucionando, prometen impulsar la innovación en industrias como la salud, la investigación científica, las artes creativas y la educación, transformando el panorama de la inteligencia artificial y su papel en la sociedad.
7.4.4 Ejemplos de Modelos Fundamentales
- BERT (Representaciones de Codificadores Bidireccionales de Transformadores):
BERT revolucionó el procesamiento de lenguaje natural con su comprensión bidireccional del contexto. Utilizando el modelado de lenguaje enmascarado (MLM), BERT aprende a predecir palabras enmascaradas considerando tanto los contextos izquierdo como derecho. Este enfoque permite que BERT capture patrones de lenguaje matizados y relaciones semánticas. Su arquitectura, basada en el modelo transformador, permite el procesamiento paralelo de secuencias de entrada, mejorando significativamente la eficiencia del entrenamiento. El preentrenamiento de BERT en grandes corpus de texto lo equipa con una profunda comprensión de la estructura del lenguaje y la semántica, lo que lo hace altamente adaptable a diversas tareas mediante la afinación.
- GPT (Transformador Generativo Preentrenado):
GPT representa un avance significativo en las capacidades de generación de lenguaje. A diferencia de BERT, GPT utiliza modelado de lenguaje causal, prediciendo cada palabra en función de las palabras anteriores en la secuencia. Este enfoque autoregresivo permite que GPT genere texto coherente y contextualmente relevante. La última iteración, GPT-3, con sus impresionantes 175 mil millones de parámetros, demuestra habilidades de aprendizaje en pocos pasos (few-shot learning) notables. Puede realizar una amplia gama de tareas sin necesidad de afinación específica para la tarea, mostrando una forma de "metaaprendizaje" que le permite adaptarse a nuevas tareas con ejemplos mínimos. La versatilidad de GPT se extiende más allá de la generación de texto a tareas como la traducción de idiomas, la resumisión y hasta el razonamiento básico.
- CLIP (Preentrenamiento Contrastivo de Imágenes y Texto):
CLIP rompe nuevos límites en el aprendizaje multimodal al cerrar la brecha entre la visión y el lenguaje. Su metodología de entrenamiento implica aprender de un vasto conjunto de datos de pares de imágenes y texto, utilizando un enfoque de aprendizaje contrastivo. Esto permite que CLIP cree un espacio de incrustaciones conjunto tanto para imágenes como para texto, lo que facilita una comprensión intermodal. Las capacidades de zero-shot de CLIP son especialmente destacables, lo que le permite clasificar imágenes en categorías arbitrarias especificadas por descripciones de texto, incluso para conceptos que no ha visto explícitamente durante el entrenamiento. Esta flexibilidad hace que CLIP sea altamente adaptable a varias tareas de visión-lenguaje sin la necesidad de conjuntos de datos específicos para la tarea o afinación, abriendo nuevas posibilidades en áreas como la respuesta a preguntas visuales y la recuperación de imágenes.
Ejemplo: Afinación de BERT para el Análisis de Sentimientos en Keras
Aquí te mostramos cómo podemos afinar BERT para el análisis de sentimientos en un conjunto de datos personalizado utilizando la biblioteca transformers
de Hugging Face.
import tensorflow as tf
from transformers import BertTokenizer, TFBertForSequenceClassification
from tensorflow.keras.optimizers import Adam
from sklearn.model_selection import train_test_split
import numpy as np
# Load the BERT tokenizer and model for sequence classification (sentiment analysis)
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = TFBertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=2)
# Tokenize the dataset
def tokenize_data(texts, labels):
inputs = tokenizer(texts, padding=True, truncation=True, max_length=128, return_tensors='tf')
return inputs, tf.convert_to_tensor(labels)
# Example data (sentiment: 1=positive, 0=negative)
texts = [
"I love this movie! It's fantastic.",
"This movie was terrible. I hated every minute of it.",
"The acting was superb and the plot was engaging.",
"Boring plot, poor character development. Waste of time.",
"An absolute masterpiece of cinema!",
"I couldn't even finish watching it, it was so bad."
]
labels = [1, 0, 1, 0, 1, 0]
# Split the data into training and validation sets
train_texts, val_texts, train_labels, val_labels = train_test_split(texts, labels, test_size=0.2, random_state=42)
# Tokenize and prepare the datasets
train_inputs, train_labels = tokenize_data(train_texts, train_labels)
val_inputs, val_labels = tokenize_data(val_texts, val_labels)
# Compile the model
optimizer = Adam(learning_rate=2e-5)
loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
model.compile(optimizer=optimizer, loss=loss, metrics=['accuracy'])
# Train the model
history = model.fit(train_inputs, train_labels,
validation_data=(val_inputs, val_labels),
epochs=5, batch_size=2)
# Evaluate the model
test_texts = [
"This film exceeded all my expectations!",
"I regret watching this movie. It was awful."
]
test_labels = [1, 0]
test_inputs, test_labels = tokenize_data(test_texts, test_labels)
test_loss, test_accuracy = model.evaluate(test_inputs, test_labels)
print(f"Test accuracy: {test_accuracy:.4f}")
# Make predictions
predictions = model.predict(test_inputs)
predicted_labels = np.argmax(predictions.logits, axis=1)
for text, true_label, pred_label in zip(test_texts, test_labels, predicted_labels):
print(f"Text: {text}")
print(f"True label: {'Positive' if true_label == 1 else 'Negative'}")
print(f"Predicted label: {'Positive' if pred_label == 1 else 'Negative'}")
print()
Desglose del Código:
- Importaciones y Configuración:
- Importamos las bibliotecas necesarias: TensorFlow, Transformers (para BERT) y scikit-learn para la división de datos.
- Se cargan el tokenizador y el modelo preentrenado de BERT, especificando dos clases de salida para la clasificación binaria de sentimientos.
- Preparación de Datos:
- Se define una función
tokenize_data
para convertir entradas de texto en IDs de tokens compatibles con BERT y máscaras de atención. - Creamos un pequeño conjunto de datos de textos de ejemplo con etiquetas de sentimiento correspondientes (1 para positivo, 0 para negativo).
- Los datos se dividen en conjuntos de entrenamiento y validación usando
train_test_split
para asegurar una evaluación adecuada del modelo.
- Se define una función
- Compilación del Modelo:
- El modelo se compila usando el optimizador Adam con una tasa de aprendizaje baja (2e-5), adecuada para la afinación.
- Utilizamos Entropía Cruzada Categórica Escasa como la función de pérdida, apropiada para etiquetas de clase codificadas como enteros.
- Entrenamiento:
- El modelo se entrena durante 5 épocas con un tamaño de lote pequeño de 2, adecuado para el pequeño conjunto de datos de ejemplo.
- Se utiliza el conjunto de validación durante el entrenamiento para monitorear el rendimiento en datos no vistos.
- Evaluación:
- Se crea un conjunto de prueba separado para evaluar el rendimiento del modelo en datos completamente nuevos.
- La precisión del modelo en este conjunto de prueba se calcula y se imprime.
- Predicciones:
- El modelo entrenado se utiliza para hacer predicciones en el conjunto de prueba.
- Para cada ejemplo de prueba, imprimimos el texto original, la etiqueta real y la etiqueta predicha, proporcionando una visión clara del rendimiento del modelo.
Este ejemplo demuestra un flujo de trabajo completo para afinar BERT para análisis de sentimientos, incluyendo la división de datos, entrenamiento del modelo, evaluación y predicción. Proporciona una base práctica para aplicar BERT en tareas de clasificación de texto en el mundo real.