No es todo tan fácil como parece
En taniwa trabajamos en muchos proyectos de IA y Machine Learning. Lo importante siempre son los datos y el cariño que pongas a los detalles. Osea, que la tecnología no suele ser el problema principal sino cómo te organices, cómo cuides los datos, cómo los consigues y cómo los presentas.
Montar una demo de un sistema RAG (Retrieval Augmented Generation) con los datos de la empresa es directo; son 5 minutos:
- Instalas LangChain o Llamaindex
- Troceas tus documentos en párrafos (chunks), conviertes esos datos en vectores y los metes en una Vector Index Database.
- Los metes en una Vector Index Database.
- Preparas un prompt y a chatear.
Pero en el mundo real esa demo no sirve. Veamos por qué:
Los datos y su formato
Siempre hay que entender los datos que vas a indexar. En el ejemplo de 5 minutos de antes no sabemos si estamos con textos, PDFs, tablas, imágenes, audios, vídeos, código python o qué.
- Si son imágenes o vídeos es probable que los pasemos por un modelo que nos los convierta en texto.
- Si son tablas, lo mismo. Si son audios, lo mismo
- Si es código la forma de indexarlos será diferente.
Los trocitos importan
El proceso de “chunking” no es trivial. No es lo mismo trocear un texto en párrafos que en frases, o en palabras. En el ejemplo se están troceando los documentos en textos que se solapan entre sí, para que el sistema pueda encontrar la información que necesitas, pero ese acercamiento es muy mejorable.
- Si tienes documentos con secciones, títulos, subtítulos y párrafos es importante usar esa información para trocear.
- Si tienes código usa las funciones, los comentarios, las variables, paquetes o librerías.
- Una tabla en un documento no tiene mucho sentido que se trocee, pero sí que se indexe entera.
- En algunos casos no tienes que trocear nada. Piensa en tweets por ejemplo.*
Preparar el prompt
Antes de que el sistema RAG pueda responder a las preguntas de los usuarios, éstas se pueden procesar para mejorar la calidad de las respuestas.
- Puedes usar un LLM que regenera la pregunta para que sea más clara o más correcta en un entorno de trabajo (documentos legales por ejemplo).
- Puedes hacer que un LLM chatee con el usuario para clarificar la pregunta.
- Usar HyDE (Hypothetical Document Embedding ) le pide a un LLM que cree documentos para la consulta y estos documentos “falsos” se utilizan como nuevas consultas para obtener incrustados y buscar vecinos con el recuperador denso.
Mejorar la parte que trae los trocitos
Si los trocitos no son buenos, la respuesta no será buena.
- Hybrid Search, que combina la búsqueda por vectores cercanos y la búsqueda de palabras clave (ElasticSearch por ejemplo), puede ser una buena opción.
- Filtrar los trozos por el título o la sección primero.
- Probar con diferentes modelos de embeddings para ver cuál funciona mejor (BERT, GPT, etc.)
- Puedes hacerte tu propio modelo de embeddings afinado con tus datos.
Mejorar las respuestas:
Las respuestas se pueden tratar y corregir antes de dárselas al usuario.
- Reranking: Puedes usar un modelo de clasificación para reordenar los resultados. Hay modelos disponibles gratuitos en HuggingFace.
- Eliminar chunks que no aportan nada a la respuesta con un LLM.
Testear y mejorar
Preparar un conjunto de queries y respuestas esperadas para testear el sistema siempre que éste evolucione.
- Puedes usar un modelo de clasificación para evaluar la calidad de las respuestas.
- Puedes usar un modelo de generación de texto para puntuar las respuestas.
Arquitectura
No nos olvidemos de la arquitectura:
- Forma de servir las respuestas.
- API REST, GraphQL, Websockets, etc.
- Cómo se van a almacenar los datos.
- Seguridad
- Escalabilidad
Conclusión
Sin cariño no hay calidad.