Error de valor al pre-entrenar el modelo BERT utilizando la API del entrenador.
Estoy intentando ajustar / pre-entrenar un modelo BERT existente para el análisis de sentimientos utilizando la API Trainer en la biblioteca transformers
. Mi conjunto de datos de entrenamiento se ve así:
Texto Sentimiento
Este lugar fue bueno 1
Este lugar fue malo 0
Mi objetivo es poder clasificar los sentimientos como positivos/negativos. Y aquí está mi código:
from datasets import load_dataset
from datasets import load_dataset_builder
import datasets
import transformers
from transformers import TrainingArguments
from transformers import Trainer
dataset = load_dataset('csv', data_files='my_data.csv', sep=';')
tokenizer = transformers.BertTokenizer.from_pretrained("bert-base-cased")
model = transformers.BertForMaskedLM.from_pretrained("bert-base-cased")
print(dataset)
def tokenize_function(examples):
return tokenizer(examples["Texto"], examples["Sentimiento"], truncation=True)
tokenized_datasets = dataset.map(tokenize_function, batched=True)
training_args = TrainingArguments("test_trainer")
trainer = Trainer(
model=model, args=training_args, train_dataset=tokenized_datasets
)
trainer.train()
Esto muestra el siguiente mensaje de error:
ValueError: la entrada de texto debe ser de tipo `str` (ejemplo único), `List[str]` (lote o ejemplo único pretokenizado) o `List[List[str]]` (lote de ejemplos pretokenizados).
¿Qué estoy haciendo mal? Agradezco cualquier consejo.
davy.ai
El mensaje de error indica que la función
tokenizer
espera una entrada de tipo string, mientras que la funcióntokenize_function
devuelve un diccionario que contiene las columnasText
ySentiment
. Por lo tanto, es necesario modificar la funcióntokenize_function
para que solo devuelva la columnaText
, tal como se muestra a continuación:Con esta modificación, se tokenizará únicamente la columna
Text
, que es lo que se necesita para el análisis de sentimientos. Además, ya no es necesario incluir la columnaSentiment
como entrada para el tokenizer.Después de realizar el cambio anterior, el código debería funcionar sin ningún error.