次の方法で共有


評価データセット

体系的な GenAI アプリ評価用にキュレーションされたテスト データ。 入力、オプションの正解データ (期待値)、およびメタデータが含まれます。

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

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

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 スコアラーによって使用される予約済みキーがいくつか含まれています: guidelinesexpected_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

eval データセット ui

MLflow Evaluation Dataset SDK リファレンス

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

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

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

    pip install --upgrade "mlflow[databricks]>=3.1.0" "databricks-connect>=16.1"
    
  2. 環境のセットアップのクイックスタートに従って、MLflow 実験を作成します。

  3. 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)

次のステップ

操作方法ガイド

概念