مشاركة عبر


Half-Precision فهرسة المتجهات في Azure Cosmos DB ل MongoDB (vCore)

ما المقصود بفهرسة متجهات 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 مرشحا من فهرس نصف الدقة ثم يصقل العشرة الأوائل باستخدام بيانات الدقة الكاملة.

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 وCoduct Quantization (PQ) بضغط فهارس المتجهات في Azure Cosmos DB ل MongoDB (vCore)، ولكنها تختلف في كيفية تحقيق الضغط والتأثير على البحث:

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

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