MLflow — это мощная платформа с открытым исходным кодом для управления жизненным циклом машинного обучения. Традиционно её используют для отслеживания экспериментов с моделями, регистрации параметров и управления развёртыванием. Недавно MLflow внедрила поддержку для оценки больших языковых моделей (LLM).
В этом руководстве мы рассмотрим, как использовать MLflow для оценки производительности LLM (в нашем случае — модели Google Gemini) на наборе запросов, основанных на фактах. Мы сгенерируем ответы на запросы, основанные на фактах, используя Gemini, и оценим их качество с помощью различных метрик, поддерживаемых непосредственно MLflow.
Настройка зависимостей
Для этого руководства мы будем использовать API OpenAI и Gemini. Встроенные метрики генеративного искусственного интеллекта MLflow в настоящее время полагаются на модели OpenAI (например, GPT-4) для оценки таких показателей, как сходство ответов или достоверность. Поэтому вам потребуется ключ API OpenAI. Вы можете получить:
* Ваш ключ API OpenAI с сайта https://platform.openai.com/settings/organization/api-keys.
* Ваш ключ API Google Gemini с сайта https://ai.google.dev/gemini-api/docs.
Установка библиотек
«`
pip install mlflow openai pandas google-genai
«`
Установка ключей API OpenAI и Google в качестве переменных среды
«`
import os
from getpass import getpass
os.environ[«OPENAIAPIKEY»] = getpass(‘Введите ключ API OpenAI:’)
os.environ[«GOOGLEAPIKEY»] = getpass(‘Введите ключ API Google:’)
«`
Подготовка данных для оценки и получение выходных данных от Gemini
«`
import mlflow
import openai
import os
import pandas as pd
from google import genai
«`
Создание данных для оценки
На этом этапе мы определяем небольшой набор данных для оценки, содержащий фактические запросы вместе с правильными ответами, соответствующими действительности. Эти запросы охватывают такие темы, как наука, здоровье, веб-разработка и программирование. Такой структурированный формат позволяет нам объективно сравнивать ответы, сгенерированные Gemini, с известными правильными ответами, используя различные метрики оценки в MLflow.
«`
eval_data = pd.DataFrame(
{
«inputs»: [
«Кто разработал теорию общей теории относительности?»,
«Каковы основные функции печени в организме человека?»,
«Объясните, что означает код состояния HTTP 404.»,
«Какова температура кипения воды на уровне моря в градусах Цельсия?»,
«Назовите самую большую планету в нашей Солнечной системе.»,
«Какой язык программирования в основном используется для разработки приложений iOS?»,
],
«ground_truth»: [
«Альберт Эйнштейн разработал теорию общей теории относительности.»,
«Печень помогает в детоксикации, синтезе белков и производстве биохимических веществ, необходимых для пищеварения.»,
«HTTP 404 означает ‘Не найдено’ — сервер не может найти запрошенный ресурс.»,
«Температура кипения воды на уровне моря составляет 100 градусов Цельсия.»,
«Юпитер — самая большая планета в нашей Солнечной системе.»,
«Swift — основной язык программирования, используемый для разработки приложений iOS.»
]
}
)
eval_data
«`
Получение ответов Gemini
Этот блок кода определяет вспомогательную функцию gemini_completion(), которая отправляет запрос в модель Gemini 1.5 Flash с помощью Google Generative AI SDK и возвращает сгенерированный ответ в виде обычного текста. Затем мы применяем эту функцию к каждому запросу в нашем наборе данных для оценки, чтобы сгенерировать прогнозы модели, сохраняя их в новом столбце «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()
evaldata[«predictions»] = evaldata[«inputs»].apply(gemini_completion)
eval_data
«`
Оценка выходных данных Gemini с помощью MLflow
На этом этапе мы инициируем запуск MLflow для оценки ответов, сгенерированных моделью Gemini, по сравнению с набором фактических ответов, соответствующих действительности. Мы используем метод mlflow.evaluate() с четырьмя лёгкими метриками: answersimilarity (измерение семантического сходства между выводом модели и истиной), exactmatch (проверка на совпадение слов в точности), latency (отслеживание времени генерации ответа) и token_count (регистрация количества выходных токенов).
Важно отметить, что метрика answer_similarity внутренне использует модель GPT от OpenAI для оценки семантической близости между ответами, поэтому требуется доступ к API OpenAI. Такая настройка обеспечивает эффективный способ оценки выходных данных LLM без использования специальной логики оценки. Окончательные результаты оценки выводятся на экран и сохраняются в CSV-файл для последующего изучения или визуализации.
«`
mlflow.settrackinguri(«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[«evalresultstable»].tocsv(«geminieval_results.csv», index=False)
«`
Просмотр подробных результатов оценки
Чтобы просмотреть подробные результаты нашей оценки, мы загружаем сохранённый CSV-файл в DataFrame и настраиваем параметры отображения, чтобы обеспечить полную видимость каждого ответа. Это позволяет нам проверять отдельные запросы, прогнозы, сгенерированные Gemini, правильные ответы и связанные оценки метрик без усечения, что особенно полезно в таких средах, как Colab или Jupyter.
«`
results = pd.readcsv(‘geminieval_results.csv’)
pd.setoption(‘display.maxcolwidth’, None)
results
«`
1. Какие ключевые функции MLflow используются для оценки больших языковых моделей?
В статье описывается использование MLflow для оценки производительности больших языковых моделей (LLM), в частности модели Google Gemini. Для этого применяются встроенные метрики генеративного искусственного интеллекта MLflow, такие как answersimilarity (измерение семантического сходства между выводом модели и истиной), exactmatch (проверка на совпадение слов в точности), latency (отслеживание времени генерации ответа) и token_count (регистрация количества выходных токенов).
2. Какие шаги необходимо выполнить для настройки зависимостей при работе с MLflow и моделями Gemini?
Для работы с MLflow и моделью Gemini необходимо выполнить несколько шагов:
* Получить ключ API OpenAI с сайта https://platform.openai.com/settings/organization/api-keys.
* Получить ключ API Google Gemini с сайта https://ai.google.dev/gemini-api/docs.
* Установить библиотеки MLflow, OpenAI, Pandas и Google-genai с помощью команды pip install mlflow openai pandas google-genai.
* Установить ключи API OpenAI и Google в качестве переменных среды с помощью кода, приведённого в статье.
3. Какие метрики используются для оценки качества ответов модели Gemini в статье?
Для оценки качества ответов модели Gemini в статье используются следующие метрики:
* answer_similarity — измерение семантического сходства между выводом модели и истиной;
* exact_match — проверка на совпадение слов в точности;
* latency — отслеживание времени генерации ответа;
* token_count — регистрация количества выходных токенов.
4. Какие данные используются для оценки модели Gemini в статье?
Для оценки модели Gemini в статье используется набор данных, содержащий фактические запросы вместе с правильными ответами, соответствующими действительности. Эти запросы охватывают такие темы, как наука, здоровье, веб-разработка и программирование. Такой структурированный формат позволяет объективно сравнивать ответы, сгенерированные Gemini, с известными правильными ответами.
5. Как можно визуализировать результаты оценки модели Gemini?
Результаты оценки модели Gemini можно визуализировать, сохранив их в CSV-файл и загрузив в DataFrame с помощью Pandas. Затем можно настроить параметры отображения, чтобы обеспечить полную видимость каждого ответа. Это позволяет проверять отдельные запросы, прогнозы, сгенерированные Gemini, правильные ответы и связанные оценки метрик без усечения.