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

AI Searchリランカーのファインチューニング

備考

ベータ版

この機能はベータ版です。ワークスペース管理者は、 プレビュー ページからこの機能へのアクセスを制御できます。Databricksのプレビューを管理するを参照してください。

リランカーファインチューニングは、独自のインデックスデータでカスタムリランカーをトレーニングし、それをサービングすることで、コーパスに合わせて調整されたモデルがクエリーを再ランク付けできるようにします。Databricks は、トレーニングデータの生成、モデルのトレーニング、Unity Catalog への登録、および Model Serving Endpointへのデプロイを自動的に処理します。

この機能はマネージドインデックスのみをサポートしています。管理されたインデックスとは、Databricks がエンべディングをコンピュートする Delta Sync インデックスのことです。

要件

  • Databricks 管理の埋め込みを持つ Delta Sync AI Search インデックス。ダイレクトアクセスインデックスおよびセルフマネージド型埋め込みを持つインデックスはサポートされていません。AI Search Endpoint とインデックスの作成を参照してください。
  • この機能は、ワークスペースで有効にする必要があります。ワークスペース管理者は、 プレビュー ページからこの機能へのアクセスを制御できます。Databricks プレビューの管理を参照してください。
  • この機能は、次のリージョンでのみ使用できます:
    • us-west-2
    • us-west-1
    • us-east-1
    • us-east-2

権限

ファインチューニングジョブはユーザー自身としてランし、ユーザーに代わっていくつかの Unity Catalog オブジェクトを作成します。そのため、ジョブを起動する前に、以下のすべての Unity Catalog 権限を保持している必要があります。

  • SELECT インデックス上で、トレーニング用にドキュメントを読み取ります。
  • CREATE VOLUME およびトレーニングデータボリュームと中間テーブル用の、インデックスのカタログとスキーマに対する CREATE TABLE
  • CREATE MODEL ファインチューニングされたモデルが登録されているスキーマ上。これは、モデル名を設定した場合はそのモデル名のスキーマであり、設定していない場合はインデックス自体のスキーマです。

これらの特権のいずれかが不足している場合、Databricks はジョブを開始して後で失敗させるのではなく、アクセス許可エラーで要求を拒否します。

リランカーファインチューニングの仕組み

リランカーファインチューニングは、データに対して以下のパイプラインを実行します:

  1. トレーニングデータを生成します。インデックス上でファインチューニングジョブを起動します。Databricksは、ペイロードLogs、提供されたテーブル、またはデータから合成されたクエリーからサンプルを抽出します。次に、候補を取得し、LLMを使用して関連性を判断し、トレーニングデータを構築します。
  2. リランカーをトレーニングします。Databricks は、ベースとなるリランカーモデルから開始して、そのデータでリランカーをトレーニングします。
  3. 登録してデプロイします。結果は Unity Catalog にモデルとして登録され、自動的に作成された Model Serving Endpoint にデプロイされます。
  4. インデックスをクエリーします。Python SDKまたはREST APIを使用して、微調整されたリランカーでインデックスをクエリーします。

ファインチューニングジョブを起動

リランカーファインチューニングは、Catalog Explorer のベクトルインデックス詳細ページで利用できます。

  1. Catalog Explorer で、ベクトルインデックスに移動し、 概要 tabを開きます。 リランカーファインチューニング セクションまでスクロールします。

    ベクトルインデックスの「概要」tabにあるリランカーファインチューニングセクション

  2. [リランカーファインチューニングをラン] をクリックします。 以前にファインチューニングをランしたことがある場合、このボタンは [新しいファインチューニングをラン] と表示され、前回のランが完了した後に有効になります。

  3. リランカーファインチューニングを設定 ダイアログで、以下のフィールドを確認して入力します。

    リランカーファインチューニング設定ダイアログ

    • モデル名 : ファインチューニングされたモデルのUnity Catalog名。これは catalog.schema.reranker_<index> として事前入力されています。別の名前にする場合は編集してください。

    • トレーニングクエリーソース :トレーニングクエリーの取得元:

      • ペイロードLogsテーブルを使用 :インデックスでキャプチャされたクエリーLogsを使用します。ペイロードLogsテーブルが存在する場合、Databricksはこれをdefaultで選択します。
      • [インデックスドキュメントから生成] : Databricks はインデックスデータからクエリーを合成します。
      • Deltaテーブルから : [テーブルの選択] をクリックしてクエリーのDeltaテーブルを選択し、必要に応じて [クエリー列] を選択します。クエリー列のdefaultはquery_textです。
    • 詳細設定 (オプション):展開して、トレーニングに使用するクエリー数の上限である 最大クエリー数 を設定します。default値は5000です。クエリーテーブルのクエリー数が上限より少ない場合、Databricksは上限に達するまでさらに生成します。

  4. [ファインチューニングを起動] をクリックします。ダイアログが閉じ、 リランカーファインチューニングが起動されました という確認が表示されます。

ファインチューニングの進捗を追跡する

ジョブを起動すると、 [リランカーファインチューニング] セクションに [ステータス] が表示されます:

ステータス

説明

開始中…

ジョブはキューに入れられました。

ファインチューニングを実行中…

トレーニングが進行中です。

完了

ファインチューニング済みリランカーが登録およびデプロイされ、クエリーを実行する準備が整いました。

不成功

トレーニングが完了しませんでした。エラーメッセージが表示されます。

ステータス

説明

開始中…

ジョブはキューに入れられました。

ファインチューニングを実行中…

トレーニングが進行中です。

完了

ファインチューニング済みリランカーが登録およびデプロイされ、クエリーを実行する準備が整いました。

不成功

トレーニングが完了しませんでした。エラーメッセージが表示されます。

リランカーファインチューニングのステータス:開始中

ステータスは自動的に更新されます。ジョブが完了すると、 [モデルの表示] Linkが表示され、デプロイされたリランカーモデルを開くことができます。

「モデルを表示」Link付きで完了と表示されるリランカーファインチューニングのステータス

ファインチューニング済みリランカーを使用したクエリー

トレーニングが成功したら、Python SDK または REST API を使用して、ファインチューニングされたリランカーでインデックスをクエリーします。一般的なクエリーのガイダンスについては、「AI Searchインデックスのクエリー」を参照してください。

Python SDK でクエリーを実行する

databricks-ai-search Python SDKを使用してインデックスをクエリーします。

Python
from databricks.ai_search.client import AISearchClient
from databricks.ai_search.reranker import ExperimentalDatabricksFinetunedReranker

client = AISearchClient()
index = client.get_index(
endpoint_name="my-endpoint",
index_name="catalog.schema.my_index",
)

results = index.similarity_search(
query_text="How do I create an AI Search index?",
columns=["id", "text"],
num_results=10,
reranker=ExperimentalDatabricksFinetunedReranker(
columns_to_rerank=["text"], # must be exactly the embedding source column
),
)
  • columns_to_rerank: インデックスの埋め込みソース列と完全に一致している必要があり、単一要素のリストとして指定します。
  • モデルサービングEndpointは、インデックスから自動的に解決されます。特定のEndpointをターゲットにするには、endpoint_name="..." を渡します。

リランカーが実行されたことを確認するには、debug_level=1 を渡して結果を検査します:

Python
results = index.similarity_search(..., debug_level=1)

dbg = results.get("debug_info", {})
if "warnings" in dbg:
print("Reranker fell back:", dbg["warnings"])
else:
print(f"Reranker ran, took {dbg['reranker_time']}ms")

REST API を使用したクエリー

REST経由で、ファインチューニング済みリランカーを使用してクエリーすることもできます。rerankerブロックを使用して、インデックスのクエリーEndpointにPOSTを送信します。ブロック内で、modelにファインチューニング済みModel Serving Endpoint名を、model_typeMODEL_TYPE_FINETUNEDを、parameters.columns_to_rerankに埋め込みソース列を設定します:

Bash
curl -X POST \
https://<workspace-host>/api/2.0/vector-search/indexes/catalog.schema.my_index/query \
-H "Authorization: Bearer $DATABRICKS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"query_text": "How do I create an AI Search index?",
"columns": ["id", "text"],
"num_results": 10,
"debug_level": 1,
"reranker": {
"model": "<finetuned-endpoint-name>",
"model_type": "MODEL_TYPE_FINETUNED",
"parameters": {
"columns_to_rerank": ["text"]
}
}
}'
  • model:ファインチューニングジョブによって作成された、ファインチューニング済みリランカーをホストする Model Serving Endpoint の名前。Python SDK とは異なり、REST API はこれを自動的に導出することはありません。
  • parameters.columns_to_rerank:インデックスの埋め込みソース列と完全に一致している必要があります。これはSDKと同じルールです。
  • debug_level: 1 応答で debug_info.reranker_time、または fallback 時に debug_info.warnings を表示します。

制限事項

  • リランカーのファインチューニングは、Databricks 管理の埋め込みを持つ Delta Sync インデックスでのみサポートされています。ダイレクトアクセスインデックスおよびセルフマネージド型埋め込みインデックスはファインチューニングできません。
  • サービスEndpointはゼロにスケーリングされるため、非アクティブな期間の後の最初のクエリーでは、コールド起動の遅延が発生します。ゼロへのスケーリングをオフにすることができます。
  • リランキングは埋め込みソース列に固定されています。ファインチューニングされたリランカーでクエリーを実行する場合、columns_to_rerank はインデックスの埋め込みソース列、つまりリランカーのトレーニングに使用された列と完全に一致している必要があります。Databricks は、他の列または列セットのリランキングを拒否します。