يدعم بحث المتجهات معظم خطوط أنابيب توليد الاسترجاع المعزز (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 هو فهرس متجه مكتوب بلغة Rust مع روابط Python. إنه مبني على خوارزمية TurboQuant الخاصة بشركة Google Research – وهي أداة قياس كمية غافلة عن البيانات ولا تتطلب أي تدريب على كتاب الرموز. مجموعة مكونة من 10 ملايين مستند تشغل 31 جيجابايت حيث يتناسب float32 مع 4 جيجابايت مع Turbovec.

⚡ ضغط 16x بمعدل 2 بت

💨 يتفوق على FAISS على ARM بنسبة 12-20%

🔒 محلي بالكامل – لا يوجد خروج للبيانات

📦 معهد ماساتشوستس للتكنولوجيا مرخص

تثبيت

قم بتثبيت حزمة Python من PyPI باستخدام أمر واحد. بالنسبة إلى الصدأ، قم بإضافة الصندوق عبر Cargo.

# Python
pip install turbovec

# Rust
cargo add turbovec

ملحوظة: للبناء من المصدر، قم بالتثبيت ماتورين ثم تشغيل ماتورين بناء-الإصدار داخل توربوفيك-بيثون/ دليل. من أجل الصدأ، اركض بناء البضائع – الافراج.

الاستخدام الأساسي – TurboQuantIndex

TurboQuantIndex هي الطبقة الابتدائية. قم بتهيئته باستخدام المتجه خافت و أ bit_width من 2 أو 4. تتم فهرسة المتجهات فورًا يضيف() – لا توجد خطوة تدريبية مطلوبة.

from turbovec import TurboQuantIndex

index = TurboQuantIndex(dim=1536, bit_width=4)

# Add vectors (numpy float32 array, shape [n, dim])
index.add(vectors)
index.add(more_vectors)  # incremental adds are fine

# Search: returns top-k scores and positional indices
scores, indices = index.search(query, k=10)

المعرفات الثابتة — IdMapIndex

يستخدم IdMapIndex عندما تحتاج الخارجية uint64 المعرفات التي تبقى على قيد الحياة بعد الحذف. الإزالة هي O(1) بواسطة المعرف — وهي مفيدة لمخازن المستندات حيث تتغير المتجهات بمرور الوقت.

import numpy as np
from turbovec import IdMapIndex

index = IdMapIndex(dim=1536, bit_width=4)

# Map vectors to your own uint64 external IDs
index.add_with_ids(vectors, np.array([1001, 1002, 1003], dtype=np.uint64))

# Search returns your external IDs, not positional indices
scores, ids = index.search(query, k=10)

# O(1) delete by external ID
index.remove(1002)

حفظ وتحميل الفهرس

يدعم كلا النوعين من الفهرس التخزين المستمر. TurboQuantIndex يكتب ل .tq ملفات. IdMapIndex يكتب ل .tvim ملفات.

بيثون

تكاملات الإطار

تشحن Turbovec إضافات اختيارية لـ LangChain وLlamaIndex وHaystack. قم بتثبيت الإضافات التي تطابق مجموعتك.

# LangChain
pip install turbovec[langchain]

# LlamaIndex
pip install turbovec[llama-index]

# Haystack
pip install turbovec[haystack]

نصيحة: يقوم كل تكامل بتوصيل Turbovec كمخزن متجه. يرى المستندات/التكامل/ في الريبو للحصول على أمثلة الاستخدام الكامل مع كل إطار عمل.

استخدام Turbovec في الصدأ

تعكس Rust API واجهة برمجة تطبيقات Python. كلاهما TurboQuantIndex و IdMapIndex متوفرة. جميع إصدارات x86_64 تنشئ هدف AVX2 كخط أساسي؛ يتم تمكين AVX-512 في وقت التشغيل عبر اكتشاف الميزات.

use turbovec::TurboQuantIndex;

let mut index = TurboQuantIndex::new(1536, 4);
index.add(&vectors);

let results = index.search(&queries, 10);

index.write("index.tv").unwrap();
let loaded = TurboQuantIndex::load("index.tv").unwrap();

📚 واجهة برمجة التطبيقات الكاملة: docs/api.md

⭐ github.com/RyanCodrai/turbovec


جميع الشرائح 7 • يلتقط الموضوع الحالي

الوجبات السريعة الرئيسية

  • لا يوجد تدريب على كتاب الشفرات. يقوم Turbovec بفهرسة المتجهات على الفور – لا توجد وسائل k، ولا توجد عمليات إعادة بناء مع نمو الجسم.
  • ضغط 16x. يتقلص المتجه float32 ذو 1536 خافتًا من 6144 بايت إلى 384 بايت عند تكميم 2 بت.
  • أسرع من FAISS على ARM. يتفوق Turbovec على FAISS IndexPQFastScan بنسبة 12-20% على ARM في كل تكوين.
  • تشويه شبه الأمثل. يحقق TurboQuant تشويهًا يصل إلى 2.7x تقريبًا من الحد الأدنى لشانون – بالقرب من الحد النظري.
  • محلية بالكامل. لا توجد خدمة مُدارة، ولا توجد بيانات خروج – تقترن بأي نموذج تضمين مفتوح المصدر لمكدس RAG ذو فجوة هوائية.

تحقق من الريبو هنا. أيضا، لا تتردد في متابعتنا على تغريد ولا تنسى الانضمام إلينا 150 ألف+ مل من SubReddit والاشتراك في النشرة الإخبارية لدينا. انتظر! هل أنت على برقية؟ الآن يمكنك الانضمام إلينا على التليجرام أيضًا.

هل تحتاج إلى الشراكة معنا للترويج لصفحة GitHub Repo أو صفحة الوجه المعانقة أو إصدار المنتج أو الندوة عبر الويب وما إلى ذلك؟ تواصل معنا





المادة السابقةكيفية إنشاء خطوط أنابيب لإنشاء الرسوم البيانية المعرفية من النص باستخدامkg-gen، وNetworkX Analytics، والمرئيات التفاعلية


اكتشاف المزيد من كحيل | أخبار التقنية

اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.

شاركها.
اترك تعليقاً

اكتشاف المزيد من كحيل | أخبار التقنية

اشترك الآن للاستمرار في القراءة والحصول على حق الوصول إلى الأرشيف الكامل.

متابعة القراءة