Renvoyer une réponse sémantique dans Azure AI Search

En appelant le classement sémantique et les légendes, vous pouvez extraire des documents correspondant le mieux à votre requête du contenu « répondant » directement à celle-ci. Une ou plusieurs réponses peuvent être incluses, et vous pouvez ensuite les afficher sur une page de recherche pour améliorer l’expérience utilisateur de votre application.

Une réponse sémantique est un contenu détaillé dans votre index de recherche qu’un modèle de compréhension de lecture a reconnu comme une réponse à la requête posée dans la requête. Ce n’est pas une réponse générée. Pour des conseils sur un modèle d'interaction avec l'utilisateur de type chat qui utilise l'IA générative pour composer des réponses à partir de votre contenu, voir Récupération Génération augmentée (RAG).

Dans cet article, vous apprendrez à demander une requête sémantique, à décortiquer la réponse et à découvrir les caractéristiques du contenu les plus propices à la production de réponses de haute qualité.

Prérequis

Tous les prérequis qui s’appliquent aux requêtes sémantiques s’appliquent également aux réponses, y compris le niveau de service et la région.

  • La logique de requête doit inclure les paramètres de requête sémantique « queryType=semantic », ainsi que le paramètre « answers ». Les paramètres requis sont décrits dans cet article.

  • Les chaînes de requête saisie par l’utilisateur doivent être reconnaissables en tant que questions (quoi, où, quand, comment).

  • Les documents de recherche dans l’index doivent contenir du texte présentant les caractéristiques d’une réponse, et ce texte doit exister dans un des champs répertoriés dans la configuration sémantique. Par exemple, pour une requête « Qu'est-ce qu'une table de hachage ? », si aucun des champs de la configuration sémantique ne contient de passages incluant « Une table de hachage est... », il est peu probable qu'une réponse soit renvoyée.

Remarque

À compter de 2021-04-30-Preview, les requêtes Créer ou mettre à jour l’index ont commencé à appliquer une exigence "semanticConfiguration" pour la spécification des champs d’entrée utilisés dans le classement sémantique.

Qu’est-ce qu’une réponse sémantique ?

Une réponse sémantique est une sous-structure d’une réponse à une requête sémantique. Elle se compose d’un ou de plusieurs passages textuels d’un document de recherche, formulés comme une réponse à une requête qui ressemble à une question. Pour renvoyer une réponse, des expressions ou des phrases doivent exister dans un document de recherche ayant les caractéristiques de langage d’une réponse, et la requête elle-même doit être posée comme une question.

Azure AI Search utilise un modèle de compréhension de la lecture automatique pour reconnaître et sélectionner la meilleure réponse. Le modèle produit un ensemble de réponses potentielles à partir du contenu disponible et, lorsqu'il atteint un niveau de confiance suffisamment élevé, il en propose une comme réponse.

Les réponses sont retournées sous la forme d’un objet indépendant de niveau supérieur dans la charge utile de réponse à la requête que vous pouvez choisir de rendre sur les pages de recherche, ainsi que les résultats de la recherche. Structurellement, il s’agit d’un élément de tableau dans la réponse, qui comprend du texte, une clé de document et un score de confiance.

Formulation d’une requête REST pour « answers »

Pour retourner une réponse sémantique, la requête doit avoir la "queryType"sémantique , "queryLanguage", "semanticConfiguration"et les paramètres de "answers" . La spécification de ces paramètres ne garantit pas de réponse, mais la demande doit les inclure pour que le traitement de réponse se produise.

{
    "search": "how do clouds form",
    "queryType": "semantic",
    "queryLanguage": "en-us",
    "semanticConfiguration": "my-semantic-config",
    "answers": "extractive|count-3",
    "captions": "extractive|highlight-true",
    "count": "true"
}
  • Une chaîne de requête ne doit pas être null et doit être formulée comme question.

  • "queryType" doit être réglé sur « sémantique «.

  • "queryLanguage" doit être l'une des valeurs de la liste des langues supportées (REST API).

  • Un "semanticConfiguration" détermine les champs de chaîne qui fournissent des jetons au modèle d'extraction. Les mêmes champs qui produisent des légendes produisent également des réponses. Pour plus d’informations, consultez Créer une configuration sémantique.

  • Pour "answers", la construction des paramètres est "answers": "extractive", où le nombre de réponses renvoyées par défaut est un. Vous pouvez augmenter le nombre de réponses en ajoutant une count, comme illustré dans l’exemple ci-dessus, sans dépasser un maximum de 10. Le fait que vous ayez besoin de plusieurs réponses dépend de l’expérience utilisateur de votre application et de la façon dont vous souhaitez afficher les résultats.

Décompresser une « answer » à partir de la réponse

Les réponses sont fournies dans le tableau "@search.answers", qui apparaît en premier dans la réponse de la requête. Chaque réponse dans le tableau comprend :

  • Clé de document
  • Texte ou contenu de la réponse, en texte brut ou avec mise en forme
  • Score de fiabilité

Si une réponse est indéterminée, la réponse s'affiche comme suit "@search.answers": []. Le tableau de réponses est suivi du tableau de valeurs, qui est la réponse standard dans une requête sémantique.

Compte tenu de la requête « Comment les nuages se forment-ils », l’exemple suivant illustre une réponse :

{
    "@search.answers": [
        {
            "key": "4123",
            "text": "Sunlight heats the land all day, warming that moist air and causing it to rise high into the   atmosphere until it cools and condenses into water droplets. Clouds generally form where air is ascending (over land in this case),   but not where it is descending (over the river).",
            "highlights": "Sunlight heats the land all day, warming that moist air and causing it to rise high into the   atmosphere until it cools and condenses into water droplets. Clouds generally form<em> where air is ascending</em> (over land in this case),   but not where it is<em> descending</em> (over the river).",
            "score": 0.94639826
        }
    ],
    "value": [
        {
            "@search.score": 0.5479723,
            "@search.rerankerScore": 1.0321671911515296,
            "@search.captions": [
                {
                    "text": "Like all clouds, it forms when the air reaches its dew point—the temperature at which an air mass is cool enough for its water vapor to condense into liquid droplets. This false-color image shows valley fog, which is common in the Pacific Northwest of North America.",
                    "highlights": "Like all<em> clouds</em>, it<em> forms</em> when the air reaches its dew point—the temperature at    which an air mass is cool enough for its water vapor to condense into liquid droplets. This false-color image shows valley<em> fog</em>, which is common in the Pacific Northwest of North America."
                }
            ],
            "title": "Earth Atmosphere",
            "content": "Fog is essentially a cloud lying on the ground. Like all clouds, it forms when the air reaches its dew point—the temperature at  \n\nwhich an air mass is cool enough for its water vapor to condense into liquid droplets.\n\nThis false-color image shows valley fog, which is common in the Pacific Northwest of North America. On clear winter nights, the \n\nground and overlying air cool off rapidly, especially at high elevations. Cold air is denser than warm air, and it sinks down into the \n\nvalleys. The moist air in the valleys gets chilled to its dew point, and fog forms. If undisturbed by winds, such fog may persist for \n\ndays. The Terra satellite captured this image of foggy valleys northeast of Vancouver in February 2010.\n\n\n",
            "locations": [
                "Pacific Northwest",
                "North America",
                "Vancouver"
            ]
        }
    ]
}

Lorsque vous concevez une page de résultats de recherche qui contient des réponses, veillez à gérer les cas où les réponses ne sont pas trouvées.

Dans @search.answers :

  • « clé » est la clé de document ou l’ID de la correspondance. À partir d’une clé de document, vous pouvez utiliser l’API de Recherche de document pour récupérer tout ou partie du document de recherche à inclure dans la page de recherche ou une page de détails.

  • « texte » et « points forts » fournissent des contenus identiques, en texte brut et avec des points forts.

    Par défaut, les mises en évidence ont le style <em>, que vous pouvez remplacer à l’aide des paramètres highlightPreTag et highlightPostTag existants. Comme indiqué ailleurs, la substance d’une réponse est le contenu textuel d’un document de recherche. Le modèle d’extraction recherche les caractéristiques d’une réponse pour trouver le contenu approprié, mais ne compose pas de nouveau langage dans la réponse.

  • « score » est un score de confiance qui reflète la force de la réponse. S’il existe plusieurs réponses dans le résultat renvoyé, ce score est utilisé pour déterminer l’ordre. Les meilleures réponses et les meilleures légendes peuvent provenir de différents documents de recherche, la meilleure réponse provenant d'un document et la meilleure légende d'un autre, mais en général, ce sont les mêmes documents qui apparaissent en première position dans chaque tableau.

Les réponses sont suivies du tableau « valeur », qui comprend toujours des scores, des légendes et des champs récupérables par défaut. Si vous avez spécifié le paramètre select, le tableau « value » est limité aux champs que vous avez spécifiés. Pour plus d’informations, consultez Configurer le classeur sémantique.

Conseils pour la génération de réponses de haute qualité

Pour de meilleurs résultats, retournez les réponses sémantiques sur un corpus de documents qui présentent les caractéristiques suivantes :

  • « semanticConfiguration » doit inclure des champs fournissant suffisamment de texte pour qu’il soit possible d’y trouver une réponse. Les champs les plus susceptibles de contenir les réponses doivent être listés en premier dans « prioritizedContentFields ». Seul le texte exact d’un document peut apparaître en tant que réponse.

  • Les chaînes de requête ne doivent pas être null (search=*) et la chaîne doit avoir les caractéristiques d’une question, telles que « ce qui est » ou « comment », par opposition à une recherche par mot clé composée de termes ou d’expressions dans un ordre arbitraire. Si la chaîne de requête ne semble pas être une question, le traitement des réponses est ignoré, même si la demande spécifie « answers » en tant que paramètre de requête.

  • L’extraction et la synthèse sémantiques sont limitées quand à la quantité de jetons par document qui peuvent être analysés dans un délai raisonnable. En pratique, si vous avez des documents volumineux qui s’étendent sur des centaines de pages, essayez d’abord de scinder le contenu en documents de plus petite taille.

Étapes suivantes