このページでは、モデル エンドポイント管理に登録されている Vertex AI ランク付けモデル エンドポイントを使用して、アプリケーションの検索結果をランク付けまたはスコア付けする方法について説明します。
Vertex AI Ranking API は、ドキュメントのリストを取得し、ドキュメントが特定のクエリ(検索文字列)にどの程度関連しているかに基づいてドキュメントをランク付けします。ai.rank()
関数を使用すると、ドキュメントが特定のクエリにどの程度適切に回答しているかのスコアが返されます。
このページの手順は、AlloyDB for PostgreSQL と生成 AI のコンセプトに詳しい方向けのものです。
AlloyDB は ai
スキーマを予約し、google_ml_integration
拡張機能をインストールするときにこのスキーマを作成しようとします。スキーマの作成に失敗した場合は、google_ml
スキーマの同じ名前の関数を使用します。
始める前に
ランキング モデルを使用して検索結果をランク付けするためのアクセス権をリクエストし、有効化の確認が届くまで待ってから、このページの手順に沿って操作してください。
Vertex AI ランキング モデルが登録されていることを確認します。詳細については、Vertex AI ランキング モデルをご覧ください。
検索結果をランク付けする
次の SQL クエリは、検索結果をランク付けする方法を示しています。
SELECT
ai.rank(
model_id => 'MODEL_ID',
search_string => 'SEARCH_STRING',
documents => ARRAY['DOCUMENT_1', 'DOCUMENT_2', 'DOCUMENT_3']);
次のように置き換えます。
パラメータ | 説明 |
---|---|
MODEL_ID |
定義するモデル エンドポイントの一意の ID。 |
SEARCH_STRING |
レコードのランク付けまたはスコア付けに使用する検索文字列。 |
DOCUMENTS |
レコードを識別する一意の文字列。 |
例
登録済みのランキング エンドポイントを使用して検索結果をランク付けするには、次のクエリを実行します。
SELECT index, score
FROM
ai.rank(
model_id => 'semantic-ranker-512-002',
search_string => 'AlloyDB is a PostgreSQL compatible AI database that is ready for production.',
documents =>
ARRAY[
'Alloys are made from combination of metals',
'The best enterprise-ready PostgreSQL database.',
'You can feel the heat in Alloy apartments.']);
レスポンスは、各ドキュメントと、検索クエリとの関連性に基づくスコアを含む表です。レスポンスの例を次に示します。
index | score
-------+-------
1 | 0.03
2 | 0.02
3 | 0.01
(3 rows)
エンベディングに変換されたレビューの説明のリストを含む AlloyDB データベースの例について考えてみましょう。次のサンプルコード スニペットは、ランキング モデルを使用して、クエリに対するレビューの説明の意味的類似度に基づいて、上位にランク付けされた商品の名前を取得する方法を示しています。text-embedding-005
モデル エンドポイントと semantic-ranker-512@002
モデル エンドポイントの両方が登録されていることを前提としています。
WITH
initial_results AS (
SELECT product_id, name, review, review_id,
ROW_NUMBER() OVER () AS ref_number
FROM user_reviews
ORDER BY
review_desc_embedding <=> google_ml.embedding(
'text-embedding-005', 'good desserts')
LIMIT 100
),
reranked AS (
SELECT
ai.rank(
model_id => 'semantic-ranker-512@002',
search_string => 'good desserts',
documents => ARRAY_AGG(review ORDER BY ref_number))
FROM initial_results
)
SELECT product_id, name
FROM initial_results, reranked
WHERE initial_results.ref_number = reranked.index
ORDER BY reranked.score;