
Vamos começar com a maneira mais fácil - vamos tentar pescar com as mãos. Abrimos a base de dados de produtos de compras e começamos a procurar um produto semelhante. As chances são altas de que não pegaremos nada à noite.
Vamos tentar filtrar de alguma forma a base de mercadorias das compras. Cada item em compras é atribuído a um código OKPD2. O Classificador Russo de Produtos por Atividade Econômica é um código que contém informações sobre um produto.
Por exemplo:

agora que temos uma vara de pescar, ficou um pouco melhor, mas por algum motivo o peixe não quer ficar pendurado no anzol.
Não fique chateado, usamos a isca. Precisamos encontrar uma maneira de identificar automaticamente produtos semelhantes em um OKPD2. Para fazer isso, você precisa apresentar o significado semântico da descrição do produto na forma de um tensor. Para processar as informações, você precisa convertê-las em um formato de número. Para fazer isso, usaremos um mecanismo especial de tradução de palavras no espaço vetorial Word2Vec, que traduz uma palavra em uma sequência de números de um determinado tamanho, chamada de vetor ou tensor. Word2Vec é um modelo especialmente treinado para entender o significado semântico de uma palavra. Produtos do banco de dados com o mesmo OKPD2 devem ser convertidos em tensores. Ótimo, agora temos um de nossos produtos tensores e vários outros tensores de produto.
Iremos pesquisar o produto mais próximo pela distância do cosseno, quanto mais o produto do banco de dados for semelhante ao nosso, menor será a distância do cosseno. Escolhemos um produto com uma distância mínima de cosseno e este será o peixe desejado.
Vamos analisar o método descrito na prática. Vamos começar convertendo a descrição do produto em um tensor. Primeiro, a descrição do produto é tokenizada, ou seja, é dividida em palavras separadas. Para transformar as palavras em seu significado semântico, foi utilizado um Word2Vec pré-treinado com dimensão 100 (ou seja, uma palavra é representada por um conjunto de 100 números).
Temos uma variedade de embeddings. Para calcular a distância do cosseno, é necessário calcular a representação vetorial de todo o texto que contém a descrição do produto. A maneira mais fácil de implementá-lo é obter a média entre todas as incorporações de palavras descritivas, enquanto o significado semântico do produto será distorcido, mas isso não é crítico para resolver o problema.

Depois de traduzir nosso produto e todos os produtos com o mesmo OKPD em embeddings, a próxima etapa é calcular a distância cosseno entre eles.

Como você pode ver no diagrama abaixo, a coisa mais próxima do produto “Big Fish” são os produtos “Salmon enorme” e “Goldfish”.

Assim, pode-se supor que o preço de um peixe grande se situe entre os preços de um peixe dourado e de um salmão enorme. Os seguintes resultados foram obtidos em dados reais:

Às vezes, essa abordagem pode não funcionar bem. Por exemplo, no banco de dados do produto, não haverá nenhum produto semelhante ao nosso. Então, o peixe capturado será muito pequeno e o módulo retornará um intervalo vazio.

O último método que examinaremos será a pesca com rede. Yandex usará como uma rede. Uma solicitação é formada a partir da descrição do produto e as primeiras 20 respostas são selecionadas para análise posterior. Não faz sentido responder às seguintes respostas, uma vez que sua relevância é questionável. Os textos das primeiras 20 respostas são enviados para o localizador de preços. O modelo seleciona preços a partir das respostas e forma uma faixa de preços a partir delas. Muitos peixes diferentes entram na rede de pesca, então a faixa de preço é muito barulhenta. Para filtrar, vamos eliminar outliers. Se os preços obtidos forem distribuídos normalmente, apenas 68% dos preços podem ser retidos. Ou seja, vamos deixar os preços que estão no intervalo entre a diferença entre a média de todos os preços e o desvio padrão, e a soma da média e do desvio padrão. É assim que as faixas de preços dos produtos aparecem no Yandex:
Todos os métodos de pesca considerados têm seus prós e contras. A escolha de qual opção é preferível é feita por cada pescador de acordo com suas necessidades de precisão e tempo. Feliz captura!