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.

Volver a cargar el modelo del transformador fine-tuned de huggingface genera resultados de predicción inconsistentes.

Estoy tratando de volver a cargar un modelo DistilBertForTokenClassification ajustado. Después de usar el Trainer para entrenar el modelo descargado, guardo el modelo con trainer.save_model().

Entrenamiento del modelo

tokenizer = AutoTokenizer.from_pretrained(“distilbert-base-uncased”, use_fast=True)
model = AutoModelForSequenceClassification.from_pretrained(“distilbert-base-uncased”, num_labels=512)
trainer = Trainer(

)
trainer.train()
trained_model_save_path = ‘some_path/on_disk’
torch.save(model.state_dict(), trained_model_save_path)
sample_test_output = get_prediction(model, sample_test_text= “sample_test_text”, MAX_LEN)

En la inferencia (en un script de Ipython separado), intenté cargar este modelo desde el disco. Para el mismo texto de prueba de muestra, la salida de prueba de muestra es inconsistente y peor que en el entrenamiento del modelo. Por lo tanto, sospecho que los pesos del modelo se cargaron incorrectamente en la inferencia. En la parte de carga del modelo, intenté imitar el tutorial de HuggingFace: modelo = TheModelClass(args, **kwargs)

Inferencia del modelo

model = AutoModelForSequenceClassification.from_pretrained(“distilbert-base-uncased”, num_labels=512)
model.load_state_dict(torch.load(trained_model_save_path))
model.eval()
sample_test_output = get_prediction(model, sample_test_text= “sample_test_text”, MAX_LEN)

Parece que hay otra pregunta que reporta un problema similar, pero aún no hay respuestas efectivas:
Guardar y volver a cargar un modelo ajustado finamente de HuggingFace

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que los pesos del modelo no se cargaron correctamente durante la inferencia y, por lo tanto, se obtuvieron resultados inconsistentes y peores. Una forma de asegurar la carga correcta de los pesos del modelo es utilizar la misma inicialización y configuración del modelo durante la inferencia. En el fragmento de código dado, el modelo se inicializa nuevamente durante la inferencia con la misma configuración y luego se cargan los pesos entrenados. Esto puede provocar inconsistencias.

    En cambio, se pueden seguir los siguientes pasos para cargar correctamente el modelo entrenado:

    1. Guarda el modelo entrenado completo utilizando trainer.save_model() en lugar de guardar solo el state_dict. Esto guarda también la configuración, el tokenizer y otros archivos adicionales.
      trainer.save_model(trained_model_save_path)
      
    2. Durante la inferencia, carga el modelo completo utilizando el método AutoModelForSequenceClassification.from_pretrained con la ruta guardada.
      model = AutoModelForSequenceClassification.from_pretrained(trained_model_save_path, num_labels=512)
      
    3. Una vez cargado, establece el modelo en modo de evaluación utilizando model.eval().
      model.eval()
      
    4. Utiliza el modelo cargado para obtener las predicciones como se requiera.
      sample_test_output = obtener_prediccion(modelo, sample_test_text= "sample_test_text", MAX_LEN)
      

    Al seguir estos pasos, el modelo entrenado se puede cargar correctamente durante la inferencia y se pueden obtener resultados consistentes.

Comments are closed.