Anpassen der Cortex Search-Bewertungen

Standardmäßig nutzen Abfragen an Cortex Search Services Vektorähnlichkeit, Textabgleich und erneutes Ranking, um die Relevanz jedes Ergebnisses zu bestimmen. Sie können das Scoring der Suchergebnisse auf verschiedene Weise anpassen:

Numerische Erhöhungen und Zeitabfälle

Sie können die Ergebnisse von Suchergebnissen auf der Grundlage von numerischen oder Zeitstempel-Metadaten verbessern oder anwenden. Dieses Feature ist nützlich, wenn Sie für jedes Ergebnis strukturierte Metadaten, wie z. B. Popularität oder Aktualität haben, die dabei helfen können, die Relevanz von Dokumenten zur Abfragezeit zu bestimmen. Sie können zwei Kategorien von Ranking-Signalen angeben, wenn Sie eine Abfrage durchführen:

Typ

Beschreibung

Anwendbare Spaltentypen

Beispiel für Metadatenfelder (illustrativ)

Numerische Erhöhung

Numerische Metadaten, die Ergebnisse mit mehr Aufmerksamkeit oder Aktivität erhöhen.

Numerischer Datentyp

clicks, likes, comments

Zeitabfall

Datums- oder Zeit-Metadaten, die aktuellere Ergebnisse erhöhen. Der Einfluss von Aktualitätssignalen nimmt mit der Zeit ab.

Datentyp für Datum und Uhrzeit

created_timestamp, last_opened_timestamp, action_date

Erhöhungs- und Abfall-Metadaten stammen aus Spalten der Quelltabelle, aus der ein Cortex Search Service erstellt wird. Sie geben die Metadaten-Spalten an, die für die Erhöhung oder den Abfall verwendet werden sollen, wenn Sie die Abfrage durchführen; diese Spalten müssen aber bei der Erstellung des Cortex Search Service berücksichtigt werden.

Bei der Abfrage eines Cortex Search Service geben Sie in den optionalen Feldern numeric_boosts und time_decays im Feld scoring_config.functions die Spalten an, die für das Erhöhen oder Abfallen verwendet werden sollen. Sie können auch das Gewicht für jede Erhöhung oder jeden Abfall festlegen.

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

Eigenschaften

  • numeric_boosts (Array, optional):

    • <numeric_boost_object> (Objekt, optional):

      • column_name (string): Gibt die numerische Spalte an, auf die die Erhöhung angewendet werden soll.

      • weight (float): Gibt das Gewicht oder die Wichtigkeit an, die der erhöhte Spalte im Rankingprozess zugewiesen wird. Wenn mehrere Spalten angegeben sind, erhöht ein höheres Gewicht den Einfluss des Feldes.

  • time_decays (Array, optional):

    • <time_decay_object> (Objekt, optional):

      • column_name (string): Gibt die Zeit- oder Datumsspalte an, auf die der Abfall angewendet werden soll.

      • weight (float): Gibt die Gewichtung oder Wichtigkeit an, die der abfallenden Spalte im Rankingprozess zugewiesen wird. Wenn mehrere Spalten angegeben sind, erhöht ein höheres Gewicht den Einfluss des Feldes.

      • limit_hours (float): Legt die Grenze fest, ab der die Zeit einen geringeren Einfluss auf die Relevanz oder Wichtigkeit des Dokuments hat. Ein limit_hours-Wert von 240 bedeutet zum Beispiel, dass Dokumente mit Zeitstempeln, die mehr als 240 Stunden (10 Tage) vor dem now-Zeitstempel liegen, keine signifikante Erhöhung erhalten, während Dokumente mit einem Zeitstempel innerhalb der letzten 240 Stunden eine stärkere Erhöhung erhalten sollten.

      • now (Zeichenfolge, optional): Optionaler Referenzzeitstempel, von dem aus die Abfälle im Format ISO-8601 berechnet werden yyyy-MM-dd'T'HH:mm:ss.SSSXXX. Zum Beispiel "2025-02-19T14:30:45.123-08:00". Standardmäßig wird der aktuelle Zeitstempel verwendet, wenn er nicht angegeben wird.

Bemerkung

Numerische Erhöhungen werden als gewichtete Durchschnitte auf die zurückgegebenen Felder angewandt, während Abfälle eine log-geglättete Funktion nutzen, um weniger aktuelle Werte zu degradieren.

Die Gewichte sind relativ zu den angegebenen Erhöhungs- oder Abfall-Feldern. Wenn nur ein einziges Feld innerhalb eines boosts- oder decays-Arrays angegeben wird, ist der Wert seines Gewichts irrelevant.

Wenn mehr als ein Feld angegeben wird, werden die Gewichte relativ zueinander angewendet. Ein Feld mit einer Gewichtung von 10 wirkt sich z. B. doppelt so stark auf das Ranking des Datensatzes aus wie ein Feld mit einer Gewichtung von 5.

Neueinstufung

Standardmäßig nutzen Abfragen an Cortex Search Services semantische Neueinstufung zur Verbesserung der Relevanz der Suchergebnisse. Neueinstufung kann zwar die Relevanz der Ergebnisse messbar erhöhen, aber auch die Latenz bei Abfragen spürbar steigern. Sie können die Neueinstufung in jeder Cortex Search-Abfrage deaktivieren, wenn Sie festgestellt haben, dass der Qualitätsvorteil, den die Neueinstufung bietet, für eine schnellere Abfragegeschwindigkeit in Ihrem geschäftlichen Anwendungsfall geopfert werden kann.

Bemerkung

Die Deaktivierung der Neueinstufung reduziert die Abfrage-Latenz im Durchschnitt um 100–300 ms, aber die genaue Reduzierung der Latenz sowie das Ausmaß der Qualitätsverschlechterung variiert je nach Workload. Werten Sie die Ergebnisse nebeneinander aus, mit und ohne Neueinstufung, bevor Sie sich entscheiden, sie in Abfragen zu deaktivieren.

Sie können den Neueinstufer für eine einzelne Abfrage zum Zeitpunkt der Abfrage im Feld scoring_config.reranker im folgenden Format deaktivieren:

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

Eigenschaften

  • reranker (Zeichenfolge, optional): Parameter, der auf „none“ gesetzt werden kann, wenn der Neueinstufer ausgeschaltet werden soll. Wenn ausgeschlossen oder null, wird der Standard-Neueinstufer verwendet.

Komponentengewichtungen

Das Feld weights im scoring_config-Objekt ermöglicht es Ihnen, die Gewichtungen der einzelnen Scoring-Komponenten (vectors, texts, reranker) in der Gesamtpunktzahl für jedes Ergebnis anzugeben. Standardmäßig sind die Gewichtungen für jede Komponente auf 1,0 eingestellt, mit dem gleichen Anteil an der Gesamtbewertung.

Sie können Gewichtungen im folgenden Format angeben:

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

Bemerkung

Bei Verwendung von indexspezifischen Erhöhungen mit text_boots oder vector_boosts bei einem Multi-Index-Service wird die Eigenschaft weights auf der obersten Ebene der Bewertungskonfiguration platziert und nicht als Teil des functions-Objekts:

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

Eigenschaften

  • weights (Objekt, optional): Gibt die Gewichtungen für die Kombination von Text-, Vektor- und Reranking-Bewertungen für jedes Dokument an. Innerhalb dieses Feldes werden die Gewichtungen relativ zueinander angewendet.

Die folgende Tabelle gibt beispielsweise an, dass Textbewertungen 3 Mal mehr Gewichtung als Vektorbewertungen haben sollen und dass Reranking-Werte 2 Mal mehr Gewichtung haben sollen als Textbewertungen:

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

Deaktivieren des Abfragepräfixes für Vektoreinbettungen

Standardmäßig fügt Cortex Search den Abfragen ein Präfix hinzu, bevor die Vektoreinbettungen berechnet werden. Dieses Präfix variiert je nach Modell, hat aber im Allgemeinen das folgende Format: Represent this sentence for searching relevant passages: query. Dies verbessert in vielen Fällen die Suchqualität, indem der Kontext für das Einbettungsmodell bereitgestellt wird, der dabei hilft, Suchabfragen von anderen Texten zu unterscheiden, die Sie im Cortex Search Service gespeichert haben.

Sie können dieses Präfix jedoch in einigen Fällen deaktivieren, z. B. im folgenden Szenario:

  • Wenn Sie die Ähnlichkeitssuche ohne das Präfix verwenden möchten. Wenn Sie beispielsweise nach „was ist die beste Datencloud“ suchen und „Snowflake“ als Ergebnis erhalten möchten, dann verwenden Sie das Standardpräfix. Wenn Sie jedoch nach „was ist die Datencloud“ und als Ergebnis „was ist die beste Datencloud“ erhalten möchten, können Sie das Präfix deaktivieren.

Sie können das Abfragepräfix für eine einzelne Abfrage zum Zeitpunkt der Abfrage mit dem Parameter disable_vector_embedding_query_prefix im Feld scoring_config deaktivieren:

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

Eigenschaften

  • disable_vector_embedding_query_prefix (boolescher Wert, optional): Wenn der Parameter auf true gesetzt ist, wird der Abfrage vor der Berechnung der Vektoreinbettungen nicht automatisch ein Suchpräfix hinzugefügt. Die Standardeinstellung ist false.

Bemerkung

Das Deaktivieren des Abfragepräfixes kann in den meisten Fällen die Qualität der Suche beeinträchtigen, da das Präfix dem Einbettungsmodell hilft zu verstehen, dass es sich bei dem Text um eine Suchabfrage handelt. Deaktivieren Sie es nur, wenn Sie einen bestimmten Grund dafür sehen und die Auswirkungen auf Ihre Suchergebnisse ausgewertet haben.

Benannte Scoring-Profile

Die Einstellungen für Erhöhungen/Zeitabfälle und Reranking-Einstellungen bilden zusammen eine Scoring-Konfiguration, die im Parameter scoring_config bei einer Abfrage angegeben werden kann. Scoring-Konfigurationen können auch einen Namen erhalten und an den Cortex Search Service angehängt werden.

Durch die Verwendung eines benannten Scoring-Profils können Sie eine Scoring-Konfiguration einfach über Anwendungen und Abfragen hinweg verwenden, ohne jedes Mal die vollständige Scoring-Konfiguration angeben zu müssen. Wenn Sie die Scoring-Konfiguration ändern, müssen Sie diese nur an einer Stelle aktualisieren, nicht in jeder Abfrage.

Um ein Scoring-Profil zu Ihrem Cortex Search Service hinzuzufügen, verwenden Sie den Befehl ALTER CORTEX SEARCH SERVICE … ADD SCORING PROFILE, wie im folgenden Beispiel gezeigt:

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

Die Syntax der Scoring-Profildefinition ist dasselbe Schema, das im Parameter scoring_config bei einer Abfrage verwendet wird.

Scoring-Profile können nach der Erstellung nicht mehr geändert werden. Wenn Sie ein Profil ändern möchten, löschen Sie es und erstellen Sie es mit der neuen Scoring-Konfiguration neu. Um ein benanntes Scoring-Profil zu löschen, verwenden Sie ALTER CORTEX SEARCH SERVICE … DROP SCORING PROFILE.

Um einen Cortex Search Service mit einem benannten Scoring-Profil abzufragen, geben Sie den Profilnamen bei einer Abfrage im Parameter scoring_profile an, wie in den folgenden Beispielen gezeigt:

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

Um die gespeicherten Scoring-Profile eines Dienstes anzuzeigen, fragen Sie die Ansicht CORTEX_SEARCH_SERVICE_SCORING_PROFILES im Schema INFORMATION_SCHEMA ab, wie im folgenden Beispiel gezeigt:

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

Bemerkung

Die Ergebnisse für DESCRIBE CORTEX SEARCH SERVICE und SHOW CORTEX SEARCH SERVICE enthalten eine Spalte mit dem Namen scoring_profile_count, welche die Anzahl der Scoring-Profile für jeden Service angibt.

Komponentenbewertungen

Komponentenbewertungen bieten detaillierte Informationen zum Scoring der Suchergebnisse. Sie ermöglichen es Entwicklern, zu verstehen, wie Suchrankings bestimmt werden, um die Such-Performance zu debuggen. Die Bewertungen für jedes Ergebnis werden im Feld @scores für jede Abruf-„Komponente“ (Text, Vektor) zurückgegeben. Komponentenbewertungen sind in Szenarios nützlich, in denen Folgendes erforderlich ist:

  • Schwellenwerte festlegen: Verwenden Sie Komponentenbewertungen, um zu bestimmen, wann die Ergebnisse an einen nachgelagerten Prozess, wie einen Agenten, weitergegeben werden sollten.

  • Debuggen von Suchranglisten: Verstehen Sie, warum bestimmte Dokumente in den Suchergebnissen einen höheren Rang haben als andere.

Erläuterungen zu Komponentenbewertungen

Die Komponentenbewertungstabellen liefern detaillierte Aufschlüsselungen darüber, wie Cortex Search den endgültigen Relevanzwert für jedes Suchergebnis berechnet. Das Scoring-System besteht aus mehreren Komponenten:

Cosinus-Ähnlichkeit

Werte basierend auf der semantischen Ähnlichkeit zwischen den Abfrage- und den Vektorindizes. Höhere Werte bedeuten stärkere konzeptionelle oder bedeutungsbasierte Übereinstimmungen bei der Verwendung von Vektoreinbettungen.

Textübereinstimmung

Bewertung auf der Grundlage von Schlüsselwort-/lexikalischen Ähnlichkeiten zwischen Abfrage- und Textindizes. Höhere Werte bedeutet mehr genaue oder unscharfe Übereinstimmungen mit Schlüsselwörtern.

Reranking-Bewertung

Bewertungen basierend auf bedeutungsbasierten Übereinstimmungen zwischen der Abfrage und dem Wert im Textindex. Höhere Bewertungen bedeuten stärkere konzeptionelle oder bedeutungsbasierte Übereinstimmungen mithilfe von Reranking. Bewertungen werden nur für die Top-Ergebnisse angegeben, für die ein Reranking durchgeführt wird.

Funktionsbewertungen

Zusätzliche detaillierte Bewertunginformationen durch angewendete Boost-Funktionen (z. B. text_boosts, vector_boosts, numerische Erhöhungen, Zeitabfall). Enthält verschachtelte Objekte für jeden Boost-Typ (z. B. text_boost und vector_boost) mit den Bewertungen, Gewichtungen und gewichteten Summen der einzelnen Spalten. Nützlich, um zu verstehen, wie Übereinstimmungen in verschiedenen Feldern zur endgültigen Bewertung des Dokuments beitragen.

Antwortformat

Wenn die Komponentenbewertung aktiviert ist, werden die folgenden Scoring-Informationen für alle Ihre Abfragen von Cortex Search zurückgegeben. Weitere Informationen zur Abfragesyntax für Cortex Search finden Sie unter Abfrage eines Cortex Search Service.

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

Bewertungsfelder

  • @scores.cosine_similarity: Cosinus-Ähnlichkeitswert zwischen der Abfrage und dem Wert im Vektorindex im Bereich [-1, 1].

  • @scores.text_match: Textübereinstimmungswert zwischen der Abfrage und dem Wert im Textindex. Dieser Punktwert ist unbegrenzt und sein Bereich hängt von der Abfrage ab.

  • @scores.reranker_score: Reranking-Bewertung zwischen der Abfrage und dem Wert im Textindex. Dieser Punktwert ist unbegrenzt und sein Bereich hängt von der Abfrage ab.

  • @scores.function_scores: Verschachteltes Objekt mit detaillierter Bewertung der Boost-Funktion (nur vorhanden, wenn functions in der Abfrage angegeben ist):

    • text_boost.column_scores.column_name.score: Individuelle Bewertung für die angegebene Spalte vom Text-Boosting.

    • text_boost.column_scores.column_name.weight: Angewendete Gewichtung für die angegebene Spalte vom Text-Boosting.

    • text_boost.weighted_score: Endgültige gewichtete Bewertung von der Text-Boosting-Funktion.

    • vector_boost.column_scores.column_name.score: Individuelle Bewertung für die angegebene Spalte vom Vektor-Boosting.

    • vector_boost.column_scores.column_name.weight: Angewendete Gewichtung für die angegebene Spalte vom Vektor-Boosting.

    • vector_boost.weighted_score: Endgültige gewichtete Bewertung von der Vektor-Boosting-Funktion.

    • numeric_boost.column_scores.column_name.score: Individuelle Bewertung für die angegebene Spalte aus dem numerischen Boosting.

    • numeric_boost.column_scores.column_name.weight: Angewendete Gewichtung für die angegebene Spalte von der numerischen Erhöhung.

    • numeric_boost.weighted_score: Endgültige gewichtete Bewertung von der Funktion für numerische Erhöhung.

    • time_decay.column_scores.column_name.score: Individuelle Bewertung für die angegebene Spalte vom Zeitabfall.

    • time_decay.column_scores.column_name.weight: Angewendete Gewichtung für die angegebene Spalte vom Zeitabfall.

    • time_decay.weighted_score: Endgültige gewichtete Bewertung von der Funktion für den Zeitabfall.

Nutzungshinweise

  • cosine_similarity-Werte sind:

    • Wird für jede Abfrage zurückgegeben, die einen VECTOR INDEX enthält.

    • Beschränkt auf den Bereich [-1, 1] und über verschiedene Abfragen hinweg vergleichbar.

    • Berechnet unter der Annahme normalisierter Vektoren.

    • Unterliegt einem geringeren Präzisionsverlust durch Komprimierung im Vektorindex, was bedeutet, dass cosine_similarity(v, v) 1.0 +/- epsilon und nicht genau 1.0 zurückgegeben könnte. Die Komprimierungsdetails können im Laufe der Zeit variieren und Epsilon ist möglicherweise nicht stabil.

    • Wird berechnet, nachdem jeder Abfrage ein Präfix vorangestellt wurde, das die Suchqualität in vielen Fällen erhöht. Dieses Präfix variiert je nach Modell, sieht aber im Allgemeinen wie folgt aus: Represent this sentence for searching relevant passages: {query}. Der zurückgegebene Cosinus-Ähnlichkeitswert ist die Cosinus-Ähnlichkeit zwischen der Abfrage mit dem Präfix und dem Wert im Vektorindex.

  • text_match-Werte sind:

    • Wird für jede Abfrage zurückgegeben, die einen TEXT INDEX enthält. text_match-Werte sind unbegrenzt.

    • Nicht vergleichbar über verschiedene Abfragen hinweg. Zum Beispiel ist ein Textübereinstimmungswert von 0,95 für ein Ergebnis für eine bestimmte Abfrage nicht vergleichbar mit einem Textübereinstimmungswert von 0,95 für ein Ergebnis für eine andere Abfrage an denselben Service.

  • @scores-Werte werden vom Parameter:code:weights nicht beeinflusst. Die Gewichtungen beeinflussen nur die endgültige Reihenfolge der Ergebnisse.

Indexspezifische Erhöhungen

Indexspezifische Erhöhungen passen die Gewichtung des Einflusses für Indizes in einem Multi-Index Cortex Search Service an. Sie können die Gewichtungen für den Textabgleich und den Vektorabgleich anpassen, die relativ zu den anderen verfügbaren Gewichtungen angewendet werden. Höhere Werte haben Vorrang vor niedrigeren Werten und verhalten sich genauso wie Komponentengewichtungen.

Eigenschaften

  • text_boosts (Array, optional): Indexspezifische Gewichtungen, die auf Textindexspalten angewendet werden. Wenn dieser Wert vorhanden ist, müssen Sie für alle Textspalten eine Gewichtung angeben. Spaltengewichtungen werden relativ zueinander angewendet.

  • vector_boosts (Array, optional): Indexspezifische Gewichtungen, die auf Vektorspalten angewendet werden. Wenn dieser Wert vorhanden ist, müssen Sie für alle Vektorspalten eine Gewichtung angeben. Spaltengewichtungen werden relativ zueinander angewendet.

Indexspezifische Gewichtungen sind Objekte, die column- und weight-Schlüssel enthalten:

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

Betrachten Sie als Beispiel die folgende Tabelle, die für die Suche indiziert wurde:

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

Die folgende JSON zeigt eine an scoring_config für einen Multi-Index Cortex Search Service, der den Rang der id-Textspalte verringert und gleichzeitig den der comment-Textspalte erhöht und den Vektorrang von sentiment doppelt so hoch gewichtet wie andere Vektorspalten.

{
  "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

Diversität

In einigen Fällen kann ein Ergebnistyp mehr Ergebnisse liefern als andere. Um zu verhindern, dass ein bestimmter Typ von Ergebnis die Suchergebnisse bestimmt, verwenden Sie den Parameter diversity.

Wenn zum Beispiel ein Cortex Search Service mit langen Dokumenten erstellt wird und diese Dokumente durch Blöcke indiziert werden, kann der Parameter diversity verwendet werden, um sicherzustellen, dass nicht mehrere Blöcke aus demselben Dokument im endgültigen Resultset angezeigt werden.

Sie können die Diversität für eine einzelne Abfrage zur Abfragezeit im Feld scoring_config.diversity im folgenden Format aktivieren:

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

Eigenschaften

  • diversity (Objekt, optional): Parameter, der auf „none“ gesetzt werden kann, wenn die Ergebnisdiversität deaktiviert werden soll.

    • group_by (Array) Spalten, nach denen gruppiert werden soll.

    • max_results (Ganzzahl) Maximale Anzahl von Ergebnissen für jede Gruppe.