Anpassen des Cortex Search-Scoring

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:

  • Anwenden von numerischen Erhöhungen basierend auf numerischen Metadatenspalten

  • Anwenden von Zeitabfällen basierend auf Zeitstempel-Metadaten-Spalten

  • Deaktivieren des erneuten Rankings, um die Abfragelatenz zu verringern

  • Ändern der Komponentengewichtungen, um die Gewichtung der einzelnen Scoring-Komponenten (Vektor, Text, erneutes Ranking) im gesamten Suchranking anzupassen.

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

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

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.

Response Format

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>
      }
    }
  ]
}

Ergebnisfelder

  • @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.

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.

    • 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.