Proyecto 4: Pipeline de Reconocimiento de Entidades Nombradas (NER) con Ajuste Fino Personalizado
Paso 3: Tokenizar el Conjunto de Datos
Utilice un tokenizador preentrenado para preparar el conjunto de datos para el modelo transformer. El tokenizador convierte el texto sin procesar en un formato que el modelo pueda entender mediante la división de palabras en subpalabras o tokens, agregando tokens especiales como [CLS] y [SEP], y convirtiendo los tokens en IDs numéricos.
Este paso es crucial porque los modelos transformer trabajan con entradas numéricas de tamaño fijo en lugar de texto sin procesar. Específicamente para tareas NER, el tokenizador también debe manejar cuidadosamente la alineación de palabra a token para asegurar que las etiquetas de entidades se mapeen correctamente a la entrada tokenizada. Esto es especialmente importante cuando una sola palabra se divide en múltiples tokens, ya que necesitamos mantener las etiquetas de entidad correctas para cada token.
from transformers import AutoTokenizer
# Initialize tokenizer
model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
# Tokenize dataset
def tokenize_and_align_labels(examples):
tokenized_inputs = tokenizer(examples["tokens"], truncation=True, padding=True, is_split_into_words=True)
labels = []
for i, label in enumerate(examples["ner_tags"]):
word_ids = tokenized_inputs.word_ids(batch_index=i)
aligned_labels = [-100 if word_id is None else label[word_id] for word_id in word_ids]
labels.append(aligned_labels)
tokenized_inputs["labels"] = labels
return tokenized_inputs
tokenized_datasets = dataset.map(tokenize_and_align_labels, batched=True)
Desglose del código:
1. Configuración Inicial
El código comienza importando el AutoTokenizer de transformers e inicializando un tokenizador BERT:
- Utiliza 'bert-base-uncased' como modelo preentrenado
- Crea una instancia de tokenizador que convertirá el texto en tokens que el modelo pueda entender
2. Función de Tokenización
La función 'tokenize_and_align_labels' realiza dos tareas cruciales:
- Convierte palabras en tokens mientras maneja casos donde palabras individuales pueden dividirse en múltiples tokens
- Asegura que las etiquetas de entidades estén correctamente alineadas con la entrada tokenizada
3. Detalles de la Función
La función procesa los datos en estos pasos:
- Tokeniza el texto de entrada con parámetros:
- truncation=True: Recorta el texto que es demasiado largo
- padding=True: Agrega relleno para hacer secuencias de longitud uniforme
- is_split_into_words=True: Indica que la entrada está pre-dividida en palabras
- Crea etiquetas alineadas mediante:
- Uso de word_ids para rastrear qué tokens pertenecen a qué palabras originales
- Asigna -100 a tokens especiales (como [CLS], [SEP]) para ignorarlos durante el entrenamiento
- Mapea las etiquetas NER originales a las palabras tokenizadas
4. Paso Final
El código aplica esta función de tokenización al conjunto de datos completo utilizando la función map, procesando todos los ejemplos en lotes para mayor eficiencia.
Paso 3: Tokenizar el Conjunto de Datos
Utilice un tokenizador preentrenado para preparar el conjunto de datos para el modelo transformer. El tokenizador convierte el texto sin procesar en un formato que el modelo pueda entender mediante la división de palabras en subpalabras o tokens, agregando tokens especiales como [CLS] y [SEP], y convirtiendo los tokens en IDs numéricos.
Este paso es crucial porque los modelos transformer trabajan con entradas numéricas de tamaño fijo en lugar de texto sin procesar. Específicamente para tareas NER, el tokenizador también debe manejar cuidadosamente la alineación de palabra a token para asegurar que las etiquetas de entidades se mapeen correctamente a la entrada tokenizada. Esto es especialmente importante cuando una sola palabra se divide en múltiples tokens, ya que necesitamos mantener las etiquetas de entidad correctas para cada token.
from transformers import AutoTokenizer
# Initialize tokenizer
model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
# Tokenize dataset
def tokenize_and_align_labels(examples):
tokenized_inputs = tokenizer(examples["tokens"], truncation=True, padding=True, is_split_into_words=True)
labels = []
for i, label in enumerate(examples["ner_tags"]):
word_ids = tokenized_inputs.word_ids(batch_index=i)
aligned_labels = [-100 if word_id is None else label[word_id] for word_id in word_ids]
labels.append(aligned_labels)
tokenized_inputs["labels"] = labels
return tokenized_inputs
tokenized_datasets = dataset.map(tokenize_and_align_labels, batched=True)
Desglose del código:
1. Configuración Inicial
El código comienza importando el AutoTokenizer de transformers e inicializando un tokenizador BERT:
- Utiliza 'bert-base-uncased' como modelo preentrenado
- Crea una instancia de tokenizador que convertirá el texto en tokens que el modelo pueda entender
2. Función de Tokenización
La función 'tokenize_and_align_labels' realiza dos tareas cruciales:
- Convierte palabras en tokens mientras maneja casos donde palabras individuales pueden dividirse en múltiples tokens
- Asegura que las etiquetas de entidades estén correctamente alineadas con la entrada tokenizada
3. Detalles de la Función
La función procesa los datos en estos pasos:
- Tokeniza el texto de entrada con parámetros:
- truncation=True: Recorta el texto que es demasiado largo
- padding=True: Agrega relleno para hacer secuencias de longitud uniforme
- is_split_into_words=True: Indica que la entrada está pre-dividida en palabras
- Crea etiquetas alineadas mediante:
- Uso de word_ids para rastrear qué tokens pertenecen a qué palabras originales
- Asigna -100 a tokens especiales (como [CLS], [SEP]) para ignorarlos durante el entrenamiento
- Mapea las etiquetas NER originales a las palabras tokenizadas
4. Paso Final
El código aplica esta función de tokenización al conjunto de datos completo utilizando la función map, procesando todos los ejemplos en lotes para mayor eficiencia.
Paso 3: Tokenizar el Conjunto de Datos
Utilice un tokenizador preentrenado para preparar el conjunto de datos para el modelo transformer. El tokenizador convierte el texto sin procesar en un formato que el modelo pueda entender mediante la división de palabras en subpalabras o tokens, agregando tokens especiales como [CLS] y [SEP], y convirtiendo los tokens en IDs numéricos.
Este paso es crucial porque los modelos transformer trabajan con entradas numéricas de tamaño fijo en lugar de texto sin procesar. Específicamente para tareas NER, el tokenizador también debe manejar cuidadosamente la alineación de palabra a token para asegurar que las etiquetas de entidades se mapeen correctamente a la entrada tokenizada. Esto es especialmente importante cuando una sola palabra se divide en múltiples tokens, ya que necesitamos mantener las etiquetas de entidad correctas para cada token.
from transformers import AutoTokenizer
# Initialize tokenizer
model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
# Tokenize dataset
def tokenize_and_align_labels(examples):
tokenized_inputs = tokenizer(examples["tokens"], truncation=True, padding=True, is_split_into_words=True)
labels = []
for i, label in enumerate(examples["ner_tags"]):
word_ids = tokenized_inputs.word_ids(batch_index=i)
aligned_labels = [-100 if word_id is None else label[word_id] for word_id in word_ids]
labels.append(aligned_labels)
tokenized_inputs["labels"] = labels
return tokenized_inputs
tokenized_datasets = dataset.map(tokenize_and_align_labels, batched=True)
Desglose del código:
1. Configuración Inicial
El código comienza importando el AutoTokenizer de transformers e inicializando un tokenizador BERT:
- Utiliza 'bert-base-uncased' como modelo preentrenado
- Crea una instancia de tokenizador que convertirá el texto en tokens que el modelo pueda entender
2. Función de Tokenización
La función 'tokenize_and_align_labels' realiza dos tareas cruciales:
- Convierte palabras en tokens mientras maneja casos donde palabras individuales pueden dividirse en múltiples tokens
- Asegura que las etiquetas de entidades estén correctamente alineadas con la entrada tokenizada
3. Detalles de la Función
La función procesa los datos en estos pasos:
- Tokeniza el texto de entrada con parámetros:
- truncation=True: Recorta el texto que es demasiado largo
- padding=True: Agrega relleno para hacer secuencias de longitud uniforme
- is_split_into_words=True: Indica que la entrada está pre-dividida en palabras
- Crea etiquetas alineadas mediante:
- Uso de word_ids para rastrear qué tokens pertenecen a qué palabras originales
- Asigna -100 a tokens especiales (como [CLS], [SEP]) para ignorarlos durante el entrenamiento
- Mapea las etiquetas NER originales a las palabras tokenizadas
4. Paso Final
El código aplica esta función de tokenización al conjunto de datos completo utilizando la función map, procesando todos los ejemplos en lotes para mayor eficiencia.
Paso 3: Tokenizar el Conjunto de Datos
Utilice un tokenizador preentrenado para preparar el conjunto de datos para el modelo transformer. El tokenizador convierte el texto sin procesar en un formato que el modelo pueda entender mediante la división de palabras en subpalabras o tokens, agregando tokens especiales como [CLS] y [SEP], y convirtiendo los tokens en IDs numéricos.
Este paso es crucial porque los modelos transformer trabajan con entradas numéricas de tamaño fijo en lugar de texto sin procesar. Específicamente para tareas NER, el tokenizador también debe manejar cuidadosamente la alineación de palabra a token para asegurar que las etiquetas de entidades se mapeen correctamente a la entrada tokenizada. Esto es especialmente importante cuando una sola palabra se divide en múltiples tokens, ya que necesitamos mantener las etiquetas de entidad correctas para cada token.
from transformers import AutoTokenizer
# Initialize tokenizer
model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
# Tokenize dataset
def tokenize_and_align_labels(examples):
tokenized_inputs = tokenizer(examples["tokens"], truncation=True, padding=True, is_split_into_words=True)
labels = []
for i, label in enumerate(examples["ner_tags"]):
word_ids = tokenized_inputs.word_ids(batch_index=i)
aligned_labels = [-100 if word_id is None else label[word_id] for word_id in word_ids]
labels.append(aligned_labels)
tokenized_inputs["labels"] = labels
return tokenized_inputs
tokenized_datasets = dataset.map(tokenize_and_align_labels, batched=True)
Desglose del código:
1. Configuración Inicial
El código comienza importando el AutoTokenizer de transformers e inicializando un tokenizador BERT:
- Utiliza 'bert-base-uncased' como modelo preentrenado
- Crea una instancia de tokenizador que convertirá el texto en tokens que el modelo pueda entender
2. Función de Tokenización
La función 'tokenize_and_align_labels' realiza dos tareas cruciales:
- Convierte palabras en tokens mientras maneja casos donde palabras individuales pueden dividirse en múltiples tokens
- Asegura que las etiquetas de entidades estén correctamente alineadas con la entrada tokenizada
3. Detalles de la Función
La función procesa los datos en estos pasos:
- Tokeniza el texto de entrada con parámetros:
- truncation=True: Recorta el texto que es demasiado largo
- padding=True: Agrega relleno para hacer secuencias de longitud uniforme
- is_split_into_words=True: Indica que la entrada está pre-dividida en palabras
- Crea etiquetas alineadas mediante:
- Uso de word_ids para rastrear qué tokens pertenecen a qué palabras originales
- Asigna -100 a tokens especiales (como [CLS], [SEP]) para ignorarlos durante el entrenamiento
- Mapea las etiquetas NER originales a las palabras tokenizadas
4. Paso Final
El código aplica esta función de tokenización al conjunto de datos completo utilizando la función map, procesando todos los ejemplos en lotes para mayor eficiencia.