Comenzando con MLFLOW para la evaluación de LLM

Mlflow es una poderosa plataforma de código abierto para administrar el ciclo de vida del aprendizaje automático. Si bien se utiliza tradicionalmente para rastrear experimentos modelo, los parámetros de registro y la gestión de implementaciones, MLFlow ha introducido recientemente soporte para evaluar modelos de idiomas grandes (LLM).

En este tutorial, exploramos cómo usar MLFLOW para evaluar el rendimiento de un LLM, en nuestro caso, el modelo Gemini de Google, en un conjunto de indicaciones basadas en hechos. Generaremos respuestas a las indicaciones basadas en hechos utilizando Gemini y evaluaremos su calidad utilizando una variedad de métricas compatibles directamente con MLFLOW.

Configuración de las dependencias

Para este tutorial, usaremos las API Operai y Gemini. Las métricas de evaluación generativa de IA generativa de MLFLOW actualmente se basan en modelos Operai (por ejemplo, GPT-4) para actuar como jueces para métricas como la similitud de respuesta o la fidelidad, por lo que se requiere una clave API de OpenAI. Puedes obtener:

Instalación de las bibliotecas

pip install mlflow openai pandas google-genai

Configuración de las claves de la API de Operai y Google como variable de entorno

import os
from getpass import getpass

os.environ["OPENAI_API_KEY"] = getpass('Enter OpenAI API Key:')
os.environ["GOOGLE_API_KEY"] = getpass('Enter Google API Key:')

Preparación de datos de evaluación y obteniendo salidas de Gemini

import mlflow
import openai
import os
import pandas as pd
from google import genai

Creación de datos de evaluación

En este paso, definimos un pequeño conjunto de datos de evaluación que contiene indicaciones objetivas junto con sus respuestas correctas de la verdad de tierra. Estas indicaciones abarcan temas como ciencia, salud, desarrollo web y programación. Este formato estructurado nos permite comparar objetivamente las respuestas generadas por Gemini con las respuestas correctas conocidas utilizando varias métricas de evaluación en MLFLOW.

eval_data = pd.DataFrame(
    {
        "inputs": [
            "Who developed the theory of general relativity?",
            "What are the primary functions of the liver in the human body?",
            "Explain what HTTP status code 404 means.",
            "What is the boiling point of water at sea level in Celsius?",
            "Name the largest planet in our solar system.",
            "What programming language is primarily used for developing iOS apps?",
        ],
        "ground_truth": [
            "Albert Einstein developed the theory of general relativity.",
            "The liver helps in detoxification, protein synthesis, and production of biochemicals necessary for digestion.",
            "HTTP 404 means 'Not Found' -- the server can't find the requested resource.",
            "The boiling point of water at sea level is 100 degrees Celsius.",
            "Jupiter is the largest planet in our solar system.",
            "Swift is the primary programming language used for iOS app development."
        ]
    }
)

eval_data

Obtener respuestas de Géminis

Este bloque de código define una función de ayuda gemini_completion () que envía un aviso al modelo Gemini 1.5 Flash utilizando el SDK AI Generativo de Google y devuelve la respuesta generada como texto sin formato. Luego aplicamos esta función a cada indicador en nuestro conjunto de datos de evaluación para generar las predicciones del modelo, almacenándolas en una nueva columna de “predicciones”. Estas predicciones se evaluarán más tarde contra las respuestas de la verdad del suelo.

client = genai.Client()
def gemini_completion(prompt: str) -> str:
    response = client.models.generate_content(
        model="gemini-1.5-flash",
        contents=prompt
    )
    return response.text.strip()

eval_data["predictions"] = eval_data["inputs"].apply(gemini_completion)
eval_data

Evaluación de salidas de Géminis con mlflow

En este paso, iniciamos una ejecución de MLFLOW para evaluar las respuestas generadas por el modelo Gemini con un conjunto de respuestas fácticas de verdad en tierra. Usamos el método mlflow.evaluate () con cuatro métricas livianas: respuesta_similaridad (midiendo la similitud semántica entre la salida del modelo y la verdad del suelo), Exact_match (verificar los partidos de palabra por palabra), estado latente (Tiempo de generación de respuesta de seguimiento), y token_count (Registro del número de tokens de salida).

Es importante tener en cuenta que el respuesta_similaridad métrica usa internamente GPT de Openai Modelo para juzgar la cercanía semántica entre respuestas, por lo que se requiere acceso a la API de Operai. Esta configuración proporciona una forma eficiente de evaluar las salidas de LLM sin depender de la lógica de evaluación personalizada. Los resultados de la evaluación final se imprimen y también se guardan en un archivo CSV para una inspección o visualización posterior.

mlflow.set_tracking_uri("mlruns")
mlflow.set_experiment("Gemini Simple Metrics Eval")

with mlflow.start_run():
    results = mlflow.evaluate(
        model_type="question-answering",
        data=eval_data,
        predictions="predictions",
        targets="ground_truth",
        extra_metrics=[
          mlflow.metrics.genai.answer_similarity(),
          mlflow.metrics.exact_match(),
          mlflow.metrics.latency(),
          mlflow.metrics.token_count()
      ]
    )
    print("Aggregated Metrics:")
    print(results.metrics)

    # Save detailed table
    results.tables["eval_results_table"].to_csv("gemini_eval_results.csv", index=False)

Para ver los resultados detallados de nuestra evaluación, cargamos el archivo CSV guardado en un marcado de datos y ajustamos la configuración de visualización para garantizar la visibilidad completa de cada respuesta. Esto nos permite inspeccionar las indicaciones individuales, las predicciones generadas por Gemini, las respuestas de la verdad del suelo y las puntuaciones métricas asociadas sin truncamiento, lo que es especialmente útil en entornos de cuadernos como Colab o Jupyter.

results = pd.read_csv('gemini_eval_results.csv')
pd.set_option('display.max_colwidth', None)
results

Mira el Códigos aquí. Todo el crédito por esta investigación va a los investigadores de este proyecto. Además, siéntete libre de seguirnos Gorjeo Y no olvides unirte a nuestro Subreddit de 100k+ ml y suscribirse a Nuestro boletín.


Soy un graduado de ingeniería civil (2022) de Jamia Millia Islamia, Nueva Delhi, y tengo un gran interés en la ciencia de datos, especialmente las redes neuronales y su aplicación en varias áreas.