Synonymes dans la recherche Azure AI

Sur un service de recherche, une carte de synonymes associe des termes équivalents, ce qui élargit l’étendue d’une requête, sans que l’utilisateur ait à fournir le terme. Par exemple, en partant du principe que « chien », « canin » et « chiot » sont synonymes, une requête sur « canin » trouve un document contenant « chien ». Vous pouvez créer plusieurs cartes de synonymes pour différentes langues, telles que des versions en anglais et en français, ou des lexiques si votre contenu comprend du jargon technique, de l’argot ou une terminologie complexe.

Quelques points clés sur les cartes de synonymes :

  • Une carte de synonymes est une ressource de niveau supérieur qui peut être créée une seule fois et utilisée par de nombreux index.
  • Une carte de synonymes s’applique aux champs de chaîne.
  • Vous pouvez créer et affecter une carte de synonymes à tout moment sans interruption de l’indexation ou des requêtes.
  • Votre niveau de service définit les limites du nombre de cartes de synonymes que vous pouvez créer.
  • Votre service de recherche peut contenir plusieurs cartes de synonymes, mais à l’intérieur d’un index, une définition de champ ne peut avoir qu’une seule attribution de carte de synonymes.

Créer une carte de synonymes

Une carte de synonymes se compose de noms, de formats et de règles qui fonctionnent comme des entrées de carte de synonymes. Le seul format pris en charge est solr, et le format de solr détermine la construction des règles.

Pour créer une carte de synonymes, procédez par programmation. Le portail ne prend pas en charge les définitions de carte de synonymes.

Utilisez l’API REST Create Synonym Map pour créer une carte de synonymes.

POST /synonymmaps?api-version=2024-07-01
{
    "name": "geo-synonyms",
    "format": "solr",
    "synonyms": "
        USA, United States, United States of America\n
        Washington, Wash., WA => WA\n"
}

Définir des règles

Les règles de mappage respectent la spécification de filtre de synonyme open source d’Apache Solr, décrite dans ce document : SynonymFilter. Le format solr prend en charge deux types de règles :

  • équivalence (où les termes sont des substituts égaux dans la requête)

  • mappages explicites (où les termes sont mappés à un terme explicite)

Chaque règle doit être délimitée par le caractère de nouvelle ligne (\n). Vous pouvez définir jusqu'à 5 000 règles par carte de synonymes dans un service gratuit et 20 000 règles par carte dans les autres références tierces. Chaque règle peut avoir jusqu'à 20 extensions (ou objets dans une règle). Pour plus d’informations, consultez Limites des synonymes.

Les analyseurs de requête mettent automatiquement en minuscules les termes majuscules ou mixtes. Pour conserver des caractères spéciaux dans la chaîne, tels qu’une virgule ou un tiret, ajoutez les caractères d’échappement appropriés lors de la création de la carte de synonymes.

Règles d’équivalence

Les règles pour des termes équivalents sont délimitées par des virgules dans la même règle. Dans le premier exemple, une requête sur USA se développe sur USA OU "United States" OU "United States of America". Notez que si vous souhaitez faire correspondre deux expressions, la requête elle-même doit être une requête d’expression entre guillemets.

Dans le cas d’équivalence, une requête pour dog développe la requête pour inclure également puppy et canine.

{
"format": "solr",
"synonyms": "
    USA, United States, United States of America\n
    dog, puppy, canine\n
    coffee, latte, cup of joe, java\n"
}

Mappage explicite

Les règles d’un mappage explicite sont dénotées par une flèche =>. Lorsqu’elle spécifiée, une séquence de termes d’une requête de recherche qui correspond à la partie gauche de => est remplacée par les alternatives sur la partie droite au moment de la requête.

Dans le cas explicite, une requête pour Washington, Wash. ou WA est réécrite comme WA, et le moteur de requête recherchera uniquement les correspondances au terme WA. Le mappage explicite s’applique uniquement dans le sens spécifié et ne réécrit pas la requête WA pour Washington dans ce cas.

{
"format": "solr",
"synonyms": "
    Washington, Wash., WA => WA\n
    California, Calif., CA => CA\n"
}

Échappement des caractères spéciaux

Les synonymes sont analysés durant le traitement de la requête comme tout autre terme de requête, ce qui signifie que les règles relatives aux caractères réservés et aux caractères spéciaux s’appliquent aux termes de votre carte de synonymes. La liste des caractères qui nécessitent un échappement varie entre la syntaxe simple et la syntaxe complète :

Pour conserver les caractères ignorés par l’analyseur par défaut, remplacez celui-ci par un analyseur qui les conserve. Parmi les choix possibles figurent les analyseurs de langage naturel de Microsoft, qui conservent les mots avec trait d'union, ou un analyseur personnalisé pour les modèles plus complexes. Pour plus d'informations, consultez Termes partiels, modèles et caractères spéciaux.

L’exemple suivant montre comment placer un caractère dans une séquence d’échappement à l’aide d’une barre oblique inverse :

{
    "format": "solr",
    "synonyms": "WA\, USA, WA, Washington\n"
}

Étant donné que la barre oblique inverse est elle-même un caractère spécial dans d’autres langages tels que JSON et C#, vous devrez probablement effectuer un double échappement. Voici un exemple en JSON :

{
    "format":"solr",
    "synonyms": "WA\\, USA, WA, Washington"
}

Gérer les cartes de synonymes

Vous pouvez mettre à jour une carte de synonymes sans perturber les charges de travail de requête et d’indexation. Toutefois, une fois que vous avez ajouté une carte de synonymes à une définition de champ, si vous supprimez ensuite celle-ci, les requêtes qui comprennent les champs en question échoueront avec une erreur 404.

La création, la mise à jour et la suppression d’une carte de synonymes est toujours une opération sur le document entier. Vous ne pouvez pas mettre à jour ou supprimer des parties de la carte de synonymes de manière incrémentielle. Même la mise à jour d’une seule règle nécessite un rechargement.

Assigner des synonymes à des champs

Après avoir créé la carte de synonymes, affectez-la à un champ dans votre index. Pour affecter des cartes de synonymes, procédez par programmation. Le portail ne prend pas en charge les associations de champs de carte de synonymes.

  • Un champ doit être de type Edm.String ou Collection(Edm.String)
  • Un champ doit avoir "searchable":true
  • Un champ ne peut avoir qu’une seule carte de synonymes

Si la carte de synonymes existe sur le service de recherche, elle est utilisée sur la requête suivante, sans réindexation ni reconstruction requise.

Utilisez l’API REST Create or Update Index pour modifier une définition de champ.

POST /indexes?api-version=2024-07-01
{
    "name":"hotels-sample-index",
    "fields":[
        {
            "name":"description",
            "type":"Edm.String",
            "searchable":true,
            "synonymMaps":[
            "en-synonyms"
            ]
        },
        {
            "name":"description_fr",
            "type":"Edm.String",
            "searchable":true,
            "analyzer":"fr.microsoft",
            "synonymMaps":[
            "fr-synonyms"
            ]
        }
    ]
}

Requête sur des champs équivalents ou mappés

Une attribution de champ de synonyme ne change pas la façon dont vous écrivez des requêtes. Après l’attribution de la carte de synonymes, la seule différence est que, si un terme de requête existe dans la carte de synonymes, le moteur de recherche développe ou réécrit le terme ou l’expression, en fonction de la règle.

Utilisation des synonymes durant l’exécution de la requête

Les synonymes sont une technique d’extension de requête qui complète le contenu d’un index avec des termes équivalents, mais uniquement pour des champs ayant une attribution de synonyme. Si une requête sur des champs exclut un champ avec synonyme, vous ne verrez pas de correspondances de la carte de synonymes.

Pour des champs avec synonymes, les synonymes sont soumis à la même analyse de texte que le champ associé. Par exemple, si un champ est analysé à l’aide de l’analyseur Lucene standard, les termes synonymes sont également soumis à l’analyseur Lucene standard au moment de la requête. Si vous souhaitez conserver les signes de ponctuation, tels que des points ou des tirets, dans le terme synonyme, appliquez un analyseur de préservation du contenu sur le champ.

En interne, la fonctionnalité de synonymes réécrit la requête d’origine avec des synonymes utilisant l’opérateur OR. Pour cette raison, la mise en surbrillance des correspondances et les profils de score traitent les synonymes et le terme d’origine comme équivalents.

Les synonymes s’appliquent uniquement aux requêtes de texte de forme libre, et ne sont pas pris en charge pour les filtres, les facettes, la saisie semi-automatique ou les suggestions. L’autocomplétion et les suggestions sont basées uniquement sur le terme d’origine : les correspondances de synonymes n’apparaissent pas dans la réponse.

Les expansions de synonymes ne s’appliquent pas aux termes de recherche génériques : les préfixes, correspondances partielles et expressions régulières ne sont pas développés.

Si vous devez faire une requête unique qui applique l’expansion de synonymes et des recherches avec des caractères génériques, des expressions régulières ou une correspondance approximative, vous pouvez combiner les requêtes avec la syntaxe d’OR. Par exemple, pour combiner des synonymes avec des caractères génériques pour une syntaxe de requête simple, le terme serait <query> | <query>*.

Si vous avez un index existant dans un environnement de déploiement (non production), faites des essais avec un petit dictionnaire pour voir comment l’ajout de synonymes modifie l’expérience de recherche, notamment son impact sur les profils de score, la mise en surbrillance des correspondances et les suggestions.

Étapes suivantes