مشاركة عبر


Half-Precision vector indexing in Azure DocumentDB

ما هو Half-Precision فهرسة المتجهات؟

يتيح لك الفهرسة المتجهية نصف الدقة تخزين وفهرسة التضمينات المتجهية باستخدام أرقام الفاصل العائم 16 بت بدلا من العوامات القياسية 32 بت. يؤدي هذا التحسين إلى تقليل كبير في استهلاك الذاكرة وتكاليف التخزين، مما يجعل من الأسهل العمل مع مجموعات بيانات أكبر ومتجهات ذات أبعاد أعلى. علاوة على ذلك، من خلال تحسين كثافة البيانات، يمكن أن يساهم في تحسين أداء الاستعلام في العديد من سيناريوهات البحث المتجه.

الفوائد الرئيسية

  • زيادة دعم الأبعاد: بدقة نصف دقيقة، يمكنك الآن فهرسة المتجهات التي تصل إلى 4000 بعد (زيادة عن الحد السابق البالغ 2000).
  • تقليل حجم التخزين: تخزين المتجهات بصيغة 16-بت يقلل بشكل كبير من كمية التخزين المطلوبة مقارنة بالمتجهات ذات الدقة الكاملة. يمكن أن يؤدي ذلك إلى توفير كبير في التكاليف، خاصة لقواعد البيانات المتجهة واسعة النطاق.
  • الأداء القابل للتكوين مقابل الدقة: لضبط نتائج البحث الخاصة بك، نوفر معامل لأخذ عينات زائدة أثناء تنفيذ الاستعلام. هذا يسمح لك بالتحكم في المقايضة بين سرعة الاسترجاع والتأثير المحتمل للدقة المنخفضة.

إنشاء مؤشر متجه Half-Precision

عند تعريف مؤشر متجه لمجموعتك، يمكنك تمكين الضغط نصف الدقيق عن طريق تحديد الخيار "compression": "half" ضمن .cosmosSearchOptions

db.runCommand({
  "createIndexes": "<vector_collection_name>",
  "indexes": [
    {
      "key": { "<vector_field_name>": "cosmosSearch" },
      "name": "<index_name>",
      "cosmosSearchOptions": {
        "kind": "vector-hnsw", // or vector-ivf
        "similarity": "cos",
        "dimensions": integer_value, // max 4000
        "compression": "half"
      }
    }
  ]
});

تحسين البحث باستخدام العينة الزائدة

عند الاستعلام عن مؤشر متجه يستخدم ضغطا نصف دقيق، يمكنك استخدام المعامل oversampling ضمن $search مرحلة التجميع. يساعد هذا المعامل في التخفيف من أي فقدان محتمل للدقة يسببه تمثيل 16-بت.

oversampling العامل يسمح لك باسترجاع عدد أكبر من الجيران المحتملين من مؤشر نصف الدقة مقارنة بالعدد النهائي للنتائج التي تريدها (k). يتم بعد ذلك مقارنة هؤلاء المرشحين باستخدام المتجهات الأصلية ذات الدقة الكاملة لضمان دقة أعلى في النتائج النهائية المصنفة.

على سبيل المثال، للحصول على أفضل 10 (k=10) متجهات متشابهة، قد يكون من الأفضل ضبط oversampling قيمة مثل 1.5 أو 2.0. مع "oversampling": 1.5، سيحصل النظام أولا على 15 مرشحا من مؤشر نصف الدقة ثم يصقل أفضل 10 باستخدام بيانات الدقة الكاملة.

db.collection.aggregate([
  {
    "$search": {
      "cosmosSearch": {
        "vector": query_vector,
        "path": path_to_property,
        "k":  num_results_to_return,
        "oversampling": double_value
      }
    }
  },
  {
    "$project": {
      "similarityScore": { "$meta": "searchScore" },
      "_id": 0
    }
  }
]);

إشعار

يجب أن يكون العامل oversamplingمضاعفا بقيمة دنيا ل 1.0. هذا العامل ذو صلة فقط للمؤشرات المتجهية التي يتم إنشاؤها ب "compression": "half".

Half-Precision مقابل كمية المنتج

كل من Half-Precision وكمية المنتج (PQ) تضغط فهارس المتجهات في Azure DocumentDB، لكنهما يختلفان، لكنهما يختلفان، في كيفية تحقيق الضغط والتأثير على البحث:

الميزة Half-Precision كمية الضرب (PQ)
طريقة الضغط يقلل كل بعد متجه إلى 16 بت. يقسم الفضاء المتجه إلى فضاءات فرعية ويكمم كل فضاء.
أقصى أبعاد ما يصل إلى 4000 حتى 16,000
التغيير الدقيق فقدان بسيط بسبب انخفاض عمق البت. قد يكون هناك خسارة أكبر، ويمكن تكوينها عبر pqCompressedDims.
سرعة البحث زيادة متوسطة في السرعة بسبب صغر المؤشر. زيادة كبيرة في السرعة بسبب المضامير المضغوطة للغاية.
زمن بناء الفهرس بسرعة نسبيا. قد يكون وقتا أطول بسبب تدريب السنترويدز (pqSampleSize).
دعم المؤشرات HNSW، أطفال الأنابيب. ديسكان.
تكوين ببساطة، فعل compression: "half". مزيد من المعايير: pqCompressedDims, pqSampleSize.
استخدام العينة الزائدة يساعد في فقدان الدقة الطفيف. ضروري لاستعادة الدقة من ضغط أكبر.
حالات الاستخدام المثالية تقليل متوسط في الذاكرة، زيادة الأبعاد، مقايضة دقيقة مقبولة. مجموعات بيانات كبيرة، أبعاد عالية، بحث سريع أولوية، دقة مدارة مع أخذ عينات زائدة.

الخطوة التالية