يدعم بحث المتجهات معظم خطوط أنابيب توليد الاسترجاع المعزز (RAG). على نطاق واسع، يصبح باهظ الثمن. يستهلك تخزين 10 ملايين تضمين مستند في float32 31 جيجابايت من ذاكرة الوصول العشوائي. بالنسبة لفرق التطوير التي تقوم بتشغيل الاستدلال المحلي أو الداخلي، فإن هذا الرقم يخلق قيودًا حقيقية.
مكتبة جديدة مفتوحة المصدر تسمى com.turbovec يعالج هذا مباشرة. إنه فهرس متجه مكتوب بلغة Rust مع روابط Python. تم البناء عليه TurboQuant، خوارزمية التكميم من أبحاث جوجل. نفس المجموعة المكونة من 10 ملايين مستند تتلاءم مع 4 جيجابايت مع Turbovec. على أجهزة ARM، تتفوق سرعة البحث على FAISS IndexPQFastScan بنسبة 12–20%.
ورقة TurboQuant
تم تقديم TurboQuant بواسطة فريق بحث Google. يقترح فريق Google استخدام TurboQuant كمُكمِّم غافل عن البيانات. إنه يحقق معدلات تشويه شبه مثالية عبر جميع عروض البتات والأبعاد. لا يتطلب أي تدريب ولا يمرر البيانات.
تتطلب معظم أجهزة قياس الكميات المتجهة على مستوى الإنتاج، بما في ذلك تكميم المنتج الخاص بـ FAISS، خطوة تدريب على كتاب التعليمات البرمجية. يجب عليك تشغيل k-means على عينة تمثيلية من المتجهات الخاصة بك قبل بدء الفهرسة. إذا كان مجموعتك تنمو أو تتغير، فقد تحتاج إلى إعادة تدريب الفهرس وإعادة بنائه بالكامل. يتخطى TurboQuant كل ذلك. ويستخدم خاصية تحليلية للمتجهات المدورة بدلاً من المعايرة المعتمدة على البيانات.
كيف يقوم Turbovec بتكميم المتجهات
يتكون خط أنابيب التكميم من أربع خطوات:
(1) كل ناقل تطبيع. يتم تجريد الطول (القاعدة) وتخزينه كطفو واحد. يصبح كل متجه اتجاه وحدة على كرة فرطية عالية الأبعاد.
(2) أ دوران عشوائي يتم تطبيقه. يتم ضرب جميع المتجهات بنفس المصفوفة المتعامدة العشوائية. بعد التدوير، يتبع كل إحداثي بشكل مستقل توزيع بيتا. في الأبعاد العالية، يتقارب هذا مع Gaussian N(0, 1/d). وينطبق هذا على أي بيانات مدخلة – فالتدوير يجعل توزيع الإحداثيات قابلاً للتنبؤ به.
(3) تكميم لويد ماكس العددي يتم تطبيقه. نظرًا لأن التوزيع معروف من الناحية التحليلية، يمكن حساب حدود الدلو المثالية والنقط الوسطى مسبقًا من الرياضيات وحدها. بالنسبة لتكميم 2 بت، فهذا يعني 4 مجموعات لكل إحداثي. بالنسبة لـ 4 بت، فهذا يعني 16 مجموعة. ليست هناك حاجة لتمرير البيانات.
(4) الإحداثيات الكمية هي معبأة قليلا إلى بايت. يتقلص المتجه ذو الأبعاد 1536 من 6,144 بايت في FP32 إلى 384 بايت عند 2 بت. هذه نسبة ضغط 16x.
في وقت البحث، يتم تدوير الاستعلام مرة واحدة في نفس المجال. يحدث التسجيل مباشرة مقابل قيم كتاب الرموز. تستخدم نواة التسجيل جوهريات SIMD – NEON على ARM وAVX-512BW على x86 الحديث، مع احتياطي AVX2 – مع جداول بحث مقسمة للإنتاجية.
يحقق TurboQuant تشويهًا يصل إلى 2.7 مرة تقريبًا من الحد الأدنى لشانون النظري للمعلومات.
الاستدعاء والسرعة: الأرقام
تستخدم جميع المعايير 100 ألف متجه، و1000 استعلام، وk=64، وتُبلغ عن متوسط 5 عمليات تشغيل.
للتذكير، يقارن Turbovec ضد FAISS IndexPQ (LUT256، nbits=8، float32 LUT). يعد هذا أساسًا قويًا: يستخدم FAISS جدول LUT عالي الدقة في تسجيل الوقت وk-means++ للتدريب على كتاب التعليمات البرمجية. على الرغم من ذلك، فإن TurboQuant وFAISS يقعان ضمن 0-1 نقطة عند R@1 لتضمينات OpenAI عند d=1536 وd=3072. كلاهما يتقاربان إلى 1.0 استدعاء بمقدار k = 4–8. GloVe عند d=200 أصعب. في هذا البعد، يتخلف TurboQuant عن FAISS بمقدار 3-6 نقاط عند R@1، ويغلق عند k≈16–32.
من حيث السرعة، تُظهر نتائج ARM (Apple M3 Max) أن Turbovec يتفوق على FAISS IndexPQFastScan بنسبة 12-20% في كل تكوين. على نظام التشغيل x86 (Intel Xeon Platinum 8481C / Sapphire Rapids، 8 وحدات معالجة مركزية افتراضية)، يفوز Turbovec بكل تكوين 4 بت بنسبة 1-6%. يتم تشغيله ضمن ~ 1٪ من FAISS على خيط مفرد 2 بت. يوجد تكوينان خلف FAISS قليلاً: 2 بت متعدد الخيوط عند d = 1536 و d = 3072. هناك، تكون حلقة التراكم الداخلية قصيرة جدًا بحيث لا يمكن إلغاء الإطفاء. يمتلك مسار AVX-512 VBMI الخاص بـ FAISS الأفضلية في هاتين الحالتين (2-4%).
واجهة برمجة تطبيقات بايثون
التثبيت هو أمر واحد: pip install turbovec. الطبقة الابتدائية هي TurboQuantIndex، تمت تهيئته باستخدام البعد وعرض البت.
from turbovec import TurboQuantIndex
index = TurboQuantIndex(dim=1536, bit_width=4)
index.add(vectors)
scores, indices = index.search(query, k=10)
index.write("my_index.tq")
فئة ثانية، IdMapIndex، يدعم معرفات uint64 الخارجية المستقرة التي تنجو من عمليات الحذف. الإزالة هي O(1) بواسطة المعرف. يعد هذا مفيدًا لمخازن المستندات حيث يتم تحديث المتجهات أو حذفها بشكل متكرر.
يتكامل Turbovec مع LangChain (pip install turbovec[langchain])، مؤشر اللاما (pip install turbovec[llama-index]) ، و كومة قش (pip install turbovec[haystack]). صندوق الصدأ متاح عبر cargo add turbovec.
الشرح المرئي لـ Marktechpost
الوجبات السريعة الرئيسية
- لا يوجد تدريب على كتاب الشفرات. يقوم Turbovec بفهرسة المتجهات على الفور – لا توجد وسائل k، ولا توجد عمليات إعادة بناء مع نمو الجسم.
- ضغط 16x. يتقلص المتجه float32 ذو 1536 خافتًا من 6144 بايت إلى 384 بايت عند تكميم 2 بت.
- أسرع من FAISS على ARM. يتفوق Turbovec على FAISS IndexPQFastScan بنسبة 12-20% على ARM في كل تكوين.
- تشويه شبه الأمثل. يحقق TurboQuant تشويهًا يصل إلى 2.7x تقريبًا من الحد الأدنى لشانون – بالقرب من الحد النظري.
- محلية بالكامل. لا توجد خدمة مُدارة، ولا توجد بيانات خروج – تقترن بأي نموذج تضمين مفتوح المصدر لمكدس RAG ذو فجوة هوائية.
تحقق من الريبو هنا. أيضا، لا تتردد في متابعتنا على تغريد ولا تنسى الانضمام إلينا 150 ألف+ مل من SubReddit والاشتراك في النشرة الإخبارية لدينا. انتظر! هل أنت على برقية؟ الآن يمكنك الانضمام إلينا على التليجرام أيضًا.
هل تحتاج إلى الشراكة معنا للترويج لصفحة GitHub Repo أو صفحة الوجه المعانقة أو إصدار المنتج أو الندوة عبر الويب وما إلى ذلك؟ تواصل معنا
اكتشاف المزيد من كحيل | أخبار التقنية
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.
