viernes, 19 de enero de 2024

Seis formas de usar el 'fine tuning' de un modelo GPT

Una de las 'casi sorpresas' que han traído consigo los grandes modelos de lenguaje y las arquitecturas que hay detrás, ha sido su capacidad para trascender en cierta medida su propósito inicial y permitir su aplicación en dominios que quizá no eran los inicialmente los previstos.

Y otro factor, éste claramente buscado, es el especial planteamiento del entrenamiento de estos modelos.

Pero vayamos por partes.


Modelos fundacionales


Los grandes modelos de lenguaje, basados en deep learning y apoyados en novedosos mecanismos como la atención y la autoatención y arquitecturas como Transformer han demostrado que su utilidad puede ir más allá, que pueden trascender de alguna forma el territorio del procesamiento del lenguaje natural para alcanzar por un lado la multimodalidad (integración no sólo de texto sino también de imágenes, videos, música, etc) y por otro de encontrar aplicaciones en otros campos bastante diferenciados.

Esa posibilidad es lo que ha llevado a su denominación como modelos fundacionales ('foundation models') y se apoya, no solo en su arquitectura y capacidad intrínseca, sino también en el planteamiento de su entrenamiento.


El entrenamiento de los modelos fundacionales


El entrenamiento de los modelos fundacionales se realiza en dos o tres etapas que podemos visualizar en la siguiente figura que utilizo en alguno de los cursos que imparto:



Podemos observar, tres fases:


  • Pre-entrenamiento ('pre-training'): Es realmente la fase más difícil y la que realizan organizaciones como OpenAI, Google, etc. Se utilizan cantidades ingentes de datos de entrenamiento y modelos de aprendizaje auto-supervisado (a esa escala sería inviable un modelo supervisado). Con este entrenamiento se ponen las bases del modelo, pero unas bases muy avanzadas, ya perfectamente utilizables, como lo demuestra la utilizad de ChatGPT, que utiliza, claro, modelos GPT en cuyo acrónimo, 'casualmente' la P corresponde a 'Pre-trained'.

  • Ajuste fino ('fine tuning'): Un mecanismo para especializar de alguna forma ese modelo pre-entrenado y fundacional, a un ámbito concreto. Esto ya puede caer del lado de empresas y usuarios (OpenAI, por ejemplo, ofrece un API para ello) y se realiza normalmente mediante aprendizaje supervisado pero con una cantidad reducida de datos. En parte, aunque sólo en parte, esta es 'la magia' y lo que justifica que consideremos estos modelos como 'fundacionales'.

  • En funcionamiento: No siempre es mencionado como una forma de entrenamiento pero es sabido que en el uso de herramientas como ChatGPT éstas 'toman nota' del contexto y hasta cierto punto aprenden de la interacción con el usuario y también que existen técnicas de ingeniería de instrucciones ('prompt engineering') como el 'few shot prompting' específicamente dirigidas a decirle a ChatGPT cómo se resuelve un problema mediante ejemplos.


Formas de Fine-tuning


En el libro 'Foundation Models for Natural Language Processing' de Gerhard Paaß y Sven Giesselbach los autores nos proponen seis formas de hacer o usar ese 'fine-tuning' en el caso específico de GPT (y, más concretamente GPT-3), que afirman dan mejor resultado que la ingeniería de instrucciones incluyendo el 'few-shot prompting', Estos son los seis usos que proponen: 


  • Terminación ('completion'): Generar la respuesta para un 'prompt'

  • Búsqueda ('search'): Dada una consulta de búsqueda y una serie de documentos, establecer un rango entre los documentos basándose en la similaridad semántica con la consulta (recordad al respecto lo que comentaba en el post 'Los modelos de lenguaje, la semántica y los sesgos')

  • Clasificación ('classification'): Dada una consulta y una serie de ejemplos etiquetados, asignar etiqueta a la consulta.

  • Respuesta ('answer'): Se toma como entrada una pregunta, un conjunto de documentos e información de 'background'. Con base en la información de los documentos y los ejemplos, se contesta la pregunta.

  • Ajuste fino: Adaptar GPT a un dominio de texto concreto

  • 'Embeddings': Obtener un vector de 'embedding' contextual para un texto de entrada para su uso en una exploración posterior.

Confieso que en alguno de las propuestas me quedo con las ganas de conocer mejor cómo se hace en la práctica y en otras me cuesta ver la diferencia con el 'few-shot promting', pero bueno, ahí quedan al menos las pistas.

Conclusiones


Entre las sorprendentes y magníficas cualidades de los grandes modelos de lenguaje, es que han trascendido su propio intento original siendo capaces de introducirse en nuevos usos y, además, que una vez hecho el entrenamiento masivo reservado a unas pocas organizaciones, pueden adaptarse mediante un ajuste fino, mucho más ligero y al alcance casi de cualquiera, para adaptarse a dominios o usos especializados.


No hay comentarios:

Publicar un comentario