En este tutorial, utilizaremos la infraestructura Ragas para la evaluación de generación aumentada por recuperación (RAG, por sus siglas en inglés) en Python mediante LangChain.
RAG es una técnica de procesamiento de lenguaje natural (PLN) que combina la recuperación de información y modelos generativos para producir respuestas más precisas, relevantes y conscientes del contexto. En las tareas tradicionales de generación de lenguaje, se utilizan modelos de lenguaje grandes (LLM) como GPT-4 (transformador generativo preentrenado) de OpenAI o modelos IBM® Granite para construir respuestas basadas en una instrucción de entrada. Los casos de uso comunes en el mundo real de estos modelos de lenguaje grandes son los chatbots. Estos modelos tienen dificultades para producir respuestas que sean contextualmente relevantes, objetivamente precisas o actualizadas.
Las aplicaciones RAG abordan esta limitación incorporando un paso de recuperación antes de la generación de la respuesta. Durante la recuperación, los fragmentos de texto adicionales relevantes para la instrucción se extraen de una base de conocimientos, como documentos relevantes de un gran corpus de texto, generalmente almacenados en una base de datos vectorial. Finalmente, se utiliza un LLM para generar respuestas basadas en la instrucción original aumentada con el contexto recuperado.
Existen muchos marcos de evaluación de RAG y métricas de evaluación diferentes. Además de Ragas, otros marcos incluyen Unitxt de IBM y Evals de OpenAI. A diferencia de otras infraestructuras, Ragas utiliza otro LLM como juez para evaluar el rendimiento de un pipeline de RAG.
Hay varias métricas de evaluación disponibles para medir el rendimiento de nuestro pipeline de RAG. Las métricas que utilizaremos en la infraestructura Ragas de código abierto se pueden dividir en dos partes:
Estas métricas están destinadas a ser proxies subjetivos de qué tan bien un pipeline de RAG recupera información relevante de su base de conocimientos para formar una respuesta. Es importante tener en cuenta que no existe un ideal para datos, instrucciones o LLM. Incluso el contexto que tiene una puntuación context_relevance baja no es necesariamente un mal contexto. La puntuación baja puede deberse a cierta cantidad de "ruido" o información menos relevante, o simplemente porque la tarea en sí está abierta a múltiples interpretaciones. El ruido tampoco es necesariamente malo. Nosotros, como humanos, producimos una cierta cantidad de ruido en nuestras respuestas y, al mismo tiempo, somos inteligibles al responder preguntas.
También hay sesgos que afectan la evaluación de un pipeline de RAG, como la preferencia por respuestas más cortas o más largas, también conocido como sesgo de longitud. Este tipo de sesgo puede llevar a que una respuesta se evalúe mejor que otra debido a su longitud y no a su sustancia.
Por estas razones, es una de las mejores prácticas realizar múltiples evaluaciones. Este ejercicio se puede lograr cambiando la plantilla de instrucciones del LLM, las métricas, la secuencia de evaluación y más. Si está creando su propio conjunto de datos para su pipeline de RAG, también se recomienda utilizar diferentes modelos para el LLM que genera las respuestas y el LLM que critica las respuestas. Si se utiliza el mismo modelo para ambos, existe un mayor potencial de sesgo de autoevaluación. Debido a que estas métricas de evaluación son subjetivas, los resultados producidos por estas infraestructuras también deben ser verificados por jueces humanos.
En este tutorial, no creamos un sistema RAG. En su lugar, estamos utilizando Ragas para evaluar el resultado de un sistema RAG creado previamente. Para obtener más información sobre cómo crear su sistema RAG con LangChain, consulte nuestro tutorial detallado de RAG.
Necesita una cuenta de IBM Cloud para crear un proyecto en watsonx.ai . Regístrese aquí para obtener una cuenta gratuita.
Si bien puede elegir entre varias herramientas, este tutorial lo guiará a través de cómo configurar una cuenta de IBM para usar un Jupyter Notebook.
Inicie sesión en watsonx.ai con su cuenta de IBM Cloud.
Cree un proyecto watsonx.ai.
Puede obtener su ID de proyecto desde dentro de su proyecto. Haga clic en la pestaña Manage. A continuación, copie el ID del proyecto de la sección Details de la página General. Necesita este ID para este tutorial.
Cree un Jupyter Notebook.
Este paso abre un entorno de notebook donde puede copiar el código de este tutorial para implementar una evaluación de RAG propia. También puede descargar este notebook en su sistema local y cargarlo en su proyecto watsonx.ai como activo. Para ver más tutoriales de Granite, consulte la comunidad de IBM Granite. Este Jupyter Notebook también está disponible en GitHub.
Cree una instancia de servicio watsonx.ai Runtime (seleccione la región adecuada y elija el plan Lite, que es una instancia gratuita).
Genere una clave de API.
Asocie la instancia del servicio watsonx.ai Runtime al proyecto que creó en watsonx.ai.
Necesitamos algunas bibliotecas y módulos para este tutorial. Asegúrese de importar los enumerados y, si no están instalados, una instalación rápida de pip resuelve el problema. Este tutorial se creó con Python 3.11.9.
Configure sus credenciales. Ingrese su clave API y el ID del proyecto como cadenas. Dependiendo de su instancia de servicio aprovisionada, use una de las regiones enumeradas como URL de watsonx:
La evaluación de Ragas requiere un conjunto de datos que contenga ejecuciones del pipeline de RAG de varias instrucciones diferentes. Además de las preguntas en sí, el conjunto de datos debe contener las respuestas esperadas conocidas como "verdades fundamentales", las respuestas producidas por el LLM y la lista de piezas de contexto recuperadas por el pipeline de RAG al responder cada pregunta. Puede crear su propio conjunto de datos de extremo a extremo, pero para los fines de este tutorial, el conjunto de datos que estamos utilizando en este tutorial está disponible en Hugging Face. Carguemos el conjunto de datos.
Resultado:
Los datos se cargan como DatasetDict y las características que nos interesan están dentro de la división "eval".
Resultado:
Ahora, cargue los datos en un marco de datos de Pandas. Para ver un ejemplo de una entrada en este conjunto de datos, consulte la documentación de HuggingFace.
Los conjuntos de datos para la evaluación de RAG se pueden crear de varias maneras. Un elemento clave para la creación de este conjunto de datos fue la base de conocimientos externa proporcionada a un LLM. Este conocimiento se puede obtener de una página web raspada, un archivo de texto básico, un documento importado y más. En este caso, se utilizan los informes recopilados de Amnistía Internacional. El contenido del conjunto de datos podría haberse creado de principio a fin o mediante un enfoque de generación de datos sintéticos, como TestsetGenerator de Ragas. El uso de TestsetGenerator requiere los documentos cargados, un LLM generador, un LLM crítico y un modelo de incorporación.
A su vez, el enfoque de extremo a extremo implica varios pasos. Supongamos que se adoptó este enfoque para la creación de este conjunto de datos. Esto significa que un LLM o un usuario humano generó las preguntas almacenadas en la columna de preguntas. Para generar las verdades fundamentales para cada pregunta, el usuario podría haberlas creado manualmente o generarlas mediante un LLM con la plantilla de instrucciones adecuada. Estas respuestas se consideran ideales y se almacenan en la columna ground_truth. Por último, se utilizó un pipeline de RAG para generar las respuestas que se ven en la columna de respuesta. Al crear el pipeline de RAG, se vectorizó la base de conocimientos externa. Luego, al consultar el sistema RAG, los fragmentos de texto relevantes que el LLM utilizó para generar cada respuesta se obtuvieron del almacén de vectores mediante el uso de un algoritmo de similitud, como el algoritmo de recuperación top-k. Estos conjuntos de datos se almacenaron en la columna contexts.
En este tutorial, estamos utilizando un modelo IBM Granite como juez.
Ragas utiliza modelos de IA abierta de forma predeterminada. WatsonxLLM es el contenedor para los modelos fundacionales de IBM watsonx.ai. Un contenedor watsonxLLM compatible con Ragas es un trabajo en progreso y aún no está disponible. Por ahora, para usar Ragas con los modelos Granite, necesitamos alterar las propiedades del contenedor.
Para este tutorial, sugerimos utilizar el modelo IBM Granite-3.0-8B-Instruct como el LLM para lograr resultados similares. Puede utilizar cualquier modelo de IA de su elección para compararlo con este punto de referencia y elegir el que mejor se adapte a su aplicación. Los modelos fundacionales disponibles a través de watsonx.ai se pueden encontrar aquí. El propósito de estos modelos en las aplicaciones LLM es servir como motor de razonamiento que decide qué acciones tomar y qué respuestas producir. Para usar el contenedor watsonxLLM con Ragas, necesitamos usar un LangchainLLMWrapper.
El modelo Granite se utiliza como modelo de evaluación. No vamos a utilizar un modelo para generar ninguna respuesta porque las respuestas ya están almacenadas en la columna de respuesta del conjunto de datos.
El modelo de incorporación que estamos utilizando es un modelo IBM® Slate a través de un contenedor watsonx.ai LangChain. Si no se define un modelo de incorporación, Ragas utiliza incorporaciones de OpenAI de forma predeterminada. El modelo de incorporación es esencial para la evaluación, ya que se utiliza para incorporar los datos de las columnas separadas para medir la distancia entre ellas.
Finalmente, ahora podemos ejecutar la evaluación de Ragas en el conjunto de datos. Aquí, pasamos el conjunto de datos, las métricas para la evaluación, el LLM y el modelo de incorporación como parámetros.
Si aparecen mensajes de advertencia, ignórelos, permita que se complete la evaluación e imprima el resultado como se muestra.
Resultado:
Y eso es todo. Se completó una evaluación del pipeline de RAG. Como se mencionó, puede ejecutar múltiples evaluaciones, probar diferentes modelos y alterar parámetros. Cuantas más evaluaciones se realicen, más podremos evaluar de manera integral la precisión y eficacia de un sistema LLM mediante RAG.
En este tutorial, utilizó Ragas para evaluar su pipeline de RAG. Su resultado incluyó las métricas context_precision , fidelidad, answer_relevancy y context_recall . El LLM utilizado para la evaluación fue un modelo IBM Granite y el modelo de incorporación utilizado fue un modelo IBM Slate al que se accedió a través de la API de incorporaciones watsonx.ai.
La evaluación realizada es importante, ya que se puede aplicar a futuros flujos de trabajo de IA generativa para evaluar el rendimiento de sus sistemas RAG y mejorarlos.
Le recomendamos que consulte la página de documentación de Ragas para obtener más información sobre sus métricas y proceso de evaluación.
Entrene, valide, ajuste y despliegue IA generativa, modelos fundacionales y capacidades de machine learning con IBM watsonx.ai, un estudio empresarial de próxima generación para creadores de IA. Diseñe aplicaciones de IA en menos tiempo y con menos datos.
Ponga la IA a trabajar en su negocio con la experiencia en IA líder en la industria y la cartera de soluciones de IBM a su lado.
Reinvente los flujos de trabajo y las operaciones críticas añadiendo IA para maximizar las experiencias, la toma de decisiones en tiempo real y el valor empresarial.