Dieses Projekt wurde erstellt, um zu demonstrieren, wie wir moderne Suchmaschinen mit einer einfachen Struktur von Texteinbettungen (Huggingface -Transformatoren) und einer Vektordatenbank erstellen können.
Als Grundlage für die Suchdaten verwendete ich die letzten sechs Monate der krabbelenden Website -Daten von Commoncrawl, aber da es auf meinem Laptop (M1 Max) fast zwei Wochen dauerte, um ~ 1mln -Domänen zu vectorisieren, gehe ich davon aus, dass jemand, der dieses Repository verwenden wird, nicht versuchen würde, den gesamten Datensatz zu vectorisieren?
Um dieses Projekt lokal durchzuführen, brauchen Sie!
data-worker und webapp (next.js)Dieses Projekt wurde nicht für die Produktion optimiert, daher gibt es keine Implementierung der Produktionsergebungseinsatz für die Produktion. Dies wird ein Beispiel dafür sein, wie Sie eine Suche nach Ihrer Website erstellen, um Ergebnisse mehr wie Google zu machen (irgendwie…)
Weitere Informationen zur Verwendung der Schnittstelle zur Einbettung von Huggingface -Text -Einbetten auf ihrer offiziellen Github -Seite finden Sie auf ihrer offiziellen Github -Seite. Für den Kontext dieses Repository war ich jedoch daran interessiert, es für den MacOS M1 zu kompilieren und mit der M1 Max Metal -GPU zu verwenden, die nur über direkte Zusammenstellung erhältlich ist. Sie können die Docker-Container der Intel-basierten Prozessoren verwenden, die für NVIDIA-GPUs vorgefertigt und verfügbar sind.
Die folgenden Befehle klonen die Schnittstelle zur Einbettung von Text und erstellen sie für den MacOS -Metalltreiber, um den M1 -Prozessor -GPUs zu verwenden.
git clone https://github.com/huggingface/text-embeddings-inference.git
cd text-embeddings-inference
cargo install --path router -F candle -F metalEs kann ein paar Minuten und 100% Ihrer CPU dauern. Nehmen Sie also in der Zwischenzeit einen Kaffee ☕️.
Das data-worker -Verzeichnis enthält einen einfachen Node.js-Skripte, mit dem angegebene Commoncrawl-Datenzeitframe heruntergeladen und den Textinhalt aus gekrabbeltem HTML gestartet und die Ergebnisse als Vectories in QDrant-Datenbank und MongoDB gespeichert werden können.
Es ist wichtig zu beachten, dass die Datenmenge für einen „Lokallauf“ enorm ist. Versuchen Sie also nicht zu warten, bis die Vektorisierung abgeschlossen ist. Es dauert Monate hintereinander, um dies zu vervollständigen, wenn sie überhaupt auf Ihren Laptop passt. Nach 2 Wochen Ausführung habe ich gerade aufgegeben, weil es fast 300 GB Speicherplatz dauerte und ich nur 4% aus diesem 6 -monatigen Commoncrawl -Datensatz gemacht hatte.
Die webapp selbst ist sehr einfach als Nächste.js -App mit einem Tailwind -CSS und einigen benutzerdefinierten Dateien im Verzeichnis webapp/src/utils , in dem ich eine Funktionalität habe, mit MongoDB, QDRant -Datenbanken eine Verbindung herzustellen, und auch Anfragen zu Text -Einbettungsschnittstellen, um den Suchtext zu vectorisieren, bevor eine tatsächliche Suchanfrage ausgeführt wird.
Die folgenden Befehle sind die Schritte, um dieses Projekt lokal auszuführen und den Commoncrawl -Datensatz zu starten und zu durchsuchen.
BAAI/bge-large-en-v1.5 MTEB-Modell für die Vektorizion aus cd text-embeddings-inference
text-embeddings-router --model-id BAAI/bge-large-en-v1.5 --max-client-batch-size 5000 --port 88882. Neues Terminal: Klonen Sie dieses Repository und führen Sie die Docker -Komponierungsdienste für MongoDB und Qdrant aus
git clone [email protected]:tigranbs/search-engine-example-text-embeddings.git
cd search-engine-example-text-embeddings
docker compose up -d3. Neues Terminal: Führen Sie den Datenarbeiter aus, um die Suchdaten zu starten, indem Sie die Commoncrawl -Dateien herunterladen und diese an Texteinbettungsschnittstellen senden
cd search-engine-example-text-embeddings
cd data-worker
npm i
npm start4 Neues Terminal: Führen Sie WebApp aus, um mit der Suche zu beginnen
cd search-engine-example-text-embeddings
cd webapp
npm i
npm run devNach diesen Schritten sollten Sie in der Lage sein, zum http: // localhost: 3000 zu navigieren und die Suchseite zu sehen, die direkt mit MongoDB und Qdrant über bereits synkronisierte Texte funktioniert, die Sie bereits haben werden.