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.
Iniciando a implementação da busca semântica
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:
- Crie o ponto de inferência.
- Crie o índice, definindo o campo de descrição como semantic_text para que ele possa receber os embeddings.
- 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.
Desafios resolvidos pela busca semântica
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 pesquisa | Nome | Pontuação |
|---|---|---|
| Lexical | Caranguejo-das-neves Bairdi do Alasca, peixe do noroeste | 10,453125 |
| Lexical | Molho Gourmet Original do Sr. Yoshida | 7,2289705 |
| Lexical | Pacote Variado de Frutos do Mar Premium - 20 unidades | 7.1924105 |
| Lexical | Pargo-vermelho americano - Inteiro, com cabeça, limpo | 6,998647 |
| Lexical | Garras 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 pesquisa | Nome | Pontuação |
|---|---|---|
| Semântica | Robalo inteiro, limpo e com cabeça. | 16.175909 |
| Semântica | Bacalhau-negro do Alasca (peixe-sable) | 15,855331 |
| Semântica | Pargo-vermelho americano - Inteiro, com cabeça | 15,454779 |
| Semântica | Caranguejo-das-neves Bairdi do Alasca, peixe do noroeste | 15,855331 |
| Semântica | Pargo-vermelho americano - Inteiro, com cabeça | 15,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 pesquisa | Nome | Pontuação |
|---|---|---|
| Lexical | Etiquetas adesivas Avery Easy Peel para endereços, pacote com 4200 unidades | 8.017723 |
| Lexical | Refeições portáteis/de emergência com aquecimento automático Omeals 32 | 6,592727 |
| Lexical | Poke de Atum Albacora em Cubos da Coastal Seafood | 5,836883 |
| Lexical | Espuma Hefty Super Weight de 340 g (12 oz) | 5,8116536 |
| Lexical | Guardanapos Vanity Fair Everyday, 2 camadas, pacote com 110 unidades | 5,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 pesquisa | Nome | Pontuação |
|---|---|---|
| Semântica | Refeições portáteis/de emergência com aquecimento automático Omeals 32 | 14.610006 |
| Semântica | Nissin, Cup Noodles, Camarão, 70g | 13,751424 |
| Semântica | Mistura para Waffles e Panquecas Namaste Sem Glúten | 13,73376 |
| Semântica | Batatas Idaho, Batatas Hashbrown Douradas Grelhadas | 12,549422 |
| Semântica | Nissin, Cup Noodles, Frango, 24 unidades | 12.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 pesquisa | Nome | Pontuação |
|---|---|---|
| Lexical | Prime Hydration+ Sticks - Mistura para Bebida Eletrolítica | 14,492869 |
| Lexical | Capri Sun, 100% Suco, Pacote Variado | 12.340851 |
| Lexical | Bebida energética Joyburst, Frosé Rosé, 12 | 11,839179 |
| Lexical | Pop-Tarts da Kellogg's, com cobertura de açúcar mascavo e canela. | 9,97788 |
| Lexical | Kind Mini Bars, Pacote Variado, 0,7 | 9,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 pesquisa | Nome | Pontuação |
|---|---|---|
| Semântica | Refrigerante Prebiótico Olipop 355ml (12 oz) - Variedade | 14,776867 |
| Semântica | Bai Antioxidante Cocofusion, Pacote Variado, 18 | 14,663253 |
| Semântica | Bebida energética Monster, Zero Ultra, 24 | 14,486348 |
| Semântica | Joyburst Energy Variedade, 355 ml | 14.007214 |
| Semântica | Bebida energética Joyburst, Frosé Rosé, 12 | 13,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




