TLDR:
- RAG: complementar el prompt referenciando conocimiento concreto, actualizado o propietario
- Fine-tuning: reentrenar el modelo para que cambie su estilo, tono o formato - altamente complejo. Sólo después de haber probado otros métodos.
El objetivo de customizar los modelos es mejorar aspectos de su performance, calidad y/o seguridad de sus respuestas.
Data Grounding
Proceso de enriquecer una respuesta generada por IA con datos externos o específicos para mejorar su calidad y/o seguridad de sus respuestas. Asegura que el output del modelo está alineado con datos factuales, contextuales y que son confiables.
Data Grounding es el objetivo, no una técnica.
Para responder al prompt la IA no se basará sólo y únicamente en los datos de su entrenamiento, si no que se le proporciona información adicional de una fuente externa (documentos, BBDD, APIs, etc.) para que sus respuestas estén basadas en datos reales y actualizados y no se los invente ni alucine.
RAG vs Fine-Tuning
¿Necesitas datos up-to-the-minute o acceso a datos privados? Por lo general se recomienda comenzar con RAG. Es más rápido de implementar y necesita menos datos que fine-tuning.
¿Necesitas que la IA hable/escriba en un estilo muy específico o que entienda un nicho de manera profunda? - Hacer fine-tuning. Ayuda al modelo a aprender patrones y estilos que solamente con RAG son muy difíciles de capturar.
¿Necesitas hacer tareas muy complejas que requieren datos específicos / actualizados y un conocimiento profundo? - Hacer ambos (Fine-tuning+RAG).
RAG (Retrieval Augmented Generation)
Técnica de data grounding. Enriquece el conocimiento de un modelo conectándolo a bases de conocimiento externas (BBDD propietarias, docs internos de la compañía…).
En lugar de confiar solo en el conocimiento entrenado del modelo, el retriever hace una query donde busca chunks con información relevante y se lo pasa al LLM, el cual lo usa como contexto para generar la respuesta.
Casos de uso
- Cuando necesites respuestas basadas en información muy reciente (hoy, news, current stock prices)
- Cuando necesites información de fuentes de datos privadas o propietarias (documentos, internal company policies, support logs)
- Cuando quieras que la IA cite sus fuentes
Ejemplo
Si le pregunto a un asistente cualquiera ¿Cuánto dinero puedo pedir en gastos de desplazamiento? Seguramente me responderá que varía según mi empresa y sus políticas
Si al mismo modelo le aporto la documentación de la empresa como RAG y le pregunto lo mismo, el retriever hará una query con los documentos disponibles, la cual sacará el contexto correspondiente y se lo añade como tal al LLM, dándome como respuesta puedes pedir hasta x, según las fuentes tal y tal
Fine-tuning
Fine tuning es un proceso altamente complejo y costoso donde cogemos un modelo pre-entrenado que tiene algunas capacidades que necesitamos, pero no todas, y lo especializamos todavía más, entrenándolo con un dataset más pequeño, más específico y de alta calidad para modificar sus pesos (weights). Esto adapta el modelo para esa tarea concreta. Antes de hacer fine-tuning es recomendable probar si solo con prompting se puede cubrir nuestro caso de uso. Con prompts y ejemplos de calidad se puede llegar a adaptar mucho un modelo.
Conocimientos de ML son altamente recomendables, ya que lo que vamos a hacer, es reentrenar al modelo.
Un SLM al que se le hace fine-tuning para entrenarlo en una task específica puede superar a un LLM en esa task en concreto.
Ejemplos:
- que hable como un pirata del siglo XVII
- que pueda escribir documentos legales
- que sepa construir queries de un SQL propietario con poco soporte general.
Cuando usar Fine-tuning
- Cuando necesites que el LLM adopte un estilo, tono o persona específica (ej: hablar como Shakespeare).
- Cuando necesites que el LLM responda con jargon de un dominio muy específico (dar soporte médico o legal).
- Cuando necesites que el LLM se profesionalice con casos menos conocidos como un SQL propietario de una BBDD que el LLM no conoce todavía
Desventajas de Fine-tuning
Comparado con RAG tiene algunas desventajas:
- Complejo - no deja de ser reentrenar un LLM. Nos hacen falta: un LLM base, datos de calidad para entrenarlo, conocimientos de ML y poder evaluar los resultados.
- Olvidadizo - los modelos pueden olvidar o perder capacidades respecto a sus datos de entrenamiento. Por ejemplo un modelo al que se le haya hecho fine-tuning para crear queries de SQL puede no manejar muy bien conversaciones generales sobre filosofía.
- Dependencia de datos - La performance depende enteramente de la cantidad y calidad de los datos de entrenamiento.
- Datos desactualizados - El modelo solo sabe lo que tenga en sus datos de entreno. Aunque estén desactualizados.
Detalles
El entrenamiento de un modelo comienza con el pre-training mediante self-supervision. Esto permite al modelo aprender usando grandes cantidades de datos sin labels. Para los LLMs por lo general se usan grandes secuencias de texto sin anotaciones.
Ahora que tenemos este pre-trained model podemos entrenarlo con fine-tuning mediante self-supervision, primero con datos simples de menor calidad, relacionados a la tarea y posteriormente con datos de mayor calidad.
Ejemplo: Si queremos entrenar un modelo para usarlo en un entorno legal primero le podemos hacer fine-tuning con documentos legales sin procesar (cheap training) y luego lo podemos volver a hacer con datos estructurados como pregunta/respuesta (expensive tranining)
Técnicamente cualquier entrenamiento que se haga tras el pre-training se considera fine-tuning.
Transfer learning
Fine-tuning es una manera de hacer transfer learning. Esto es coger el conocimiento obtenido de una tarea para acelerar el aprendizaje de otra tarea nueva.
Un ejemplo de transfer learning es la traducción multi idioma de Google donde el modelo tenía conocimientos para traducir Portugués-Inglés e Inglés-Español y se usaron estos conocimientos para poder traducir Portugués-Español, aún cuando no existían estos datos en el dataset de entrenamiento.