Implementação de busca semântica: Construindo uma busca de receitas com Elasticsearch

Implementação da busca semântica no contexto de sites de comércio eletrônico.

Novo no Elasticsearch? Participe do nosso webinar Introdução ao Elasticsearch. Você também pode iniciar um teste gratuito na nuvem do Elastic ou experimentar o Elastic em sua máquina agora.

Introdução

Muitos sites de comércio eletrônico estão interessados em aprimorar a experiência de busca de receitas. A busca semântica, quando aplicada corretamente, permite que os clientes encontrem rapidamente os ingredientes necessários com base em consultas mais naturais, como "algo para o Dia dos Namorados" ou "refeições de Ação de Graças".

Neste artigo, demonstraremos como usar o Elasticsearch para implementar uma busca semântica que suporte esse tipo de consulta. Vamos configurar um índice para armazenar o catálogo de ingredientes e produtos de um supermercado e demonstrar como esse índice pode ser usado para melhorar as buscas por receitas. Ao longo do artigo, explicaremos como criar essa estrutura de dados e aplicar técnicas de processamento de linguagem natural para fornecer resultados relevantes e alinhados à intenção do cliente.

Todo o código apresentado neste artigo foi desenvolvido em Python e está disponível no GitHub. Você pode acessar o repositório para revisar o código-fonte, fazer ajustes conforme necessário e implementar as soluções diretamente em seu ambiente de desenvolvimento.

Para começar a implementar a busca semântica, primeiro precisamos definir o modelo de linguagem natural. A Elastic oferece seu próprio modelo, o ELSER, mas também oferece suporte para a integração de modelos de PNL de diversos fornecedores, como o Hugging Face. Essa flexibilidade permite que você escolha a opção que melhor se adapta às suas necessidades.

Neste artigo, utilizaremos o ELSER, que reduz a complexidade de implantação e gerenciamento de modelos de PNL (Processamento de Linguagem Natural). Além disso, o Elastic oferece o recurso semantic_text , que simplifica bastante o processo. Com o semantic_text, todo o processo de geração de embeddings torna-se simples e automatizado. Basta definir um ponto de inferência e especificar o campo que receberá os embeddings no seu mapeamento de índice. Durante a indexação de documentos, os elementos incorporados serão gerados e associados automaticamente ao campo especificado.

Etapas de configuração

A seguir estão os passos para criar um índice com suporte para pesquisa semântica. Seguindo estas instruções, você terá um índice configurado e pronto para buscas semânticas:

  1. Crie o ponto de inferência.
  2. Crie o índice, definindo o campo de descrição como semantic_text para que ele possa receber os embeddings.
  3. Indexe os dados no índice do catálogo de produtos, que armazenará um catálogo de produtos. Este catálogo foi obtido a partir de um conjunto de dados disponível aqui.

Aplicação da busca semântica em supermercados

Agora que temos o índice preenchido com dados de produtos de supermercado, estamos testando e validando consultas para melhorar os resultados da pesquisa usando a busca semântica. Nosso objetivo é proporcionar uma experiência de busca mais inteligente, que compreenda o contexto e a intenção do usuário, oferecendo resultados mais relevantes e precisos.

Com base no catálogo de produtos, vamos explorar como a busca semântica pode transformar a experiência de busca em supermercados, abordando problemas de vocabulário e contexto que a busca lexical tradicional costuma ter dificuldades em resolver.

1. Interpretação das intenções culinárias

Problema 01: Um cliente pode pesquisar por "frutos do mar para grelhar", mas um sistema de busca lexical pode não entender completamente a intenção por trás da consulta. Pode ser que o sistema não consiga identificar todos os frutos do mar adequados para grelhar, retornando apenas aqueles que contenham exatamente os termos "frutos do mar" ou "grelhar" no título do produto.

Primeiramente, realizaremos uma busca lexical e analisaremos os resultados. Em seguida, faremos o mesmo com uma busca semântica, comparando os resultados para o mesmo termo de busca.

Consulta de pesquisa lexical

Resultados:

Tipo de pesquisaNomePontuação
LexicalCaranguejo-das-neves Bairdi do Alasca, peixe do noroeste10,453125
LexicalMolho Gourmet Original do Sr. Yoshida7,2289705
LexicalPacote Variado de Frutos do Mar Premium - 20 unidades7.1924105
LexicalPargo-vermelho americano - Inteiro, com cabeça, limpo6,998647
LexicalGarras e patas de lagosta, capturadas de forma sustentável na natureza.6,438654

A busca lexical retornou alguns frutos do mar adequados para grelhar, como o pargo-vermelho americano e o caranguejo-das-neves-do-Alasca Bairdi da Northwest Fish. No entanto, a busca lexical retornou produtos menos relevantes no topo da lista, como o molho Mr. Yoshida, que não é um produto à base de frutos do mar, mas sim um molho para carne, sugerindo que o algoritmo lexical teve dificuldades em compreender totalmente o contexto de "para grelhar".

Solução de busca semântica

Usamos uma consulta que combina o termo "frutos do mar" com contextos de preparo como "grelhar" para retornar uma lista abrangente de opções, como filés de peixe, camarão e vieiras, que são ideais para grelhar — mesmo que as palavras "grelhar" ou "frutos do mar" não apareçam diretamente no nome do produto. Isso garante que os resultados da pesquisa estejam mais alinhados com a intenção do cliente.

Pesquisa semântica de consulta:

Tipo de pesquisaNomePontuação
SemânticaRobalo inteiro, limpo e com cabeça.16.175909
SemânticaBacalhau-negro do Alasca (peixe-sable)15,855331
SemânticaPargo-vermelho americano - Inteiro, com cabeça15,454779
SemânticaCaranguejo-das-neves Bairdi do Alasca, peixe do noroeste15,855331
SemânticaPargo-vermelho americano - Inteiro, com cabeça15,3892355

A busca semântica não apenas retornou produtos diretamente relacionados ao termo "frutos do mar", mas também compreendeu o contexto de "grelhar", apresentando peixes inteiros e filés adequados para grelhar. O ponto crucial aqui é a precisão dos resultados, que incluíram opções de peixes inteiros, como o robalo e o bacalhau negro do Alasca, ambos comumente usados para grelhar.

Problema 02 : Muitos clientes procuram soluções rápidas e fáceis para o jantar depois de um longo dia de trabalho, usando termos como "refeições fáceis para a semana". A busca lexical tradicional pode não capturar completamente o conceito de refeições rápidas, muitas vezes focando apenas em produtos que incluem a palavra "fácil" em seu nome.

Assim como fizemos no problema anterior, começaremos realizando uma busca lexical. Em seguida, aplicaremos uma solução utilizando busca semântica.

Consulta de pesquisa lexical

Resultados:

Tipo de pesquisaNomePontuação
LexicalEtiquetas adesivas Avery Easy Peel para endereços, pacote com 4200 unidades8.017723
LexicalRefeições portáteis/de emergência com aquecimento automático Omeals 326,592727
LexicalPoke de Atum Albacora em Cubos da Coastal Seafood5,836883
LexicalEspuma Hefty Super Weight de 340 g (12 oz)5,8116536
LexicalGuardanapos Vanity Fair Everyday, 2 camadas, pacote com 110 unidades5,752989

A busca lexical retornou resultados muito menos relevantes, incluindo itens completamente não relacionados a refeições, como Etiquetas de Endereço Avery Easy Peel e Guardanapos Vanity Fair Everyday. Esses produtos não atendem à necessidade do usuário por refeições rápidas. Embora a busca lexical tenha retornado um produto útil (Omeals Self Heating Emergency Meals), outros resultados, como guardanapos e etiquetas, só correspondiam às palavras "fácil" ou "noite de semana" em suas descrições, sem realmente abordar a intenção do usuário de encontrar uma solução rápida para refeições.

Solução de busca semântica

Implementamos uma consulta que entende a intenção por trás de refeições rápidas e fáceis. Associa produtos que podem ser preparados rapidamente, como carnes pré-cozidas, massas congeladas ou kits de refeição, mesmo que não incluam explicitamente a palavra "fácil" no nome. Essa abordagem garante que os clientes encontrem as opções mais adequadas para jantares rápidos durante a semana, atendendo à necessidade de praticidade.

Pesquisa semântica de consulta

Resultados:

Tipo de pesquisaNomePontuação
SemânticaRefeições portáteis/de emergência com aquecimento automático Omeals 3214.610006
SemânticaNissin, Cup Noodles, Camarão, 70g13,751424
SemânticaMistura para Waffles e Panquecas Namaste Sem Glúten13,73376
SemânticaBatatas Idaho, Batatas Hashbrown Douradas Grelhadas12,549422
SemânticaNissin, Cup Noodles, Frango, 24 unidades12.034527

A busca semântica retornou produtos claramente relacionados a refeições rápidas e práticas, como macarrão instantâneo (Cup Noodles), batatas pré-cozidas e misturas para panquecas, que são opções típicas para jantares fáceis durante a semana. Isso demonstra que a busca semântica consegue captar o conceito por trás da frase "refeições fáceis para noites de semana", identificando a intenção do usuário de encontrar refeições rápidas e práticas. Curiosamente, produtos de outras categorias, como "refrigerantes", também podem ser incluídos quando relevantes no contexto (por exemplo, bebidas para acompanhar as refeições).

2. Termos regionais e variações de vocabulário

Problema: Um cliente pode pesquisar por "refrigerante", enquanto outro cliente pode usar "refrigerante" para o mesmo produto. A busca lexical tradicional não reconhece que ambos os termos se referem ao mesmo item.

Consulta de pesquisa lexical

Resultados:

Tipo de pesquisaNomePontuação
LexicalPrime Hydration+ Sticks - Mistura para Bebida Eletrolítica14,492869
LexicalCapri Sun, 100% Suco, Pacote Variado12.340851
LexicalBebida energética Joyburst, Frosé Rosé, 1211,839179
LexicalPop-Tarts da Kellogg's, com cobertura de açúcar mascavo e canela.9,97788
LexicalKind Mini Bars, Pacote Variado, 0,79,336912

A busca lexical concentra-se em correspondências exatas de palavras. Embora tenha retornado produtos como Prime Hydration e Capri Sun, a correspondência direta com o termo "pop" também levou a resultados irrelevantes, como Pop-Tarts da Kellogg's, que é um lanche e não uma bebida. Isso demonstra como a busca lexical pode ser menos eficaz quando um termo possui múltiplos significados ou pode ser ambíguo.

Solução de busca semântica

Em consultas semânticas, podemos superar o problema das variações de vocabulário que a busca lexical não consegue resolver. Ao expandir os termos de pesquisa, conseguimos obter resultados baseados no significado contextual, fornecendo respostas mais relevantes e abrangentes.

Consulta:

Resultados:

Tipo de pesquisaNomePontuação
SemânticaRefrigerante Prebiótico Olipop 355ml (12 oz) - Variedade14,776867
SemânticaBai Antioxidante Cocofusion, Pacote Variado, 1814,663253
SemânticaBebida energética Monster, Zero Ultra, 2414,486348
SemânticaJoyburst Energy Variedade, 355 ml14.007214
SemânticaBebida energética Joyburst, Frosé Rosé, 1213,641038

A busca semântica retorna produtos que correspondem diretamente ao conceito de "refrigerante" como sinônimo de "soda" (como Olipop Prebiotics Soda), mesmo que o termo exato "refrigerante" não esteja presente no nome do produto. A busca compreendeu a intenção do usuário — uma bebida refrescante e com baixo teor de açúcar — e conseguiu retornar produtos relevantes, incluindo opções como refrigerantes prebióticos (Olipop) e bebidas energéticas sem açúcar (Monster Energy Drink).

Conclusão

A implementação da busca semântica no contexto de supermercados provou ser altamente eficaz na compreensão de consultas complexas como "frutos do mar para grelhar" e "refeições fáceis para a semana". Essa abordagem nos permitiu interpretar a intenção do usuário com mais precisão, retornando produtos altamente relevantes.

Ao utilizar o Elasticsearch e simplificar o processo com o ELSER, conseguimos aplicar a busca semântica de forma rápida e eficiente, melhorando significativamente os resultados da busca e proporcionando uma experiência de compra mais ágil e direcionada. Isso não apenas otimizou o processo de busca, mas também aumentou a relevância dos resultados oferecidos aos clientes.

Referências

Modelo ELSER:

https://www.elastic.co/guide/en/elasticsearch/reference/current/put-inference-api.html

https://www.elastic.co/guide/en/elasticsearch/reference/current/infer-service-elser.html

Texto semântico:

https://www.elastic.co/guide/en/elasticsearch/reference/current/semantic-text.html

https://www.elastic.co/guide/en/elasticsearch/reference/current/semantic-search.html

Conjunto de dados:

https://www.kaggle.com/datasets/bhavikjikadara/grocery-store-dataset?select=GroceryDataset.csv

Busca semântica:

https://www.elastic.co/guide/en/elasticsearch/reference/current/semantic-search.html

https://www.elastic.co/guide/en/elasticsearch/reference/current/semantic-search-semantic-text.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)