Pular para o conteúdo

Como usar um banco de dados de vetores em Python?

[

Embeddings e Bancos de Dados Vetoriais com ChromaDB

por Harrison Hoffman, 15 de novembro de 2023

A era dos grandes modelos de linguagem (LLMs, na sigla em inglês) está aqui, trazendo consigo bibliotecas em constante evolução, como o ChromaDB, que ajudam a aprimorar aplicativos LLM. Provavelmente, você já ouviu falar de chatbots como o ChatGPT da OpenAI e talvez tenha até experimentado sua notável capacidade de lidar com problemas de processamento de linguagem natural (NLP).

Os LLMs modernos, embora imperfeitos, podem resolver com precisão uma ampla gama de problemas e fornecer respostas corretas para muitas perguntas. No entanto, devido às limitações de seu treinamento e ao número de tokens de texto que podem processar, os LLMs não são uma solução milagrosa para todas as tarefas.

Você não esperaria que um LLM fornecesse respostas relevantes sobre tópicos que não aparecem em seus dados de treinamento. Por exemplo, se você pedisse ao ChatGPT para resumir informações em documentos confidenciais da empresa, você ficaria sem sorte. Você poderia mostrar alguns desses documentos para o ChatGPT, mas há um número limitado de documentos que você pode enviar antes de exceder o número máximo de tokens do ChatGPT. Como você selecionaria os documentos para mostrar ao ChatGPT?

Para resolver essas limitações e escalar seus aplicativos LLM, uma ótima opção é usar um banco de dados vetorial como o ChromaDB. Um banco de dados vetorial permite que você armazene objetos não estruturados codificados, como texto, como listas de números que você pode comparar entre si. Por exemplo, você pode encontrar uma coleção de documentos relevantes para uma pergunta que você deseja que um LLM responda.

Neste tutorial, você aprenderá sobre:

  • Representar objetos não estruturados com vetores
  • Usar embeddings de palavras e textos em Python
  • Aproveitar o poder dos bancos de dados vetoriais
  • Codificar e consultar documentos com o ChromaDB
  • Fornecer contexto para LLMs como o ChatGPT com o ChromaDB

Depois de ler, você terá o conhecimento fundamental para usar o ChromaDB em seus aplicativos de NLP ou LLM. Antes de ler, é recomendado que você esteja confortável com os conceitos básicos de Python e matemática do ensino médio.

Representando Dados como Vetores

Antes de mergulharmos em embeddings e bancos de dados vetoriais, é importante entender o que são vetores e o que eles representam. Sinta-se à vontade para pular para a próxima seção se você já estiver familiarizado com conceitos de vetores. Caso contrário, continue lendo!

Conceitos Básicos de Vetores

Você pode descrever vetores com diferentes níveis de complexidade, mas uma ótima forma de começar é pensar em um vetor como uma matriz de números. Por exemplo, você pode representar vetores usando arrays do NumPy da seguinte forma:

import numpy as np
# Vetor com duas coordenadas
vetor1 = np.array([1, 2])
# Vetor com três coordenadas
vetor2 = np.array([3, 4, 5])

Esses vetores podem ser visualizados usando uma representação gráfica simples:

Vetor 1: [1, 2]

Vetor 2: [3, 4, 5]

Os vetores são frequentemente utilizados para representar informações em espaços multidimensionais. Cada coordenada do vetor representa uma dimensão, e os valores nas coordenadas indicam a posição em relação a essa dimensão.

Similaridade entre Vetores

Uma das principais vantagens de representar dados como vetores é a capacidade de calcular a similaridade entre eles. A similaridade entre dois vetores pode ser medida de várias formas, sendo a distância entre eles uma medida comum.

Existem várias métricas de distância, como a distância euclidiana, a distância de Manhattan e a distância de cosseno, entre outras. Cada métrica de distância tem suas próprias características, e a escolha da métrica depende do contexto e dos dados envolvidos.

A distância euclidiana, por exemplo, mede a distância em linha reta entre dois vetores em um espaço multidimensional. Ela é calculada pela fórmula:

distancia = √((x2 - x1)^2 + (y2 - y1)^2 + ... + (n2 - n1)^2)

Outra métrica comum é a distância de cosseno, que mede o ângulo entre dois vetores. Ela é calculada pela fórmula:

similaridade = cos(θ) = (vetor1 • vetor2) / (∥vetor1∥ * ∥vetor2∥)

Essas métricas são especialmente úteis para comparar e encontrar padrões em conjuntos de dados multidimensionais.

Codificando Objetos com Embeddings

A representação de dados como vetores é vantajosa, mas muitas vezes os dados não são estruturados e precisam ser convertidos em vetores utilizáveis. É aqui que entram os embeddings, que são representações numéricas de objetos não estruturados.

Um embedding é uma forma de transformar objetos complexos, como palavras ou textos, em vetores densos de números reais. Esses vetores densos mantêm informações semânticas sobre os objetos representados, permitindo cálculos de similaridade e outras operações.

Embeddings de Palavras

Um exemplo famoso de embeddings é o Word2Vec, desenvolvido pelo Google em 2013. O Word2Vec permite a representação de palavras como vetores, capturando relações semânticas e de contexto entre elas.

Com embeddings de palavras, você pode executar operações como encontrar palavras que são semanticamente similares, descobrir palavras relacionadas a um determinado tópico e até mesmo fazer cálculos de analogia, como “rei” - “homem” + “mulher” = “rainha”.

Embeddings de Textos

Além dos embeddings de palavras, também existem embeddings de textos, que permitem a representação de frases e parágrafos como vetores. Esses embeddings são úteis para tarefas de classificação de textos, como análise de sentimentos, e para encontrar textos similares dentro de um conjunto de documentos.

O Universal Sentence Encoder, desenvolvido pelo Google, é um exemplo de embedding de texto amplamente utilizado. Ele captura o significado semântico de frases e parágrafos, permitindo comparações e consultas precisas.

Começando com ChromaDB, um Banco de Dados Vetorial de Código Aberto

Agora que você entende como representar dados como vetores e como utilizar embeddings para objetos não estruturados, vamos explorar o ChromaDB. O ChromaDB é um banco de dados vetorial de código aberto que permite armazenar e consultar objetos codificados, como texto.

O que é um Banco de Dados Vetorial?

Um banco de dados vetorial é uma ferramenta que permite armazenar e consultar objetos codificados como vetores. Esses objetos podem ser consultados por similaridade, o que torna o banco de dados especialmente útil para recuperar informações relevantes em aplicativos de NLP e LLM.

Por exemplo, se você estiver trabalhando em uma loja online e quiser encontrar produtos semelhantes a um item específico, você pode codificar os produtos como vetores usando embeddings adequados e consultar o banco de dados vetorial para encontrar os produtos com maior similaridade.

Conhecendo o ChromaDB para Aplicações de LLM

O ChromaDB é um banco de dados vetorial desenvolvido para lidar com aplicativos de LLM. Ele foi projetado para armazenar e consultar informações relevantes para oferecer contexto a LLMs, como o ChatGPT.

Com o ChromaDB, você pode codificar documentos como vetores e realizar consultas para encontrar os documentos mais relevantes para uma determinada pergunta ou contexto. Isso permite que os LLMs tenham acesso a informações adicionais além de seu treinamento inicial, melhorando sua capacidade de fornecer respostas precisas e relevantes.

Exemplo Prático: Adicionando Contexto a um Grande Modelo de Linguagem (LLM)

Agora que entendemos os conceitos fundamentais de embeddings e bancos de dados vetoriais, vamos ver um exemplo prático de como adicionar contexto a um LLM usando o ChromaDB.

Preparando e Inspecionando o Conjunto de Dados

Antes de adicionar contexto a um LLM, é necessário preparar e inspecionar o conjunto de dados. Isso envolve a seleção de documentos relevantes e a codificação desses documentos como vetores usando os embeddings apropriados.

Criando uma Coleção e Adicionando Avaliações

Após preparar o conjunto de dados, você pode criar uma coleção no ChromaDB e adicionar as avaliações (documentos relevantes) a essa coleção. Cada avaliação deve ser codificada como um vetor usando os embeddings adequados antes de serem adicionadas ao ChromaDB.

Conectando-se a um Serviço LLM

Depois de criar a coleção no ChromaDB, é necessário conectar-se a um serviço LLM, como o ChatGPT, para fornecer contexto ao modelo. O serviço LLM pode ser acionado por uma API para retornar respostas com base no texto de entrada.

Fornecendo Contexto ao LLM

Em seguida, é possível fornecer contexto ao LLM, fazendo consultas ao ChromaDB para recuperar documentos relevantes que serão usados como contexto para o LLM. Os documentos retornados podem então ser combinados com o texto de entrada para aprimorar as respostas fornecidas pelo LLM.

Conclusão

Neste tutorial, você aprendeu sobre embeddings, bancos de dados vetoriais e como adicionar contexto a aplicativos LLM usando o ChromaDB. Essas ferramentas fornecem uma maneira poderosa de representar objetos não estruturados como vetores e fornecer informações adicionais a LLMs, melhorando sua capacidade de entender e responder a perguntas.

Agora que você tem os conhecimentos fundamentais, está preparado para explorar o ChromaDB e incorporar essas técnicas em suas próprias aplicações de NLP ou LLM.

[Compartilhe no Twitter](https://twitter.com/intent/tweet/?text=Confira este tutorial de Python: Embeddings%20and%20Vector%20Databases%20With%20ChromaDB.&url=URL_DO_TUTORIAL&hashtags=python,vector,database) Compartilhe no Facebook [Compartilhe por E-mail](mailto:?subject=Confira este tutorial de Python&body=Confira este tutorial de Python: Embeddings%20and%20Vector%20Databases%20With%20ChromaDB - URL_DO_TUTORIAL)