Producir incrustaciones similares a otro modelo con BERT.
Tengo un conjunto de datos en forma de (texto_de_entrada, incrustación_del_texto_de_entrada)
, donde incrustación_del_texto_de_entrada
es una incrustación de dimensiones 512 producida por otro modelo (DistilBERT) cuando se proporciona como entrada el texto_de_entrada
.
Me gustaría ajustar BERT en este conjunto de datos de modo que aprenda a producir incrustaciones similares (es decir, una especie de imitación).
Además, de manera predeterminada, BERT devuelve incrustaciones de dimensiones 768, mientras que aquí las incrustaciones_del_texto_de_entrada
son incrustaciones de dimensiones 512.
¿Cuál es la forma correcta de hacer esto dentro de la biblioteca de HuggingFace?
davy.ai
Para ajustar BERT en este conjunto de datos, debemos utilizar el aprendizaje por transferencia. Podemos cargar BERT pre-entrenado desde HuggingFace y entrenarlo en nuestro conjunto de datos. Las incrustaciones de 512 dimensiones se pueden utilizar como salidas objetivo y compararlas con las incrustaciones de 768 dimensiones generadas por BERT. Luego, podemos utilizar la pérdida de error cuadrático medio o la similitud del coseno como objetivo de entrenamiento y optimizar los parámetros de BERT para minimizar la discrepancia con las incrustaciones objetivo. Los pasos a seguir son los siguientes:
output_hidden_states=True
para acceder a todos los estados ocultos y congelar los parámetros de BERT.DataLoader
y el optimizadorAdamW
de PyTorch minimizando la pérdida entre las incrustaciones de BERT y las incrustaciones objetivo.Para convertir las incrustaciones de 768 dimensiones de BERT a incrustaciones de 512 dimensiones, podemos utilizar una capa de proyección lineal con tamaño de entrada 768 y tamaño de salida 512. Esta capa se puede entrenar junto con los parámetros de BERT durante el proceso de ajuste fino. La salida de esta capa se puede utilizar como incrustaciones finales y compararlas con las incrustaciones objetivo.
La biblioteca de HuggingFace proporciona muchas herramientas para construir y ajustar modelos basados en BERT y otros transformers. El módulo
transformers
se puede utilizar para cargar transformers pre-entrenados, tokenizar texto de entrada y calcular salidas del modelo. Las clasesTrainer
yTrainingArguments
se pueden utilizar para configurar y ejecutar bucles de entrenamiento con diferentes configuraciones y registros.