Como automatizar a busca e o upload de sinônimos usando nossa API de Sinônimos.

Descubra como os LLMs podem ser usados para identificar e gerar sinônimos automaticamente, permitindo que os termos sejam carregados programaticamente na API de sinônimos do Elasticsearch.

O Elasticsearch está repleto de novos recursos para ajudar você a criar as melhores soluções de pesquisa para o seu caso de uso. Aprenda a como colocá-los em prática em nosso webinar prático sobre como criar uma experiência moderna de IA de busca. Você também pode iniciar um teste gratuito na nuvem ou experimentar o Elastic em sua máquina local agora mesmo.

Melhorar a qualidade dos resultados de pesquisa é essencial para proporcionar uma experiência de usuário eficiente. Uma forma de otimizar as buscas é expandindo automaticamente os termos pesquisados por meio de sinônimos. Isso permite que as consultas sejam interpretadas de forma mais abrangente, abrangendo variações de idioma e, assim, melhorando a correspondência dos resultados.

Este blog explora como grandes modelos de linguagem (LLMs) podem ser usados para identificar e gerar sinônimos automaticamente, permitindo que esses termos sejam carregados programaticamente na API de sinônimos do Elasticsearch.

Quando usar sinônimos?

O uso de sinônimos pode ser uma solução mais rápida e econômica em comparação com a busca vetorial. Sua implementação é mais simples, pois não requer conhecimento profundo de embeddings ou um processo complexo de ingestão de vetores.

Além disso, o consumo de recursos é menor, uma vez que a busca vetorial exige maior capacidade de armazenamento e memória para indexação e recuperação de dados.

Outro aspecto importante é a regionalização da busca. Com sinônimos, é possível adaptar os termos de acordo com o idioma e os costumes locais. Isso é útil em situações em que os embeddings podem não corresponder a expressões regionais ou termos específicos de cada país. Por exemplo, algumas palavras ou siglas podem ter significados diferentes dependendo da região, mas são naturalmente tratadas como sinônimos pelos usuários locais. No Brasil, isso é bastante comum. "Abacaxi" e "ananás" são a mesma fruta (abacaxi), mas o segundo termo é mais comumente usado em algumas regiões do Nordeste. Da mesma forma, o conhecido "pão francês" no Sudeste pode ser conhecido como "pão careca" no Nordeste.

Como usar LLMs para gerar sinônimos?

Para obter sinônimos automaticamente, podemos usar Modelos de Aprendizagem Baseados em Lógica (LLMs), que analisam o contexto de um termo e sugerem variações apropriadas. Essa abordagem permite a expansão dinâmica de sinônimos, garantindo uma busca mais ampla e precisa sem depender de um dicionário fixo.

Nesta demonstração, usaremos um modelo de linguagem natural (LLM) para gerar sinônimos para produtos de comércio eletrônico. Muitas pesquisas retornam poucos ou nenhum resultado devido a variações nos termos pesquisados. Com sinônimos, podemos resolver esse problema. Por exemplo, uma busca por "smartphone" pode abranger diferentes modelos de celulares, garantindo que os usuários encontrem os produtos que procuram.

Pré-requisitos

Antes de começarmos, precisamos configurar o ambiente e definir as dependências necessárias. Utilizaremos a solução fornecida pela Elastic para executar o Elasticsearch e o Kibana localmente em um contêiner Docker. O código será escrito em Python, versão 3.9.6, com as seguintes dependências:

Criando o índice de produtos

Inicialmente, criaremos um índice de produtos sem suporte a sinônimos. Isso nos permitirá validar as consultas e compará-las com um índice que inclui sinônimos.

Para criar o índice, carregamos em massa um conjunto de dados de produtos usando o seguinte comando no Kibana DevTools:

Gerando sinônimos com LLM

Nesta etapa, utilizaremos um modelo de lógica latente (LLM) para gerar sinônimos dinamicamente. Para atingir esse objetivo, integraremos a API da OpenAI, definindo um modelo e um prompt adequados. O LLM receberá a categoria e o nome do produto, garantindo que os sinônimos sejam contextualmente relevantes.

A partir do índice de produtos criado, recuperaremos todos os itens da categoria "Eletrônicos" e enviaremos seus nomes para o LLM. O resultado esperado será algo como:

Com os sinônimos gerados, podemos registrá-los no Elasticsearch usando a API de Sinônimos.

Gerenciando sinônimos com a API de Sinônimos

A API de Sinônimos oferece uma maneira eficiente de gerenciar conjuntos de sinônimos diretamente dentro do sistema. Cada conjunto de sinônimos consiste em regras de sinonímia, onde um grupo de palavras é tratado como equivalente nas buscas.

Exemplo de criação de um conjunto de sinônimos


Isso cria um conjunto chamado "meu-conjunto-de-sinônimos", onde "olá" e "oi" são tratados como equivalentes, assim como "tchau" e "adeus".

Implementação da criação de sinônimos para o catálogo de produtos.

A seguir, está o método responsável por construir um conjunto de sinônimos e inseri-lo no Elasticsearch. As regras de sinônimos são geradas com base no mapeamento de sinônimos sugerido pelo LLM. Cada regra possui um ID, correspondente ao nome do produto no formato slug, e a lista de sinônimos calculada pelo LLM.

A seguir, está a carga útil da solicitação para criar o conjunto de sinônimos:

Com o conjunto de sinônimos criado no cluster, podemos prosseguir para a próxima etapa, que é a criação de um novo índice com suporte a sinônimos usando o conjunto definido.

O código Python completo, com os sinônimos gerados pelo LLM e a criação do conjunto de sinônimos definida pela API de Sinônimos, encontra-se abaixo:

Criando um índice com suporte a sinônimos

Um novo índice será criado onde todos os dados do índice products serão reindexados. Este índice usará o synonyms_filter, que aplica o products-synonyms-set criado anteriormente.

A seguir, o mapeamento de índice configurado para usar sinônimos:

Reindexando o índice

Agora, usaremos a API Reindex para migrar os dados do índice products para o novo índice products_02 , que inclui suporte a sinônimos. O seguinte código foi executado no Kibana DevTools:

Após a migração, o índice products_02 será preenchido e estará pronto para validar pesquisas usando o conjunto de sinônimos configurado.

Validação da pesquisa com sinônimos

Vamos comparar os resultados da pesquisa entre os dois índices. Executaremos a mesma consulta em ambos os índices e validaremos se os sinônimos estão sendo usados para recuperar os resultados.

Pesquisar no índice

Usaremos o Kibana para realizar buscas e analisar os resultados. No menu Analytics > Discovery, criaremos uma visualização de dados para visualizar os dados dos índices que criamos.

Dentro do Discovery, clique em Visualização de Dados e defina um nome e um padrão de índice. Para o índice "produtos", usaremos o padrão "produtos ". Em seguida, repetiremos o processo para criar uma nova visualização de dados para o índice "products_02", usando o padrão "products_02" .

Com as visualizações de dados configuradas, podemos retornar a Analytics > Discovery e iniciar as validações.

Aqui, após selecionar os produtos DataView e pesquisar pelo termo "tablet", não obtemos resultados, embora saibamos que existem produtos como "Kindle Paperwhite" e "Apple iPad Air".

Pesquisar no índice

Ao executar a mesma consulta na visualização de dados "products_synonyms", que suporta sinônimos, os produtos foram recuperados com sucesso. Isso demonstra que o conjunto de sinônimos configurado está funcionando corretamente, garantindo que diferentes variações dos termos pesquisados retornem os resultados esperados.

Podemos obter o mesmo resultado executando a mesma consulta diretamente no Kibana DevTools. Basta pesquisar o índice products_02 usando a API de pesquisa do Elasticsearch:

Conclusão

A implementação de sinônimos no Elasticsearch melhorou a precisão e a abrangência das buscas no catálogo de produtos. O principal diferencial foi o uso de um LLM ( Language-Level Model), que gerou sinônimos automaticamente e contextualmente, eliminando a necessidade de listas predefinidas. O modelo analisou nomes e categorias de produtos, garantindo sinônimos relevantes para o comércio eletrônico.

Além disso, a API de Sinônimos simplificou o gerenciamento de dicionários, permitindo que os conjuntos de sinônimos fossem modificados dinamicamente. Com essa abordagem, a busca tornou-se mais flexível e adaptável a diferentes padrões de consulta do usuário.

Esse processo pode ser continuamente aprimorado com novos dados e ajustes de modelo, garantindo uma experiência de pesquisa cada vez mais eficiente.

Referências

Executar o Elasticsearch localmente

https://www.elastic.co/guide/en/elasticsearch/reference/current/run-elasticsearch-locally.html

API de sinônimos

https://www.elastic.co/guide/en/elasticsearch/reference/current/synonyms-apis.html

Conteúdo relacionado

Pronto para criar buscas de última geração?

Uma pesquisa suficientemente avançada não se consegue apenas com o esforço de uma só pessoa. O Elasticsearch é impulsionado por cientistas de dados, especialistas em operações de aprendizado de máquina, engenheiros e muitos outros que são tão apaixonados por buscas quanto você. Vamos nos conectar e trabalhar juntos para construir a experiência de busca mágica que lhe trará os resultados desejados.

Experimente você mesmo(a)