Een index maken voor meerdere talen in Azure AI Search

Als u tekenreeksen in meerdere talen hebt, kunt u taalanalyses koppelen die tekenreeksen analyseren met behulp van taalkundige regels van een specifieke taal tijdens het indexeren en uitvoeren van query's. Met een taalanalyse krijgt u betere verwerking van tekenvariaties, leestekens en woordhoofdformulieren.

Azure AI Search ondersteunt Microsoft- en Lucene-analyses. De zoekmachine maakt standaard gebruik van Standard Lucene, wat taalneutraal is. Als testen aangeeft dat de standaardanalyse onvoldoende is, vervangt u deze door een taalanalyse.

In Azure AI Search zijn de twee patronen voor het ondersteunen van meerdere talen:

  • Maak taalspecifieke indexen waarbij alle alfanumerieke inhoud zich in dezelfde taal bevindt en alle doorzoekbare tekenreeksvelden worden toegeschreven aan het gebruik van dezelfde taalanalyse.

  • Maak een gemengde index met taalspecifieke versies van elk veld (bijvoorbeeld description_en, description_fr, description_ko) en beperk vervolgens zoekopdrachten in volledige tekst tot alleen die velden tijdens de query. Deze benadering is handig voor scenario's waarbij taalvarianten alleen nodig zijn op een paar velden, zoals een beschrijving.

Dit artikel is gericht op stappen en aanbevolen procedures voor het configureren en opvragen van taalspecifieke velden in een gemengde index:

  • Definieer een tekenreeksveld voor elke taalvariant.
  • Stel een taalanalyse in voor elk veld.
  • Stel in de queryaanvraag de searchFields parameter in op specifieke velden en gebruik select deze om alleen de velden met compatibele inhoud te retourneren.

Notitie

Als u grote taalmodellen gebruikt in een rag-patroon (augmented generated) ophalen, kunt u de prompt ontwerpen om vertaalde tekenreeksen te retourneren. Dit scenario valt buiten het bereik van dit artikel.

Vereisten

Taalanalyse is van toepassing op velden van het type Edm.String en searchabledie gelokaliseerde tekst bevatten. Als u ook tekstomzetting nodig hebt, raadpleegt u de volgende sectie om te zien of AI-verrijking aan uw behoeften voldoet.

Niet-tekenreeksvelden en niet-doorzoekbare tekenreeksvelden ondergaan geen lexicale analyse en worden niet getokeniseerd. In plaats daarvan worden ze opgeslagen en worden exacte bewoordingen geretourneerd.

Tekstomzetting toevoegen

In dit artikel wordt ervan uitgegaan dat vertaalde tekenreeksen al bestaan. Als dat niet het geval is, kunt u Azure AI-services koppelen aan een verrijkingspijplijn en tekstomzetting aanroepen tijdens het indexeren. Tekstomzetting heeft een afhankelijkheid van de functie indexeerfunctie en Azure AI-services, maar alle instellingen worden uitgevoerd in Azure AI Search.

Voer de volgende stappen uit om tekstomzetting toe te voegen:

  1. Controleer of uw inhoud zich in een ondersteunde gegevensbron bevindt.

  2. Maak een gegevensbron die verwijst naar uw inhoud.

  3. Maak een vaardighedenset met de vaardigheid Tekstvertaling.

    De vaardigheid Tekstvertaling neemt één tekenreeks als invoer. Als u meerdere velden hebt, kunt u een vaardighedenset maken die tekstomzetting meerdere keren aanroept, één keer voor elk veld. U kunt ook de vaardigheid Tekstfusie gebruiken om de inhoud van meerdere velden samen te voegen in één lange tekenreeks.

  4. Maak een index met velden voor vertaalde tekenreeksen. De meeste van dit artikel hebben betrekking op indexontwerp en velddefinities voor het indexeren en opvragen van inhoud in meerdere talen.

  5. Koppel een Azure AI-servicesresource voor meerdere regio's aan uw vaardighedenset.

  6. Maak en voer de indexeerfunctie uit en pas de richtlijnen in dit artikel toe om alleen de interessevelden op te vragen.

Tip

Tekstomzetting is ingebouwd in de wizard Gegevens importeren. Als u een ondersteunde gegevensbron hebt met tekst die u wilt vertalen, kunt u de wizard doorlopen om de taaldetectie en vertaalfunctionaliteit uit te proberen voordat u code schrijft.

Velden definiëren voor inhoud in verschillende talen

In Azure AI Search richten query's zich op één index. Ontwikkelaars die taalspecifieke tekenreeksen in één zoekervaring willen bieden, definiëren doorgaans toegewezen velden om de waarden op te slaan: één veld voor Engelse tekenreeksen, één voor Frans, enzovoort.

De analyzer eigenschap op een velddefinitie wordt gebruikt om de taalanalyse in te stellen. Deze wordt gebruikt voor het indexeren en uitvoeren van query's.

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

Een index bouwen en laden

Een tussenliggende stap is het bouwen en vullen van de index voordat u een query formuleert. We noemen deze stap hier voor volledigheid. Een manier om de beschikbaarheid van de index te bepalen, is door de lijst met indexen in de portal te controleren.

De query beperken en resultaten bijsnijden

Parameters voor de query worden gebruikt om de zoekopdracht te beperken tot specifieke velden en vervolgens de resultaten te beperken van velden die niet nuttig zijn voor uw scenario.

Parameters Doel
searchFields Hiermee wordt zoeken in volledige tekst beperkt tot de lijst met benoemde velden.
select Hiermee wordt het antwoord bijsnijden zodat alleen de velden worden opgenomen die u opgeeft. Standaard worden alle opvraagbare velden geretourneerd. Met de select parameter kunt u kiezen welke u wilt retourneren.

Gezien het doel van het beperken van zoekopdrachten tot velden met Franse tekenreeksen, zou u de searchFields query gebruiken voor velden die tekenreeksen in die taal bevatten.

Het opgeven van de analyse voor een queryaanvraag is niet nodig. Een taalanalyse op de velddefinitie bepaalt de tekstanalyse tijdens het uitvoeren van query's. Voor query's die meerdere velden opgeven, worden de termen of woordgroepen gelijktijdig verwerkt door de toegewezen analyses voor elk veld.

Standaard retourneert een zoekopdracht alle velden die zijn gemarkeerd als ophaalbaar. Als zodanig wilt u mogelijk velden uitsluiten die niet voldoen aan de taalspecifieke zoekervaring die u wilt opgeven. Als u zoekt naar een veld met Franse tekenreeksen, wilt u waarschijnlijk velden met Engelse tekenreeksen uitsluiten van uw resultaten. Met behulp van de select queryparameter kunt u bepalen welke velden worden geretourneerd naar de aanroepende toepassing.

Voorbeeld in REST

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

Voorbeeld in 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);
}

Taalspecifieke velden verbeteren

Soms is de taal van de agent die een query uitgeeft niet bekend. In dat geval kan de query tegelijkertijd worden uitgegeven voor alle velden. De IA-voorkeur voor resultaten in een bepaalde taal kan worden gedefinieerd met behulp van scoreprofielen. In het onderstaande voorbeeld worden overeenkomsten in de beschrijving in het Frans hoger gescoord ten opzichte van overeenkomsten in andere talen:

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

Vervolgens neemt u het scoreprofiel op in de zoekaanvraag:

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

Volgende stappen