Itinai.com compare offices of it companies blur details image ded90168 62a3 4093 b542 0c63f5590941 0

Введение в MLflow для оценки LLM

Itinai.com compare offices of it companies blur details image ded90168 62a3 4093 b542 0c63f5590941 0

Getting Started with MLFlow for LLM Evaluation

MLflow — это мощная платформа с открытым исходным кодом для управления жизненным циклом машинного обучения. Хотя она традиционно используется для отслеживания экспериментов с моделями, регистрации параметров и управления развертываниями, MLflow недавно добавил поддержку оценки больших языковых моделей (LLM).

Практическое применение MLflow для оценки LLM

В этой статье мы рассмотрим, как использовать MLflow для оценки производительности языковой модели, в нашем случае — модели Google Gemini, на наборе фактических запросов. Мы сгенерируем ответы на фактические запросы с помощью Gemini и оценим их качество с использованием различных метрик, поддерживаемых MLflow.

Подготовка к работе

Для начала нам понадобятся API-ключи OpenAI и Google Gemini. MLflow использует модели OpenAI для оценки, поэтому доступ к API OpenAI необходим. Получите свои ключи:

Установка необходимых библиотек

Установите библиотеки, выполнив следующую команду:

pip install mlflow openai pandas google-genai

Настройка переменных окружения

Используйте следующий код для настройки переменных окружения:

import os
from getpass import getpass

os.environ["OPENAI_API_KEY"] = getpass('Введите API-ключ OpenAI:')
os.environ["GOOGLE_API_KEY"] = getpass('Введите API-ключ Google:')

Подготовка данных для оценки

На этом этапе мы определим небольшой набор данных для оценки, содержащий фактические запросы и их правильные ответы. Эти запросы охватывают темы науки, здоровья, веб-разработки и программирования. Структурированный формат позволяет объективно сравнить ответы, сгенерированные Gemini, с известными правильными ответами.

eval_data = pd.DataFrame(
    {
        "inputs": [
            "Кто разработал теорию относительности?",
            "Каковы основные функции печени в человеческом организме?",
            "Объясните, что означает HTTP статус код 404.",
            "Какова температура кипения воды на уровне моря в Цельсиях?",
            "Назовите крупнейшую планету в нашей солнечной системе.",
            "Какой язык программирования используется для разработки приложений iOS?",
        ],
        "ground_truth": [
            "Альберт Эйнштейн разработал теорию относительности.",
            "Печень помогает в детоксикации, синтезе белков и производстве биохимикатов, необходимых для пищеварения.",
            "HTTP 404 означает 'Не найдено' — сервер не может найти запрашиваемый ресурс.",
            "Температура кипения воды на уровне моря составляет 100 градусов Цельсия.",
            "Юпитер — крупнейшая планета в нашей солнечной системе.",
            "Swift — основной язык программирования, используемый для разработки приложений iOS."
        ]
    }
)

Получение ответов от Gemini

Следующий код определяет вспомогательную функцию gemini_completion(), которая отправляет запрос к модели Gemini 1.5 Flash и возвращает сгенерированный ответ в виде текста. Мы применяем эту функцию к каждому запросу в нашем наборе данных для оценки и сохраняем предсказания в новом столбце «predictions». Эти предсказания позже будут оцениваться по сравнению с правильными ответами.

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)

Оценка выходных данных Gemini с помощью MLflow

На этом этапе мы инициируем запуск MLflow для оценки ответов, сгенерированных моделью Gemini, по сравнению с набором фактических ответов. Мы используем метод mlflow.evaluate() с четырьмя легковесными метриками: answer_similarity (измерение семантического сходства между выводом модели и правильным ответом), exact_match (проверка на точное совпадение), latency (отслеживание времени генерации ответа) и token_count (логирование количества выходных токенов).

Важно отметить, что метрика answer_similarity использует модель OpenAI для оценки семантической близости ответов, поэтому доступ к API OpenAI необходим. Этот подход позволяет эффективно оценивать выходные данные LLM без необходимости в пользовательской логике оценки. Финальные результаты оценки выводятся и сохраняются в CSV-файл для дальнейшего анализа или визуализации.

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("Сводные метрики:")
    print(results.metrics)

    # Сохранение детализированной таблицы
    results.tables["eval_results_table"].to_csv("gemini_eval_results.csv", index=False)

Просмотр результатов оценки

Чтобы просмотреть детализированные результаты нашей оценки, мы загружаем сохраненный CSV-файл в DataFrame и настраиваем параметры отображения, чтобы обеспечить полную видимость каждого ответа. Это позволяет нам исследовать отдельные запросы, предсказания, сгенерированные Gemini, правильные ответы и связанные с ними метрики без обрезки, что особенно полезно в таких средах, как Colab или Jupyter.

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

Используйте этот подход для оценки LLM в своих проектах. Это не только упростит вашу работу, но и повысит качество моделей, которые вы развертываете. Применение MLflow для оценки LLM — это шаг к более объективной и эффективной оценке, что в конечном итоге приведет к лучшим результатам в вашем бизнесе.

Новости в сфере искусственного интеллекта