検索結果のランク付けとスコア付け

このページでは、モデル エンドポイント管理に登録されている Vertex AI ランク付けモデル エンドポイントを使用して、アプリケーションの検索結果をランク付けまたはスコア付けする方法について説明します。

Vertex AI Ranking API は、ドキュメントのリストを取得し、ドキュメントが特定のクエリ(検索文字列)にどの程度関連しているかに基づいてドキュメントをランク付けします。ai.rank() 関数を使用すると、ドキュメントが特定のクエリにどの程度適切に回答しているかのスコアが返されます。

このページの手順は、AlloyDB for PostgreSQL と生成 AI のコンセプトに詳しい方向けのものです。

AlloyDB は ai スキーマを予約し、google_ml_integration 拡張機能をインストールするときにこのスキーマを作成しようとします。スキーマの作成に失敗した場合は、google_ml スキーマの同じ名前の関数を使用します。

始める前に

検索結果をランク付けする

次の 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;

次のステップ