MLflow 評価データセットの構築
このガイドでは、生成AI アプリケーションの品質を体系的にテストおよび改善するために、 評価データセット を作成するさまざまな方法を示します。データセットを構築するための複数のアプローチを学習し、アプリの反復処理で一貫性と再現性のある評価を可能にします。
評価データセットは、次のことに役立ちます。
- 既知の問題の修正 :本番運用から問題のある例を追加して、修正を繰り返しテストする
- リグレッションの防止 : 常に正しく機能する必要がある例の "ゴールデン セット" を作成します
- バージョンの比較 : 同じデータに対して、異なるプロンプト、モデル、またはアプリのロジックをテストします
- 特定の機能をターゲットにする : 安全性、ドメイン知識、またはエッジケースに特化したデータセットを構築します
厳選された 1 つのデータセットから始めて、テストのニーズが拡大するにつれて複数のデータセットに拡張します。
学習内容:
- 本番運用 トレースからデータセットを作成し、実際のシナリオをテストできます。
- データセットをゼロから構築し、特定の機能を対象にしたテストを実施
- 既存の評価データをCSV、JSON、またはその他の形式からインポートします
- 合成テストデータを生成してカバレッジを拡大
- ドメイン専門家のフィードバックからグラウンドトゥルースラベルを追加
このガイドでは、バージョン履歴とリネージ追跡を提供する MLflow で管理される評価データセットを使用する方法について説明します。 ラピッド プロトタイピングでは、評価データセットを Python ディクショナリまたは MLflow で管理されるデータセットと同じスキーマに従う Pandas/Spark データフレームとして提供することもできます。評価データセット スキーマの詳細については、 評価データセットのリファレンス ページを参照してください。
前提 条件
-
MLflow と必要なパッケージをインストールする
Bashpip install --upgrade "mlflow[databricks]>=3.1.0"
-
MLflow エクスペリメントを作成するには、環境のセットアップに関するクイックスタートに従ってください。
-
評価データセットを作成するための
CREATE TABLE
アクセス許可を持つ Unity Catalog スキーマへのアクセス。
Databricks 試用版アカウントを使用している場合は、Unity Catalog スキーマ workspace.default
に対する CREATE TABLE アクセス許可があります。
データセットを構築するためのアプローチ
MLflow には、ニーズに合わせた評価データセットを構築するための柔軟な方法がいくつか用意されています。
- 既存のトレースからデータセットを作成する: MLflow トレースに既にキャプチャされている豊富なデータを活用します。
- データセットのインポートまたはデータセットの最初からの構築: 特定の入力例と (オプションで) 期待される出力を手動で定義します。
- 評価データセットに合成データを含める: 多様な入力を自動的に生成します。
現在のデータソースと評価目標に最も適した方法または方法の組み合わせを選択します。
ステップ 1: データセットを作成する
どの方法を選択するにしても、まず、MLflow で管理される評価データセットを作成する必要があります。このアプローチにより、データセットの経時的な変更を追跡し、個々の評価結果をこのデータセットにリンクできます。
- Using the UI
- Using the SDK
次の記録に従って、UI を使用して評価データセットを作成します
評価データセットをプログラムで作成するには、トレースを検索し、それらをデータセットに追加します。
import mlflow
import mlflow.genai.datasets
import time
from databricks.connect import DatabricksSession
# 0. If you are using a local development environment, connect to Serverless Spark which powers MLflow's evaluation dataset service
spark = DatabricksSession.builder.remote(serverless=True).getOrCreate()
# 1. Create an evaluation dataset
# Replace with a Unity Catalog schema where you have CREATE TABLE permission
uc_schema = "workspace.default"
# This table will be created in the above UC schema
evaluation_dataset_table_name = "email_generation_eval"
eval_dataset = mlflow.genai.datasets.create_dataset(
uc_table_name=f"{uc_schema}.{evaluation_dataset_table_name}",
)
print(f"Created evaluation dataset: {uc_schema}.{evaluation_dataset_table_name}")
ステップ 2: データセットにレコードを追加する
アプローチ 1: 既存のトレースから作成する
関連する評価データセットを構築する最も効果的な方法の 1 つは、MLflow Tracing によってキャプチャされたアプリケーションの過去のインタラクションから直接例をキュレーションすることです。トレースからデータセットを作成するには、 MLflow モニタリング UI または SDKを使用します。
- Using the UI
- Using the SDK
以下の録画に従って、UIを使用して既存の本番運用トレースをデータセットに追加します
プログラムでトレースを検索し、データセットに追加します。search_traces()
でフィルターを使用する方法の詳細については、クエリトレースのリファレンスページを参照してください。
import mlflow
# 2. Search for traces
traces = mlflow.search_traces(
filter_string="attributes.status = 'OK'",
order_by=["attributes.timestamp_ms DESC"]
max_results=10
)
print(f"Found {len(traces)} successful traces")
# 3. Add the traces to the evaluation dataset
eval_dataset.merge_records(traces)
print(f"Added {len(traces)} records to evaluation dataset")
# Preview the dataset
df = eval_dataset.to_df()
print(f"\nDataset preview:")
print(f"Total records: {len(df)}")
print("\nSample record:")
sample = df.iloc[0]
print(f"Inputs: {sample['inputs']}")
アプローチ 2: ドメイン エキスパート ラベルから作成する
MLflow ラベル付けセッションでキャプチャされたドメイン エキスパートからのフィードバックを活用して、評価データセットをグラウンド トゥルース ラベルで強化します。これらの手順を実行する前に、 ドメインの専門家フィードバックの収集 ガイドに従って、ラベル付けセッションを作成してください。
import mlflow.genai.labeling as labeling
# Get a labeling sessions
all_sessions = labeling.get_labeling_sessions()
print(f"Found {len(all_sessions)} sessions")
for session in all_sessions:
print(f"- {session.name} (ID: {session.labeling_session_id})")
print(f" Assigned users: {session.assigned_users}")
# Sync from the labeling session to the dataset
all_sessions[0].sync(dataset_name=f"{uc_schema}.{evaluation_dataset_table_name}")
アプローチ 3: ゼロからビルドするか、既存のものをインポートする
既存のデータセットをインポートしたり、例を最初からキュレーションしたりできます。データは 、評価データセットのスキーマと一致する (または一致するように変換される) 必要があります。
# Define comprehensive test cases
evaluation_examples = [
{
"inputs": {"question": "What is MLflow?"},
"expected": {
"expected_response": "MLflow is an open source platform for managing the end-to-end machine learning lifecycle.",
"expected_facts": [
"open source platform",
"manages ML lifecycle",
"experiment tracking",
"model deployment"
]
},
},
]
eval_dataset.merge_records(evaluation_examples)
アプローチ 4: 合成データを使用したシード
合成データを生成すると、多様なインプットを迅速に作成し、エッジケースをカバーすることで、テスト作業を拡大できます。詳細については、 評価データセットの合成 リファレンスを参照してください。
次のステップ
これらの推奨アクションとチュートリアルで旅を続けてください。
-
アプリの評価 - 新しく作成したデータセットを評価に使用します
-
カスタムスコアラーの作成 - グラウンドトゥルースに照らして評価するスコアラーを構築します
リファレンスガイド
このガイドで説明されている概念と機能の詳細なドキュメントをご覧ください。
- Evaluation データセット - Deep dive into dataset structure and capabilities
- 評価用ハーネス -
mlflow.genai.evaluate()
データセットの使用方法を学習 - トレーシングデータモデル - 評価データセットのソースとしてのトレースを理解する