Menu iconMenu icon
NLP con Transformadores: Técnicas Avanzadas y Aplicaciones Multimodales

Capítulo 3: Entrenamiento y Ajuste Fino de Transformadores

3.4 Ejercicios Prácticos

Esta sección proporciona ejercicios prácticos para fortalecer tu comprensión del entrenamiento y ajuste fino de modelos transformer. Estos ejercicios cubren preprocesamiento de datos, técnicas de ajuste fino y métricas de evaluación. Cada ejercicio incluye una solución con ejemplos detallados de código para guiar tu implementación.

Ejercicio 1: Preprocesamiento de Datos para Clasificación

Tarea: Preprocesar datos de texto para clasificación binaria usando un tokenizador, incluyendo tokenización, relleno y truncamiento.

Instrucciones:

  1. Usar el tokenizador BERT para tokenizar una lista de muestras de texto.
  2. Asegurar que todas las secuencias estén rellenadas y truncadas a una longitud fija.
  3. Mostrar los IDs de entrada tokenizados y máscaras de atención.

Solución:

from transformers import BertTokenizer

# Initialize the BERT tokenizer
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")

# Sample text data
texts = ["Transformers are amazing!", "They are used in many NLP tasks."]

# Tokenize the text with padding and truncation
tokenized = tokenizer(texts, padding="max_length", truncation=True, max_length=10, return_tensors="pt")

# Display tokenized output
print("Input IDs:", tokenized["input_ids"])
print("Attention Masks:", tokenized["attention_mask"])

Salida Esperada:

Input IDs: [[ 101 19081  2024  6429   999  102    0    0    0    0]
            [ 101 2027  2024  2109  1999  2116 17953  4703  1012  102]]
Attention Masks: [[1 1 1 1 1 1 0 0 0 0]
                  [1 1 1 1 1 1 1 1 1 1]]

Ejercicio 2: Ajuste Fino de un Modelo Usando LoRA

Tarea: Utilizar LoRA para realizar el ajuste fino de un modelo BERT para análisis de sentimientos en el conjunto de datos IMDB.

Instrucciones:

  1. Instalar las bibliotecas necesarias.
  2. Cargar y preprocesar el conjunto de datos IMDB.
  3. Aplicar LoRA al modelo BERT.
  4. Realizar el ajuste fino del modelo durante dos épocas.

Solución:

from datasets import load_dataset
from transformers import AutoTokenizer, AutoModelForSequenceClassification, TrainingArguments, Trainer
from peft import get_peft_model, LoraConfig, TaskType

# Load and preprocess the dataset
dataset = load_dataset("imdb")
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")

def preprocess_function(examples):
    return tokenizer(examples["text"], truncation=True, padding="max_length", max_length=256)

tokenized_datasets = dataset.map(preprocess_function, batched=True)

# Apply LoRA to the model
model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=2)
lora_config = LoraConfig(
    task_type=TaskType.SEQ_CLS, r=8, lora_alpha=32, lora_dropout=0.1
)
lora_model = get_peft_model(model, lora_config)

# Define training arguments
training_args = TrainingArguments(
    output_dir="./lora_results",
    evaluation_strategy="epoch",
    learning_rate=2e-5,
    per_device_train_batch_size=8,
    num_train_epochs=2
)

# Fine-tune the model
trainer = Trainer(
    model=lora_model,
    args=training_args,
    train_dataset=tokenized_datasets["train"].shuffle(seed=42).select(range(2000)),
    eval_dataset=tokenized_datasets["test"].shuffle(seed=42).select(range(500))
)
trainer.train()

Ejercicio 3: Evaluar un Modelo Usando BLEU

Tarea: Evaluar la salida de un modelo de traducción automática usando la métrica BLEU.

Instrucciones:

  1. Definir una traducción de referencia y una traducción candidata.
  2. Calcular la puntuación BLEU usando NLTK.

Solución:

from nltk.translate.bleu_score import sentence_bleu, SmoothingFunction

# Reference and candidate translations
reference = ["The cat is on the mat".split()]
candidate = "The cat is on the mat".split()

# Calculate BLEU score
bleu_score = sentence_bleu(reference, candidate, smoothing_function=SmoothingFunction().method1)

print(f"BLEU Score: {bleu_score:.2f}")

Salida Esperada:

BLEU Score: 1.00

Ejercicio 4: Evaluar un Modelo de Resumen Usando ROUGE

Tarea: Evaluar la salida de un modelo de resumen usando la métrica ROUGE.

Instrucciones:

  1. Definir un resumen de referencia y un resumen candidato.
  2. Calcular las puntuaciones ROUGE-1, ROUGE-2 y ROUGE-L.

Solución:

from rouge_score import rouge_scorer

# Reference and candidate summaries
reference = "The cat is on the mat."
candidate = "The cat lies on the mat."

# Initialize ROUGE scorer
scorer = rouge_scorer.RougeScorer(['rouge1', 'rouge2', 'rougeL'], use_stemmer=True)

# Calculate ROUGE scores
scores = scorer.score(reference, candidate)

# Display results
print("ROUGE Scores:")
for key, value in scores.items():
    print(f"{key}: Precision: {value.precision:.3f}, Recall: {value.recall:.3f}, F1: {value.fmeasure:.3f}")

Salida Esperada:

ROUGE Scores:
rouge1: Precision: 0.833, Recall: 0.833, F1: 0.833
rouge2: Precision: 0.750, Recall: 0.750, F1: 0.750
rougeL: Precision: 0.833, Recall: 0.833, F1: 0.833

Ejercicio 5: Evaluar la Generación de Texto Usando BERTScore

Tarea: Evaluar la similitud semántica entre el texto generado y una referencia usando BERTScore.

Instrucciones:

  1. Definir un texto de referencia y un texto candidato.
  2. Calcular BERTScore usando un modelo BERT preentrenado.

Solución:

from bert_score import score

# Reference and candidate texts
references = ["The cat is on the mat."]
candidates = ["The cat lies on the mat."]

# Compute BERTScore
P, R, F1 = score(candidates, references, lang="en", model_type="bert-base-uncased")

# Display results
print(f"BERTScore Precision: {P.mean():.3f}")
print(f"BERTScore Recall: {R.mean():.3f}")
print(f"BERTScore F1: {F1.mean():.3f}")

Salida Esperada:

BERTScore Precision: 0.987
BERTScore Recall: 0.992
BERTScore F1: 0.989

Estos ejercicios demuestran los pasos clave en el preprocesamiento de datos, el ajuste fino usando LoRA y la evaluación de modelos transformer con métricas BLEU, ROUGE y BERTScore. Completar estos ejercicios proporcionará experiencia práctica y profundizará tu comprensión de las técnicas de entrenamiento y evaluación para modelos de PLN basados en transformers.

3.4 Ejercicios Prácticos

Esta sección proporciona ejercicios prácticos para fortalecer tu comprensión del entrenamiento y ajuste fino de modelos transformer. Estos ejercicios cubren preprocesamiento de datos, técnicas de ajuste fino y métricas de evaluación. Cada ejercicio incluye una solución con ejemplos detallados de código para guiar tu implementación.

Ejercicio 1: Preprocesamiento de Datos para Clasificación

Tarea: Preprocesar datos de texto para clasificación binaria usando un tokenizador, incluyendo tokenización, relleno y truncamiento.

Instrucciones:

  1. Usar el tokenizador BERT para tokenizar una lista de muestras de texto.
  2. Asegurar que todas las secuencias estén rellenadas y truncadas a una longitud fija.
  3. Mostrar los IDs de entrada tokenizados y máscaras de atención.

Solución:

from transformers import BertTokenizer

# Initialize the BERT tokenizer
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")

# Sample text data
texts = ["Transformers are amazing!", "They are used in many NLP tasks."]

# Tokenize the text with padding and truncation
tokenized = tokenizer(texts, padding="max_length", truncation=True, max_length=10, return_tensors="pt")

# Display tokenized output
print("Input IDs:", tokenized["input_ids"])
print("Attention Masks:", tokenized["attention_mask"])

Salida Esperada:

Input IDs: [[ 101 19081  2024  6429   999  102    0    0    0    0]
            [ 101 2027  2024  2109  1999  2116 17953  4703  1012  102]]
Attention Masks: [[1 1 1 1 1 1 0 0 0 0]
                  [1 1 1 1 1 1 1 1 1 1]]

Ejercicio 2: Ajuste Fino de un Modelo Usando LoRA

Tarea: Utilizar LoRA para realizar el ajuste fino de un modelo BERT para análisis de sentimientos en el conjunto de datos IMDB.

Instrucciones:

  1. Instalar las bibliotecas necesarias.
  2. Cargar y preprocesar el conjunto de datos IMDB.
  3. Aplicar LoRA al modelo BERT.
  4. Realizar el ajuste fino del modelo durante dos épocas.

Solución:

from datasets import load_dataset
from transformers import AutoTokenizer, AutoModelForSequenceClassification, TrainingArguments, Trainer
from peft import get_peft_model, LoraConfig, TaskType

# Load and preprocess the dataset
dataset = load_dataset("imdb")
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")

def preprocess_function(examples):
    return tokenizer(examples["text"], truncation=True, padding="max_length", max_length=256)

tokenized_datasets = dataset.map(preprocess_function, batched=True)

# Apply LoRA to the model
model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=2)
lora_config = LoraConfig(
    task_type=TaskType.SEQ_CLS, r=8, lora_alpha=32, lora_dropout=0.1
)
lora_model = get_peft_model(model, lora_config)

# Define training arguments
training_args = TrainingArguments(
    output_dir="./lora_results",
    evaluation_strategy="epoch",
    learning_rate=2e-5,
    per_device_train_batch_size=8,
    num_train_epochs=2
)

# Fine-tune the model
trainer = Trainer(
    model=lora_model,
    args=training_args,
    train_dataset=tokenized_datasets["train"].shuffle(seed=42).select(range(2000)),
    eval_dataset=tokenized_datasets["test"].shuffle(seed=42).select(range(500))
)
trainer.train()

Ejercicio 3: Evaluar un Modelo Usando BLEU

Tarea: Evaluar la salida de un modelo de traducción automática usando la métrica BLEU.

Instrucciones:

  1. Definir una traducción de referencia y una traducción candidata.
  2. Calcular la puntuación BLEU usando NLTK.

Solución:

from nltk.translate.bleu_score import sentence_bleu, SmoothingFunction

# Reference and candidate translations
reference = ["The cat is on the mat".split()]
candidate = "The cat is on the mat".split()

# Calculate BLEU score
bleu_score = sentence_bleu(reference, candidate, smoothing_function=SmoothingFunction().method1)

print(f"BLEU Score: {bleu_score:.2f}")

Salida Esperada:

BLEU Score: 1.00

Ejercicio 4: Evaluar un Modelo de Resumen Usando ROUGE

Tarea: Evaluar la salida de un modelo de resumen usando la métrica ROUGE.

Instrucciones:

  1. Definir un resumen de referencia y un resumen candidato.
  2. Calcular las puntuaciones ROUGE-1, ROUGE-2 y ROUGE-L.

Solución:

from rouge_score import rouge_scorer

# Reference and candidate summaries
reference = "The cat is on the mat."
candidate = "The cat lies on the mat."

# Initialize ROUGE scorer
scorer = rouge_scorer.RougeScorer(['rouge1', 'rouge2', 'rougeL'], use_stemmer=True)

# Calculate ROUGE scores
scores = scorer.score(reference, candidate)

# Display results
print("ROUGE Scores:")
for key, value in scores.items():
    print(f"{key}: Precision: {value.precision:.3f}, Recall: {value.recall:.3f}, F1: {value.fmeasure:.3f}")

Salida Esperada:

ROUGE Scores:
rouge1: Precision: 0.833, Recall: 0.833, F1: 0.833
rouge2: Precision: 0.750, Recall: 0.750, F1: 0.750
rougeL: Precision: 0.833, Recall: 0.833, F1: 0.833

Ejercicio 5: Evaluar la Generación de Texto Usando BERTScore

Tarea: Evaluar la similitud semántica entre el texto generado y una referencia usando BERTScore.

Instrucciones:

  1. Definir un texto de referencia y un texto candidato.
  2. Calcular BERTScore usando un modelo BERT preentrenado.

Solución:

from bert_score import score

# Reference and candidate texts
references = ["The cat is on the mat."]
candidates = ["The cat lies on the mat."]

# Compute BERTScore
P, R, F1 = score(candidates, references, lang="en", model_type="bert-base-uncased")

# Display results
print(f"BERTScore Precision: {P.mean():.3f}")
print(f"BERTScore Recall: {R.mean():.3f}")
print(f"BERTScore F1: {F1.mean():.3f}")

Salida Esperada:

BERTScore Precision: 0.987
BERTScore Recall: 0.992
BERTScore F1: 0.989

Estos ejercicios demuestran los pasos clave en el preprocesamiento de datos, el ajuste fino usando LoRA y la evaluación de modelos transformer con métricas BLEU, ROUGE y BERTScore. Completar estos ejercicios proporcionará experiencia práctica y profundizará tu comprensión de las técnicas de entrenamiento y evaluación para modelos de PLN basados en transformers.

3.4 Ejercicios Prácticos

Esta sección proporciona ejercicios prácticos para fortalecer tu comprensión del entrenamiento y ajuste fino de modelos transformer. Estos ejercicios cubren preprocesamiento de datos, técnicas de ajuste fino y métricas de evaluación. Cada ejercicio incluye una solución con ejemplos detallados de código para guiar tu implementación.

Ejercicio 1: Preprocesamiento de Datos para Clasificación

Tarea: Preprocesar datos de texto para clasificación binaria usando un tokenizador, incluyendo tokenización, relleno y truncamiento.

Instrucciones:

  1. Usar el tokenizador BERT para tokenizar una lista de muestras de texto.
  2. Asegurar que todas las secuencias estén rellenadas y truncadas a una longitud fija.
  3. Mostrar los IDs de entrada tokenizados y máscaras de atención.

Solución:

from transformers import BertTokenizer

# Initialize the BERT tokenizer
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")

# Sample text data
texts = ["Transformers are amazing!", "They are used in many NLP tasks."]

# Tokenize the text with padding and truncation
tokenized = tokenizer(texts, padding="max_length", truncation=True, max_length=10, return_tensors="pt")

# Display tokenized output
print("Input IDs:", tokenized["input_ids"])
print("Attention Masks:", tokenized["attention_mask"])

Salida Esperada:

Input IDs: [[ 101 19081  2024  6429   999  102    0    0    0    0]
            [ 101 2027  2024  2109  1999  2116 17953  4703  1012  102]]
Attention Masks: [[1 1 1 1 1 1 0 0 0 0]
                  [1 1 1 1 1 1 1 1 1 1]]

Ejercicio 2: Ajuste Fino de un Modelo Usando LoRA

Tarea: Utilizar LoRA para realizar el ajuste fino de un modelo BERT para análisis de sentimientos en el conjunto de datos IMDB.

Instrucciones:

  1. Instalar las bibliotecas necesarias.
  2. Cargar y preprocesar el conjunto de datos IMDB.
  3. Aplicar LoRA al modelo BERT.
  4. Realizar el ajuste fino del modelo durante dos épocas.

Solución:

from datasets import load_dataset
from transformers import AutoTokenizer, AutoModelForSequenceClassification, TrainingArguments, Trainer
from peft import get_peft_model, LoraConfig, TaskType

# Load and preprocess the dataset
dataset = load_dataset("imdb")
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")

def preprocess_function(examples):
    return tokenizer(examples["text"], truncation=True, padding="max_length", max_length=256)

tokenized_datasets = dataset.map(preprocess_function, batched=True)

# Apply LoRA to the model
model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=2)
lora_config = LoraConfig(
    task_type=TaskType.SEQ_CLS, r=8, lora_alpha=32, lora_dropout=0.1
)
lora_model = get_peft_model(model, lora_config)

# Define training arguments
training_args = TrainingArguments(
    output_dir="./lora_results",
    evaluation_strategy="epoch",
    learning_rate=2e-5,
    per_device_train_batch_size=8,
    num_train_epochs=2
)

# Fine-tune the model
trainer = Trainer(
    model=lora_model,
    args=training_args,
    train_dataset=tokenized_datasets["train"].shuffle(seed=42).select(range(2000)),
    eval_dataset=tokenized_datasets["test"].shuffle(seed=42).select(range(500))
)
trainer.train()

Ejercicio 3: Evaluar un Modelo Usando BLEU

Tarea: Evaluar la salida de un modelo de traducción automática usando la métrica BLEU.

Instrucciones:

  1. Definir una traducción de referencia y una traducción candidata.
  2. Calcular la puntuación BLEU usando NLTK.

Solución:

from nltk.translate.bleu_score import sentence_bleu, SmoothingFunction

# Reference and candidate translations
reference = ["The cat is on the mat".split()]
candidate = "The cat is on the mat".split()

# Calculate BLEU score
bleu_score = sentence_bleu(reference, candidate, smoothing_function=SmoothingFunction().method1)

print(f"BLEU Score: {bleu_score:.2f}")

Salida Esperada:

BLEU Score: 1.00

Ejercicio 4: Evaluar un Modelo de Resumen Usando ROUGE

Tarea: Evaluar la salida de un modelo de resumen usando la métrica ROUGE.

Instrucciones:

  1. Definir un resumen de referencia y un resumen candidato.
  2. Calcular las puntuaciones ROUGE-1, ROUGE-2 y ROUGE-L.

Solución:

from rouge_score import rouge_scorer

# Reference and candidate summaries
reference = "The cat is on the mat."
candidate = "The cat lies on the mat."

# Initialize ROUGE scorer
scorer = rouge_scorer.RougeScorer(['rouge1', 'rouge2', 'rougeL'], use_stemmer=True)

# Calculate ROUGE scores
scores = scorer.score(reference, candidate)

# Display results
print("ROUGE Scores:")
for key, value in scores.items():
    print(f"{key}: Precision: {value.precision:.3f}, Recall: {value.recall:.3f}, F1: {value.fmeasure:.3f}")

Salida Esperada:

ROUGE Scores:
rouge1: Precision: 0.833, Recall: 0.833, F1: 0.833
rouge2: Precision: 0.750, Recall: 0.750, F1: 0.750
rougeL: Precision: 0.833, Recall: 0.833, F1: 0.833

Ejercicio 5: Evaluar la Generación de Texto Usando BERTScore

Tarea: Evaluar la similitud semántica entre el texto generado y una referencia usando BERTScore.

Instrucciones:

  1. Definir un texto de referencia y un texto candidato.
  2. Calcular BERTScore usando un modelo BERT preentrenado.

Solución:

from bert_score import score

# Reference and candidate texts
references = ["The cat is on the mat."]
candidates = ["The cat lies on the mat."]

# Compute BERTScore
P, R, F1 = score(candidates, references, lang="en", model_type="bert-base-uncased")

# Display results
print(f"BERTScore Precision: {P.mean():.3f}")
print(f"BERTScore Recall: {R.mean():.3f}")
print(f"BERTScore F1: {F1.mean():.3f}")

Salida Esperada:

BERTScore Precision: 0.987
BERTScore Recall: 0.992
BERTScore F1: 0.989

Estos ejercicios demuestran los pasos clave en el preprocesamiento de datos, el ajuste fino usando LoRA y la evaluación de modelos transformer con métricas BLEU, ROUGE y BERTScore. Completar estos ejercicios proporcionará experiencia práctica y profundizará tu comprensión de las técnicas de entrenamiento y evaluación para modelos de PLN basados en transformers.

3.4 Ejercicios Prácticos

Esta sección proporciona ejercicios prácticos para fortalecer tu comprensión del entrenamiento y ajuste fino de modelos transformer. Estos ejercicios cubren preprocesamiento de datos, técnicas de ajuste fino y métricas de evaluación. Cada ejercicio incluye una solución con ejemplos detallados de código para guiar tu implementación.

Ejercicio 1: Preprocesamiento de Datos para Clasificación

Tarea: Preprocesar datos de texto para clasificación binaria usando un tokenizador, incluyendo tokenización, relleno y truncamiento.

Instrucciones:

  1. Usar el tokenizador BERT para tokenizar una lista de muestras de texto.
  2. Asegurar que todas las secuencias estén rellenadas y truncadas a una longitud fija.
  3. Mostrar los IDs de entrada tokenizados y máscaras de atención.

Solución:

from transformers import BertTokenizer

# Initialize the BERT tokenizer
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")

# Sample text data
texts = ["Transformers are amazing!", "They are used in many NLP tasks."]

# Tokenize the text with padding and truncation
tokenized = tokenizer(texts, padding="max_length", truncation=True, max_length=10, return_tensors="pt")

# Display tokenized output
print("Input IDs:", tokenized["input_ids"])
print("Attention Masks:", tokenized["attention_mask"])

Salida Esperada:

Input IDs: [[ 101 19081  2024  6429   999  102    0    0    0    0]
            [ 101 2027  2024  2109  1999  2116 17953  4703  1012  102]]
Attention Masks: [[1 1 1 1 1 1 0 0 0 0]
                  [1 1 1 1 1 1 1 1 1 1]]

Ejercicio 2: Ajuste Fino de un Modelo Usando LoRA

Tarea: Utilizar LoRA para realizar el ajuste fino de un modelo BERT para análisis de sentimientos en el conjunto de datos IMDB.

Instrucciones:

  1. Instalar las bibliotecas necesarias.
  2. Cargar y preprocesar el conjunto de datos IMDB.
  3. Aplicar LoRA al modelo BERT.
  4. Realizar el ajuste fino del modelo durante dos épocas.

Solución:

from datasets import load_dataset
from transformers import AutoTokenizer, AutoModelForSequenceClassification, TrainingArguments, Trainer
from peft import get_peft_model, LoraConfig, TaskType

# Load and preprocess the dataset
dataset = load_dataset("imdb")
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")

def preprocess_function(examples):
    return tokenizer(examples["text"], truncation=True, padding="max_length", max_length=256)

tokenized_datasets = dataset.map(preprocess_function, batched=True)

# Apply LoRA to the model
model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=2)
lora_config = LoraConfig(
    task_type=TaskType.SEQ_CLS, r=8, lora_alpha=32, lora_dropout=0.1
)
lora_model = get_peft_model(model, lora_config)

# Define training arguments
training_args = TrainingArguments(
    output_dir="./lora_results",
    evaluation_strategy="epoch",
    learning_rate=2e-5,
    per_device_train_batch_size=8,
    num_train_epochs=2
)

# Fine-tune the model
trainer = Trainer(
    model=lora_model,
    args=training_args,
    train_dataset=tokenized_datasets["train"].shuffle(seed=42).select(range(2000)),
    eval_dataset=tokenized_datasets["test"].shuffle(seed=42).select(range(500))
)
trainer.train()

Ejercicio 3: Evaluar un Modelo Usando BLEU

Tarea: Evaluar la salida de un modelo de traducción automática usando la métrica BLEU.

Instrucciones:

  1. Definir una traducción de referencia y una traducción candidata.
  2. Calcular la puntuación BLEU usando NLTK.

Solución:

from nltk.translate.bleu_score import sentence_bleu, SmoothingFunction

# Reference and candidate translations
reference = ["The cat is on the mat".split()]
candidate = "The cat is on the mat".split()

# Calculate BLEU score
bleu_score = sentence_bleu(reference, candidate, smoothing_function=SmoothingFunction().method1)

print(f"BLEU Score: {bleu_score:.2f}")

Salida Esperada:

BLEU Score: 1.00

Ejercicio 4: Evaluar un Modelo de Resumen Usando ROUGE

Tarea: Evaluar la salida de un modelo de resumen usando la métrica ROUGE.

Instrucciones:

  1. Definir un resumen de referencia y un resumen candidato.
  2. Calcular las puntuaciones ROUGE-1, ROUGE-2 y ROUGE-L.

Solución:

from rouge_score import rouge_scorer

# Reference and candidate summaries
reference = "The cat is on the mat."
candidate = "The cat lies on the mat."

# Initialize ROUGE scorer
scorer = rouge_scorer.RougeScorer(['rouge1', 'rouge2', 'rougeL'], use_stemmer=True)

# Calculate ROUGE scores
scores = scorer.score(reference, candidate)

# Display results
print("ROUGE Scores:")
for key, value in scores.items():
    print(f"{key}: Precision: {value.precision:.3f}, Recall: {value.recall:.3f}, F1: {value.fmeasure:.3f}")

Salida Esperada:

ROUGE Scores:
rouge1: Precision: 0.833, Recall: 0.833, F1: 0.833
rouge2: Precision: 0.750, Recall: 0.750, F1: 0.750
rougeL: Precision: 0.833, Recall: 0.833, F1: 0.833

Ejercicio 5: Evaluar la Generación de Texto Usando BERTScore

Tarea: Evaluar la similitud semántica entre el texto generado y una referencia usando BERTScore.

Instrucciones:

  1. Definir un texto de referencia y un texto candidato.
  2. Calcular BERTScore usando un modelo BERT preentrenado.

Solución:

from bert_score import score

# Reference and candidate texts
references = ["The cat is on the mat."]
candidates = ["The cat lies on the mat."]

# Compute BERTScore
P, R, F1 = score(candidates, references, lang="en", model_type="bert-base-uncased")

# Display results
print(f"BERTScore Precision: {P.mean():.3f}")
print(f"BERTScore Recall: {R.mean():.3f}")
print(f"BERTScore F1: {F1.mean():.3f}")

Salida Esperada:

BERTScore Precision: 0.987
BERTScore Recall: 0.992
BERTScore F1: 0.989

Estos ejercicios demuestran los pasos clave en el preprocesamiento de datos, el ajuste fino usando LoRA y la evaluación de modelos transformer con métricas BLEU, ROUGE y BERTScore. Completar estos ejercicios proporcionará experiencia práctica y profundizará tu comprensión de las técnicas de entrenamiento y evaluación para modelos de PLN basados en transformers.