تم إنشاء هذا المشروع لتوضيح كيف يمكننا بناء محركات البحث الحديثة باستخدام بنية مباشرة من تضمينات النص (محولات Luggingface) وقاعدة بيانات المتجهات.
كأساس لبيانات البحث ، استخدمت الأشهر الستة الستة الأخيرة من CommonCrawl من بيانات موقع الويب الزاحف ، ولكن نظرًا لأن الأمر استغرق ما يقرب من أسبوعين على جهاز الكمبيوتر المحمول (M1 Max) لتجاوز مجالات ~ 1mln ، أفترض أن أي شخص سيستخدم هذا المستودع لن يحاول استخدام مجموعة البيانات بالكامل؟
لتشغيل هذا المشروع محليًا ، ستحتاج !
data-worker و webapp (next.js)لم يتم تحسين هذا المشروع للإنتاج ، لذلك لا يوجد تطبيق نشر "أمر واحد". سيكون هذا مثالًا على كيفية إنشاء بحث عن موقع الويب الخاص بك لجعل النتائج أكثر مثل Google (نوع من ...)
ستجد المزيد من المعلومات حول استخدام واجهة تضمينات النص HuggingFace على صفحة GitHub الرسمية. ومع ذلك ، بالنسبة لسياق هذا المستودع ، كنت مهتمًا بتجميعه لـ MACOS M1 واستخدامه مع وحدة معالجة الرسومات المعدنية M1 MAX ، والتي تتوفر فقط عبر التجميع المباشر. يمكنك استخدام حاويات Docker المعالجات المستندة إلى Intel ، والتي يتم تصميمها مسبقًا ومتاحة ل GPUs NVIDIA.
ستقوم الأوامر أدناه باستنساخ واجهة تضمينات النص وإنشائها لبرنامج تشغيل MacOS Metal لاستخدام معالج M1.
git clone https://github.com/huggingface/text-embeddings-inference.git
cd text-embeddings-inference
cargo install --path router -F candle -F metalقد يستغرق الأمر بضع دقائق و 100 ٪ من وحدة المعالجة المركزية الخاصة بك ، لذا احصل على القهوة في غضون ذلك ☕
يحتوي دليل data-worker على برنامج Simple.js ، تم تصميمه لتنزيل الإطار الزمني لبيانات CommonCrawl المحدد وبدء تشغيل محتوى النص من HTML المزروع وحفظ النتائج كقاعدة بيانات إلى قاعدة بيانات QDrant و MongoDB للمرجع في وقت لاحق للبحث.
من المهم أن نلاحظ أن كمية البيانات هائلة بالنسبة لـ "تشغيل محلي" ، لذلك لا تحاول الانتظار حتى يكتمل التقييم ، سيستغرق الأمر شهورًا على التوالي لإكمال ذلك إذا كان سيتناسب حتى على الكمبيوتر المحمول. بعد أسبوعين من التنفيذ ، استسلمت للتو ، لأن الأمر استغرق ما يقرب من 300 جيجابايت من التخزين ولم أفعل سوى 4 ٪ من مجموعة بيانات CommonCrawl الشائعة.
webapp نفسه بسيط للغاية في تطبيق Next.js مع CSS Tailwind وبعض الملفات المخصصة داخل دليل webapp/src/utils ، حيث لدي وظيفة في الاتصال بـ MongoDB وقواعد البيانات QDrant وأيضًا يطلب إرسال رسالة نصية إلى واجهة التضمين لتوضيح نص البحث قبل إجراء طلب بحث حقيقي.
تلك الأوامر أدناه هي خطوات تشغيل هذا المشروع محليًا وبدء تشغيل مجموعة بيانات CommonCrawl والبحث فيها.
BAAI/bge-large-en-v1.5 MTEB لنموذج Vectoriztion cd text-embeddings-inference
text-embeddings-router --model-id BAAI/bge-large-en-v1.5 --max-client-batch-size 5000 --port 88882. محطة جديدة: استنساخ هذا المستودع وتشغيل Docker Compose خدمات لـ MongoDB و QDrant
git clone [email protected]:tigranbs/search-engine-example-text-embeddings.git
cd search-engine-example-text-embeddings
docker compose up -d3. محطة جديدة: قم بتشغيل عامل البيانات لبدء تفسير بيانات البحث عن طريق تنزيل ملفات CommonCrawl وإرسالها إلى واجهة تضمينات النص
cd search-engine-example-text-embeddings
cd data-worker
npm i
npm start4 محطة جديدة: قم بتشغيل WebApp للبدء في البحث
cd search-engine-example-text-embeddings
cd webapp
npm i
npm run devبعد هذه الخطوات ، يجب أن تكون قادرًا على الانتقال إلى http: // localhost: 3000 ورؤية صفحة البحث ، والتي ستعمل مباشرة مع mongodb و qdrant على رأس النصوص المتزامنة بالفعل التي ستحصل عليها بالفعل.