En este tutorial, utilizaremos el marco Ragas para la evaluación de la generación aumentada por recuperación (RAG) en Python utilizando LangChain.
RAG es una técnica de procesamiento del lenguaje natural (PLN) que combina la recuperación de información y los modelos generativos para producir respuestas más precisas, relevantes y contextualizadas. En las tareas tradicionales de generación de lenguajes, se utilizan grandes modelos de lenguaje (LLM) como GPT-4 (Generative Pre-trained Transformer) de OpenAI o modelos Granite de IBM para construir respuestas basadas en una instrucción de entrada. Los casos de uso comunes en el mundo real de estos modelos de lenguaje de gran tamaño 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 respuestas. Durante la recuperación, los fragmentos de texto adicionales relevantes para la instrucción se extraen de una base de conocimientos, como los documentos relevantes de un gran corpus de texto, normalmente almacenados en una base de datos vectorial. Por último, se utiliza un LLM para generar respuestas basadas en la instrucción original aumentada con el contexto recuperado.
Existen muchos marcos de evaluación 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 los otros marcos, Ragas utiliza otro LLM como juez para evaluar el rendimiento de un pipeline RAG.
Hay varias métricas de evaluación disponibles para medir el rendimiento de nuestro pipeline RAG. Las métricas que utilizaremos en el marco Ragas de código abierto se pueden dividir en dos partes:
Estas métricas pretenden ser proxies subjetivos de lo bien que un pipeline 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 baja puntuación 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 a las preguntas.
También hay sesgos que afectan a la evaluación de un pipeline 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 hacer que una respuesta se evalúe mejor que otra debido a su longitud y no a su sustancia.
Por estas razones, es una buena práctica realizar múltiples evaluaciones. Este ejercicio se puede realizar 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 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. Dado que estas métricas de evaluación son subjetivas, los resultados producidos por estos marcos también deben ser comprobados por jueces humanos.
En este tutorial, no creamos un sistema RAG. En su lugar, estamos utilizando Ragas para evaluar el output de un sistema RAG creado previamente. Para obtener más información sobre cómo crear su sistema RAG utilizando LangChain, consulte nuestro tutorial detallado de RAG.
Necesita una cuenta de IBM® Cloud para crear un proyecto watsonx.ai . Regístrese para obtener una cuenta gratuita aquí.
Aunque puede elegir entre varias herramientas, este tutorial le muestra cómo configurar una cuenta de IBM para utilizar un Jupyter Notebook.
Inicie sesión en watsonx.ai utilizando su cuenta de IBM Cloud.
Cree un proyecto watsonx.ai.
Puede obtener el ID de su proyecto desde su proyecto. Haga clic en la pestaña Administrar. A continuación, copie el ID del proyecto de la sección Detalles 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 RAG propia. También puede descargar este cuaderno 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 de watsonx.ai Runtime (seleccione la región adecuada y elija el plan Lite, que es una instancia gratuita).
Genere una clave API.
Asocie la instancia del servicio watsonx.ai Runtime al proyecto que ha creado en watsonx.ai.
Necesitamos unas pocas 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. Introduzca su clave API y el ID del proyecto como cadenas. En función de la instancia de servicio provisionada, utilice una de las regiones enumeradas como URL de watsonx:
La evaluación de Ragas requiere un conjunto de datos que contenga ejecuciones de pipeline RAG de varias instrucciones diferentes. Además de las preguntas en sí, el conjunto de datos debe contener las respuestas esperadas conocidas como "verdades básicas", las respuestas producidas por el LLM y la lista de piezas de contexto recuperadas por el pipeline RAG al responder a cada pregunta. Puede crear su propio conjunto de datos de extremo a extremo, pero a los efectos 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 dataframe 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 informes recopilados de Amnistía Internacional. El contenido del conjunto de datos podría haberse creado de principio a fin o utilizando un enfoque de generación de datos sintéticos como el TestsetGenerator de Ragas. El uso de TestsetGenerator requiere los documentos cargados, un LLM generador, un LLM crítico y un modelo de embedding.
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 básicas para cada pregunta, el usuario podría haberlas creado manualmente o generarlas utilizando un LLM con la instrucción adecuada. Estas respuestas se consideran ideales y se almacenan en la columna ground_truth. Por último, se utilizó un pipeline RAG para generar las respuestas que se ven en la columna de respuesta. Al crear el pipeline 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 de contextos.
En este tutorial, estamos utilizando un modelo Granite de IBM como juez.
Ragas utiliza modelos de IA abierta de forma predeterminada. WatsonxLLM es el contenedor de los modelos fundacionales de IBM watsonx. Un contenedor watsonxLLM compatible con Ragas es un trabajo en curso 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 Granite-3.0-8B-Instruct de IBM 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 de 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 embedding que estamos utilizando es un modelo Slate de IBM a través de un wrapper de watsonx.ai LangChain. Si no se define ningún modelo de embedding, Ragas utiliza embeddings de OpenAI de forma predeterminada. El modelo de embeddings es esencial para la evaluación, ya que se utiliza para incrustar los datos de las columnas separadas para medir la distancia entre ellas.
Por último, 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 embedding como parámetros.
Si aparecen mensajes de advertencia, ignórelos, deje que la evaluación se complete e imprima el resultado tal y como se muestra.
Resultado:
Y eso es todo. Se ha completado una evaluación del pipeline RAG. Como se ha mencionado, puede ejecutar varias evaluaciones, probar diferentes modelos y modificar parámetros. Cuantas más evaluaciones se realicen, más podremos evaluar de forma exhaustiva la precisión y eficacia de un sistema LLM utilizando RAG.
En este tutorial, ha utilizado Ragas para evaluar su pipeline RAG. Su output incluyó las métricas context_precision , faithfulness , answer_relevancy and context_recall . El LLM utilizado para la evaluación fue un modelo Granite de IBM y el modelo de embedding utilizado fue un modelo Slate de IBM al que se accedió a través de la API de embeddings de watsonx.ai.
La evaluación realizada es importante, ya que puede aplicarse 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 su proceso de evaluación.
Entrene, valide, ajuste e implemente IA generativa, modelos fundacionales y capacidades de machine learning con IBM watsonx.ai, un estudio empresarial de nueva generación para desarrolladores de IA. Cree aplicaciones de IA en menos tiempo y con menos datos.
Ponga la IA a trabajar en su negocio con la experiencia líder en IA del sector de IBM y junto a su cartera de soluciones.
Reinvente las operaciones y flujos de trabajo críticos añadiendo IA para maximizar las experiencias, la toma de decisiones en tiempo real y el valor empresarial.