Ce projet a été créé pour démontrer comment nous pouvons créer des moteurs de recherche modernes en utilisant une structure simple d'incorporces de texte (transformateurs HuggingFace) et une base de données vectorielle.
En tant que base des données de recherche, j'ai utilisé les six derniers mois des données du site Web de CommonCrawl, mais parce qu'il a fallu près de deux semaines sur mon ordinateur portable (M1 Max) pour vectoriser ~ 1mln Domains, je suppose que quiconque utilisera ce référentiel n'essaierait pas de vectériser de l'ensemble de données entier? Resse
Pour gérer ce projet localement, vous aurez besoin!
data-worker et webapp (next.js)Ce projet n'a pas été optimisé pour la production, il n'y a donc pas d'implémentation de déploiement de production «unique». Ce sera un exemple de la façon de créer une recherche de votre site Web pour rendre les résultats plus comme Google (en quelque sorte…)
Vous trouverez plus d'informations sur l'utilisation de l'interface Embeddings de texte HuggingFace sur leur page GitHub officielle. Pourtant, pour le contexte de ce référentiel, je suis intéressé à le compiler pour le macOS M1 et à l'utiliser avec le M1 MAX Metal GPU, qui est disponible uniquement via une compilation directe. Vous pouvez utiliser les conteneurs Docker des processeurs basés sur Intel, qui sont prédéfinis et disponibles pour les GPU NVIDIA.
Les commandes ci-dessous cloneront l'interface intégrée de texte et les construisent pour que le pilote MacOS métallique utilise les GPU du processeur M1.
git clone https://github.com/huggingface/text-embeddings-inference.git
cd text-embeddings-inference
cargo install --path router -F candle -F metalCela peut prendre quelques minutes et 100% de votre processeur, alors prenez un café en attendant ☕️
Le répertoire data-worker contient un simple Node.js Scripts, qui sont conçus pour télécharger du calendrier de données CommonCrawl spécifié et démarrer la vectorisation du contenu texte à partir de HTML rampé et de l'enregistrement des résultats en tant que vectories à la base de données QDRANT et MongoDB pour une référence de recherche ultérieure.
Il est important de noter que la quantité de données est énorme pour une «course locale», alors n'essayez pas d'attendre la fin de la vectorisation, il faudra des mois de suite pour terminer cela s'il s'adaptera même à votre ordinateur portable. Après 2 semaines d'exécution, je viens de renoncer, car il a fallu près de 300 Go de stockage et je n'avais fait que 4% à partir de cet ensemble de données CommonCrawl.
Le webapp lui-même est très simple, application Next.js avec un CSS à vent arrière et certains fichiers personnalisés dans le répertoire webapp/src/utils , où j'ai des fonctionnalités de connexion à MongoDB, des bases de données QDRANT et également des demandes d'interface d'intégration de texte pour vectoriser le texte de recherche avant d'effectuer une demande de recherche réelle.
Ces commandes ci-dessous sont les étapes pour exécuter ce projet localement et démarrer la vectorisation et la recherche de l'ensemble de données CommonCrawl.
BAAI/bge-large-en-v1.5 pour Vectoriztion cd text-embeddings-inference
text-embeddings-router --model-id BAAI/bge-large-en-v1.5 --max-client-batch-size 5000 --port 88882. Nouveau terminal: clone ce référentiel et exécuter les services Docker Compose pour MongoDB et QDRANT
git clone [email protected]:tigranbs/search-engine-example-text-embeddings.git
cd search-engine-example-text-embeddings
docker compose up -d3. Nouveau terminal: exécutez le travailleur des données pour démarrer la vectorisation des données de recherche en téléchargeant les fichiers CommonCraw
cd search-engine-example-text-embeddings
cd data-worker
npm i
npm start4 Nouveau terminal: exécutez webapp pour commencer à rechercher
cd search-engine-example-text-embeddings
cd webapp
npm i
npm run devAprès ces étapes, vous devriez être en mesure de naviguer vers le http: // localhost: 3000 et voir la page de recherche, qui fonctionnera directement avec le MongoDB et le QDRANT en plus des textes déjà syncronisés que vous aurez déjà.