メインコンテンツまでスキップ

評価データセット

生成AIアプリを体系的に評価するための厳選されたテストデータ。入力、オプションのグラウンド トゥルース (期待値)、およびメタデータが含まれます。

評価データを提供する2つの方法

評価データは、次の 2 つの方法で MLflow 評価ハーネスに提供できます。

1. MLflow 評価データセット (推奨)

Unity Catalog に保存された専用のデータセットには、次のものが含まれています。

  • バージョニング : データセットの経時的な変化の追跡
  • リネージ : データセットレコードをその入力にリンクし (ソース トレース) し、その使用状況を追跡します (評価実行とアプリのバージョン)
  • コラボレーション : チーム間でデータセットを共有する
  • 統合 :MLflow UIとAPIsによるシームレスなワークフロー
  • ガバナンス : Unity Catalog のセキュリティとアクセス制御
  • トレース変換 :UIやSDKを使用して、本番運用トレースを評価データセットレコードに簡単に変換できます
  • 視覚化 : MLflow UI で直接データセットの内容を検査および編集します

使用する場合 :本番運用 評価ワークフロー、回帰テスト、データセット管理機能が必要な場合

2. 任意のデータセット(クイックプロトタイピング)

次のような既存のデータ構造を使用します。

  • 辞書一覧
  • Pandas DataFrame
  • Spark DataFrame

使用する場合 : Quick エクスペリメント、プロトタイピング、またはこれらの形式の評価データが既にある場合。

評価データセット スキーマ

評価データセットは、 MLflowの評価データセットの抽象化を使用するか、データを直接 mlflow.genai.evaluate()に渡すかにかかわらず、一貫した構造に従います。

コアフィールド

次のフィールドは、評価データセットの抽象化と、データを直接渡す場合の両方で使用されます。

データ型

説明

必須

inputs

dict[Any, Any]

アプリの入力 (ユーザーの質問、コンテキストなど) は、JSON 形式で選択可能な dictとして保存されます。

Yes

expectations

dict[Str, Any]

グラウンド トゥルース ラベルは、JSON シリアル化可能な dict.

オプション

expectations 予約済みキー

expectations には、事前構築済みの LLM スコアラーによって使用されるいくつかの予約済みキー ( guidelinesexpected_facts、および expected_responseがあります。

フィールド

使用者

説明

expected_facts

correctness 裁判官

表示すべき事実のリスト

expected_response

is_correct スコアラー

正確または類似の期待出力

guidelines

meets_guidelines スコアラー

従うべき自然言語のルール

expected_retrieved_context

document_recall スコアラー

取得する必要があるドキュメント

追加フィールド

次のフィールドは、Evaluation データセット 抽象化によってリネージとバージョン履歴を追跡するために使用されます。

データ型

説明

必須

dataset_record_id

string

レコードの一意の識別子。

指定しない場合は自動的に設定されます。

create_time

timestamp

レコードが作成された時刻。

挿入時や更新時に自動的に設定されます。

created_by

string

レコードを作成したユーザー。

挿入時や更新時に自動的に設定されます。

last_update_time

timestamp

レコードが最後に更新された時刻。

挿入時や更新時に自動的に設定されます。

last_updated_by

string

レコードを最後に更新したユーザー。

挿入時や更新時に自動的に設定されます。

source

struct

データセットレコードのソース(以下を参照)。

オプション

tags

dict[str, 任意]

データセット レコードのキーと値のタグ。

オプション

ソースフィールド

source フィールドは、データセット レコードの取得元を追跡します。各レコードは、次の 1 つの ソースタイプのみを持つことができます。

1. Human ソース - Record created manually by a person

Python
{
"source": {
"human": {
"user_name": "jane.doe@company.com"
}
}
}
  • user_name (str):レコードを作成したユーザー

2. ドキュメントソース - ドキュメントから合成されたレコード

Python
{
"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. Trace ソース - 本番運用トレースから作成されたレコード

Python
{
"source": {
"trace": {
"trace_id": "tr-abc123def456"
}
}
}
  • trace_id (str): ソーストレースの一意の識別子

MLflow 評価データセット UI

eval データセット UI

MLflow 評価データセット SDK リファレンス

評価データセット SDK は、生成AI アプリの評価用のデータセットを作成、管理、使用するためのプログラムによるアクセスを提供します。

例を実行するための前提条件

  1. MLflow と必要なパッケージをインストールする

    Bash
    pip install --upgrade "mlflow[databricks]>=3.1.0" "databricks-connect>=16.1"
  2. MLflow エクスペリメントを作成するには、環境のセットアップに関するクイックスタートに従ってください。

  3. CREATE TABLE Unity Catalog スキーマのアクセス許可

create_dataset()

Unity Catalog で新しい評価データセットを作成します。

Python
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 Catalog テーブル名
  • experiment_id (str または list、オプション): データセットに関連付けるエクスペリメント ID

戻り値: EvaluationDataset object

get_dataset()

既存の評価データセットを Unity Catalog から読み込みます。

Python
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 Catalog テーブル名

戻り値: EvaluationDataset object

delete_dataset()

Unity Catalog から評価データセットを削除します。

危険

このメソッドを呼び出すと、データセットが完全に削除されます。

Python
import mlflow.genai.datasets

# Delete a dataset
mlflow.genai.datasets.delete_dataset(
uc_table_name="catalog.schema.evaluation_dataset"
)

パラメーター:

  • uc_table_name (str): 削除するデータセットの Unity Catalog テーブル名

収益: 何一つ

EvaluationDataset クラス

EvaluationDataset クラスは、評価データセットと対話し、評価データセットを変更するためのメソッドを提供します。

プロパティ

Python
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().

Python
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 (リスト[dict]、PD。DataFrame、または PySpark.sql。DataFrame): マージするレコード

収益: 更新された EvaluationDataset オブジェクト

to_df()

データセットを Pandas DataFrame に変換して、ローカル分析を行います。

Python
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.データフレーム

一般的なパターン

本番運用 traces からデータセットを作成

Python
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)

既存のデータセットを更新する

Python
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)

次のステップ

ハウツーガイド

概念