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 необходим. Получите свои ключи:
- API-ключ OpenAI — OpenAI API Keys
- API-ключ Google Gemini — Google Gemini API Docs
Установка необходимых библиотек
Установите библиотеки, выполнив следующую команду:
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 — это шаг к более объективной и эффективной оценке, что в конечном итоге приведет к лучшим результатам в вашем бизнесе.