Slide 1

Slide 1 text

Michel Fernandes | Maio 2024 Bancos de Dados Vetoriais e Aplicações

Slide 2

Slide 2 text

Shortbio Mestre em Inteligência Artificial e Engenheiro Elétrico pelo Centro Universitário da FEI, MBA em Gestão Empresarial pela EASP (FGV) e Gestão de TI (FIAP) Docente do curso de pós graduação MBA em cursos relacionados a tecnologias corporativas/SOA, mobilidade/jogos e sistemas de informação na FIAP. Gerente de Engenharia na John Deere. Atuação como Arquiteto de Soluções de Sistemas de Suporte a Operação (OSS) em empresas de telecomunicações como Nextel e Vivo, além de ter criado a área de Pesquisa e Desenvolvimento na EY, o BeyondLabs, com foco em inovação, análise de dados (aprendizado autônomo), uso inteligente dos dispositivos móveis e automação de atividades. br.linkedin.com/in/michelpf/

Slide 3

Slide 3 text

Afinal, quais bancos de dados conhecemos até agora? Relacional Documento Grafo Chave-Valor Colunar https://learn.microsoft.com/pt-br/dotnet/architecture/cloud-native/relational-vs-nosql-data

Slide 4

Slide 4 text

Não importa o paradigma, no final é a forma de armazenar informações mais fácil e eficiente para cada caso de uso

Slide 5

Slide 5 text

E para nova geração de dados e aplicações com IA?

Slide 6

Slide 6 text

Como podemos buscar em banco de dados informações ainda mais complexas, como padrões ou dados contextuais?

Slide 7

Slide 7 text

Saímos da planolândia dos dados, das representações simbólicas, para uma forma mais semântica e densa, em múltiplas dimensões.

Slide 8

Slide 8 text

Nesta representação dados passam a ser armazenados em vetores. https://weaviate.io/blog/what-is-a-vector-database A busca por similaridade permite encontrar informações contextuais antes impossíveis (ou ineficientes).

Slide 9

Slide 9 text

Nossa limitação de perceber as 3 dimensões torna a representação visual pouco intuitiva. No entanto, ferramentas de cálculo de dimensões menores também funcionam em de grandes dimensões.

Slide 10

Slide 10 text

https://viso.ai/computer-vision/deepface/ Um caso de uso: busca por faces similares

Slide 11

Slide 11 text

Contextos como medidas de distância de similaridade Distância Euclidiana Produto Escalar Similaridade por Cosseno Clusterização: no algoritmo K-means, a distância euclidiana ajuda a medir quão próximos os pontos de dados estão dos centróides dos clusters. Os dados são agrupados pelo centróide mais próximo, o que reduz a variação dentro de cada cluster e facilita a identificação de agrupamentos naturais em conjuntos de dados numéricos. Correspondência de Imagens: Imagens com conteúdo visual semelhante terão vetores alinhados, resultando em valores mais altos de produto escalar. Isso faz do produto escalar uma boa escolha quando se busca imagens semelhantes a uma imagem de consulta específica. Modelagem de Tópicos: Nos embeddings de documentos, cada dimensão pode representar a frequência de uma palavra. No entanto, dois documentos de tamanhos diferentes podem ter frequências de palavras diferentes, mas a mesma distribuição de palavras. Isso os colocam em direções semelhantes no espaço vetorial, mas não em distâncias semelhantes, a similaridade por cosseno é uma ótima escolha. https://medium.com/kx-systems/how-vector-databases-search-by-similarity-a-comprehensive-primer-c4b80d13ce63

Slide 12

Slide 12 text

Distância Euclidiana Representação em 2 dimensões. A distância euclidiana é uma medida de distância no espaço plano que representa a distância linear entre dois pontos. É calculada aplicando o Teorema de Pitágoras, encontrando a raiz quadrada da soma dos quadrados das diferenças entre as coordenadas correspondentes de dois pontos. A distância euclidiana é intuitiva e eficaz para espaços com dimensões baixas a moderadas, mas pode se tornar menos eficiente em espaços de alta dimensão devido. x y A B https://medium.com/kx-systems/how-vector-databases-search-by-similarity-a-comprehensive-primer-c4b80d13ce63

Slide 13

Slide 13 text

Similaridade por Cosseno Representação em 2 dimensões. A similaridade por cosseno é uma medida usada para calcular o grau de semelhança entre dois vetores em um espaço de qualquer dimensão, considerando o ângulo entre eles. Isso significa que os vetores serão considerados menos semelhantes se apontarem diretamente em direções opostas (180°) e serão considerados mais semelhantes se apontarem exatamente na mesma direção (0°). x y A B https://medium.com/kx-systems/how-vector-databases-search-by-similarity-a-comprehensive-primer-c4b80d13ce63

Slide 14

Slide 14 text

Produto Escalar Representação em 2 dimensões. O produto escalar, também conhecido como dot product em inglês, é uma operação que mede a relação entre dois vetores em um espaço plano. Esta operação resulta em um único número escalar e é utilizada para calcular ângulos entre vetores e projeções de um vetor sobre outro. x y A B similar não relacionado oposto https://medium.com/kx-systems/how-vector-databases-search-by-similarity-a-comprehensive-primer-c4b80d13ce63

Slide 15

Slide 15 text

Depois de definir a busca, precisamos encontrar as representações (ou vetores) mais próximas O vetor “Query” é comparado com outros vetores mais próximos. A forma de buscar os vetores vizinhos emprega o algoritmo semelhante ao K-NN (K Nearest Neighbors). No entanto, como a busca é exaustiva (intensiva computacionalmente), é utilizado outra forma que permite ser mais eficiente, apropriado para buscas em grandes bases de dados que é o ANN (Approximate Neighbor Search). A aproximação por ANN permite lidar com dados com alta dimensionalidade com a mesma performance comparado com os de baixa dimensionalidade. https://www.pinecone.io/learn/what-is-similarity-search

Slide 16

Slide 16 text

DeepFace Biblioteca em Python que reúne os principais algoritmos de detecção facial, normalização e representação vetorial. https://github.com/serengil/deepface

Slide 17

Slide 17 text

Deteção e Normalização O DeepFace reúne diversos algoritmos que variam em sua performance dependendo do tipo de face que se deseja extrair. https://github.com/serengil/deepface

Slide 18

Slide 18 text

Geração de representação vetorial A arquitetura de rede neural convolucional permite, além de classificar faces, obter sua representação de aprendizado. Esta abordagem é similar aos autoencoders (coração dos modelos transformers). Cada arquitetura possui filtros de diferentes tamanhos e densidades. Isso determinar a quantidade de dimensões que cada representação é capaz de gerar. Na representação abaixo do modelo VGG-Face, o número de dimensões é de 4096, ou seja, uma face é representada por 4096 coordenadas vetorais. https://github.com/serengil/deepface

Slide 19

Slide 19 text

Geração de representação vetorial Após obter os vetores que representam uma determinada face é possível combinar com outros vetores de mesma dimensionalidade. Deste modo, vetorialmente, podemos aplicar similaridades. https://www.researchgate.net/figure/Distribution-of-the-10-testing-samples-in-the-reduced-representation-subspace-As-can-be_fig2_7986021 Como a representação de faces tem alta dimensionalidade neste caso o mais indicado é a utilização da similaridade por produto escalar.

Slide 20

Slide 20 text

Como trabalhar com dados vetoriais em um banco de dados? Bancos de dados relacionais, como o Postgres, são capazes de lidar com operações vetoriais por meio de uma extensão chamada pgvector. Esse serviço (Aurora) é disponibilizado em cloud pela AWS. Outras soluções, exclusivamente orientados a operações vetoriais como ChromaDB ou o Pinecone são opções mais especializadas. O ChromaDB é um banco de dados de código aberto e requer que o desenvolvedor instale em infraestrutura adequada ou execute locamente. Já o Pinecone é serviço em cloud e possui um tier free para desenvolvedores e estudantes já preparado e pronto para lidar com quantidades grandes de dados. Escolhemos esse para nossos experimentos!

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

Amplamente utilizada por desenvolvedores em IA

Slide 23

Slide 23 text

E o melhor: Serverless!

Slide 24

Slide 24 text

Custos menores para menor escala

Slide 25

Slide 25 text

Utilizando o Pinecone Crie uma conta em https://www.pinecone.io/. Criação de Índice Inseração/Atualização de Vetores Consulta O índice requer o tipo de similaridade (ou metric) durante a criação. As opções são: distância euclidiana, produto escalar e similaridade por cosseno. Além disso é necessário determinar o tamanho do vetor. A operação upsert permite atualizar ou criar vetores novos ou existentes. As consultas obtém uma pontuação para cada índice utilizado, associado a métrica de similaridade. Também é possível utilizar dados esparsos como colunas de texto (ou metadados) em conjunto com os densos (vetores).

Slide 26

Slide 26 text

Experimento prático: Angelina Joile herdou as características faciais de sua mãe ou o pai?

Slide 27

Slide 27 text

Plano do experimento Obter as representações faciais dos pais Criar o índice Inserir os vetores dos pais Obter a representação da Angelina Consultar os vetores dela contra dos pais Avaliar os maiores scores para determinar semelhança

Slide 28

Slide 28 text

Get your hands dirty! github.com/michelpf/vector-databases-intro

Slide 29

Slide 29 text

Para saber mais Repositório da talk: https://github.com/michelpf/vector-databases-intro Curso sobre o tema: https://www.deeplearning.ai/short-courses/building-applications-vector-databases/ Artigo sobre busca por similaridade, https://www.pinecone.io/learn/what-is-similarity-search/ Artigo sobre busca por similaridade de clustering, https://towardsdatascience.com/importance-of-distance-metrics-in- machine-learning-modelling-e51395ffe60d

Slide 30

Slide 30 text

No content