News
📅 Conoce a NeuralTrust en OWASP: Global AppSec - 29-30 mayo
Iniciar sesiónObtener demo
Volver

Benchmarking de modelos de evaluación para LLMs

Benchmarking de modelos de evaluación para LLMsMartí Jordà 19 de febrero de 2025
Contents

Los rápidos avances en la IA generativa han permitido a las empresas desplegar asistentes virtuales impulsados por LLMs en cuestión de minutos, revolucionando la forma en que las empresas interactúan con los clientes y gestionan la información.

Una innovación clave en este espacio es la Generación Aumentada por Recuperación (RAG), que se ha convertido en una herramienta poderosa para compartir conocimiento tanto interna como externamente al mejorar los modelos de lenguaje grandes (LLMs) con información específica del dominio y actualizada.

Los LLMs en sí mismos poseen notables capacidades de razonamiento y potencial creativo, lo que los hace invaluables para una amplia gama de aplicaciones.

Sin embargo, a medida que estos sistemas se vuelven más sofisticados, surge un desafío crucial: ¿cómo podemos medir su precisión y fiabilidad? En otras palabras: ¿cómo podemos asegurar que estos asistentes virtuales estén funcionando bien?

La necesidad de marcos robustos de evaluación de LLM para valorar la precisión del modelo RAG y asegurar la fiabilidad de sus respuestas es más apremiante que nunca, destacando un área importante de investigación continua en el desarrollo de IA.

En esta publicación, compararemos las diferentes alternativas disponibles en el mercado para la evaluación de la corrección de LLM. Específicamente, comparamos marcos de evaluación RAG como NeuralTrust, Ragas, Giskard y LlamaIndex.

Evaluando la precisión de la respuesta del LLM: Midiendo el rendimiento del modelo RAG

Los LLMs son muy elocuentes y siempre producen respuestas coherentes. ¿Pero qué tan precisas son estas salidas cuando las proporcionan asistentes virtuales impulsados por LLM? ¿Cómo podemos determinar si estas respuestas son tanto factualmente correctas como contextualmente apropiadas?

Esta pregunta se vuelve particularmente crítica en el contexto de un marco RAG, donde un LLM aprovecha los datos internos de la empresa para construir respuestas. Si estas respuestas no corresponden a la información fáctica almacenada en las bases de conocimiento internas de la empresa, corremos el riesgo de diseminar información falsa o engañosa, lo que puede tener consecuencias reputacionales y operativas devastadoras.

Para abordar este problema, hemos aplicado varias métricas de evaluación de LLM listas para usar para medir la corrección de la respuesta contra datos de referencia (ground truth).

Esto nos ha permitido evaluar cuán efectivamente diferentes marcos de evaluación RAG validan la precisión de la respuesta. Además, analizaremos cómo se comparan los diferentes marcos de evaluación, demostrando las ventajas y debilidades de cada solución.

Configuración de la tarea:

  • Cada participante recibirá pares de respuestas: una respuesta real y una respuesta esperada.
  • La respuesta de cada participante será binaria—clasificada como correcta (verdadero) si son equivalentes, o incorrecta (falso) si no lo son.
  • Definimos equivalencia como dos respuestas que transmiten la misma información o, como mínimo, no contienen declaraciones directamente contradictorias.
  • Usaremos dos conjuntos de datos:
  1. Un conjunto de datos disponible públicamente que contiene pares de respuestas relativamente simples.
  2. Un conjunto de datos personalizado mucho más desafiante con consultas funcionales y adversarias diseñadas para probar rigurosamente la fiabilidad de la respuesta.

Comparando marcos de evaluación de LLM

Ahora presentaremos los diversos marcos de evaluación de LLM comparados en esta publicación. Cada uno de estos métodos se basa en LLMs y opera de manera zero-shot, lo que significa que no requieren entrenamiento previo para generar un modelo. A pesar de no haber encontrado el problema antes, estos enfoques aún pueden resolverlo eficazmente, lo que los convierte en herramientas valiosas para la evaluación de la corrección de LLM en sistemas RAG.

Evaluador de corrección de NeuralTrust

NeuralTrust ofrece una familia completa de evaluadores de modelos LLM. La mayoría de ellos se basan en la técnica LLM-como-juez, proporcionando instrucciones cuidadosamente elaboradas a modelos de lenguaje grandes. Para asegurar una comparación justa entre NeuralTrust y los otros marcos de evaluación RAG que participan en este ejercicio, utilizaremos el evaluador de corrección de NeuralTrust, ya que es directamente comparable a las otras alternativas y utiliza un enfoque de evaluación del rendimiento del modelo de IA similar.

Evaluador de corrección de LlamaIndex

LlamaIndex proporciona módulos de evaluación basados en LLM para valorar la precisión de las respuestas generadas por IA, ofreciendo una herramienta poderosa para asegurar la fiabilidad de los asistentes virtuales impulsados por LLM. Un componente clave es el Evaluador de Corrección, que determina si la respuesta generada por un modelo se alinea con una respuesta de referencia basada en una consulta dada.

Mientras que algunos marcos de evaluación de LLM dependen de etiquetas de referencia (ground-truth), muchos de los módulos de evaluación de LlamaIndex no lo hacen. En cambio, aprovechan los LLMs (como GPT-4) para evaluar la corrección basándose en la consulta, el contexto y la respuesta.

Este enfoque permite la evaluación automatizada y escalable de las salidas generadas por IA, convirtiéndolo en una herramienta poderosa para mejorar la fiabilidad de los sistemas de generación aumentada por recuperación (RAG) y los asistentes virtuales.

Evaluador de corrección de Ragas

Ragas proporciona un Evaluador de Corrección para medir la precisión de las respuestas generadas por LLM comparándolas con una referencia de verdad fundamental (ground truth). Esta evaluación asigna una puntuación entre 0 y 1, donde una puntuación más alta indica una mayor alineación entre la respuesta generada y la respuesta esperada.

La evaluación de la corrección considera dos factores clave:

  1. Similitud semántica, que evalúa cuán cerca coincide el significado de la respuesta con la verdad fundamental.
  2. Consistencia fáctica, que asegura que la respuesta permanezca factualmente precisa.

Estos elementos se combinan utilizando un modelo de puntuación ponderada para generar la puntuación final de corrección. Además, los usuarios pueden aplicar un umbral para convertir la puntuación en una clasificación binaria, ofreciendo flexibilidad en cómo se evalúa la corrección dentro de los sistemas de generación aumentada por recuperación (RAG). En este análisis consideraremos las puntuaciones superiores o iguales a 0.5 como aprobadas, y por debajo de 0.5 como fallidas.

Evaluador de corrección de Giskard

Giskard proporciona un Evaluador de Corrección para valorar la fiabilidad de las respuestas generadas por IA comparándolas con salidas esperadas. Esta evaluación asegura que las predicciones del modelo se alineen con los datos de referencia (ground truth), ayudando a identificar posibles inexactitudes o inconsistencias.

A diferencia de las técnicas simples de coincidencia de respuestas, Giskard incorpora la comprensión semántica, lo que le permite determinar si una respuesta es factualmente correcta incluso si está formulada de manera diferente.

Evaluando la corrección de LLM con conjuntos de datos de referencia

Para evaluar los enfoques de evaluación de corrección de LLM mencionados anteriormente, necesitamos conjuntos de datos de prueba que contengan pares de respuestas generadas por IA y sus contrapartes esperadas. Al comparar estos pares, podemos determinar si las respuestas generadas son factualmente precisas y equivalentes a las esperadas, un factor crucial en la evaluación de la generación aumentada por recuperación (RAG).

Se utilizarán dos conjuntos de datos:

  1. Un conjunto de datos disponible públicamente por Google: el conjunto de datos de equivalencia de respuestas
  2. Una base de datos propietaria de un gran cliente, compuesta por consultas y respuestas de clientes del mundo real.

Conjunto de datos de equivalencia de respuestas

Este conjunto de datos se introduce, utiliza y describe en el siguiente artículo: Tomayto, Tomahto. Beyond Token-level Answer Equivalence for Question Answering Evaluation.

Utilizamos la división de entrenamiento para probar nuestros enfoques de evaluación de LLM zero-shot. Esta división contiene 9,090 instancias, donde cada instancia incluye un identificador, contexto, pregunta, respuesta generada por IA, respuesta esperada y una clasificación de corrección (si son equivalentes o no).

Para este ejercicio de marco de evaluación de LLM no utilizaremos el contexto ni ningún metadato adicional proporcionado en el conjunto de datos sin procesar. En cambio, preprocesaremos el conjunto de datos extrayendo solo la siguiente información.

Después del preprocesamiento, cada instancia en el conjunto de datos se verá así:

Copied!
1{
2        "prompt": "Who is pictured on the stupa's base?",
3        "actual_response": "Amitabha",
4        "expected_response": "Dhyani Buddha Amitabha",
5        "test_result": "Pass"
6}
7

Definimos un resultado de prueba correcto como aquel en el que la respuesta generada por IA es equivalente a la respuesta esperada, asegurando la precisión del LLM. Si las respuestas difieren significativamente, la prueba se marca como fallida.

Este conjunto de datos contiene principalmente casos en los que las respuestas y las respuestas esperadas son completamente diferentes o tienen variaciones menores que no son suficientes para fallar una prueba. Esto no es muy desafiante, pero será interesante comparar diferentes marcos de evaluación RAG y medir la consistencia del rendimiento.

Conjunto de datos del cliente

Este conjunto de datos es un benchmark específico del dominio diseñado para probar asistentes virtuales impulsados por LLM en aplicaciones industriales del mundo real. Consiste en dos tipos de preguntas generadas a partir de un almacén vectorial real de un cliente. Al consultar el almacén vectorial, generamos pares de preguntas y respuestas esperadas.

  1. Preguntas funcionales: Evalúan si el asistente de IA recupera con precisión la información de la base de datos vectorial del cliente y devuelve una respuesta factualmente correcta.

  2. Preguntas adversarias: Se generan para probar la resiliencia del asistente de IA incrustando información engañosa o contradictoria dentro de la consulta. El objetivo es probar si el asistente es capaz de ceñirse al contenido del almacén vectorial o si difunde información incorrecta inyectada en la pregunta.

Este conjunto de datos es mucho más desafiante que el conjunto de datos de Equivalencia de Respuestas de Google, ya que pone a prueba la precisión de la recuperación, la consistencia fáctica y la resistencia a la manipulación adversaria—factores clave en las herramientas de benchmarking de modelos de IA y la evaluación de la corrección RAG.

Comparando marcos de evaluación de LLM: Implementación de código

Aquí hay algunos fragmentos de código que demuestran cómo evaluamos la precisión del modelo RAG en Ragas, Giskard y Llama-Index:

NeuralTrust

Para lanzar el evaluador de corrección de NeuralTrust, primero importamos algunas bibliotecas, que incluyen el CorrectnessEvaluator de NeuralTrust, la biblioteca estándar json y la biblioteca asyncio para manejar llamadas asíncronas:

Copied!
1import asyncio
2import json
3from trusttest.evaluators import (
4   CorrectnessEvaluator,
5)
6

Luego, instanciamos el evaluador y obtenemos el bucle asíncrono:

Copied!
1evaluator = CorrectnessEvaluator()
2try:
3   loop = asyncio.get_running_loop()
4except RuntimeError:
5   # No running event loop, create a new one
6   loop = asyncio.get_event_loop()
7

Finalmente cargamos el conjunto de datos, llamamos al evaluador para cada instancia, normalizamos los resultados y evaluamos el rendimiento del evaluador:

Copied!
1test_cases = []
2correct = 0
3with open(dataset_path, "r") as fd:
4   json_list = json.load(fd)
5   N = len(json_list)
6   for idx, json_dict in enumerate(json_list):
7       result = loop.run_until_complete(evaluator.evaluate(response=json_dict["actual_response"], context=json_dict))
8       if result[0] > 2.5:
9           evaluation = "Pass"
10       else:
11           evaluation = "Fail"
12
13
14       if evaluation == json_dict["test_result"]:
15           correct += 1
16
17
18   print(f"Accuracy: {correct/N}")
19

Consideramos que todas las puntuaciones superiores a 2.5 son pruebas aprobadas y fallidas en caso contrario.


Ragas

Para Ragas, importamos los siguientes componentes y bibliotecas:

Copied!
1from ragas import evaluate
2from ragas.metrics import answer_correctness
3from datasets import Dataset
4

Cargamos los conjuntos de datos en una estructura de diccionario, que luego se transformó en un objeto Dataset:

Copied!
1data = {
2   "question": questions,
3   "answer": actual_responses,
4   "ground_truth": expected_responses
5}
6dataset = Dataset.from_dict(data)
7

Luego usamos la función

Copied!
1evaluate
de Ragas:

Copied!
1result = evaluate(
2   dataset = dataset,
3   metrics=[
4       answer_correctness
5   ],
6)
7df = result.to_pandas()
8correctness = list(df["answer_correctness"])
9

Después de eso, iteramos sobre las respuestas correctas, considerando los valores superiores a 0.5 como “Pass” y “Fail” en caso contrario. Luego comparamos los resultados con la verdad fundamental y calculamos la precisión.

Copied!
1correct = 0
2N = len(correctness)
3for i, response in enumerate(correctness):
4   bool_response = "Fail"
5   if float(response) > 0.5:
6       bool_response = "Pass"
7  
8   if bool_response == ground_truth[i]:
9       correct+=1
10
11
12print(correct/N)
13

Giskard

En el caso de Giskard, importamos los siguientes componentes:

Copied!
1from giskard.rag import evaluate, QATestset
2from giskard.rag import QuestionSample
3

Iteramos sobre el conjunto de datos, y para cada pregunta, respuesta y respuesta_esperada creamos un QuestionSample.

Copied!
1qs = QuestionSample(
2id=i,
3question=test_obj["prompt"],
4reference_answer=test_obj["expected_response"],
5reference_context="",
6conversation_history=messages,
7metadata={"question_type": "Simple", "topic": "general"},
8agent_answer=test_obj["actual_response"]
9)
10

Se requiere una lista de objetos QuestionSample para crear un QATestset:

Copied!
1qat = QATestset(qss)
2

Con una lista de respuestas esperadas y un QATestset, podemos llamar a la función

Copied!
1evaluate
de Giskard para calcular la precisión:

Copied!
1report = evaluate(answer_fn=answers, testset=qat)
2evaluations = list(report.to_pandas()["correctness"])
3correct = 0
4N = len(evaluations)
5for expected, actual in zip(passed, evaluations):
6    if expected == actual:
7        correct+=1
8
9
10print(f"Accuracy: {correct / N}")
11

LlamaIndex

Finalmente, para la comparación de Llama-index, usamos los siguientes componentes:

Copied!
1from llama_index.core.evaluation import CorrectnessEvaluator
2from llama_index.llms.openai import OpenAI
3

Instanciamos el CorrectnessEvaluator con gp4o-mini como el evaluador LLM.

Copied!
1llm = OpenAI("gpt-4o-mini")
2evaluator = CorrectnessEvaluator(llm=llm)
3

Luego iteramos sobre todo el conjunto de datos, llamando al método

Copied!
1evaluate
y calculando el rendimiento:

Copied!
1i = 0
2N = len(questions)
3correct = 0
4
5
6for query, expected_response, actual_response in zip(questions, expected_responses, actual_responses):
7   result = evaluator.evaluate(
8       query=query,
9       response=actual_response,
10       reference=expected_response,
11   )
12   if result.score > 2.5:
13       res = "Pass"
14   else:
15       res = "Fail"
16   if res == ground_truth[i]:
17       correct += 1
18   i +=1
19
20
21print(correct/N)
22

La puntuación en este modelo varía de 1 a 5, considerándose los valores superiores a 2.5 como “Pass” y “Fail” en caso contrario.

Resultados: Evaluando la corrección de LLM en los conjuntos de datos

Para evaluar el rendimiento de cada enfoque, compararemos sus evaluaciones con la verdad fundamental (ground truth) disponible para ambos conjuntos de datos. La verdad fundamental especifica si la respuesta y la respuesta esperada son equivalentes en términos de corrección. La precisión se mide como la proporción de instancias en las que la evaluación de un enfoque se alinea con la verdad fundamental. En otras palabras, si la verdad fundamental indica que la respuesta y la respuesta esperada son equivalentes, el método de evaluación también debería reconocerlas como equivalentes—y viceversa.

Por ejemplo, un falso positivo ocurre cuando un enfoque identifica incorrectamente una respuesta como correcta cuando, según la verdad fundamental, es incorrecta. Esto podría suceder si la respuesta es cercana en significado pero contiene un error fáctico crítico. Por otro lado, un verdadero negativo ocurre cuando un enfoque identifica correctamente una respuesta como incorrecta, coincidiendo con la verdad fundamental.

La precisión es una métrica sólida para la evaluación porque refleja directamente con qué frecuencia un enfoque determina correctamente la equivalencia, lo que la convierte en una medida clara e interpretable del rendimiento general. Los resultados se muestran en la tabla a continuación.

EnfoqueConjunto de datos del clienteEquivalencia de Respuestas de Google
NeuralTrust80%86%
Llama-index57%78%
Ragas67%82%
Giskard47%75%

Observamos que Ragas demostró una fuerte precisión en el conjunto de datos de Equivalencia de Respuestas de Google, logrando resultados impresionantes. Sin embargo, cuando se probó en nuestro conjunto de datos de cliente del mundo real, su rendimiento disminuyó significativamente. De manera similar, LlamaIndex funcionó bien en el conjunto de datos de Google pero tuvo dificultades para mantener la precisión en nuestro conjunto de datos específico del dominio.

Esta comparación destaca una distinción crucial en las capacidades de estos marcos de evaluación de LLM cuando se aplican a pruebas de precisión de respuestas generadas por IA en el mundo real.

La conclusión clave aquí es que el evaluador de corrección de NeuralTrust se destaca como el único modelo que funciona excepcionalmente bien en ambos conjuntos de datos, mostrando su precisión, versatilidad y adaptabilidad en diversos escenarios de datos. Esto refuerza la robustez de su enfoque en la evaluación de la corrección RAG y demuestra su capacidad para adaptarse eficazmente en diversos escenarios de datos.

¿Qué es lo siguiente?

Asegurar la evaluación de la corrección de LLM es crucial para obtener respuestas generadas por IA fiables, especialmente en sistemas de generación aumentada por recuperación (RAG). Como se muestra en nuestro benchmarking, muchos marcos de evaluación luchan con la consistencia entre conjuntos de datos, destacando la necesidad de un enfoque robusto y adaptable.

Las soluciones RAG de NeuralTrust mejoran la precisión de las respuestas al fundamentar las salidas de IA en conocimiento verificado y específico del dominio, reduciendo las alucinaciones y mejorando la consistencia fáctica. A diferencia de otros marcos de evaluación RAG, NeuralTrust ofrece consistentemente alta precisión en diversos escenarios.

Haz clic aquí para reservar una demostración y ver cómo las soluciones RAG de NeuralTrust mejoran la precisión y fiabilidad de las respuestas de IA mientras mantienen la eficiencia y la escalabilidad.


Posts relacionados

Ver todo