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 idioma que analisam cadeias de caracteres usando regras linguísticas de um idioma específico durante a indexação e a execução de consultas. Com um analisador de linguagem, você obtém um melhor tratamento de variações de caracteres, pontuação e formas de raiz de palavras.

O Azure AI Search dá suporte aos analisadores Microsoft e Lucene. Por padrão, o mecanismo de pesquisa usa o Lucene Standard, que é independente de linguagem. Se os testes indicarem que o analisador padrão é insuficiente, substitua-o por um analisador de idioma.

Na Pesquisa de IA do Azure, os dois padrões de suporte a vários idiomas incluem:

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

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

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

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

Observação

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

Pré-requisitos

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

Campos que não são cadeia de caracteres e campos cadeia de caracteres não pesquisáveis ​​não passam por análise lexical e não são tokenizados. Em vez disso, elas são armazenadas e retornadas literalmente.

Adicionar tradução de texto

Este artigo pressupõe que já existam cadeias de caracteres traduzidas. Se esse não for o caso, você poderá anexar os 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 usa uma dependência do recurso do 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 estas etapas:

  1. Verifique se o conteúdo está em uma fonte de dados com suporte.

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

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

    A habilidade de Tradução de Texto usa uma única cadeia de caracteres como entrada. Se você tiver vários campos, poderá criar um conjunto de habilidades que chama a Tradução de Texto várias vezes, uma vez para cada campo. Como alternativa, você pode usar a habilidade Fusão 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 definições de campo e design de índice para indexação e consulta de conteúdo em vários idiomas.

  5. Anexar 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 aplique as diretrizes neste artigo para consultar apenas os campos de interesse.

Dica

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

Definir campos para o conteúdo em idiomas diferentes

No Azure AI Search, as consultas direcionam um único índice. Os desenvolvedores que desejam fornecer cadeias de caracteres específicas a um idioma em uma experiência de pesquisa única 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 propriedade analyzer em uma definição de campo é usada para definir o analisador de idiomas. Ele é usado tanto para indexação quanto para 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 essa etapa aqui para fins de integridade. Uma maneira de determinar a disponibilidade do índice é verificar a lista de índices no portal.

Restringir a consulta e cortar os resultados

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

Parâmetros Finalidade
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 parâmetro select permite que você escolha quais serão retornados.

Com o objetivo de restringir a pesquisa a campos que contenham cadeia de caracteres em francês, você usaria searchFields para direcionar a consulta a campos que contenham cadeia de caracteres nesse idioma.

Não é necessário especificar o analisador em uma solicitação de consulta. Um analisador de idioma 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 diferentes analisadores de idioma, os termos ou frases são processados simultaneamente pelos analisadores atribuídos a cada campo.

Por padrão, uma pesquisa retorna todos os campos marcados como recuperáveis. Sendo assim, talvez convenha excluir campos que não estão em conformidade com a experiência de pesquisa específica a um idioma que você deseja fornecer. Especificamente, se você limitou a pesquisa a um campo com cadeias de caracteres em francês, você provavelmente deseja excluir os campos com cadeias de caracteres em inglês dos seus resultados. O uso do parâmetro de consulta select dá a você controle sobre quais campos são retornados ao aplicativo de chamada.

Exemplo no 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 de código 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);
}

Aumentar campos específicos do idioma

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

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

Em seguida, você incluiria o perfil de pontuação na solicitação 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óximas etapas