Personalização da Busca do PicPay via Expansão de Query Baseada em Word Embeddings

Aplicação Prática em Python

João Augusto Leite
Inside PicPay
5 min readDec 23, 2021

--

1. Introdução

Sistemas de busca modernos fazem uso de técnicas de aprendizado de máquina que são cruciais para aumentar a personalização da experiência do usuário, fornecendo resultados mais apropriados e direcionando o usuário de forma rápida e satisfatória para o objeto/destino buscado.

No caso do PicPay, um ambiente de busca extremamente diverso, com múltiplos tipos de entidades (pessoas, estabelecimentos, serviços etc) essa tarefa é de extrema importância para que possamos oferecer ao usuário uma experiência mais inteligente e direcionada, poupando-o do esforço de percorrer manualmente diversas telas de resultados de busca.

Um sistema de busca pode ser composto de diversas etapas complementares que ajudam a compreender a intenção do usuário, complementar e/ou corrigir os termos de busca, consultar a base de dados, rankear os resultados e apresentá-los. Essa pipeline genérica é exemplificada na figura 1.

Figura 1: Pipeline de Processamento de Query

Nesse artigo falaremos de uma dessas etapas, responsável por complementar e enriquecer a query do usuário, de forma que seja possível sugerir termos semelhantes associados à intenção do usuário. Esse processo no contexto de sistemas de busca recebe o nome de Expansão de Query.

2. Expansão de Query

Por vezes, a query do usuário pode ser, por si só, insuficiente para direcioná-lo ao objeto desejado. Em outros casos, o usuário pode não saber exatamente o que esta buscando. Em ambos os cenários, a técnica de expansão de query faz com que seja possível enriquecer os termos digitados pelo usuário com novos, que auxiliem o sistema de busca a prover resultados satisfatórios. Em termos práticos, essa tarefa consiste em agregar à lista de termos Q provida pelo usuário, novos termos semelhantes/complementares T' e, opcionalmente, remover termos indesejados T'', obtendo a query aumentada Q+.

Figura 2: Processo de Expansão de Query

Nesse artigo será apresentada uma abordagem com Word Embeddings, que são representações vetoriais para palavras em língua natural. Na próxima sessão será apresentada uma breve introdução à técnica.

3. Vetores de Palavras (Word Embeddings)

Algoritmos de Aprendizado de Máquina não costumam trabalhar diretamente com texto. Usualmente, alguma técnica é aplicada sobre o texto para gerar uma representação numérica que possa ser interpretada por um sistema computacional. Existem diversas técnicas que fazem esse processo, como Bag-of-Words, TF-IDF e Word Embeddings. Cada técnica possui seus prós e contras.

A intuição por trás das Word Embeddings é que podemos representar cada termo por uma sequência de valores numéricos de tamanho fixo e então, através de um processo de otimização, obter um espaço vetorial que capture a semântica das palavras, ou seja, termos semelhantes possuem vetores próximos, termos antagônicos possuem vetores opostos e etc. Isso faz com que seja possível aplicar operações matemáticas nos vetores, como soma, subtração e multiplicação.

Figura 3: Exemplo de Espaço Vetorial

Um conceito extremamente importante, principalmente no contexto de expansão de query, é o de distância entre vetores, que permite obter uma métrica que represente a similaridade entre duas palavras.

Figura 4: Exemplos de Operações com Vetores de Palavras

Com o cálculo de distância, podemos medir a similaridade entre 2 termos mesmo que eles sejam palavras com grafias completamente diferentes. Não estamos lidando com similaridade de strings, mas sim com similaridade semântica entre palavras. Esse conceito é o que nos permitirá obter a lista de termos aumentada T' a partir da query Q do usuário.

4. Implementação em Python

Nessa seção serão apresentadas implementações em Python da solução. Utilizaremos a biblioteca gensim para carregar os vetores obtidos pelo NILC (Núcleo Interinstitucional de Linguística Computacional).

Após baixar os vetores do site do NILC, podemos carregá-los em memória usando a classe KeyedVectors da biblioteca gensim. O modelo nada mais é do que uma espécie de dicionário com métodos auxiliares. Você pode acessar o vetor de uma palavra simplesmente passando a string da mesma forma que o faz com um dicionário em python. A classe KeyedVectors possui diversos métodos interessantes, incluindo "distance", que retorna um valor no intervalo [0,1]. Valores próximos de 0 indicam palavras com semântica semelhante, enquanto que valores próximos de 1 indicam palavras muito dissimilares, não relacionadas.

Como carregar o modelo, acessar os vetores e calcular distância
Figura 5: Palavras, seus Vetores e Distância

Usando esse conceito, podemos quebrar a query do usuário em uma lista de termos e buscar por termos semelhantes em um dado conjunto. Nesse exemplo, usaremos nomes de lojas de serviços cadastrados no PicPay como objetos de busca para associar à query do usuário.

O processo consiste em percorrer os termos da query do usuário e os termos do objeto de busca, calculando as distâncias entre todos os pares de palavras. Podemos definir um limiar de similaridade e assim descartar pares com distância maior que esse valor. Os objetos de busca que não forem filtrados por esse limiar, serão adicionados na lista aumentada de termos.

Função de Expansão de Query

Como exemplo, se rodarmos essa função com uma query hipotética do usuário , "comprar games", teríamos o seguinte resultado:

Figura 6: Expansão de Query para "comprar games"
Figura 7: Expansão de Query para "restaurantes delivery"

5. Conclusão

Expansão de Query é um processo muito importante para facilitar a busca do usuário dentro de um super app como o PicPay. Na figura 8, vemos que o usuário, ao buscar "comprar games", provavelmente está a procura de algum dos serviços disponíveis no PicPay relacionados a jogos, e sem algum mecanismo como a expansão de query, seria impossível relacionarmos esses serviços com essa query do usuário.

6. Squad de Busca no PicPay

Aqui no PicPay, existem diversos outros desafios nesse cenário de busca, como personalização, correção ortográfica, autocomplete, detecção de query intention, entre outros. Essas soluções desenvolvidas pelo nosso time objetivam oferecer a melhor experiência de busca possível ao nosso cliente.

E claro, nada poderia ser feito se não estivéssemos atuando em uma equipe interdisciplinar. Nossa squad de busca está dentro da tribo de Personalização e Experimentação, contendo Cientistas de Dados, Analista de Dados, Designers, UX Writer, UX Research, PM, TM, Devs Backend, além da gestão de AI e Produto.

Figura 8: Squad de Busca no PicPay

6. Referências

  1. Query Expansion Techniques for Information Retrieval: a Survey
  2. Word Embedding: fazendo o computador entender o significado das palavras
  3. A Beginner’s Guide to Word Embedding with Gensim Word2Vec Model
  4. Núcleo Interinstitucional de Linguística Computacional (NILC)
  5. Repositório de Word Embeddings do NILC
  6. PicPay

--

--