Cortex Searchスコアリングのカスタマイズ

デフォルトでは、Cortex Search Serviceへのクエリは、ベクトル類似性、テキストマッチング、再ランク付けを活用して、各結果の関連性を決定します。検索結果のスコアリングは、いくつかの方法でカスタマイズできます。

数値ブーストと時間減衰

数値やタイムスタンプのメタデータに基づいて、検索結果をブーストしたり、減算を適用したりできます。この機能は、クエリ時にドキュメントの関連性を判断するのに役立つ、各結果の人気度や新着度のシグナルのような構造化されたメタデータがある場合に便利です。クエリ作成時に、2種類のランキングシグナルを指定できます。

説明

アプリケーション列タイプ

メタデータフィールドの例(説明用)

数値ブースト

より多くの注目やアクティビティを持つ結果を後押しする数値メタデータ。

数値データタイプ

clickslikescomments

時間減衰

より新しい結果を後押しする日付または時刻のメタデータ。再帰性信号減衰の影響は時間とともに減少します。

日時データタイプ

created_timestamplast_opened_timestampaction_date

ブーストと減衰のメタデータは、 Cortex Search Serviceが作成されるソーステーブルの列から取得されます。クエリを作成するときに、ブーストまたは減衰に使用するメタデータ列を指定しますが、それらの列はCortex Searchサービスを作成するときに含める必要があります。

Cortex Search Serviceをクエリする際、ブーストまたは減衰に使用する列をオプションの numeric_booststime_decaysscoring_config.functions フィールドで指定します。また、ブーストや減衰ごとにウェイトを指定することもできます。

{
  "scoring_config": {
    "functions": {
      "numeric_boosts": [
        {
          "column": "column_name",
          "weight": 1
        },
        /* ... */
      ],
      "time_decays": [
        {
          "column": "column_name",
          "weight": 1,
          "limit_hours": 120
        },
        /* ... */
      ]
    }
  }
}
Copy

プロパティ

  • numeric_boosts (配列、オプション):

    • <numeric_boost_object > (オブジェクト、オプション):

      • column_name (string): ブーストを適用する列を数値で指定します。

      • weight (float): ランキング処理において、ブーストされた列に割り当てられる重みまたは重要度を指定します。複数の列が指定されている場合、ウェイトが高いほどフィールドの影響が大きくなります。

  • time_decays (配列、オプション):

    • <time_decay_object> (オブジェクト、オプション):

      • column_name (string): 減衰を適用する時間列または日付列を指定します。

      • weight (float): 順位付けプロセスにおいて、減衰した列に割り当てられる重みまたは重要度を指定します。複数の列が指定されている場合、ウェイトが高いほどフィールドの影響が大きくなります。

      • limit_hours (float): 時間がドキュメントの関連性や重要性に影響を与えなくなる境界をセットします。例えば、 limit_hours の値が240の場合、 now のタイムスタンプから240時間(10日)以上過去のタイムスタンプを持つドキュメントは大幅なブーストを受けず、直近240時間以内のタイムスタンプを持つドキュメントはより大幅なブーストを受ける必要があることを示します。

      • now (文字列、オプション): ISO-8601 形式 yyyy-MM-dd'T'HH:mm:ss.SSSXXX で減衰を計算するリファレンスタイムスタンプ。例えば、 "2025-02-19T14:30:45.123-08:00" です。指定がない場合、デフォルトは現在のタイムスタンプです。

注釈

数値のブーストは、返されたフィールドの加重平均として適用され、減衰はログ平滑化関数を利用して、最近の値より低い値を降格させます。

ウェイトは、指定されたブーストまたは減衰フィールド全体における相対的なものです。boosts または decays 配列内に単一のフィールドしかプロバイダーがない場合、その重みの値は関係ありません。

複数のフィールドが提供された場合、重みは相対的に適用されます。例えば、重みが10のフィールドは、重みが5のフィールドの2倍、記録のランキングに影響します。

再ランキング

デフォルトでは、Cortex Search Serviceへのクエリは、 セマンティック・リランキング を活用し、検索結果の関連性を向上させます。再ランキングはクエリ結果の関連性を著しく向上させますが、クエリの待ち時間も著しく増加させます。ビジネスユースケースにおいて、クエリの高速化のために、リランキングが提供する品質の利点を犠牲にできることがわかった場合、どのCortex Searchクエリでもリランキングを無効にすることができます。

注釈

リランキングを無効にすると、クエリの待ち時間が平均で100~300ms短縮されますが、待ち時間の正確な短縮幅や品質低下の大きさはワークロードによって異なります。クエリでリランキングを無効にする前に、リランキングあり、なしの結果を並べて評価してください。

クエリ時に scoring_config.reranker フィールドで、以下の形式で個々のクエリのリランカーを無効にすることができます。

{
  "scoring_config": {
      "reranker": "none"
  }
}
Copy

プロパティ

  • reranker (文字列、オプション): リランカーをオフにする場合は "none" をセットするパラメーター。除外されているかNULLの場合、デフォルトのリランカーが使用されます。

コンポーネントの重み

scoring_config オブジェクトの weights フィールドでは、各結果の総合スコアにおける個々のスコアリングコンポーネント( vectorstextsreranker )の重みを指定できます。デフォルトでは、各コンポーネントの重みは1.0に設定され、総合スコアへの貢献度は等しくなります。

重みは次の形式で指定できます。

{
  "scoring_config": {
    "functions": {
      "weights": {
        "texts": 3,
        "vectors": 2,
        "reranker": 1
      }
    }
  }
}
Copy

注釈

マルチインデックスサービスでインデックス固有ブーストを text_boots または vector_boosts と一緒に使用する場合、 weights プロパティは functions オブジェクトの一部としてではなく、スコアリング構成の最上位に配置されます。

{
  "scoring_config": {
    "weights": {
      "texts": 3,
      "vectors": 2,
      "reranker": 1
    },
    "functions": {
      // ...
    }
  }
}
Copy

プロパティ

  • weights (オブジェクト、オプション):各ドキュメントのテキスト、ベクトル、リランカーのスコアを組み合わせるための重みを指定します。重みは、このフィールド内で互いに相対的に適用されます。

たとえば、以下はテキストスコアの重みをベクトルスコアの3倍、リランカースコアの重みをテキストスコアの2倍に設定することを指定しています。

{
  "scoring_config": {
    "functions": {
      "weights": {
        "texts": 3,
        "vectors": 1,
        "reranker": 2
      }
    }
  }
}
Copy

ベクトル埋め込み用クエリプレフィックスの無効化

デフォルトでは、Cortex Searchはベクトル埋め込みを計算する前にクエリにプレフィックスを追加します。このプレフィックスはモデルによって異なりますが、一般的には次のような形式です::samp:`Represent this sentence for searching relevant passages: {query}`これにより、埋め込みモデルにコンテキストを提供することで、多くの場合で検索品質が向上し、検索クエリをCortex Search Serviceに保存した他のテキストと区別することができます。

ただし、次のシナリオなどの場合は、このプレフィックスを無効にすることができます。

  • プレフィックスを除いた類似性検索を使用する場合。たとえば、「最適なデータクラウドは何ですか?」を検索し、結果として「Snowflake」を取得する場合は、デフォルトのプレフィックスを使用します。ただし、「データクラウドとは何か」を検索し、その結果「最適なデータクラウドとは」を取得する場合は、プレフィックスを無効にすることができます。

scoring_config フィールドの ``disable_vector_embedding_query_prefix``パラメーターを使用して、クエリ時に個々のクエリのクエリプレフィックスを無効にできます。

{
  "scoring_config": {
    "disable_vector_embedding_query_prefix": true
  }
}
Copy

プロパティ

  • disable_vector_embedding_query_prefix``(ブール値、オプション):``true に設定した場合、ベクトル埋め込みを計算する前に、検索プレフィックスはクエリに自動的に追加されません。デフォルトは false です。

注釈

クエリプレフィックスを無効にすると、ほとんどの場合、検索品質が低下する可能性があります。プレフィックスは、埋め込みモデルがテキストが検索クエリであることを理解するのに役立つためです。これを無効にする特定の理由があり、検索結果への影響を評価している場合にのみ無効にしてください。

名前付きスコアリングプロファイル

ブースト/減算とリランカーの設定を合わせて*スコアリング設定*となり、クエリ作成時に scoring_config パラメーターで指定できます。また、スコアリング設定に名前を付けて、Cortex Searchサービスに添付することもできます。

名前付きスコアリングプロファイルを使用すると、アプリケーションやクエリ間で同じスコアリング設定を簡単に使用でき、毎回すべてのスコアリング設定を指定する手間が省けます。スコアリング設定を変更する場合は、すべてのクエリで更新する必要はなく、1か所で更新するだけで済みます。

Cortex Search Serviceにスコアリングプロファイルを追加するには、以下の例に示すように、 ALTER CORTEX SEARCH SERVICE ... ADD SCORING PROFILE コマンドを使用します。

ALTER CORTEX SEARCH SERVICE my_search_service
  ADD SCORING PROFILE IF NOT EXISTS heavy_comments_with_likes
  '{
    "functions": {
            "numeric_boosts": [
                { "column": "comments", "weight": 6 },
                { "column": "likes", "weight": 1 }
            ]
    }
  }'
Copy

スコアリングプロファイル定義の構文は、クエリを作成する際に scoring_config パラメーターで使用されるスキーマと同じです。

スコアリングプロファイルは作成後に変更することはできません。プロファイルを変更するには、プロファイルを削除し、新しいスコアリング設定で再作成します。名前付きスコアリングプロファイルを削除するには、 ALTER CORTEX SEARCH SERVICE ... DROP SCORING PROFILE を使用します。

名前付きスコアリングプロファイルを使用してCortex Search Serviceをクエリするには、次の例に示すように、クエリ作成時に scoring_profile パラメーターにプロファイル名を指定します。

results = svc.search(
    query="technology",
    columns=["comments", "likes"],
    scoring_profile="heavy_comments_with_likes",
    limit=10
)
Copy

サービスの保存されたスコアリングプロファイルを見るには、次の例に示すように、 INFORMATION_SCHEMA スキーマの CORTEX_SEARCH_SERVICE_SCORING_PROFILES ビューをクエリします。

SELECT *
  FROM my_db.INFORMATION_SCHEMA.CORTEX_SEARCH_SERVICE_SCORING_PROFILES
  WHERE service_name = 'my_search_service';
Copy

注釈

DESCRIBE CORTEX SEARCH SERVICE と SHOW CORTEX SEARCH SERVICE の結果には、 scoring_profile_count という列があり、各サービスのスコアリングプロファイルの数を示しています。

コンポーネントスコア

コンポーネントスコアは、検索結果の詳細なスコアリング情報を提供します。これにより、開発者は検索順位の決定方法を理解し、検索パフォーマンスをデバッグできます。各検索結果のスコアは、各検索「コンポーネント」(テキスト、ベクトル)の @scores フィールドに返されます。コンポーネントスコアは、次のような必要がある場面で役立ちます。

  • しきい値を確立する: コンポーネントスコアを使用して、結果をエージェントなどの下流のプロセスにいつ渡すかを決定します。

  • 検索ランキングのデバッグ: 検索結果で特定のドキュメントが他のドキュメントより上位にランクされる理由を理解します。

コンポーネントスコアの理解

コンポーネントスコアは、Cortex Searchが各検索結果の最終的な関連性スコアを計算する方法の詳細な内訳を提供します。スコアリングシステムは複数のコンポーネントで構成されています。

コサイン類似性

クエリとベクトルインデックス間の意味的類似性に基づくスコア。スコアが高いほど、ベクトル埋め込みを使った概念的または意味ベースの一致が強いことを示します。

テキストマッチ

クエリとテキストインデックス間のキーワード/語彙の類似性に基づくスコア。スコアが高いほど、キーワードの完全一致またはあいまい一致が強いことを示します。

リランカースコア

クエリとテキストインデックスの値の意味ベースの一致に基づくスコア。スコアが高いほど、リランカーを使用した概念的または意味ベースの一致が強力であることを示しています。スコアは、再ランク付けされた上位の結果に対してのみ提供されます。

関数スコア

ブースト関数が適用された場合の追加の詳細スコアリング情報(例: text_boostsvector_boosts、数値ブースト、時間減衰)個々の列のスコア、重み、加重合計を表示する各ブーストタイプ(例:text_boost および vector_boost)のネストされたオブジェクトが含まれます。異なるフィールドの一致がドキュメントの最終スコアリングにどのように貢献するかを理解するのに役立ちます。

応答形式

コンポーネントスコアを有効にすると、すべてのCortex Searchクエリに対して次のスコアリング情報が返されます。Cortex Searchクエリ構文の詳細については、 Cortex Search Serviceにクエリする をご参照ください。

{
  "results": [
    {
      "@scores": {
        "cosine_similarity": <cosine_similarity_score>,
        "text_match": <text_match_score>
      }
    }
  ]
}

スコアフィールド

  • @scores.cosine_similarity:クエリとベクトルインデックスの値とのコサイン類似性スコア([-1, 1]の範囲)。

  • @scores.text_match:クエリとテキストインデックスの値のテキスト一致スコア。このスコアは無制限で、その範囲はクエリに依存します。

  • @scores.reranker_score:クエリとテキストインデックスの値の間の再ランク付けスコア。このスコアは境界がなく、その範囲はクエリによって異なります。

  • @scores.function_scores:詳細なブースト関数のスコアリングを含むネストされたオブジェクト(functions がクエリで指定された場合のみ存在)

    • text_boost.column_scores.column_name.score:テキストブーストからの指定された列の個別スコア。

    • text_boost.column_scores.column_name.weight:テキストブーストから指定された列に適用された重み。

    • text_boost.weighted_score:テキストブースト関数からの最終的な加重スコア。

    • vector_boost.column_scores.column_name.score:ベクトルブーストからの指定された列の個別スコア。

    • vector_boost.column_scores.column_name.weight:ベクトルブーストから指定された列に適用された重み。

    • vector_boost.weighted_score:ベクトルブースト関数による最終的な重みスコア。

    • numeric_boost.column_scores.column_name.score:数値ブーストからの指定された列の個別のスコア。

    • numeric_boost.column_scores.column_name.weight:数値ブーストから指定された列に適用された重み。

    • numeric_boost.weighted_score:数値ブースト関数からの最終的な加重スコア。

    • time_decay.column_scores.column_name.score:時間減衰からの指定された列の個別のスコア。

    • time_decay.column_scores.column_name.weight:指定された列に指定された時間減衰の重みが適用されました。

    • time_decay.weighted_score:時間減衰関数による最終的な重みスコア。

使用上の注意

  • cosine_similarity スコアは次のとおりです。

    • VECTOR INDEX を含むクエリに対して返されます。

    • 範囲[-1, 1]で囲まれ、異なるクエリ間で比較可能です。

    • 正規化されたベクトルを想定して計算。

    • ベクトルインデックスの圧縮により、マイナーな精度の損失が発生します。 cosine_similarity(v, v) は正確に 1.0 ではなく 1.0 +/- epsilon を返す可能性があります。圧縮の詳細は時間の経過とともに変化する可能性があり、イプシロンが安定しない可能性があります。

    • 多くの場合、検索品質を向上させるプレフィックスを各クエリの前に付加した後に計算されます。このプレフィックスはモデルによって異なりますが、一般的には Represent this sentence for searching relevant passages: {query} のようになります。返されるコサイン類似性スコアは、プレフィックスを持つクエリとベクトルインデックスの値とのコサイン類似性です。

  • text_match スコアは次のとおりです。

    • TEXT INDEX を含むクエリに対して返されます。text_match スコアは無制限です。

    • 異なるクエリ間では比較できません。たとえば、あるクエリに対する結果のテキストマッチスコア0.95は、同じサービスに対する別のクエリの結果のテキストマッチスコア0.95とは比較になりません。

  • @scores 値は、 weights パラメーターによる影響を受けません。重みは、結果の最終的な順序にのみ影響します。

インデックス固有ブースト

インデックス固有ブーストは、 マルチインデックスCortex Search Service 内のインデックスの影響の重みを調整します。テキスト一致およびベクトル一致の重みを調整できます。これらは、他の提供された重みと比較して適用されます。高い値は低い値より優先され、コンポーネントの重みと同じ動作を使用します。

プロパティ

  • text_boosts (配列、オプション):テキストインデックス列に適用されるインデックス固有の重み。この値が存在すると、すべてのテキスト列に重みを含める必要があります。列の重みは、相互に適用されます。

  • vector_boosts (配列、オプション):ベクトル列に適用されるインデックス固有の重み。この値が存在すると、すべてのベクトル列に重みを含める必要があります。列の重みは、相互に適用されます。

インデックス固有の重みは、 column および weight キーを含むオブジェクトです。

{
  "column": "<column name>",
  "weight": <weight>
}

例として、検索用にインデックスを付けられた次のテーブルを考えます。

CREATE TABLE feedback_info (
  id VARCHAR,
  comment VARCHAR,
  support_note VARCHAR,
  sentiment VECTOR(FLOAT, 3),
  issue_category VECTOR(FLOAT, 3)
);
Copy

次の JSON は、 comment テキスト列をブーストしながら id テキスト列のランク付けを解除するマルチインデックスCortex Search service用 scoring_config 示します。sentiment のベクトルランキングを調整することは、他のベクトル列の2倍の重要性があります。

{
  "scoring_config": {
    "functions": {
      "text_boosts": [
        { "column": "id", "weight": 1 },
        { "column": "support_note", "weight": 2},
        { "column": "comment", "weight": 3},
      ],
      "vector_boosts": [
        { "column": "issue_category", "weight": 1 },
        { "column": "sentiment", "weight": 2 }
      ]
    }
  }
}
Copy

多様性

場合によっては、ある型の結果が他の型よりも多くの結果を返すことがあります。特定のタイプの結果が検索結果の大部分を占めるのを防ぐには、 diversity パラメーターを使用します。

例えば、Cortex Search Serviceが長いドキュメントを使用して作成され、これらのドキュメントがチャンクによってインデックス付けされている場合、 diversity パラメーターを使用して、同じドキュメントからの複数のチャンクが最終結果セットに表示されないようにします。

次の形式で、 scoring_config.diversity フィールドのクエリ時に、個々のクエリの多様性を有効にすることができます。

{
  "scoring_config": {
    "diversity": {
      "group_by": <array_of_columns_to_group_by>,
      "max_results": <num_results_for_each_group>,
    }
  }
}
Copy

プロパティ

  • diversity (オブジェクト、オプション):結果の多様性をオフにする必要がある場合に、「なし」に設定できるパラメーター。

    • ``group_by``(配列):グループ化する列。

    • ``max_results``(整数):各グループの結果の最大数。