Partage via


Créer un index pour plusieurs langues dans Azure AI Recherche

Si vous avez des chaînes dans plusieurs langues, vous pouvez attacher des analyseurs de langue qui analysent des chaînes à l’aide de règles de langue d’une langue spécifique pendant l’indexation et l’exécution des requêtes. Avec un analyseur de langue, vous bénéficiez d’une meilleure gestion des variations de caractères, de la ponctuation et des formes racines de mot.

Azure AI Recherche prend en charge les analyseurs Microsoft et Lucene. Par défaut, le moteur de recherche utilise Standard Lucene, qui est indépendant de la langue. Si le test indique que l’analyseur par défaut est insuffisant, remplacez-le par un analyseur de langue.

Dans Recherche Azure AI, les deux modèles de prise en charge de plusieurs langues sont les suivants :

  • Créer des index spécifiques à la langue où tout le contenu alphanumérique se trouve dans la même langue et tous les champs de chaîne pouvant faire l’objet d’une recherche sont attribués pour utiliser le même analyseur de langue.

  • Créer un index fusionné avec des versions propres à la langue de chaque champ (par exemple, description_en, description_fr, description_ko), puis limiter la recherche en texte intégral à ces champs au moment de la requête. Cette approche est utile dans les scénarios où les variantes de langue ne sont nécessaires que sur quelques champs, comme une description.

Cet article se concentre sur les étapes et les meilleures pratiques pour la configuration et l’interrogation de champs spécifiques à la langue dans un index fusionné :

  • Définir un champ de chaîne pour chaque variante de langue.
  • Définir un analyseur de langue sur chaque champ.
  • Dans la demande de requête, définissez le paramètre searchFields sur des champs spécifiques, puis utilisez select pour retourner uniquement les champs dont le contenu est compatible.

Remarque

Si vous utilisez des modèles de langue volumineux dans un modèle de récupération augmentée (RAG), vous pouvez créer l’invite pour retourner des chaînes traduites. Ce scénario sort du cadre de cet article.

Prérequis

L’analyse linguistique s’applique aux champs de type Edm.String qui sont searchable et qui contiennent du texte localisé. Si vous avez également besoin d’une traduction de texte, passez en revue la section suivante pour voir si l’enrichissement par IA répond à vos besoins.

Les champs non composés d’une chaîne et ceux composés d’une chaîne ne prenant pas en charge la recherche ne font pas l’objet d’une analyse lexicale et ne sont pas segmentés en jetons. Ces champs sont stockés et retournés tels quels.

Ajouter une traduction de texte

Cet article suppose que les chaînes traduites existent déjà. Si ce n’est pas le cas, vous pouvez attacher des services Azure AI à un pipeline d’enrichissement, en appelant la traduction de texte pendant l’indexation. La traduction de texte prend une dépendance sur la fonctionnalité d’indexeur et Azure AI services, mais toute la configuration est effectuée dans Azure AI Recherche.

Pour ajouter la traduction de texte, effectuez les étapes suivantes :

  1. Vérifiez que votre contenu se trouve dans une source de données prise en charge.

  2. Créez une source de données qui pointe vers votre contenu.

  3. Créez un ensemble de compétences qui inclut la compétence Traduction de texte.

    La compétence Traduction de texte prend une seule chaîne en tant qu’entrée. Si vous avez plusieurs champs, vous pouvez créer un ensemble de compétences qui appelle Traduction de texte plusieurs fois, une fois pour chaque champ. Vous pouvez aussi utiliser la compétence Fusion de texte pour regrouper le contenu de plusieurs champs dans une chaîne longue.

  4. Créez un index qui inclut des champs pour les chaînes traduites. Cet article couvre principalement la conception d’index et les définitions de champs pour l’indexation et l’interrogation de contenu multilingue.

  5. Attachez une ressource Azure AI services multirégion à votre ensemble de compétences.

  6. Créez et exécutez l’indexeur, puis appliquez les conseils de cet article pour interroger seulement les champs qui vous intéressent.

Conseil

Traduction de texte est intégré à l’Assistant Importation de données. Si vous avez une source de données prise en charge avec du texte que vous souhaitez traduire, vous pouvez parcourir l’Assistant pour essayer la détection de langue et la fonctionnalité de traduction avant d’écrire du code.

Définir des champs de contenu dans différentes langues

Dans Azure AI Recherche, les requêtes ciblent un seul index. Les développeurs qui souhaitent fournir des chaînes spécifiques d’une langue dans une expérience de recherche unique définissent généralement des champs dédiés pour stocker les valeurs : un champ pour les chaînes en français, un autre pour les chaînes en anglais, et ainsi de suite.

La propriété analyzer sur une définition de champ est utilisée pour définir l’analyseur de langue. Il sera utilisé pour l’indexation et l’exécution des requêtes.

{
  "name": "hotels-sample-index",
  "fields": [
    {
      "name": "Description",
      "type": "Edm.String",
      "retrievable": true,
      "searchable": true,
      "analyzer": "en.microsoft"
    },
    {
      "name": "Description_fr",
      "type": "Edm.String",
      "retrievable": true,
      "searchable": true,
      "analyzer": "fr.microsoft"
    }
  ]
}

Créer et charger un index

Une étape intermédiaire consiste à créer et à remplir l’index avant de formuler une requête. Nous signalons cette étape ici par souci d’exhaustivité. Une manière de déterminer si la disponibilité de l’index consiste à vérifier la liste des index dans le portail.

Limiter la requête et réduire les résultats

Les paramètres de la requête sont utilisés pour limiter la recherche à des champs spécifiques, puis écarter les résultats des champs dépourvus d’utilité pour votre scénario.

Paramètres Objectif
searchFields Limite la recherche en texte intégral à la liste des champs nommés.
select Réduit la réponse pour inclure uniquement les champs que vous spécifiez. Par défaut, tous les champs récupérables sont retournés. Le paramètre select vous permet de choisir ceux à retourner.

Compte tenu de l’objectif de limiter la recherche aux champs contenant des chaînes en français, vous utilisez searchFields pour cibler la requête sur les champs contenant des chaînes dans cette langue.

La spécification de l’analyseur sur une demande de requête n’est pas nécessaire. Un analyseur de langue sur la définition de champ détermine l’analyse du texte pendant l’exécution de la requête. Pour les requêtes qui spécifient plusieurs champs, chacune appelant différents analyseurs de langue, les termes ou expressions sont traités simultanément par les analyseurs attribués pour chaque champ.

Par défaut, une recherche retourne tous les champs marqués comme récupérables. Par conséquent, il peut être utile d’exclure les champs non conformes à l’expérience de recherche spécifique de la langue que vous souhaitez offrir. Plus précisément, si vous limitez la recherche à un champ contenant des chaînes en français, vous voulez probablement exclure des résultats les champs contenant des chaînes en anglais. L’utilisation du paramètre de requête select vous permet de contrôler les champs retournés à l’application appelante.

Exemple dans REST

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2024-07-01
{
    "search": "animaux acceptés",
    "searchFields": "Tags, Description_fr",
    "select": "HotelName, Description_fr, Address/City, Address/StateProvince, Tags",
    "count": "true"
}

Exemple en C#

private static void RunQueries(SearchClient srchclient)
{
    SearchOptions options;
    SearchResults<Hotel> response;

    options = new SearchOptions()
    {
        IncludeTotalCount = true,
        Filter = "",
        OrderBy = { "" }
    };

    options.Select.Add("HotelId");
    options.Select.Add("HotelName");
    options.Select.Add("Description_fr");
    options.SearchFields.Add("Tags");
    options.SearchFields.Add("Description_fr");

    response = srchclient.Search<Hotel>("*", options);
    WriteDocuments(response);
}

Améliorer les champs spécifiques à la langue

Parfois, la langue de l’agent émettant une requête n’est pas connue, auquel cas la requête peut être émise simultanément sur tous les champs. Une préférence de résultats dans une langue donnée peut être définie à l'aide des profils de score. Dans l'exemple ci-dessous, les correspondances trouvées dans la description en français sont mieux notées que les correspondances dans d'autres langues :

  "scoringProfiles": [
    {
      "name": "frenchFirst",
      "text": {
        "weights": { "description_fr": 2 }
      }
    }
  ]

Vous incluez ensuite le profil de score dans la demande de recherche :

POST /indexes/hotels/docs/search?api-version=2024-07-01
{
  "search": "pets allowed",
  "searchFields": "Tags, Description_fr",
  "select": "HotelName, Tags, Description_fr",
  "scoringProfile": "frenchFirst",
  "count": "true"
}

Étapes suivantes