🚀 Experimente o Zilliz Cloud, o Milvus totalmente gerenciado, gratuitamente—experimente um desempenho 10x mais rápido! Experimente Agora>>

milvus-logo
LFAI
  • Home
  • Blog
  • Criar uma pesquisa semântica rápida

Criar uma pesquisa semântica rápida

  • Scenarios
April 19, 2021
Elizabeth Edmiston

A pesquisa semântica é uma óptima ferramenta para ajudar os seus clientes, ou os seus funcionários, a encontrar os produtos ou as informações certas. Ela pode até mesmo trazer à tona informações difíceis de indexar para obter melhores resultados. Dito isto, se as suas metodologias semânticas não estiverem a ser implementadas para trabalhar rapidamente, não lhe servirão de nada. O cliente ou funcionário não vai ficar sentado enquanto o sistema demora a responder à sua consulta - e é provável que milhares de outras estejam a ser ingeridas ao mesmo tempo.

Como é que se pode tornar a pesquisa semântica rápida? A pesquisa semântica lenta não é suficiente.

Felizmente, este é o tipo de problema que a Lucidworks adora resolver. Recentemente, testamos um cluster de tamanho modesto - leia mais detalhes - que resultou em 1500 RPS (solicitações por segundo) em uma coleção de mais de um milhão de documentos, com um tempo médio de resposta de aproximadamente 40 milissegundos. Isto é que é velocidade a sério.


Para que a magia da aprendizagem automática seja extremamente rápida, a Lucidworks implementou a pesquisa semântica utilizando a abordagem de pesquisa vetorial semântica. Há duas partes essenciais.


Primeira parte: o modelo de aprendizado de máquina

Primeiro, é necessária uma forma de codificar o texto num vetor numérico. O texto pode ser uma descrição de um produto, uma consulta de pesquisa do utilizador, uma pergunta ou mesmo uma resposta a uma pergunta. Um modelo de pesquisa semântica é treinado para codificar o texto de forma a que o texto que é semanticamente semelhante a outro texto seja codificado em vectores numericamente "próximos" uns dos outros. Este passo de codificação tem de ser rápido para suportar as milhares ou mais pesquisas possíveis de clientes ou consultas de utilizadores que chegam a cada segundo.


Segunda parte: O motor de pesquisa de vectores

Em segundo lugar, é necessária uma forma de encontrar rapidamente as melhores correspondências para a pesquisa do cliente ou consulta do utilizador. O modelo terá codificado esse texto num vetor numérico. A partir daí, é necessário compará-lo com todos os vectores numéricos do seu catálogo ou listas de perguntas e respostas para encontrar as melhores correspondências - os vectores que estão "mais próximos" do vetor de consulta. Para isso, é necessário um motor de vectores que possa tratar toda essa informação de forma eficaz e à velocidade da luz. O motor pode conter milhões de vectores e o utilizador apenas pretende as cerca de vinte melhores correspondências à sua consulta. E, claro, precisa de tratar cerca de mil dessas consultas por segundo.

Para enfrentar estes desafios, adicionámos o motor de pesquisa de vectores Milvus na nossa versão Fusion 5.3. O Milvus é um software de código aberto e é rápido. O Milvus utiliza o FAISS(Facebook AI Similarity Search), a mesma tecnologia que o Facebook utiliza na produção para as suas próprias iniciativas de aprendizagem automática. Quando necessário, pode ser executado ainda mais rapidamente na GPU. Quando o Fusion 5.3 (ou superior) é instalado com o componente de aprendizagem automática, o Milvus é automaticamente instalado como parte desse componente para que possa ativar todas estas capacidades com facilidade.

O tamanho dos vectores de uma determinada coleção, especificado quando a coleção é criada, depende do modelo que produz esses vectores. Por exemplo, uma determinada coleção pode armazenar os vectores criados a partir da codificação (através de um modelo) de todas as descrições de produtos num catálogo de produtos. Sem um motor de pesquisa vetorial como o Milvus, as pesquisas por semelhança não seriam viáveis em todo o espaço vetorial. Assim, as pesquisas por semelhança teriam de ser limitadas a candidatos pré-selecionados do espaço vetorial (por exemplo, 500) e teriam um desempenho mais lento e resultados de menor qualidade. O Milvus pode armazenar centenas de milhares de milhões de vectores em várias colecções de vectores para garantir que a pesquisa é rápida e os resultados são relevantes.


Voltemos ao fluxo de trabalho da pesquisa semântica, agora que aprendemos um pouco sobre o motivo pelo qual o Milvus pode ser tão importante. A pesquisa semântica tem três fases. Durante a primeira fase, o modelo de aprendizagem automática é carregado e/ou treinado. Depois, os dados são indexados no Milvus e no Solr. A fase final é a fase de consulta, quando ocorre a pesquisa propriamente dita. Iremos concentrar-nos nestas duas últimas fases abaixo.


Indexação no Milvus

Lucidworks-1.png Lucidworks-1.png

Como mostrado no diagrama acima, a etapa de consulta começa de forma semelhante à etapa de indexação, apenas com consultas chegando em vez de documentos. Para cada consulta:

  1. A consulta é enviada para o pipeline de indexação do Smart Answers.
  2. A consulta é então enviada para o modelo de ML.
  3. O modelo ML devolve um vetor numérico (encriptado a partir da consulta). Mais uma vez, o tipo de modelo determina o tamanho do vetor.
  4. O vetor é enviado para o Milvus, que determina quais os vectores, na coleção Milvus especificada, que melhor correspondem ao vetor fornecido.
  5. O Milvus devolve uma lista de IDs e distâncias únicas correspondentes aos vectores determinados no passo quatro.
  6. Uma consulta contendo esses IDs e distâncias é enviada ao Solr.
  7. O Solr devolve então uma lista ordenada dos documentos associados a esses IDs.


Teste de escala

Para provar que os nossos fluxos de pesquisa semântica estão a ser executados com a eficiência que exigimos para os nossos clientes, executámos testes de escala utilizando scripts Gatling na Google Cloud Platform, utilizando um cluster Fusion com oito réplicas do modelo ML, oito réplicas do serviço de consulta e uma única instância do Milvus. Os testes foram executados usando os índices FLAT e HNSW do Milvus. O índice FLAT tem 100% de recuperação, mas é menos eficiente - exceto quando os conjuntos de dados são pequenos. O índice HNSW (Hierarchical Small World Graph) continua a apresentar resultados de elevada qualidade e melhorou o desempenho em conjuntos de dados maiores.

Vamos ver alguns números de um exemplo recente que executámos:

Lucidworks-2.png Lucidworks-2.png

Lucidworks-3.png Lucidworks-3.png

Lucidworks-4.png Lucidworks-4.png


Como começar

Os pipelines do Smart Answers são projetados para serem fáceis de usar. O Lucidworks possui modelos pré-treinados que são fáceis de implementar e geralmente apresentam bons resultados - embora treinar seus próprios modelos, em conjunto com modelos pré-treinados, ofereça os melhores resultados. Contacte-nos hoje para saber como pode implementar estas iniciativas nas suas ferramentas de pesquisa para obter resultados mais eficazes e agradáveis.

Este blogue foi republicado de: https://lucidworks.com/post/how-to-build-fast-semantic-search/?utm_campaign=Oktopost-Blog+Posts&utm_medium=organic_social&utm_source=linkedin

    Try Managed Milvus for Free

    Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

    Get Started

    Like the article? Spread the word

    Continue Lendo