Tworzenie indeksu dla wielu języków w usłudze Azure AI Search

Jeśli masz ciągi w wielu językach, możesz dołączyć analizatory języków analizujące ciągi przy użyciu reguł językowych określonego języka podczas indeksowania i wykonywania zapytań. Dzięki analizatorowi języka można lepiej obsługiwać odmiany znaków, znaki interpunkcyjne i formy główne wyrazów.

Usługa Azure AI Search obsługuje analizatory firmy Microsoft i Lucene. Domyślnie wyszukiwarka używa standardowego Lucene, który jest niezależny od języka. Jeśli testowanie wskazuje, że domyślny analizator jest niewystarczający, zastąp go analizatorem języka.

W usłudze Azure AI Search istnieją dwa wzorce obsługi wielu języków:

  • Utwórz indeksy specyficzne dla języka, w których cała zawartość alfanumeryczna znajduje się w tym samym języku, a wszystkie pola ciągów z możliwością wyszukiwania są przypisywane do używania tego samego analizatora języka.

  • Utwórz indeks mieszany z wersjami poszczególnych pól specyficznymi dla języka (na przykład description_en, description_fr, description_ko), a następnie ogranicz wyszukiwanie pełnotekstowe tylko do tych pól w czasie zapytania. Takie podejście jest przydatne w scenariuszach, w których warianty języka są potrzebne tylko w kilku polach, takich jak opis.

Ten artykuł koncentruje się na krokach i najlepszych rozwiązaniach dotyczących konfigurowania i wykonywania zapytań dotyczących pól specyficznych dla języka w indeksie mieszanym:

  • Zdefiniuj pole ciągu dla każdego wariantu języka.
  • Ustaw analizator języka w każdym polu.
  • W żądaniu zapytania ustaw searchFields parametr na określone pola, a następnie użyj polecenia select , aby zwrócić tylko te pola, które mają zgodną zawartość.

Uwaga

Jeśli używasz dużych modeli językowych we wzorcu rozszerzonego pobierania wygenerowanego rozszerzonego (RAG), możesz utworzyć monit o zwrócenie przetłumaczonych ciągów. Ten scenariusz jest poza zakresem tego artykułu.

Wymagania wstępne

Analiza języka ma zastosowanie do pól typu Edm.Stringsearchable, które zawierają zlokalizowany tekst. Jeśli potrzebujesz również tłumaczenia tekstu, przejrzyj następną sekcję, aby sprawdzić, czy wzbogacanie sztucznej inteligencji spełnia Twoje potrzeby.

Pola nieciągalne i pola ciągów, które nie można przeszukiwać, nie są poddawane analizie leksykalnej i nie są tokenizowane. Zamiast tego są one przechowywane i zwracane dosłownie.

Dodawanie tłumaczenia tekstu

W tym artykule założono, że przetłumaczone ciągi już istnieją. Jeśli tak nie jest, możesz dołączyć usługi Azure AI do potoku wzbogacania, wywołując tłumaczenie tekstu podczas indeksowania. Tłumaczenie tekstu ma zależność od funkcji indeksatora i usług Azure AI, ale cała konfiguracja odbywa się w usłudze Azure AI Search.

Aby dodać tłumaczenie tekstu, wykonaj następujące kroki:

  1. Sprawdź, czy zawartość znajduje się w obsługiwanym źródle danych.

  2. Utwórz źródło danych wskazujące zawartość.

  3. Utwórz zestaw umiejętności, który obejmuje umiejętności tłumaczenia tekstu.

    Umiejętność tłumaczenia tekstu przyjmuje pojedynczy ciąg jako dane wejściowe. Jeśli masz wiele pól, możesz utworzyć zestaw umiejętności, który wywołuje tłumaczenie tekstu wiele razy, raz dla każdego pola. Alternatywnie możesz użyć umiejętności fuzji tekstu, aby skonsolidować zawartość wielu pól w jeden długi ciąg.

  4. Utwórz indeks zawierający pola dla przetłumaczonych ciągów. W większości tego artykułu opisano projektowanie indeksów i definicje pól na potrzeby indeksowania i wykonywania zapytań dotyczących zawartości w wielu językach.

  5. Dołącz do zestawu umiejętności zasób usług Azure AI z wieloma regionami.

  6. Utwórz i uruchom indeksator, a następnie zastosuj wskazówki zawarte w tym artykule, aby wykonać zapytanie tylko o interesujące pola.

Napiwek

Tłumaczenie tekstu jest wbudowane w kreatora importu danych. Jeśli masz obsługiwane źródło danych z tekstem, który chcesz przetłumaczyć, możesz przejść przez kreatora, aby wypróbować funkcje wykrywania języka i tłumaczenia przed napisaniem jakiegokolwiek kodu.

Definiowanie pól zawartości w różnych językach

W usłudze Azure AI Search zapytania są kierowane do pojedynczego indeksu. Deweloperzy, którzy chcą udostępniać ciągi specyficzne dla języka w jednym środowisku wyszukiwania, zazwyczaj definiują dedykowane pola do przechowywania wartości: jedno pole dla ciągów w języku angielskim, jedno dla języka francuskiego itd.

Właściwość analyzer w definicji pola służy do ustawiania analizatora języka. Jest on używany zarówno do indeksowania, jak i wykonywania zapytań.

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

Kompilowanie i ładowanie indeksu

Etap pośredni polega na tworzeniu i wypełnianiu indeksu przed formułowaniem zapytania. Tutaj wspominamy o tym kroku, aby uzyskać kompletność. Jednym ze sposobów określenia dostępności indeksu jest sprawdzenie listy indeksów w portalu.

Ogranicz wyniki zapytania i przycinania

Parametry zapytania służą do ograniczania wyszukiwania do określonych pól, a następnie przycinania wyników pól, które nie są pomocne w danym scenariuszu.

Parametry Purpose
searchFields Ogranicza wyszukiwanie pełnotekstowe do listy nazwanych pól.
select Przycina odpowiedź, aby uwzględnić tylko określone pola. Domyślnie zwracane są wszystkie pola, które można pobrać. Parametr select umożliwia wybranie tych, które mają być zwracane.

Mając na celu ograniczenie wyszukiwania do pól zawierających ciągi francuskie, należy użyć searchFields zapytania w polach zawierających ciągi w tym języku.

Określanie analizatora w żądaniu zapytania nie jest konieczne. Analizator języka w definicji pola określa analizę tekstu podczas wykonywania zapytania. W przypadku zapytań, które określają wiele pól, każdy wywołując różne analizatory języka terminy lub frazy są przetwarzane współbieżnie przez przypisane analizatory dla każdego pola.

Domyślnie wyszukiwanie zwraca wszystkie pola oznaczone jako możliwe do pobrania. W związku z tym możesz wykluczyć pola, które nie są zgodne ze środowiskiem wyszukiwania specyficznego dla języka, które chcesz podać. W szczególności, jeśli ograniczysz wyszukiwanie do pola z ciągami francuskimi, prawdopodobnie chcesz wykluczyć pola z ciągami angielskimi z wyników. Użycie parametru select zapytania zapewnia kontrolę nad tym, które pola są zwracane do aplikacji wywołującej.

Przykład w architekturze 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"
}

Przykład w języku 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);
}

Zwiększanie pól specyficznych dla języka

Czasami język agenta wykonującego zapytanie nie jest znany, w tym przypadku zapytanie może być wystawiane jednocześnie dla wszystkich pól. Preferencje IA dotyczące wyników w określonym języku można zdefiniować przy użyciu profilów oceniania. W poniższym przykładzie dopasowania znalezione w opisie w języku francuskim są oceniane wyżej względem dopasowań w innych językach:

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

Następnie należy uwzględnić profil oceniania w żądaniu wyszukiwania:

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

Następne kroki