إعداد البيانات
download.sh التالي لهذا الغرض:
process.py كما يلي:
seq 0 9 | ....
(سكريبت Python أعلاه بطيء جدًا (~2-10 دقائق لكل ملف)، ويستهلك قدرًا كبيرًا من الذاكرة (41 GB لكل ملف)، كما أن ملفات CSV الناتجة كبيرة (10 GB لكل ملف)، لذا توخَّ الحذر. إذا كان لديك ما يكفي من RAM، فزِد قيمة -P1 للحصول على مزيد من التوازي. إذا ظل هذا بطيئًا جدًا، ففكّر في إيجاد آلية أفضل لإدخال البيانات — ربما عبر تحويل ملفات .npy إلى parquet، ثم تنفيذ بقية المعالجة باستخدام ClickHouse.)
إنشاء جدول
id هو للتوضيح فقط، ويُعبِّئه البرنامج النصي بقيم غير فريدة.
نفّذ بحث تشابه متجهي بأسلوب الفحص الشامل
target هو مصفوفة تضم 512 عنصرًا، وهو أيضًا معامل للعميل.
وسنستعرض في نهاية المقال طريقة عملية للحصول على مصفوفات كهذه.
أما الآن، فيمكننا استخدام تضمين لصورة عشوائية لمجموعة LEGO بوصفه target.
النتيجة
أجرِ بحثًا تقريبيًا عن تشابه المتجهات باستخدام فهرس تشابه المتجهات
إنشاء التضمينات باستخدام UDFs
target من داخل العميل. ومن المهم استخدام النموذج نفسه لإنشاء البيانات والتضمينات الجديدة الخاصة بعمليات البحث. تستخدم البرامج النصية التالية النموذج ViT-B/32، وهو أيضًا النموذج الذي تستند إليه مجموعة البيانات.
تضمينات النص
user_scripts/ ضمن مسار بيانات ClickHouse، ومنحه صلاحية التنفيذ (chmod +x encode_text.py).
encode_text.py:
encode_text_function.xml في مسار يُشار إليه بواسطة <user_defined_executable_functions_config>/path/to/*_function.xml</user_defined_executable_functions_config> ضمن ملف إعدادات خادم ClickHouse.
SET param_target=...، ومن ثم كتابة الاستعلامات بسهولة. وبدلًا من ذلك، يمكن استخدام الدالة encode_text() مباشرةً كوسيطة للدالة cosineDistance:
encode_text() نفسه قد يستغرق بضع ثوانٍ لحساب متجه التضمين وإرجاعه.
تضمين الصور
encode_image.py
encode_image_function.xml