体系的な GenAI アプリ評価用にキュレーションされたテスト データ。 入力、オプションの正解データ (期待値)、およびメタデータが含まれます。
評価データを提供する 2 つの方法
MLflow 評価ハーネスには、次の 2 つの方法で評価データを提供できます。
1. MLflow 評価データセット (推奨)
Unity Catalog に格納されている専用のデータセットには、以下の特徴があります。
- バージョン管理: データセットの変更を経時的に追跡する
- 系列: データセット レコードを入力データ (ソース トレース) にリンクし、その使用状況 (評価の実行とアプリバージョン) を追跡します。
- コラボレーション: チーム間でデータセットを共有する
- 統合: MLflow UI と API を使用したシームレスなワークフロー
- ガバナンス: Unity カタログのセキュリティとアクセス制御
- トレース変換: UI または SDK を使用して運用トレースを評価データセット レコードに簡単に変換する
- 視覚化: MLflow UI でデータセットの内容を直接検査および編集する
使用する場合: 運用評価ワークフロー、回帰テスト、データセット管理機能が必要な場合。
2. 任意のデータセット (クイック プロトタイプ作成)
次のような既存のデータ構造を使用します。
- 辞書の一覧
- Pandas DataFrame
- Spark DataFrame
使用する場合: クイック実験、プロトタイプ作成、またはこれらの形式の評価データが既にある場合。
評価データセット スキーマ
評価データセットは、MLflow の評価データセットの抽象化を使用するか、データを mlflow.genai.evaluate()
に直接渡すかに関係なく、一貫した構造に従います。
コア フィールド
評価データセットの抽象化またはデータを直接渡す場合の両方で、次のフィールドが使用されます。
コラム | データ型 | 説明 | 必須 |
---|---|---|---|
inputs |
dict[Any, Any] |
アプリの入力 (ユーザーの質問、コンテキストなど) は、JSON seralizable dict として格納されます。 |
イエス |
expectations |
dict[Str, Any] |
基準真実ラベルは、JSONシリアライズ可能dict として格納されます。 |
オプション |
expectations
予約キー
expectations
には、事前構築済みの LLM スコアラーによって使用される予約済みキーがいくつか含まれています: guidelines
、 expected_facts
、および expected_response
。
フィールド | 使用者 | 説明 |
---|---|---|
expected_facts |
correctness 裁判官 |
表示する必要があるファクトの一覧 |
expected_response |
is_correct スコアラー |
正確または類似の予想される出力 |
guidelines |
meets_guidelines スコアラー |
自然言語に従うべきルール |
expected_retrieved_context |
document_recall スコアラー |
取得する必要があるドキュメント |
追加フィールド
評価データセットの抽象化では、系列とバージョン履歴を追跡するために、次のフィールドが使用されます。
コラム | データ型 | 説明 | 必須 |
---|---|---|---|
dataset_record_id |
ひも | レコードの一意識別子。 | 指定されていない場合は自動的に設定されます。 |
create_time |
タイムスタンプ(時刻印) | レコードが作成された時刻。 | 挿入または更新時に自動的に設定されます。 |
created_by |
ひも | レコードを作成したユーザー。 | 挿入または更新時に自動的に設定されます。 |
last_update_time |
タイムスタンプ(時刻印) | レコードが最後に更新された時刻。 | 挿入または更新時に自動的に設定されます。 |
last_updated_by |
ひも | レコードを最後に更新したユーザー。 | 挿入または更新時に自動的に設定されます。 |
source |
構造体 | データセット レコードのソース (下記参照)。 | オプション |
tags |
dict[str, Any] | データセット レコードのキー値タグ。 | オプション |
ソース フィールド
source
フィールドは、データセット レコードの取得元を追跡します。 各レコードのソースの種類は 1 つだけ です。
1. 人間のソース - 人が手動で作成した記録
{
"source": {
"human": {
"user_name": "jane.doe@company.com"
}
}
}
user_name
(str): レコードを作成したユーザー
2. ドキュメント ソース - ドキュメント から合成されたレコード
{
"source": {
"document": {
"doc_uri": "s3://bucket/docs/product-manual.pdf",
"content": "The first 500 chars of the document..." # Optional
}
}
}
doc_uri
(str): ソース ドキュメントへの URI/パスcontent
(str、省略可能): ドキュメントからの抜粋または完全なコンテンツ
3. トレース ソース - 実稼働トレースから作成されたレコード
{
"source": {
"trace": {
"trace_id": "tr-abc123def456"
}
}
}
trace_id
(str): トレース元のユニーク識別子
MLflow 評価データセット UI
MLflow Evaluation Dataset SDK リファレンス
評価データセット SDK は、GenAI アプリの評価にデータセットを作成、管理、および使用するためのプログラムによるアクセスを提供します。
例を実行するための前提条件
MLflow と必要なパッケージをインストールする
pip install --upgrade "mlflow[databricks]>=3.1.0" "databricks-connect>=16.1"
環境のセットアップのクイックスタートに従って、MLflow 実験を作成します。
CREATE TABLE
Unity Catalog スキーマのアクセス許可
create_dataset()
Unity カタログで新しい評価データセットを作成します。
import mlflow.genai.datasets
# Create a dataset with auto-inferred experiment
dataset = mlflow.genai.datasets.create_dataset(
uc_table_name="catalog.schema.evaluation_dataset"
)
# Create a dataset associated with specific experiment(s)
dataset = mlflow.genai.datasets.create_dataset(
uc_table_name="catalog.schema.evaluation_dataset",
experiment_id="1213947645336731"
)
# Associate with multiple experiments
dataset = mlflow.genai.datasets.create_dataset(
uc_table_name="catalog.schema.evaluation_dataset",
experiment_id=["1213947645336731", "3231394764336731"]
)
パラメーター:
uc_table_name
(str): データセットの Unity カタログ テーブル名experiment_id
(str または list、省略可能): データセットに関連付ける実験 ID
戻り値:EvaluationDataset
オブジェクト
get_dataset()
Unity カタログから既存の評価データセットを読み込みます。
import mlflow.genai.datasets
# Load existing dataset
dataset = mlflow.genai.datasets.get_dataset(
uc_table_name="catalog.schema.evaluation_dataset"
)
# Access dataset properties
print(f"Dataset ID: {dataset.dataset_id}")
print(f"Created by: {dataset.created_by}")
print(f"Last updated: {dataset.last_update_time}")
パラメーター:
uc_table_name
(str): データセットの Unity カタログ テーブル名
戻り値:EvaluationDataset
オブジェクト
delete_dataset()
Unity カタログから評価データセットを削除します。
:::danger このメソッドを利用すると、データセットが完全に削除されます。 :::
import mlflow.genai.datasets
# Delete a dataset
mlflow.genai.datasets.delete_dataset(
uc_table_name="catalog.schema.evaluation_dataset"
)
パラメーター:
uc_table_name
(str): 削除するデータセットの Unity カタログ テーブル名
収益: 何一つ
EvaluationDataset
クラス
EvaluationDataset
クラスには、評価データセットを操作および変更するためのメソッドが用意されています。
特性
import mlflow.genai.datasets
dataset = mlflow.genai.datasets.get_dataset("catalog.schema.eval_dataset")
# Access dataset metadata
dataset_id = dataset.dataset_id # Unique identifier
name = dataset.name # UC table name
schema = dataset.schema # Dataset schema
profile = dataset.profile # Summary statistics
source = dataset.source # Source information
source_type = dataset.source_type # Source type (e.g., "databricks-uc-table")
digest = dataset.digest # Hash of the dataset
# Access audit information
created_by = dataset.created_by # Creator user
create_time = dataset.create_time # Creation timestamp
last_updated_by = dataset.last_updated_by # Last updater
last_update_time = dataset.last_update_time # Last update timestamp
merge_records()
データセット内のレコードを追加または更新します。 データセット レコードを直接渡すか、MLflow trace_idsの一覧を渡すか、 mlflow.search_traces()
の結果を渡します。
import mlflow.genai.datasets
import pandas as pd
dataset = mlflow.genai.datasets.get_dataset("catalog.schema.eval_dataset")
# Merge from list of dictionaries
records = [
{
"inputs": {"question": "What is MLflow?"},
"expectations": {
"expected_facts": ["open-source platform", "ML lifecycle"],
"guidelines": "Response should be concise and technical"
}
},
{
"inputs": {"question": "How to track experiments?"},
"expectations": {
"expected_response": "Use mlflow.start_run() to track experiments..."
}
}
]
dataset = dataset.merge_records(records)
# Merge from Pandas DataFrame
df = pd.DataFrame(records)
dataset = dataset.merge_records(df)
# Merge from Spark DataFrame
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
spark_df = spark.createDataFrame(records)
dataset = dataset.merge_records(spark_df)
# Create from existing traces
traces = mlflow.search_traces()
dataset.merge_records(traces)
パラメーター:
records
(list[dict], pd.DataFrame、または pyspark.sql.DataFrame): マージするレコード
返却値: 更新されたEvaluationDataset
オブジェクト
to_df()
ローカル分析のためにデータセットを Pandas DataFrame に変換します。
import mlflow.genai.datasets
dataset = mlflow.genai.datasets.get_dataset("catalog.schema.eval_dataset")
# Convert to DataFrame
df = dataset.to_df()
# Analyze the data
print(f"Total records: {len(df)}")
print(f"Columns: {df.columns.tolist()}")
戻り値: pd.DataFrame
一般的なパターン
運用トレースからデータセットを作成する
import mlflow
import mlflow.genai.datasets
import pandas as pd
# Search for production traces
traces = mlflow.search_traces(
experiment_names=["production"],
filter_string="attributes.feedback_score > 0.8",
max_results=100
)
# Create dataset from traces
dataset = mlflow.genai.datasets.create_dataset(
uc_table_name="catalog.schema.production_golden_set"
)
dataset = dataset.merge_records(records)
既存のデータセットを更新する
import mlflow.genai.datasets
import pandas as pd
# Load existing dataset
dataset = mlflow.genai.datasets.get_dataset("catalog.schema.eval_dataset")
# Add new test cases
new_cases = [
{
"inputs": {"question": "What are MLflow models?"},
"expectations": {
"expected_facts": ["model packaging", "deployment", "registry"],
"min_response_length": 100
}
}
]
# Merge new cases
dataset = dataset.merge_records(new_cases)
次のステップ
操作方法ガイド
- 評価データセットの構築 - ステップ バイ ステップのデータセットの作成
- アプリを評価する - 評価にデータセットを使用する
概念
- Evaluation Harness - データセットの使用方法
- 評価の実行 - データセットの評価の結果
- スコアラー - データセットに適用されるメトリック