Este projeto foi criado para demonstrar como podemos criar mecanismos de pesquisa modernos usando uma estrutura direta de incorporação de texto (Transformers Huggingface) e um banco de dados vetorial.
Como base para os dados de pesquisa, usei os últimos seis meses de dados do site da CommonCrawl, mas como levou quase duas semanas no meu laptop (M1 max) para vetorizar os domínios ~ 1mln, presumo que qualquer pessoa que use esse repositório não tentasse vetorizar todo o conjunto de dados? ♂️
Para executar este projeto localmente, você precisará!
data-worker e webapp (next.js)Este projeto não foi otimizado para a produção, portanto, não existe uma implementação de implantação de produção de "One Command". Este será um exemplo de como criar uma pesquisa para o seu site para tornar os resultados mais parecidos com o Google (tipo de ...)
Você encontrará mais informações sobre o uso da interface de incorporação de texto Huggingface na página oficial do Github. Ainda assim, para o contexto deste repositório, estou interessado em compilá -lo para o MacOS M1 e usá -lo com a GPU M1 Max Metal, que está disponível apenas por compilação direta. Você pode usar os contêineres do docker dos processadores baseados em Intel, que são pré-construídos e disponíveis para as GPUs da NVIDIA.
Os comandos abaixo clonarão a interface de incorporação de texto e os criarão para o driver de metal macOS usar GPUs do processador M1.
git clone https://github.com/huggingface/text-embeddings-inference.git
cd text-embeddings-inference
cargo install --path router -F candle -F metalPode levar alguns minutos e 100% da sua CPU, então pegue um café entretanto ☕️
O diretório de data-worker contém scripts simples do Node.js, projetados para baixar o tempo de dados do CommonCrawl especificado e iniciar a vetorização do conteúdo de texto do HTML rastejado e salvando resultados como um vetorial para o banco de dados e o MongoDB para referência de pesquisa posterior.
É importante observar que a quantidade de dados é enorme para uma "corrida local"; portanto, não tente esperar até que a vetorização seja concluída, levará meses seguidos para concluir isso se ele se encaixar no seu laptop. Após 2 semanas de execução, acabei de desistir, porque levou quase 300 GB de armazenamento e eu tinha apenas 4% nos 6 meses de conjunto de dados CommonCrawl.
O aplicativo webapp em si é muito simples, com um CSS de Tailwind CSS e alguns arquivos personalizados dentro do diretório webapp/src/utils , onde tenho a funcionalidade de conectar -se ao MongoDB, bancos de dados de QDRANT e também solicita a interface do texto para o texto para realizar uma solicitação de pesquisa real.
Esses comandos abaixo são as etapas para executar este projeto localmente e iniciar a vetorização e a pesquisa do conjunto de dados CommonCrawl.
BAAI/bge-large-en-v1.5 MTEB para vetorização cd text-embeddings-inference
text-embeddings-router --model-id BAAI/bge-large-en-v1.5 --max-client-batch-size 5000 --port 88882. Novo Terminal: Clone este repositório e execute o Docker Compose Services para MongoDB e QDRANT
git clone [email protected]:tigranbs/search-engine-example-text-embeddings.git
cd search-engine-example-text-embeddings
docker compose up -d3. Novo Terminal: Execute os trabalhadores de dados para iniciar a vetorização dos dados de pesquisa baixando os arquivos CommonCrawl e enviando isso para a interface de texto para incorporação
cd search-engine-example-text-embeddings
cd data-worker
npm i
npm start4 Novo Terminal: Execute o WebApp para começar a pesquisar
cd search-engine-example-text-embeddings
cd webapp
npm i
npm run devApós essas etapas, você poderá navegar para o http: // localhost: 3000 e ver a página de pesquisa, que funcionará diretamente com o MongoDB e o QDRANT sobre os textos já sincronizados que você já terá.