Criar um índice para vários idiomas no Azure AI Search

Se você tiver cadeias de caracteres em vários idiomas, poderá anexar analisadores de linguagem que analisam cadeias de caracteres usando regras linguísticas de um idioma específico durante a indexação e a execução da consulta. Com um analisador de linguagem, você lida melhor com variações de caracteres, pontuação e formas de raiz de palavras.

O Azure AI Search suporta analisadores Microsoft e Lucene. Por padrão, o mecanismo de busca usa o Standard Lucene, que é agnóstico em relação à linguagem. Se o teste indicar que o analisador padrão é insuficiente, substitua-o por um analisador de linguagem.

No Azure AI Search, os dois padrões de suporte a vários idiomas incluem:

  • Crie índices específicos do idioma onde todo o conteúdo alfanumérico esteja no mesmo idioma e todos os campos de cadeia de caracteres pesquisáveis sejam atribuídos para usar o mesmo analisador de linguagem.

  • Crie um índice combinado com versões específicas do idioma de cada campo (por exemplo, description_en, description_fr, description_ko) e, em seguida, restrinja a pesquisa de texto completo apenas a esses campos no momento da consulta. Essa abordagem é útil para cenários em que as variantes de idioma são necessárias apenas em alguns campos, como uma descrição.

Este artigo se concentra nas etapas e práticas recomendadas para configurar e consultar campos específicos do idioma em um índice combinado:

  • Defina um campo de cadeia de caracteres para cada variante de idioma.
  • Defina um analisador de idioma em cada campo.
  • Na solicitação de consulta, defina o searchFields parâmetro como campos específicos e use select para retornar apenas os campos que têm conteúdo compatível.

Nota

Se você estiver usando modelos de linguagem grandes em um padrão RAG (gerado aumentado) de recuperação, poderá projetar o prompt para retornar cadeias de caracteres traduzidas. Esse cenário está fora do escopo deste artigo.

Pré-requisitos

A análise de idioma aplica-se a campos do tipo Edm.String que são searchable, e que contêm texto localizado. Se você também precisa de tradução de texto, revise a próxima seção para ver se o enriquecimento de IA atende às suas necessidades.

Os campos de cadeia de caracteres não pesquisáveis e os campos de cadeia de caracteres não pesquisáveis não passam por análise lexical e não são tokenizados. Em vez disso, eles são armazenados e devolvidos textualmente.

Adicionar tradução de texto

Este artigo pressupõe que as cadeias de caracteres traduzidas já existem. Se esse não for o caso, você pode anexar serviços de IA do Azure a um pipeline de enriquecimento, invocando a tradução de texto durante a indexação. A tradução de texto depende do recurso indexador e dos serviços de IA do Azure, mas toda a configuração é feita no Azure AI Search.

Para adicionar tradução de texto, siga estes passos:

  1. Verifique se o conteúdo está em uma fonte de dados compatível.

  2. Crie uma fonte de dados que aponte para o seu conteúdo.

  3. Crie um conjunto de habilidades que inclua a habilidade Tradução de texto.

    A habilidade Tradução de Texto usa uma única cadeia de caracteres como entrada. Se você tiver vários campos, pode criar um conjunto de habilidades que chame a Tradução de Texto várias vezes, uma vez para cada campo. Como alternativa, você pode usar a habilidade Mesclagem de texto para consolidar o conteúdo de vários campos em uma cadeia de caracteres longa.

  4. Crie um índice que inclua campos para cadeias de caracteres traduzidas. A maior parte deste artigo aborda o design do índice e as definições de campo para indexação e consulta de conteúdo multilíngüe.

  5. Anexe um recurso de serviços de IA do Azure de várias regiões ao seu conjunto de habilidades.

  6. Crie e execute o indexador e, em seguida, aplique as orientações neste artigo para consultar apenas os campos de interesse.

Gorjeta

A tradução de texto é incorporada no assistente Importar dados. Se você tiver uma fonte de dados suportada com texto que gostaria de traduzir, poderá percorrer o assistente para experimentar a funcionalidade de deteção de idioma e tradução antes de escrever qualquer código.

Definir campos para conteúdo em diferentes idiomas

Na Pesquisa de IA do Azure, as consultas visam um único índice. Os desenvolvedores que desejam fornecer cadeias de caracteres específicas do idioma em uma única experiência de pesquisa normalmente definem campos dedicados para armazenar os valores: um campo para cadeias de caracteres em inglês, um para francês e assim por diante.

A analyzer propriedade em uma definição de campo é usada para definir o analisador de linguagem. Ele é usado para indexação e execução de consultas.

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

Criar e carregar um índice

Uma etapa intermediária é criar e preencher o índice antes de formular uma consulta. Mencionamos este passo aqui para completar. Uma maneira de determinar a disponibilidade do índice é verificando a lista de índices no portal.

Restringir a consulta e cortar resultados

Os parâmetros na consulta são usados para limitar a pesquisa a campos específicos e, em seguida, cortar os resultados de quaisquer campos que não sejam úteis para o seu cenário.

Parâmetros Propósito
searchFields Limita a pesquisa de texto completo à lista de campos nomeados.
select Corta a resposta para incluir apenas os campos especificados. Por padrão, todos os campos recuperáveis são retornados. O select parâmetro permite que você escolha quais retornar.

Dado o objetivo de restringir a pesquisa a campos que contêm cadeias de caracteres francesas, você usaria searchFields para direcionar a consulta para campos que contêm cadeias de caracteres nesse idioma.

Não é necessário especificar o analisador em uma solicitação de consulta. Um analisador de linguagem na definição de campo determina a análise de texto durante a execução da consulta. Para consultas que especificam vários campos, cada um invocando analisadores de linguagem diferentes, os termos ou frases são processados simultaneamente pelos analisadores atribuídos para cada campo.

Por padrão, uma pesquisa retorna todos os campos marcados como recuperáveis. Como tal, poderá querer excluir campos que não estejam em conformidade com a experiência de pesquisa específica do idioma que pretende fornecer. Especificamente, se você limitou a pesquisa a um campo com cadeias de caracteres em francês, provavelmente deseja excluir campos com cadeias de caracteres em inglês dos resultados. O uso do select parâmetro query oferece controle sobre quais campos são retornados ao aplicativo de chamada.

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

Exemplo em 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);
}

Impulsionar campos específicos do idioma

Às vezes, o idioma do agente que emite uma consulta não é conhecido, caso em que a consulta pode ser emitida em todos os campos simultaneamente. A preferência da IA por resultados em um determinado idioma pode ser definida usando perfis de pontuação. No exemplo abaixo, as correspondências encontradas na descrição em francês são pontuadas mais alto em relação às correspondências em outros idiomas:

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

Em seguida, inclua o perfil de pontuação no pedido de pesquisa:

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

Próximos passos