إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
تكميم المنتج (PQ) هو تقنية قوية في Azure DocumentDB تقوم بضغط التضمين المتجه عالي الأبعاد بشكل كبير المستخدم في البحث المتجهي. يقلل هذا الضغط من استخدام الذاكرة ويسرع عمليات البحث في أقرب الجيران، مما يحسن الكفاءة لمجموعات البيانات المتجهية الكبيرة. بينما تقدم PQ فوائد للسرعة والحجم، إلا أنها قد تأتي على حساب الدقة.
Benefits
- تقليل التخزين: يقلل PQ بشكل كبير من التخزين المطلوب لفهارس المتجهات مقارنة بالمتجهات ذات الدقة الكاملة (float32)، مما يؤدي إلى توفير كبير في التكاليف لمجموعات البيانات الكبيرة.
- بحث أسرع: يتيح العمل مع المتجهات المضغوطة للنظام حساب المسافات وإيجاد أقرب جيران محتملين بشكل أسرع بكثير من المتجهات ذات الدقة الكاملة.
- تحسين قابلية التوسع: انخفاض عبء الذاكرة يتيح البحث المتجه الكبير للتعامل مع التضمينات الأكبر والأعلى أبعادا داخل عنقودك.
طريقة العمل
تقسم كمية الضرب فضاء المتجهات عالية الأبعاد إلى عدة فضاءات فرعية ذات أبعاد أقل. يتم بعد ذلك تكميم كل فضاء فرعي بشكل مستقل باستخدام خوارزمية التجميع (عادة k-متوسطات). مركز كل عنقود يمثل جميع المتجهات داخلها. يتم تمثيل كل متجه أصلي بعد ذلك برمز قصير لمعرفات العنقود التي ينتمي إليها في كل فضاء فرعي.
باستخدام كمية الضرب
لإنشاء فهرس متجه باستخدام كمية الضرب، استخدم createIndexes الأمر الذي يحدد cosmosSearchOptions"compression": "pq" و "kind" : "vector-diskann":
{
"createIndexes": "<collection_name>",
"indexes": [
{
"name": "<index_name>",
"key": {
"<path_to_property>": "cosmosSearch"
},
"cosmosSearchOptions": {
"kind": "vector-diskann",
"similarity": "<string_value>", // "COS", "L2"
"dimensions": <integer_value>, // Max 16,000
"compression": "pq",
"pqCompressedDims": <integer_value>, // Dimensions after compression (< original)
"pqSampleSize": <integer_value> // Samples for centroid generation
}
}
]
}
| الحقل | Type | Description |
|---|---|---|
compression |
string | قم بتعيين على لتمكين "pq" التكميم الحاصل على المنتج. |
pqCompressedDims |
العدد الصحيح | الأبعاد بعد ضغط PQ (يجب أن تكون أقل من الأبعاد الأصلية). يتم الحساب تلقائيا إذا تم حذفها. النطاق: 1-8000. |
pqSampleSize |
العدد الصحيح | عدد ناقلات العينات لتدريب مركز PQ. القيمة الأعلى تعني جودة أفضل لكن وقت البناء أطول. الافتراضي: 1000. النطاق: 1000-100000. |
إشعار
يتم حاليا دعم كمية المنتج فقط بنوع المؤشر vector-diskann .
إشعار
للحصول على أفضل النتائج، أنشئ فهرس PQ بعد أن تحتوي مجموعتك على بيانات. إذا كانت المجموعة فارغة، يستخدم النظام متجهات عشوائية للمراكز الأولية. إذا كان عدد المستندات أقل من pqSampleSize، يتم حشو بيانات التدريب ببيانات عشوائية ضمن نطاق بيانات المتجهات الحالية لديك.
كيف يتم تعيين الأبعاد المضغوطة
إذا لم تحدد pqCompressedDims، فإنه يحدد تلقائيا بناء على المتجه dimensionsالأصلي :
| نطاق الأبعاد الأصلي | pqCompressedDims |
|---|---|
| [0 - 32) | الأبعاد / 2 |
| [32 - 64) | 16 |
| [64 - 128) | 32 |
| [128 - 512) | 64 |
| [512 - 1536) | 96 |
| فوق عام 1536 | 128 |
إنشاء مؤشر PQ
db.runCommand(
{
"createIndexes": "your_vector_collection",
"indexes": [
{
"key": { "v": "cosmosSearch" },
"name": "diskann_pq_index",
"cosmosSearchOptions": {
"kind": "vector-diskann",
"similarity": "COS",
"dimensions": 1536,
"compression": "pq",
"pqCompressedDims": 96,
"pqSampleSize": 2000
}
}
]
} )
تحسين البحث باستخدام العينة الزائدة
يمكن أن يؤدي ضغط PQ إلى فقدان الدقة في حسابات المسافة. لتقليل ذلك، يقدم Azure DocumentDB المعامل oversampling في المشغل $search .
يحدد العامل oversampling (عوامة بحد أدنى 1) عدد المتجهات المرشحة الإضافية التي يجب استرجاعها من المؤشر المضغوط مقارنة k بعدد النتائج المرغوبة. تستخدم هذه المرشحات الإضافية لتحسين البحث باستخدام المتجهات الأصلية ذات الدقة الكاملة، مما يحسن الدقة النهائية القصوى k . على سبيل المثال، للحصول على أفضل 10 (k=10) متجهات متشابهة، قد يكون من الأفضل ضبط oversampling قيمة مثل 1.5 أو 2.0. مع "oversampling": 1.5، سيحصل النظام أولا على 15 مرشحا من المؤشرس ثم يصقل أفضل 10 باستخدام البيانات ذات الدقة الكاملة.
{
"$search": {
"cosmosSearch": {
"vector": <vector_to_search>,
"path": "<path_to_property>",
"k": <num_results_to_return>,
"oversampling": <float_value>
},
}
}
يوضح هذا المقتطف من الكود بحثا متجهيا باستخدام $search العامل مع التكميم الحاصل الصلب. يأخذ مدخلات queryVector as ويبحث في v الحقل. يطلب الاستعلام أفضل 10 مستندات مشابهة (k: 10)، باستخدام oversampling عامل 2.0، والذي يسترجع 20 مرشحا مما يحسن دقة البحث على الفهرس المضغوط.
db.your_vector_collection.aggregate([
{
$search: {
"cosmosSearch": {
"vector": [0.1, 0.5, 0.9, ...],
"path": "v",
"k": 10,
"oversampling": 2.0 // Retrieve 2 * 10 = 20 candidates for reranking
},
"returnStoredSource": true
}
}
])
Half-Precision مقابل الكمية الحاصل
كل من نصف الدقة وتكميم المنتج (PQ) يضغط فهارس المتجهات في Azure DocumentDB، لكنهما يختلقان في كيفية تحقيق الضغط وتأثيرهما على البحث:
| الميزة | Half-Precision | كمية الضرب (PQ) |
|---|---|---|
| طريقة الضغط | يقلل كل بعد متجه إلى 16 بت. | يقسم الفضاء المتجه إلى فضاءات فرعية ويكمم كل فضاء. |
| أقصى أبعاد | ما يصل إلى 4000 | حتى 16,000 |
| التغيير الدقيق | فقدان بسيط بسبب انخفاض عمق البت. | قد يكون هناك خسارة أكبر، ويمكن تكوينها عبر pqCompressedDims. |
| سرعة البحث | زيادة متوسطة في السرعة بسبب صغر المؤشر. | زيادة كبيرة في السرعة بسبب المضامير المضغوطة للغاية. |
| زمن بناء الفهرس | بسرعة نسبيا. | قد يكون وقتا أطول بسبب تدريب السنترويدز (pqSampleSize). |
| دعم المؤشرات | HNSW، أطفال الأنابيب. | ديسكان. |
| تكوين |
ببساطة، فعل compression: "half". |
مزيد من المعايير: pqCompressedDims, pqSampleSize. |
| استخدام العينة الزائدة | يساعد في فقدان الدقة الطفيف. | ضروري لاستعادة الدقة من ضغط أكبر. |
| حالات الاستخدام المثالية | تقليل متوسط في الذاكرة، زيادة الأبعاد، مقايضة دقيقة مقبولة. | مجموعات بيانات كبيرة، أبعاد عالية، بحث سريع أولوية، دقة مدارة مع أخذ عينات زائدة. |
اعتبارات لتكميم الضرب
-
الدقة مقابل الضغط: الضغط الأعلى في PQ يؤدي إلى مؤشرات أصغر وبحث أسرع ولكن فقدان دقة أكبر. جرب وتجد
pqCompressedDimsoversamplingالتوازن المناسب. -
وقت بناء الفهرس: قد يستغرق إنشاء مؤشر PQ وقتا أطول بسبب عملية تدريب مركز الوسط، المتأثرة ب
pqSampleSize. - توزيع البيانات: يعمل PQ بشكل أفضل عندما يكون لبيانات المتجهات هيكل عنقودي واضح.