EventoObtenha 50% de desconto no seu ingresso para MongoDB.local Londres em outubro 2. Use o código WEB50Saiba mais >>
Desenvolvedor MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
Atlaschevron-right

Início rápido 2: pesquisa vetorial com MongoDB e OpenAI

SM
Sujee Maniyam12 min read • Published May 06, 2024 • Updated May 06, 2024
IAPythonAtlas
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Início rápido
star-empty
star-empty
star-empty
star-empty
star-empty
Este início rápido orientará você sobre como realizar uma pesquisa vetorial usando o MongoDB Atlas e a API OpenAI. Código (notebook Python): Visualizar no Github ou Abrir no CoLab

O que você vai aprender

  • Criando um índice de vetores no Atlas
  • Executando Atlas Search vetorial usando incorporações OpenAI

Pré-requisitos

  • Uma conta Atlas gratuita — crie uma agora!
  • Um ambiente de bloco de notas Python Jupyter — recomendamos o Google CoLab. É um ambiente gratuito, baseado em cloud e muito fácil de entrar e executar.

Sugestões

Este início rápido pode ser útil para executar o Atlas e um cliente Python: Introdução ao MongoDB Atlas e Python.

Vector Search: além da correspondência de palavras-chave

No domínio da recuperação de informações, a pesquisa por palavras-chave é o padrão há muito tempo. Esse método envolve combinar palavras exatas em textos para encontrar informações relevantes. Por exemplo, se você estiver tentando localizar um filme, mas só consegue lembrar que o título inclui a palavra "battle (batalha)," uma pesquisa por palavra-chave permite filtrar o conteúdo para encontrar correspondências.
No entanto, e se sua memória de um filme for vaga, limitada a um enredo ou tema geral, em vez de títulos ou palavras-chave específicos? É aqui que a pesquisa vetorial entra em cena, revolucionando a forma como encontramos informações. Ao contrário da pesquisa por palavra-chave, a pesquisa vetorial mergulha no reino da semântica, permitindo a recuperação do conteúdo com base nos significados por trás das palavras.
Considere que você está tentando encontrar um filme novamente, mas desta vez, tudo o que você lembra é de uma descrição ampla do enredo, como " humanos lutam contra alienígenas. " Os métodos de pesquisa tradicionais podem fazer com que você vasculhe infinitos resultados irrelevantes. A pesquisa vetorial, no entanto, usa algoritmos avançados para entender o significado contextual de sua consulta, capazes de guiá-lo para filmes que se alinham à sua descrição — como " Terminator " — mesmo que as palavras exatas não sejam usadas em seus termos de pesquisa.

Panorama geral

Vamos entender como todas as peças se encaixam.
Vamos usar a coleçãoembedded_movies nos dados de amostra do Atlas. Esse já tem embeddings calculados para plots, facilitando a nossa vida.
Veja como tudo funciona. Quando uma query de pesquisa semântica é emitida (por exemplo, "filmes de ficção científica fatalísticos"):
  • Etapas 1 e 2: chamamos a API OpenAI para obter incorporações para o texto da query.
  • Etapa 3: Envie a incorporação para o Atlas para executar uma pesquisa vetorial.
  • Etapa 4: o Atlas retorna resultados de pesquisa relevantes usando a pesquisa vetorial.
Aqui está um visual: Imagem 1: Arquitetura de pesquisa vetorial e fluxo de dados

Compreensão de embeddings

As incorporações são uma maneira interessante de transformar diferentes tipos de dados - seja texto, imagens, áudio ou vídeo - em um formato numérico, especificamente, em uma matriz conhecida como "vector." Essa conversão permite que os dados sejam processados e compreendidos pelas máquinas.
Tomemos como exemplo os dados de texto: As palavras podem ser convertidas em números, sendo que cada palavra única recebe seu próprio valor numérico distinto. Estas representações numéricas podem variar em tamanho, variando de 128 a 4096 elementos.
figura 2: convertendo texto em incorporações
No entanto, o que diferencia os embeddings é sua capacidade de capturar mais do que apenas sequências aleatórias de números. Na verdade, eles preservam parte do significado inerente dos dados originais. Por exemplo, palavras que compartilham significados semelhantes tendem a ter incorporações mais próximas no espaço numérico.
Para ilustrar, considere um cenário simplificado onde plotamos as incorporações de várias palavras em um gráfico bidimensional para facilitar a visualização. Embora na prática os embeddings possam abranger muitas dimensões (de 128 a 4096), este exemplo ajuda a esclarecer o conceito. No gráfico, você notará que itens com contextos ou significados semelhantes – como diferentes tipos de frutas ou vários animais de estimação – estão posicionados mais próximos uns dos outros. Esse agrupamento é um ponto forte dos embeddings, destacando sua capacidade de capturar e refletir as nuances de significado e similaridade nos dados. Pessoa 3: Visualização e compreensão de incorporações de texto

Como criar incorporações

Então, como criamos Go incorporações úteis? Felizmente, há uma variedade de modelos de incorporação projetados para transformar seus dados de texto, áudio ou vídeo em representações numéricas significativas.
Alguns desses modelos são proprietários, o que significa que pertencem a determinadas empresas e são acessíveis principalmente por meio de suas APIs. A OpenAI é um exemplo notável de um provedor que oferece esses modelos.
Também existem modelos de código aberto disponíveis. Eles podem ser baixados gratuitamente e operados em seu próprio computador. Se você optar por um modelo proprietário ou uma opção de código aberto, depende de suas necessidades e recursos específicos.
A tabela de classificação de modelos de incorporação do Hugging Face é um ótimo lugar para começar a procurar modelos de incorporação. Eles testam periodicamente os modelos de incorporação disponíveis e os classificam de acordo com vários critérios.
Figura 4: Convertendo texto em incorporações
Você pode ler mais sobre embeddings:

Etapa 1: Configurando o Atlas na nuvem

Aqui está um guia rápido adotado da documentação oficial. Consulte a documentação para obter detalhes completos.

Crie uma conta Atlas gratuita

Criar uma instância gratuita

  • Você pode escolher qualquer instância de nuvem.
  • Escolha o nível "FREE " para não incorrer em custos.
  • Siga o assistente de configuração e atribua um nome à sua instância.
  • Anote seu nome de usuário e senha para se conectar à instância.
  • Configurando o acesso IP: adicione 0.0.0.0/0 para a lista de acesso IP. Isso disponibiliza a conexão do Google Colab. (Observação: isso torna a instância disponível a partir de qualquer endereço IP, o que é bom para uma instância de teste). Veja a captura de tela abaixo para saber como adicionar o IP:
figura 5: permitir acesso de rede à instância do Atlas

Carregar dados de amostra

Em seguida, carregaremos os conjuntos de dados de amostra padrão no Atlas, o que pode levar alguns minutos.
Personalidade 6: Carregando dados de amostra no Atlas

Visualize os dados de amostra.

Na interface do usuário do Atlas, explorar a coleçãoembedded_movies no banco de dadossample_mflix para visualizar detalhes do documento como título, ano e gráfico.
Imagem 7: examinando dados de amostra

Inspecionar incorporações

Felizmente, o conjunto de dadossample_mflix.embedded_movies já inclui incorporações vetoriais para gráficos, gerados com o modelo text-embedding-ada-002do OpenAI. Ao inspecionar o atributoplot_embedding na UI do Atlas, conforme mostrado na captura de tela abaixo, você verá que ele é composto por uma array de 1536 números. figura 8: inspecionar incorporações em dados de amostra
Parabéns! Agora você tem um agrupamento do Atlas, com alguns dados de amostra. 👏

Etapa 2: Criar índice Atlas

Antes de executarmos uma pesquisa vetorial, precisamos criar um índice vetorial. Criar um índice permite ao Atlas executar queries mais rapidamente. Veja como criar um índice vetorial.
Figura 9: Criando um índice vetorial

Escolha “Create a Vector Search Index”

Figura 10: Criando um índice vetorial

Crie um índice vetorial da seguinte forma

Vamos definir um índice vetorial conforme abaixo. Aqui está o que os parâmetros significam.
  • "type": "vector" — Isso indica que estamos definindo um índice vetorial.
  • "path": "plot_embedding" - Esse é o atributo que estamos indexando - no nosso caso, os dados de incorporação do gráfico.
  • "numDimensions": 1536 - Indica a dimensão do campo de incorporação. Ele precisa corresponder ao modelo de incorporação que usamos (no nosso caso, o modelo OpenAI).
  • " similarity ": "dotProduct" — Finalmente, estamos definindo o algoritmo de correspondência a ser usado pelo índice vetorial. As opções são euclidean, cossenoe dotProduct. Você pode ler mais sobre essas opções em Como indexar campos para o Vector Search.
Nome do índice: idx_plot_embedding
Definição de Índice
Figura 11: Criando um índice vetorial
Aguarde até que o índice esteja pronto para ser usado Figura 12: Criando um índice vetorial

Etapa 3: Configuração

Começaremos definindo os seguintes parâmetros de configuração:
  • Credenciais de conexão Atlas — veja abaixo um guia passo a passo.
  • Chave de API OpenAI - obtenha-a no dashboard do OpenAI.
Veja como você obtém a configuraçãoATLAS_URI.
  • Navegue até a IU do Atlas.
  • Selecione seu banco de dados.
  • Escolha a opção "Connect " para continuar.
  • Na seção de conexão, clique em “Drivers” para ver os detalhes da conexão.
  • Por fim, copie o valor ATLAS_URI exibido para uso na configuração do aplicativo.
Veja estas capturas de tela como orientação. figura 13: obtendo a connection string Atlas_URI
figura 14: obtendo a connection string Atlas_URI

Para o código

Agora, vamos dar uma olhada no código. Iremos percorrer e executar o código passo a passo. Você também pode acessar o notebook Python totalmente funcional no início deste guia.
Comece definindo configurações para ATLAS_URI e OPENAI_API_KEY.
(Execute este bloco de código em seu Google Colab na Etapa 3.)
Dica profissional 💡 Manteremos todas as variáveis globais em um objeto chamado MY_CONFIG para não poluir o namespace global. MyConfig é apenas uma classe de espaço reservado para armazenar nossas variáveis e configurações.

Etapa 4: Instalar dependências

Vamos instalar as dependências necessárias. Estamos instalando dois pacotes:
  • pymongo: Biblioteca Python para conexão com instâncias do MongoDB Atlas
  • openai: Para chamar a biblioteca OpenAI
(Execute este bloco de código em seu Google Colab na Etapa 4.)
Tip Pro } Você notará que estamos especificando uma versão (openai==1.13.3) para os pacotes que estamos instalando. Isso garante que as versões que estamos instalando sejam compatíveis com nosso código. Essa é uma boa prática e é chamada de fixação ou congelamentode versão.

Etapa 5: AtlasClient e OpenAIClient

AtlasClient

AtlasClient Esta classe lida com o estabelecimento de conexões, a execução de queries e a realização de uma pesquisa vetorial no MongoDB Atlas.
(Execute este bloco de código em seu Google Colab na Etapa 5.)
Inicializando classe: A função do construtor (init) usa dois argumentos: URI do Atlas (que obtivemos das configurações) Banco de dados para conectar
Ping: esse é um método útil para testar se podemos nos conectar ao Atlas.
encontrar Esta é a função "search ". Especificamos a coleção para pesquisar e quaisquer critérios de pesquisa usando filtros.
vector_search Esta é uma função chave que executa pesquisa vetorial no MongoDB Atlas. Ele recebe os seguintes parâmetros:
  • collection_name: embedded_movies
  • index_name: idx_plot_embedding
  • attr_name: "plot_embedding"
  • embedding_vector: incorporações retornadas da chamada de API OpenAI
  • limite: Quantos resultados retornar
A seção$project extrai os atributos que queremos retornar como resultados de pesquisa.
(Este bloco de código é para fins de revisão. Não há necessidade de executar.)
Além disso, observe esta linha:
Esta linha específica extrai a pontuação de pesquisa da pesquisa vetorial. A pontuação da pesquisa varia de 0.0 a 1.0. Pontuações próximas de 1.0 são uma ótima combinação.

Cliente OpenAI

Esta é uma aula útil para interação OpenAI.
(Execute este bloco de código em seu Google Colab na Etapa 5.)
Classe de inicialização: Essa classe é inicializada com a chave da API OpenAI.
Método get_embedding:
  • texto: Esse é o texto para o qual estamos tentando obter embeddings.
  • modelo: este é o modelo de incorporação. Aqui estamos especificando o modelo text-embedding-ada-002 porque este é o modelo utilizado para criar incorporações em nossos dados de amostra. Então, queremos usar o mesmo modelo para codificar nossa string de query.

Etapa 6: Conectar ao Atlas

Inicialize o Atlas e faça um teste rápido de conectividade. Estamos conectando ao banco de dadossample_mflix e à collectionembedded_movies. Este conjunto de dados é carregado como parte da configuração (Etapa 1).
Se tudo correr bem, a conexão será bem-sucedida.
(Execute este bloco de código em seu Google Colab na Etapa 6.)
Soluçãode problemas Se você receber um erro "connection failed ", certifique-se 0.0.0.0/0 é adicionado como um endereço IP permitido para se conectar (consulte a etapa 1).

Etapa 7: Inicializar o cliente OpenAI

Inicialize o cliente OpenAI com a chave de API OpenAI.
(Execute este bloco de código em seu Google Colab na Etapa 7.)

Etapa 8: Vamos fazer uma pesquisa vetorial!

Agora que temos tudo configurado, vamos fazer uma pesquisa vetorial! Vamos fazer query de plots de filmes, não apenas com base em palavras-chave, mas também em significado. Por exemplo, procuraremos filmes em que o argumento seja "Humanos enfrentando extraterrestres".
Esta função usa um argumento: string dequery .
  1. Convertemos a query em incorporações. Fazemos isso chamando a API OpenAI. Também programamos a chamada de API (t1b - t1a) para entender as latências da rede.
  2. Enviamos os embeddings (que acabamos de receber da OpenAI) ao Atlas para realizar uma pesquisa vetorial e obter os resultados.
  3. Estamos imprimindo os resultados retornados pela pesquisa vetorial.
(Execute este bloco de código em seu Google Colab na Etapa 8.)

Primeira query

Aqui está nossa primeira consulta. Queremos encontrar filmes em que o enredo seja sobre humanos " lutando contra alienígenas. "
(Execute este bloco de código em seu Google Colab na Etapa 8.)
Veremos resultados de pesquisa como este:
Observe a pontuação Além dos atributos do filme (title, ano, lote etc.), também estamos exibindo search_score. Este é um atributo meta — não realmente parte da coleção de filmes, mas gerado como resultado da pesquisa vetorial. Este é um número entre 0 e 1. Valores mais próximos de 1 representam uma correspondência melhor. Os resultados são classificados da melhor correspondência para baixo (mais próximo de 1 primeiro). Leia mais sobre pontuação de pesquisa.
Soluçãode problemas Não há resultados de pesquisa? Certifique-se de que o índice de pesquisa vetorial esteja definido e ativo (Etapa 2)!

Amostra de query 2

(Execute este bloco de código em seu Google Colab na Etapa 8.)
Os resultados de amostra ficarão assim:

Conclusão

Aqui Go nós! Realizamos com sucesso uma pesquisa vetorial combinando Atlas e a API OpenAI.
Resumindo, neste início rápido, realizamos o seguinte:
  • Configurar o Atlas na nuvem
  • Os dados de amostra foram carregados em nosso cluster do Atlas
  • Configure um índice de pesquisa vetorial
  • Realizou uma pesquisa vetorial usando incorporações OpenAI e Atlas
Como podemos ver, a pesquisa vetorial é muito poderosa, pois pode buscar resultados com base no significado semântico dos termos de pesquisa, em vez de apenas na correspondência de palavras-chave. A pesquisa vetorial nos permite criar aplicativos mais avançados.

Próximos passos

Aqui estão alguns recursos sugeridos para você explorar:
Principais comentários nos fóruns
Ainda não há comentários sobre este artigo.
Iniciar a conversa

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Início rápido
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Trabalhando com MongoDB Charts e o novo SDK para JavaScript


Apr 02, 2024 | 10 min read
exemplo de código

Blogue


Sep 11, 2024 | 1 min read
Tutorial

Aplicativos Web de última geração com Remix e MongoDB Atlas Data API


Aug 01, 2024 | 10 min read
Artigo

Como habilitar o teste local e automático de recursos baseados na pesquisa do Atlas


Jun 12, 2024 | 8 min read
Sumário