Loading repository data…
Loading repository data…
Waelson / repository
Implementação de um sistema de busca multimodal que permite realizar pesquisas utilizando texto, imagens ou a combinação de ambos, projetado para aplicações em sites de e-commerce.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
Este repositório contem a implementação de um sistema de busca multimodal, projetado para simular um mecanismo avançado de busca de produtos em um e-commerce fictício utilizando texto, imagens, ou a combinação de ambos. O sistema permite realizar consultas eficientes, proporcionando uma experiência mais flexível.
| Componente | Descrição |
|---|---|
| product-search-web | Interface web voltada para os usuários do e-commerce, permitindo a consulta de produtos disponíveis. |
| product-search-api | Backend responsável por realizar as buscas de produtos, integrando-se às bases de dados necessárias. |
| multimodal-search-api | Serviço que permite buscar itens similares na base de dados vetorial a partir de texto, imagem ou ambos. |
| multimodal-indexer | Job responsável por processar o dataset (CSV e imagens), gerar embeddings para os produtos e armazená-los no banco vetorial. |
| Postgres | Banco de dados relacional que armazena informações detalhadas sobre os produtos, como nome, URL da imagem, categoria e atributos adicionais. |
| Milvus (Vector Database) | Banco de dados vetorial utilizado para armazenar os embeddings (vetores) dos produtos e seus respectivos IDs, otimizando buscas por similaridade. |
| Transformer | Biblioteca Python que oferece uma ampla gama de modelos de Machine Learning pré-treinados baseados em Transformers, utilizada para gerar embeddings a partir do dataset de texto ou imagens, permitindo a representação semântica dos dados para buscas eficientes. |
| Categoria | Ferramenta/Descrição |
|---|---|
| Linguagem |
| Python, JavaScript (Node) |
| Bibliotecas | Flask, Torch, Transformers, Pillow, Pymilvus, React |
| Banco de Dados | Milvus, Postgres |
| Dataset | E-commerce Product Images (disponível no Kaggle) |
A aplicação está configurada para ser executada com Docker Compose. Siga os passos logo abaixo, mas assegure-se de ter os pré-requisitos instalados:
Pré-requisitos:
git clone https://github.com/Waelson/multimodal-search.git
cd multimodal-search
Atençao: A construção da imagem da aplicação multimodal-search-api pode ser um processo DEMORADO. Além disso, o servidor web dessa aplicação também leva algum tempo para inicializar. Por isso, antes de executar a aplicação, certifique-se de que o servidor HTTP já foi inicializado corretamente.
docker-compose up --build
python -m venv my-venv
source my-venv/bin/activate
pip install -r requirements.txt
cd projects/multimodal-indexer
python app.py
câmera para selecionar uma imagem. Lembre-se: a base de dados contém imagens de tênis e calçados masculino e feminino, além de roupas infantis masculinas e femininas. Portanto, ao realizar a consulta selecione imagens nessas categorias.Attu é uma ferramenta completa para administrar o Milvus. Para usá-lo digite no browser a URL http://localhost:8000. Depois é só clicar no botão Connect.
São buscas que combinam diferentes tipos de dados (ou "modalidades") para encontrar resultados. Por exemplo, você pode buscar com uma imagem e um texto ao mesmo tempo, ou usar áudio e vídeo como entrada para encontrar conteúdos relacionados.
É um tipo de banco de dados projetado para armazenar e buscar vetores de alta dimensão, que são representações numéricas geradas por algoritmos de aprendizado de máquina. Esses vetores capturam características semânticas de dados complexos, como textos, imagens, áudios ou vídeos.
Os vetores são armazenados no banco e podem ser consultados com base em similaridade (em vez de buscas exatas), usando métricas como:
Imagine que você quer comparar diferentes frutas. Cada fruta tem características como "doçura", "acidez" e "tamanho". Se quisermos representar essas características com números, podemos fazer algo assim:
[7, 3, 5] (doçura: 7, acidez: 3, tamanho: 5)[5, 8, 4] (doçura: 5, acidez: 8, tamanho: 4)[9, 2, 6] (doçura: 9, acidez: 2, tamanho: 6)Agora, temos uma representação numérica (um vetor) que descreve cada fruta. Isso é parecido com o que embeddings fazem: transformam algo complicado em uma lista de números que o computador entende.
Eles ajudam a comparar e encontrar semelhanças entre coisas. Por exemplo:
A imagem abaixo mostra uma representação matemática de como alguns textos são transformados em embeddings (vetor) e sua representação em um gráfico 2D.
O que acontece quando você busca o termo "person"?
Como medir similaridade?
A similaridade entre os vetores é calculada medindo a "distância" entre eles. As duas maneiras mais comuns são:
Quanto menor a distância ou maior a proximidade, mais semelhantes os itens são.