Personnalisation de Cortex Search Scoring

Par défaut, les requêtes vers les Cortex Search Services exploitent la similarité vectorielle, la correspondance de texte et le reclassement pour déterminer la pertinence de chaque résultat. Vous pouvez personnaliser la notation des résultats de recherche de plusieurs manières :

  • Appliquer des améliorations numériques basées sur des colonnes de métadonnées numériques

  • Appliquer des décroissances temporelles basées sur les colonnes de métadonnées d’horodatage

  • Désactiver le reclassement pour réduire la latence des requêtes

  • Modifier le poids des composants pour ajuster le poids des composants de notation individuels (vecteur, texte, reclassement) dans le classement global de la recherche.

Accroissements numériques et déclins avec le temps

Vous pouvez améliorer ou appliquer des atténuations aux résultats de recherche en fonction de métadonnées numériques ou d’horodatage. Cette fonction est utile lorsque vous disposez de métadonnées structurées, telles que des signaux de popularité ou de récence, pour chaque résultat qui peut aider à déterminer la pertinence des documents au moment de la requête. Vous pouvez spécifier deux catégories de signaux de classement lors d’une requête :

Type

Description

Types de colonnes applicables

Exemples de champs de métadonnées (à titre d’illustration)

Accroissement numérique

Métadonnées numériques qui augmentent les résultats ayant plus d’attention ou d’activité.

Type de données numériques

clicks, likes, comments

Déclin avec le temps

Métadonnées de date ou d’heure qui favorisent des résultats plus récents. L’influence des signaux de récence diminue avec le temps.

Type de données de date et d’heure

created_timestamp, last_opened_timestamp, action_date

Les métadonnées d’amélioration et de décroissance proviennent des colonnes du tableau source à partir desquelles un Cortex Search Service est créé. Vous spécifiez les colonnes de métadonnées à utiliser pour l’amélioration ou la décroissance lorsque vous effectuez la requête, mais ces colonnes doivent être incluses lors de la création du Cortex Search Service.

Lors d’une requête auprès d’un Cortex Search Service, indiquez les colonnes à utiliser pour l’accroissement ou le déclin dans les champs facultatifs numeric_boosts et time_decays dans le champ scoring_config.functions. Vous pouvez également spécifier le poids de chaque accroissement ou déclin.

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

Propriétés

  • numeric_boosts (tableau, facultatif) :

    • <numeric_boost_object> (objet, facultatif) :

      • column_name (string) : Spécifie la colonne numérique à laquelle l’accroissement doit être appliqué.

      • weight (flottant) : Spécifie le poids ou l’importance attribué à la colonne avec accroissement dans le processus de classement. Lorsque plusieurs colonnes sont spécifiées, un poids plus élevé augmente l’influence du champ.

  • time_decays (tableau, facultatif) :

    • <time_decay_object> (objet, facultatif) :

      • column_name (string) : Spécifie la colonne de date et d’heure à laquelle le déclin doit être appliquée.

      • weight (flottant) : Spécifie le poids ou l’importance attribué à la colonne avec déclin dans le processus de classement. Lorsque plusieurs colonnes sont spécifiées, un poids plus élevé augmente l’influence du champ.

      • limit_hours (flottant) : Définit la limite à partir de laquelle le temps commence à avoir moins d’effet sur la pertinence ou l’importance du document. Par exemple, une valeur limit_hours de 240 indique que les documents dont l’horodatage est supérieur à 240 heures (10 jours) par rapport à l’horodatage now ne bénéficient pas d’un accroissement significatif, tandis que les documents dont l’horodatage se situe dans les 240 dernières heures doivent bénéficier d’un accroissement plus important.

      • now (chaîne, facultatif) : Horodatage de référence facultatif à partir duquel les déclins sont calculés au format ISO-8601 yyyy-MM-dd'T'HH:mm:ss.SSSXXX. Par exemple, "2025-02-19T14:30:45.123-08:00". La valeur par défaut est l’horodatage actuel si ce n’est pas spécifié.

Note

Les accroissements numériques sont appliqués sous forme de moyennes pondérées aux champs retournés, tandis que les déclins s’appuient sur une fonction logarithmique pour rétrograder les valeurs les moins récentes.

Les poids sont relatifs dans les champs d’accroissement ou de déclin spécifiés. Si un seul champ est fourni dans un tableau boosts ou decays, la valeur de sa pondération n’a pas d’importance.

Si plusieurs champs sont fournis, les pondérations sont appliquées l’une par rapport à l’autre. Un champ ayant un poids de 10, par exemple, affecte deux fois plus le classement de l’enregistrement qu’un champ ayant un poids de 5.

Reclassement

Par défaut, les requêtes adressées à Cortex Search Services exploitent un reclassement sémantique pour améliorer la pertinence des résultats de recherche. Si le reclassement peut sensiblement améliorer la pertinence des résultats, il peut aussi augmenter sensiblement le temps de latence des requêtes. Vous pouvez désactiver le reclassement dans n’importe quelle requête de Cortex Search si vous estimez que l’avantage qualitatif que procure le reclassement peut être sacrifié au profit d’une vitesse de requête plus rapide dans votre cas d’utilisation.

Note

La désactivation du reclassement réduit la latence des requêtes de 100 à 300 ms en moyenne, mais la réduction exacte de la latence, ainsi que l’ampleur de la dégradation de la qualité, varient selon les charges de travail. Évaluez les résultats côte à côte, avec et sans reclassement, avant de décider de le désactiver dans les requêtes.

Vous pouvez désactiver le reclasseur pour une requête individuelle au moment de la requête dans le champ scoring_config.reranker au format suivant :

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

Propriétés

  • reranker (chaîne, facultatif) : Paramètre pouvant être défini sur « none » si le reclasseur doit être désactivé. S’il est exclu ou nul, le reclasseur par défaut est utilisé.

Poids des composants

Le champ weights dans l’objet scoring_config vous permet de spécifier les poids des composants de notation individuels (vectors, texts, reranker) dans la note globale de chaque résultat. Par défaut, les poids sont définis sur 1,0 pour chaque composant, avec une contribution égale à la notation globale.

Vous pouvez spécifier des poids au format suivant :

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

Propriétés

  • weights (objet, facultatif) : Spécifie les poids pour la combinaison des scores de texte, de vecteur et de reclassement pour chaque document. Les poids sont appliqués les uns par rapport aux autres dans ce champ.

Par exemple, ce qui suit indique que les scores de texte doivent être pondérés 3 fois plus que les scores vectoriels, et que les scores de reclassement doivent être pondérés 2 fois plus que les scores de texte :

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

Profils de notation nommés

Les paramètres Renforcement/Dépréciations et Reclassement forment ensemble une configuration de notation, qui peut être spécifiée dans le paramètre scoring_config lors d’une requête. Les configurations de notation peuvent également recevoir un nom et être jointes au Cortex Search Service.

L’utilisation d’un profil de notation nommé vous permet d’utiliser facilement une configuration de notation dans les applications et les requêtes sans avoir à spécifier la configuration de notation complète à chaque fois. Si vous modifiez la configuration de notation, vous ne devez la mettre à jour qu’à un seul endroit, et non dans chaque requête.

Pour ajouter un profil de notation à votre Cortex Search Service, utilisez les commandes ALTER CORTEX SEARCH SERVICE … ADD SCORING PROFILE, comme le montre l’exemple suivant :

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

La syntaxe de la définition du profil de notation est le même schéma que celui utilisé dans le paramètre scoring_config lors d’une requête.

Les profils de notation ne peuvent pas être modifiés après avoir été créés. Pour modifier un profil, supprimez-le et recréez-le avec la nouvelle configuration de notation. Pour supprimer un profil de notation nommé, utilisez ALTER CORTEX SEARCH SERVICE … DROP SCORING PROFILE.

Pour interroger un Cortex Search Service à l’aide d’un profil de notation nommé, indiquez le nom du profil dans le paramètre scoring_profile lors de la création d’une requête, comme le montrent les exemples suivants :

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

Pour voir les profils de notation stockés d’un service, interrogez la vue CORTEX_SEARCH_SERVICE_SCORING_PROFILES dans le schéma INFORMATION_SCHEMA, comme le montre l’exemple suivant :

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

Note

Les résultats DESCRIBE CORTEX SEARCH SERVICE et SHOW CORTEX SEARCH SERVICE contiennent une colonne nommée scoring_profile_count qui indique le nombre de profils de notation pour chaque service.

Scores des composants

Les scores des composants fournissent des informations de notation détaillées pour les résultats de la recherche. Ils permettent aux développeurs de comprendre comment les classements de recherche sont déterminés et de déboguer les performances de recherche. Les scores pour chaque résultat sont retournés dans le champ @scores pour chaque « composant » de récupération (texte, vecteur). Les scores des composants sont utiles dans les scénarios où il est nécessaire d’effectuer les actions suivantes :

  • Établir des seuils : utilisez les scores des composants pour déterminer quand transmettre les résultats à un processus en aval, tel qu’un agent.

  • Débogage des classements de recherche : comprenez pourquoi certains documents ont un rang plus élevé que d’autres dans les résultats de recherche.

Comprendre les scores des composants

Les scores des composants fournissent des informations détaillées sur la manière dont Cortex Search calcule le score de pertinence final pour chaque résultat de recherche. Le système de notation se compose de plusieurs éléments :

Similarité cosinus

Scores basés sur la similarité sémantique entre les index de requête et de vecteur. Les scores élevés indiquent des correspondances conceptuelles ou sémantiques plus fortes à l’aide d’intégrations vectorielles.

Correspondance de texte

Scores basés sur la similarité des mots-clés/lexiques entre les index de requête et de texte. Les scores élevés indiquent des correspondances exactes ou approximatives plus fortes entre les mots-clés.

Response Format

Lorsque les scores des composants sont activés, les informations de notation suivantes sont renvoyées pour toutes vos requêtes Cortex Search. Pour plus d’informations sur la syntaxe de requête de Cortex Search, voir Interroger un Cortex Search Service.

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

Champs de score

  • @scores.cosine_similarity : Score de similarité cosinus entre la requête et la valeur de l’index vectoriel, dans l’intervalle [-1, 1].

  • @scores.text_match : Score de correspondance de texte entre la requête et la valeur de l’index de texte. Ce score est illimité et sa plage dépend de la requête.

Notes sur l’utilisation

  • Les scores cosine_similarity sont :

    • Renvoyés pour toute requête qui inclut un INDEX VECTOR.

    • Limités dans la plage [-1, 1] et comparables entre les différentes requêtes.

    • Calculés après avoir ajouté à chaque requête un préfixe qui augmente la qualité de la recherche dans de nombreux cas. Ce préfixe varie selon le modèle, mais ressemble généralement à ceci : Represent this sentence for searching relevant passages: {query}. Le score de similarité cosinus renvoyé correspond à la similarité cosinus entre la requête avec le préfixe et la valeur dans l’index vectoriel.

  • Les scores text_match sont :

    • Renvoyés pour toute requête qui inclut un INDEX TEXT. Les scores text_match sont illimités.

    • Non comparables entre les différentes requêtes. Par exemple, un score de correspondance de texte de 0,95 sur un résultat pour une requête donnée n’est pas comparable à un score de correspondance de texte de 0,95 sur un résultat pour une requête différente adressée au même service.

  • Les valeurs @scores ne sont pas affectées par le paramètre weights. Les poids n’affectent que l’ordre final des résultats.