es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que la función tokenizer espera una entrada de tipo string, mientras que la función tokenize_function devuelve un diccionario que contiene las columnas Text y Sentiment. Por lo tanto, es necesario modificar la función tokenize_function para que solo devuelva la columna Text, tal como se muestra a continuación:

    def tokenize_function(examples):
        return tokenizer(examples["Text"], truncation=True)
    

    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 columna Sentiment como entrada para el tokenizer.

    Después de realizar el cambio anterior, el código debería funcionar sin ningún error.

Comments are closed.