مطابقة المنتج: التشابه الدلالي مع تسجيل الاكتشاف
تشرح هذه المقالة كيف نطابق مجموعات استعلامات البحث مع المنتجات والأجزاء والمقالات باستخدام التشابه الدلالي مع نموذج تسجيل اكتشاف اختياري يوازن بين الصلة والحركة المرورية ورتبة الصفحة.
المشكلة: إيجاد أفضل تطابق
عندما يبحث المستخدمون عن "جهاز كمبيوتر صغير"، نحتاج إلى تحديد صفحة المنتج التي تمثل هذا الاستعلام بشكل أفضل. لدينا الآلاف من المنتجات والأجزاء والمقالات - أي منها يجب أن نعرض؟
التحدي يكمن في موازنة عوامل متعددة:
-
الصلة الدلالية: إلى أي مدى تطابق الصفحة معنى الاستعلام؟
-
حركة مرور الاستعلام: ما مقدار حركة مرور البحث التي يحصل عليها هذا الاستعلام؟
-
شعبية الصفحة: ما مقدار الحركة المرورية التي تتلقاها الصفحة بالفعل؟
قد تؤدي الطريقة الساذجة (التشابه الدلالي البحت) إلى مطابقة "جهاز كمبيوتر صغير" مع منتج غير معروف بتشابه مثالي لكن بدون حركة مرورية. نهج أفضل يأخذ في الاعتبار العوامل الثلاثة جميعها.
وضعا المطابقة
نحن ندعم وضعي مطابقة:
1. المطابقة المجمعة (الأصلية)
كل مجموعة تجد أفضل تطابق لها بشكل مستقل. يمكن لمجموعات متعددة أن تطابق نفس الصفحة:
-
المجموعة أ: "جهاز كمبيوتر صغير" → المنتج X (تشابه 0.95)
-
المجموعة ب: "كمبيوتر صغير" → المنتج X (تشابه 0.93)
-
المجموعة ج: "كمبيوتر مكتبي مضغوط" → المنتج X (تشابه 0.91)
هذا يخلق تكرارًا لكنه يضمن حصول كل مجموعة على أفضل تطابق لها.
2. التوجيه الحصري التكراري (تعيين واحد لواحد)
يتم معالجة المجموعات حسب درجة الحركة المرورية (الأعلى أولاً). بمجرد المطالبة بصفحة، يتم إزالتها من المجموعة:
-
المجموعة أ (10 آلاف حركة مرورية): "جهاز كمبيوتر صغير" → المنتج X (تمت المطالبة به)
-
المجموعة ب (5 آلاف حركة مرورية): "كمبيوتر صغير" → المنتج Y (المنتج X غير متاح)
-
المجموعة ج (2 ألف حركة مرورية): "كمبيوتر مكتبي مضغوط" → المنتج Z (المنتج X، Y غير متاحين)
هذا يخلق صفحات استعلام فريدة مع تراجع تلقائي إلى أفضل التطابقات التالية.
الخوارزمية: التشابه الدلالي
الخطوة 1: تحميل التضمينات
نقوم بتحميل التضمينات المحسوبة مسبقًا لـ:
- مجموعات الاستعلام: الاستعلام المركزي من كل مجموعة
- الصفحات المصدر: المنتجات، الأجزاء، المقالات (من الخطوة 0)
كلاهما يستخدم نفس نموذج all-mpnet-base-v2، مما يضمن تضمينات قابلة للمقارنة.
الخطوة 2: حساب التشابه
لكل مجموعة، نحسب تشابه جيب التمام مع جميع الصفحات المصدر:
similarities = util.cos_sim(cluster_embedding, source_embeddings)[0]
هذا ينتج درجة تشابه (من 0.0 إلى 1.0) لكل صفحة مصدر.
الخطوة 3: تطبيق تسجيل الاكتشاف (اختياري)
إذا تم تمكين تسجيل الاكتشاف، فإننا نجمع بين ثلاثة عوامل:
نموذج تسجيل الاكتشاف 50:30:20:
discovery_score = (similarity * 0.5) + (query_score * 0.3) + (page_rank * 0.2)
حيث:
-
التشابه (50%): الصلة الدلالية (تشابه جيب التمام)
-
درجة الاستعلام (30%): حركة مرور الاستعلام المعيارية (الظهورات + النقرات)
-
رتبة الصفحة (20%): حركة مرور الصفحة المعيارية (مقياس لوغاريتمي)
هذا يوازن بين الصلة وإمكانية الحركة المرورية.
الخطوة 4: تسوية الدرجات
قبل الدمج، نقوم بتسوية كل مكون إلى [0، 1]:
تسوية درجة الاستعلام:
max_query_score = max(cluster.total_score for cluster in clusters)
norm_query_score = query_score / max_query_score
تسوية رتبة الصفحة (لوغاريتمي لمنع الصفحات عالية الحركة المرورية من الهيمنة):
max_page_rank = max(traffic_index.values())
norm_page_rank = log1p(page_rank) / log1p(max_page_rank)
يمنع القياس اللوغاريتمي الصفحة الرئيسية (أعلى حركة مرورية) من الهيمنة على جميع التطابقات.
الخطوة 5: تطبيق تعزيز الهيكل (المنتجات فقط)
لمطابقات المنتجات، نعزز الدرجات بناءً على نوع الهيكل:
-
هيكل Treo: +10% (الأحدث، الأكثر شعبية)
-
هيكل S: +5% (مضغوط، طلب مرتفع)
-
هيكل H: بدون تعزيز (أقدم، أقل شعبية)
if matched_type == "product":
sku = matched_key.replace("/p/", "")
chassis_prefix = sku.split("-")[0]
if chassis_prefix.startswith("Treo"):
similarity *= 1.10
elif chassis_prefix.startswith("S"):
similarity *= 1.05
هذا يضمن إعطاء الأولوية للمنتجات الأحدث عندما يكون التشابه قريبًا.
الخطوة 6: اختيار أفضل تطابق
المطابقة المجمعة:
best_idx = similarities.argmax()
if similarities[best_idx] >= threshold:
matches.append(cluster → source_pages[best_idx])
التوجيه الحصري:
# ترتيب المجموعات حسب الحركة المرورية (الأعلى أولاً)
sorted_clusters = sorted(clusters, key=lambda c: c.total_score, reverse=True)
# ... (تفاصيل التنفيذ محذوفة)
عتبة قابلة للتكوين
تحدد عتبة المطابقة مدى صرامة المطابقة:
-
0.80 (الافتراضي): صرامة معتدلة، معظم المجموعات تتطابق
-
0.85: أكثر صرامة، تطابقات أقل ولكن بجودة أعلى
-
0.75: أكثر تساهلاً، تطابقات لمجموعات أكثر
يمكن ضبط العتبة دون تغييرات في الكود عبر ملف التكوين.
وضع تحليل العتبة
قبل تشغيل خط الأنابيب الكامل، يمكننا تحليل تأثير العتبة:
python 6_match_source_data.py --analyze-threshold
هذا يولد عينات عبر نطاقات التشابه:
-
0.90-1.00: تطابقات مثالية
-
0.80-0.90: تطابقات قوية
-
0.70-0.80: تطابقات معتدلة
-
0.60-0.70: تطابقات ضعيفة
-
0.50-0.60: تطابقات ضعيفة جدًا
-
0.40-0.50: تطابقات ضعيفة
تعرض واجهة ويب هذه العينات للمراجعة اليدوية. بعد اختيار عتبة، استأنف خط الأنابيب:
python 6_match_source_data.py --resume-after-threshold
هذا يحمل العتبة من قرار واجهة المستخدم ويكمل المطابقة.
التضمين التدريجي
نقوم بتخزين التضمينات مؤقتًا لكل من الاستعلامات وصفحات المصدر. عند وصول بيانات جديدة:
- تحميل التضمينات الموجودة
- تضمين العناصر الجديدة فقط
- الإلحاق بالذاكرة المؤقتة
هذا يتجنب إعادة تضمين البيانات غير المتغيرة. انظر إستراتيجية التضمين للحصول على التفاصيل.
تنسيق الإخراج
تنتج المطابقة ملف JSON بالإحصائيات والتطابقات:
{
"stats": {
"threshold": 0.80,
# ... (تفاصيل التنفيذ محذوفة)
يتم فرز التطابقات حسب التشابه (الأعلى أولاً).
لماذا تسجيل الاكتشاف؟
التشابه الدلالي البحت له قيود:
المشكلة 1: المنتجات غير المعروفة
-
الاستعلام: "جهاز كمبيوتر صغير" (10 آلاف حركة مرورية)
-
أفضل تطابق: منتج غير معروف (تشابه 0.98، 0 حركة مرورية)
-
تطابق أفضل: منتج شعبي (تشابه 0.95، 5 آلاف حركة مرورية)
المشكلة 2: عدم تطابق الحركة المرورية
-
استعلام عالي الحركة المرورية → صفحة منخفضة الحركة المرورية (فرصة ضائعة)
-
استعلام منخفض الحركة المرورية → صفحة عالية الحركة المرورية (غير ضروري)
حل تسجيل الاكتشاف:
-
يوازن بين الصلة (50٪) وإمكانية الحركة المرورية (30٪ + 20٪)
-
الاستعلامات عالية الحركة المرورية تتطابق مع صفحات عالية الحركة المرورية
-
الاستعلامات منخفضة الحركة المرورية تتطابق مع صفحات متخصصة
-
يزيد من توزيع الحركة المرورية الإجمالي
خصائص الأداء
على خادم نموذجي:
-
وقت المعالجة: ~20 دقيقة لـ 12.5 ألف مجموعة × 5 آلاف صفحة مصدر
-
استخدام الذاكرة: ~1 جيجابايت (تضمينات + مصفوفة التشابه)
-
استخدام وحدة المعالجة المركزية: مرتفع أثناء حساب التشابه
العملية محدودة بوحدة المعالجة المركزية. يؤدي استخدام NumPy مع تسريع BLAS إلى تسريع عمليات المصفوفة بشكل كبير.
التكامل مع خط أنابيب تحسين محركات البحث
مطابقة المنتج هي الخطوة 6 في خط أنابيب تحسين محركات البحث:
- الخطوة 0: تضمين بيانات المصدر - المنتجات، الأجزاء، المقالات
- الخطوة 1: جلب الاستعلامات - GSC، Google Ads، مباشر، Algolia
- الخطوة 2: دمج الاستعلامات - دمج جميع المصادر
- الخطوة 3أ: إنشاء تعيينات العبارة الأساسية - مرشحات أولية
- الخطوة 3ب: تضمين الاستعلامات - تحويل إلى متجهات
- الخطوة 4: توسيع تعيينات العبارة - العثور على عبارات مشابهة
- الخطوة 5: تجميع الاستعلامات - تجميع في صفحات
- الخطوة 6: مطابقة المنتجات ← أنت هنا
- الخطوة 7: بناء صفحات الاستعلام - إنشاء HTML
- الخطوة 8: إنشاء عمليات البحث ذات الصلة - العثور على استعلامات ذات صلة
- الخطوة 11: الانتقال إلى Valkey - التحميل في خدمة البحث
انظر نظرة عامة على خط أنابيب تحسين محركات البحث للحصول على التدفق الكامل.
المجمعة مقابل الحصرية: أيها نستخدم؟
المطابقة المجمعة (الأصلية):
-
✅ كل مجموعة تحصل على أفضل تطابق لها
-
✅ بسيطة، يمكن التنبؤ بها
-
❌ صفحات استعلام زائدة عن الحاجة (مجموعات متعددة → نفس المنتج)
-
❌ إمكانية حركة مرورية ضائعة
التوجيه الحصري (واحد لواحد):
-
✅ صفحات استعلام فريدة (بدون تكرار)
-
✅ تراجع تلقائي إلى أفضل التطابقات التالية
-
✅ توزيع أفضل للحركة المرورية
-
❌ قد تحصل المجموعات منخفضة الحركة المرورية على تطابقات دون المستوى الأمثل
-
❌ منطق أكثر تعقيدًا
التوصية: استخدم التوجيه الحصري للإنتاج. إنه يخلق صفحات استعلام فريدة عالية الجودة مع توزيع أفضل للحركة المرورية.
فهرس الحركة المرورية والقياس اللوغاريتمي
يتتبع فهرس الحركة المرورية مشاهدات الصفحة لجميع صفحات المصدر:
{
"/p/Treo-N100-8-256-2H-W6-11P": 5000,
"/p/S-i5-16-512-2H-W6-11P": 3000,
"/": 50000
}
نستخدم القياس اللوغاريتمي لمنع الصفحات عالية الحركة المرورية من الهيمنة:
norm_page_rank = log1p(page_rank) / log1p(max_page_rank)
بدون ذلك، فإن الصفحة الرئيسية (50 ألف حركة مرورية) ستطابق كل استعلام. يضغط القياس اللوغاريتمي النطاق، مما يمنح جميع الصفحات فرصة عادلة.
مبررات تعزيز الهيكل
نقوم بتعزيز منتجات هيكل Treo و S لأن:
-
Treo: أحدث هيكل، أفضل الميزات، أعلى طلب
-
هيكل S: عامل شكل مضغوط، شعبي لأجهزة الكمبيوتر الصغيرة
-
هيكل H: أقدم، قيد التخلص التدريجي
عندما يكون التشابه قريبًا (على سبيل المثال، 0.90 مقابل 0.89)، يضمن التعزيز فوز المنتجات الأحدث. يتوافق هذا مع أولويات العمل.
المراجع
المفاهيم التقنية
-
التشابه الدلالي - ويكيبيديا
-
تشابه جيب التمام - ويكيبيديا
-
المقياس اللوغاريتمي - ويكيبيديا
-
NumPy - الوثائق الرسمية
-
BLAS - ويكيبيديا
وثائق النموذج
-
all-mpnet-base-v2 - Hugging Face
-
Sentence Transformers - الوثائق الرسمية
مقالات ذات صلة
-
إستراتيجية التضمين - كيف ننشئ التضمينات
-
تجميع الاستعلامات - تجميع الاستعلامات المتشابهة
-
نظرة عامة على خط أنابيب تحسين محركات البحث - هندسة خط الأنابيب الكاملة
-
إنشاء البحث ذي الصلة - العثور على استعلامات ذات صلة
-
تضمين بيانات المصدر - تضمين المنتجات والأجزاء والمقالات
ملخص
نطابق مجموعات الاستعلام مع المنتجات باستخدام التشابه الدلالي مع تسجيل الاكتشاف الاختياري:
التشابه الدلالي:
-
حساب تشابه جيب التمام بين تضمينات الاستعلام والمصدر
-
مطابقة قائمة على العتبة (الافتراضي 0.80