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

Proyecto 4: Pipeline de Reconocimiento de Entidades Nombradas (NER) con Ajuste Fino Personalizado

Paso 4: Ajuste Fino del Modelo

Realiza el ajuste fino de un modelo transformer preentrenado para la tarea NER. Este paso crucial implica tomar un modelo de lenguaje preentrenado (como BERT) y adaptarlo específicamente para el reconocimiento de entidades nombradas. Durante el ajuste fino, el modelo aprende a identificar y clasificar entidades nombradas en el texto mediante el ajuste de sus parámetros a través del entrenamiento con datos NER etiquetados.

Este proceso mantiene la comprensión general del lenguaje del modelo mientras optimiza su capacidad para reconocer tipos específicos de entidades (como personas, organizaciones y ubicaciones). El proceso de ajuste fino típicamente requiere menos recursos computacionales y tiempo de entrenamiento en comparación con entrenar un modelo desde cero, mientras aún logra alta precisión para la tarea NER específica.

from transformers import AutoModelForTokenClassification, TrainingArguments, Trainer
from seqeval.metrics import classification_report

# Load model
model = AutoModelForTokenClassification.from_pretrained(model_name, num_labels=len(dataset["train"].features["ner_tags"].feature.names))

# Define training arguments
training_args = TrainingArguments(
    output_dir="./results",
    evaluation_strategy="epoch",
    learning_rate=2e-5,
    per_device_train_batch_size=16,
    num_train_epochs=3,
    weight_decay=0.01,
    save_steps=500,
    logging_dir="./logs",
)

# Define compute metrics function
def compute_metrics(p):
    predictions, labels = p
    predictions = predictions.argmax(axis=-1)
    true_labels = [[label for label in label_row if label != -100] for label_row in labels]
    pred_labels = [[pred for pred, label in zip(pred_row, label_row) if label != -100] for pred_row, label_row in zip(predictions, labels)]
    return {"classification_report": classification_report(true_labels, pred_labels)}

# Initialize trainer
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_datasets["train"],
    eval_dataset=tokenized_datasets["validation"],
    tokenizer=tokenizer,
    compute_metrics=compute_metrics,
)

# Train model
trainer.train()

Analicemos este código que maneja el proceso de ajuste fino del modelo para el Reconocimiento de Entidades Nombradas:

1. Configuración Inicial e Importaciones

  • Importa las clases necesarias de la biblioteca transformers para el entrenamiento y evaluación del modelo
  • Utiliza AutoModelForTokenClassification para la tarea NER

2. Carga del Modelo

  • Crea una instancia del modelo utilizando un modelo preentrenado (definido anteriormente como "bert-base-uncased")
  • Establece el número de etiquetas de salida basado en las etiquetas NER del conjunto de datos

3. Configuración del Entrenamiento

Configura TrainingArguments con parámetros específicos:

  • Tasa de aprendizaje: 2e-5
  • Tamaño de lote: 16 por dispositivo
  • Número de épocas: 3
  • Decaimiento de pesos: 0.01 para regularización
  • Evaluación realizada después de cada época

4. Cálculo de Métricas

  • Implementa una función compute_metrics que:
  • Procesa las predicciones del modelo
  • Filtra los tokens de relleno (-100)
  • Devuelve un informe de clasificación utilizando métricas seqeval

5. Configuración y Ejecución del Entrenador

  • Inicializa una instancia de Trainer con:
    • El modelo
    • Argumentos de entrenamiento
    • Conjuntos de datos de entrenamiento y validación
    • Tokenizador
    • Función de cálculo de métricas
  • Inicia el proceso de entrenamiento con trainer.train()

Este proceso de ajuste fino optimiza el modelo preentrenado específicamente para tareas NER mientras requiere menos recursos computacionales en comparación con el entrenamiento desde cero.

Paso 4: Ajuste Fino del Modelo

Realiza el ajuste fino de un modelo transformer preentrenado para la tarea NER. Este paso crucial implica tomar un modelo de lenguaje preentrenado (como BERT) y adaptarlo específicamente para el reconocimiento de entidades nombradas. Durante el ajuste fino, el modelo aprende a identificar y clasificar entidades nombradas en el texto mediante el ajuste de sus parámetros a través del entrenamiento con datos NER etiquetados.

Este proceso mantiene la comprensión general del lenguaje del modelo mientras optimiza su capacidad para reconocer tipos específicos de entidades (como personas, organizaciones y ubicaciones). El proceso de ajuste fino típicamente requiere menos recursos computacionales y tiempo de entrenamiento en comparación con entrenar un modelo desde cero, mientras aún logra alta precisión para la tarea NER específica.

from transformers import AutoModelForTokenClassification, TrainingArguments, Trainer
from seqeval.metrics import classification_report

# Load model
model = AutoModelForTokenClassification.from_pretrained(model_name, num_labels=len(dataset["train"].features["ner_tags"].feature.names))

# Define training arguments
training_args = TrainingArguments(
    output_dir="./results",
    evaluation_strategy="epoch",
    learning_rate=2e-5,
    per_device_train_batch_size=16,
    num_train_epochs=3,
    weight_decay=0.01,
    save_steps=500,
    logging_dir="./logs",
)

# Define compute metrics function
def compute_metrics(p):
    predictions, labels = p
    predictions = predictions.argmax(axis=-1)
    true_labels = [[label for label in label_row if label != -100] for label_row in labels]
    pred_labels = [[pred for pred, label in zip(pred_row, label_row) if label != -100] for pred_row, label_row in zip(predictions, labels)]
    return {"classification_report": classification_report(true_labels, pred_labels)}

# Initialize trainer
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_datasets["train"],
    eval_dataset=tokenized_datasets["validation"],
    tokenizer=tokenizer,
    compute_metrics=compute_metrics,
)

# Train model
trainer.train()

Analicemos este código que maneja el proceso de ajuste fino del modelo para el Reconocimiento de Entidades Nombradas:

1. Configuración Inicial e Importaciones

  • Importa las clases necesarias de la biblioteca transformers para el entrenamiento y evaluación del modelo
  • Utiliza AutoModelForTokenClassification para la tarea NER

2. Carga del Modelo

  • Crea una instancia del modelo utilizando un modelo preentrenado (definido anteriormente como "bert-base-uncased")
  • Establece el número de etiquetas de salida basado en las etiquetas NER del conjunto de datos

3. Configuración del Entrenamiento

Configura TrainingArguments con parámetros específicos:

  • Tasa de aprendizaje: 2e-5
  • Tamaño de lote: 16 por dispositivo
  • Número de épocas: 3
  • Decaimiento de pesos: 0.01 para regularización
  • Evaluación realizada después de cada época

4. Cálculo de Métricas

  • Implementa una función compute_metrics que:
  • Procesa las predicciones del modelo
  • Filtra los tokens de relleno (-100)
  • Devuelve un informe de clasificación utilizando métricas seqeval

5. Configuración y Ejecución del Entrenador

  • Inicializa una instancia de Trainer con:
    • El modelo
    • Argumentos de entrenamiento
    • Conjuntos de datos de entrenamiento y validación
    • Tokenizador
    • Función de cálculo de métricas
  • Inicia el proceso de entrenamiento con trainer.train()

Este proceso de ajuste fino optimiza el modelo preentrenado específicamente para tareas NER mientras requiere menos recursos computacionales en comparación con el entrenamiento desde cero.

Paso 4: Ajuste Fino del Modelo

Realiza el ajuste fino de un modelo transformer preentrenado para la tarea NER. Este paso crucial implica tomar un modelo de lenguaje preentrenado (como BERT) y adaptarlo específicamente para el reconocimiento de entidades nombradas. Durante el ajuste fino, el modelo aprende a identificar y clasificar entidades nombradas en el texto mediante el ajuste de sus parámetros a través del entrenamiento con datos NER etiquetados.

Este proceso mantiene la comprensión general del lenguaje del modelo mientras optimiza su capacidad para reconocer tipos específicos de entidades (como personas, organizaciones y ubicaciones). El proceso de ajuste fino típicamente requiere menos recursos computacionales y tiempo de entrenamiento en comparación con entrenar un modelo desde cero, mientras aún logra alta precisión para la tarea NER específica.

from transformers import AutoModelForTokenClassification, TrainingArguments, Trainer
from seqeval.metrics import classification_report

# Load model
model = AutoModelForTokenClassification.from_pretrained(model_name, num_labels=len(dataset["train"].features["ner_tags"].feature.names))

# Define training arguments
training_args = TrainingArguments(
    output_dir="./results",
    evaluation_strategy="epoch",
    learning_rate=2e-5,
    per_device_train_batch_size=16,
    num_train_epochs=3,
    weight_decay=0.01,
    save_steps=500,
    logging_dir="./logs",
)

# Define compute metrics function
def compute_metrics(p):
    predictions, labels = p
    predictions = predictions.argmax(axis=-1)
    true_labels = [[label for label in label_row if label != -100] for label_row in labels]
    pred_labels = [[pred for pred, label in zip(pred_row, label_row) if label != -100] for pred_row, label_row in zip(predictions, labels)]
    return {"classification_report": classification_report(true_labels, pred_labels)}

# Initialize trainer
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_datasets["train"],
    eval_dataset=tokenized_datasets["validation"],
    tokenizer=tokenizer,
    compute_metrics=compute_metrics,
)

# Train model
trainer.train()

Analicemos este código que maneja el proceso de ajuste fino del modelo para el Reconocimiento de Entidades Nombradas:

1. Configuración Inicial e Importaciones

  • Importa las clases necesarias de la biblioteca transformers para el entrenamiento y evaluación del modelo
  • Utiliza AutoModelForTokenClassification para la tarea NER

2. Carga del Modelo

  • Crea una instancia del modelo utilizando un modelo preentrenado (definido anteriormente como "bert-base-uncased")
  • Establece el número de etiquetas de salida basado en las etiquetas NER del conjunto de datos

3. Configuración del Entrenamiento

Configura TrainingArguments con parámetros específicos:

  • Tasa de aprendizaje: 2e-5
  • Tamaño de lote: 16 por dispositivo
  • Número de épocas: 3
  • Decaimiento de pesos: 0.01 para regularización
  • Evaluación realizada después de cada época

4. Cálculo de Métricas

  • Implementa una función compute_metrics que:
  • Procesa las predicciones del modelo
  • Filtra los tokens de relleno (-100)
  • Devuelve un informe de clasificación utilizando métricas seqeval

5. Configuración y Ejecución del Entrenador

  • Inicializa una instancia de Trainer con:
    • El modelo
    • Argumentos de entrenamiento
    • Conjuntos de datos de entrenamiento y validación
    • Tokenizador
    • Función de cálculo de métricas
  • Inicia el proceso de entrenamiento con trainer.train()

Este proceso de ajuste fino optimiza el modelo preentrenado específicamente para tareas NER mientras requiere menos recursos computacionales en comparación con el entrenamiento desde cero.

Paso 4: Ajuste Fino del Modelo

Realiza el ajuste fino de un modelo transformer preentrenado para la tarea NER. Este paso crucial implica tomar un modelo de lenguaje preentrenado (como BERT) y adaptarlo específicamente para el reconocimiento de entidades nombradas. Durante el ajuste fino, el modelo aprende a identificar y clasificar entidades nombradas en el texto mediante el ajuste de sus parámetros a través del entrenamiento con datos NER etiquetados.

Este proceso mantiene la comprensión general del lenguaje del modelo mientras optimiza su capacidad para reconocer tipos específicos de entidades (como personas, organizaciones y ubicaciones). El proceso de ajuste fino típicamente requiere menos recursos computacionales y tiempo de entrenamiento en comparación con entrenar un modelo desde cero, mientras aún logra alta precisión para la tarea NER específica.

from transformers import AutoModelForTokenClassification, TrainingArguments, Trainer
from seqeval.metrics import classification_report

# Load model
model = AutoModelForTokenClassification.from_pretrained(model_name, num_labels=len(dataset["train"].features["ner_tags"].feature.names))

# Define training arguments
training_args = TrainingArguments(
    output_dir="./results",
    evaluation_strategy="epoch",
    learning_rate=2e-5,
    per_device_train_batch_size=16,
    num_train_epochs=3,
    weight_decay=0.01,
    save_steps=500,
    logging_dir="./logs",
)

# Define compute metrics function
def compute_metrics(p):
    predictions, labels = p
    predictions = predictions.argmax(axis=-1)
    true_labels = [[label for label in label_row if label != -100] for label_row in labels]
    pred_labels = [[pred for pred, label in zip(pred_row, label_row) if label != -100] for pred_row, label_row in zip(predictions, labels)]
    return {"classification_report": classification_report(true_labels, pred_labels)}

# Initialize trainer
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_datasets["train"],
    eval_dataset=tokenized_datasets["validation"],
    tokenizer=tokenizer,
    compute_metrics=compute_metrics,
)

# Train model
trainer.train()

Analicemos este código que maneja el proceso de ajuste fino del modelo para el Reconocimiento de Entidades Nombradas:

1. Configuración Inicial e Importaciones

  • Importa las clases necesarias de la biblioteca transformers para el entrenamiento y evaluación del modelo
  • Utiliza AutoModelForTokenClassification para la tarea NER

2. Carga del Modelo

  • Crea una instancia del modelo utilizando un modelo preentrenado (definido anteriormente como "bert-base-uncased")
  • Establece el número de etiquetas de salida basado en las etiquetas NER del conjunto de datos

3. Configuración del Entrenamiento

Configura TrainingArguments con parámetros específicos:

  • Tasa de aprendizaje: 2e-5
  • Tamaño de lote: 16 por dispositivo
  • Número de épocas: 3
  • Decaimiento de pesos: 0.01 para regularización
  • Evaluación realizada después de cada época

4. Cálculo de Métricas

  • Implementa una función compute_metrics que:
  • Procesa las predicciones del modelo
  • Filtra los tokens de relleno (-100)
  • Devuelve un informe de clasificación utilizando métricas seqeval

5. Configuración y Ejecución del Entrenador

  • Inicializa una instancia de Trainer con:
    • El modelo
    • Argumentos de entrenamiento
    • Conjuntos de datos de entrenamiento y validación
    • Tokenizador
    • Función de cálculo de métricas
  • Inicia el proceso de entrenamiento con trainer.train()

Este proceso de ajuste fino optimiza el modelo preentrenado específicamente para tareas NER mientras requiere menos recursos computacionales en comparación con el entrenamiento desde cero.