تصنيف المنتجات بالمعنى لا بالحرف
يقولون: «الكتاب يُقرأ من عنوانه». لكن في المتجر الرقمي، المنتج لا يُصنَّف من اسمه.
خذ بطاقة ستاربكس مثلًا. اسمها لا يقول «مطاعم»، ووصفها لا يقول «مطاعم»، ومع ذلك يعرف أي شخص فورًا أين مكانها. هذه المعرفة الفورية التي لا نفكر فيها أصلًا شغلتني مدة، حتى قادتني إلى سؤال بسيط: ماذا لو علّمناها للآلة؟
المشكلة ليست في العدد، بل في الخطأ
تخيّل متجرًا فيه آلاف المنتجات: بطاقات شحن، وتطبيقات، واشتراكات، وألعاب، وهدايا. ويُضاف إليه كل أسبوع منتج جديد.
يبدو التصنيف اليدوي حلًّا معقولًا في البداية: يراجع فريق المحتوى كل منتج ويضعه في مكانه. لكنه مع النمو يتحوّل من مهمة إلى عنق زجاجة. ثم إن كلفته الحقيقية ليست في الوقت الذي يستهلكه، بل في الخطأ الذي يمرّ دون أن يلاحظه أحد.
منتج واحد في تصنيف خاطئ يطلق سلسلة صغيرة: العميل لا يجده، فلا يشتريه، فيظن أن المتجر لا يوفّره، فيبحث عنه في مكان آخر.
الخطأ يبدأ في قاعدة البيانات، وينتهي في ثقة العميل.
الكلمة تخدع، والمعنى لا يخدع
الأنظمة التقليدية تصنّف بمطابقة الحروف. إن وجدت كلمة «ألعاب» في الوصف وضعت المنتج في الألعاب، وإن لم تجدها تجاهلته، حتى لو كان المنتج ألعابًا خالصة.
والعربية تزيد الأمر صعوبة. «لعب» و«ألعاب» و«اللعب الجماعي» كلها من جذر واحد، لكن المطابقة الحرفية تراها كلمات مختلفة لا رابط بينها.
البشر لا يصنّفون بهذه الطريقة. حين نقرأ «اشتراك سنوي في شبكة PS Plus» نعرف فورًا أنه يخص الألعاب، مع أن الكلمة لم تُذكر أصلًا. نحن لا نطابق الحروف، بل نفهم السياق.
ℹ️ التصنيف الدلالي (Semantic Classification): نظام لا يسأل «هل الكلمة موجودة؟» بل يسأل «ماذا يعني هذا النص؟».
كيف تفهم الآلة المعنى؟
عبر نموذج لغوي (Language Model) يحوّل النص إلى تمثيل عددي يُسمّى Vector Embedding.
تخيّل خريطة ضخمة لكل نص فيها موقع. النصوص المتقاربة في المعنى تقع متجاورة، حتى لو لم تشترك في كلمة واحدة. «بطاقة لشراء مشروبات ساخنة» تقع قريبًا من «مقاهٍ ومطاعم»، وبعيدًا عن «رصيد مكالمات».
بعد ذلك يصبح التصنيف سؤالًا بسيطًا: أي التصنيفات أقرب إلى هذا المنتج على الخريطة؟
منطق الحرف ومنطق المعنى
| المنتج | الوصف | التصنيف بالحرف | التصنيف بالمعنى |
|---|---|---|---|
| اشتراك PS Plus | اشتراك يمنحك اللعب الجماعي عبر الشبكة | لا تصنيف ❌ | الألعاب ✅ |
| بطاقة ستاربكس | بطاقة لشراء مشروبات ساخنة | لا تصنيف ❌ | مطاعم ✅ |
| بطاقة Google Play | بطاقة لشراء تطبيقات وألعاب | الألعاب ❌ | متاجر التطبيقات ✅ |
| باقة ليبارا مسبقة الدفع | رصيد للمكالمات المحلية والدولية | التوصيل ❌ | الاتصالات ✅ |
لاحظ الصف الثالث: المطابقة الحرفية لم تكتفِ بالفشل، بل أخطأت بثقة. وجدت كلمة «ألعاب» فقررت.
⚠️ انتبه: الخطأ الواثق أخطر من الغياب، لأنه لا يلفت انتباه أحد.
على أكتاف من سبقوا
هذه التجربة لا تبدأ من الصفر، بل تقف على عقد كامل من البحث. في 2013 نشر فريق في Google بقيادة توماس ميكولوف ورقة word2vec، فصارت الكلمة نقطة على خريطة. وفي 2017 قدّمت ورقة «الانتباه هو كل ما تحتاجه» (Attention Is All You Need) معمارية Transformer، فصار السياق جزءًا من المعنى. ثم جاء Sentence-BERT في 2019 ليحوّل الجملة كاملة إلى متجه واحد يُقارن بـ cosine similarity، قبل أن يوسّعه مؤلفاه في 2020 ليشمل أكثر من 50 لغة في فضاء واحد.
كل محطة جعلت التي بعدها ممكنة. وما فعلته هنا أنني أخذت هذا التراكم كله، ووجّهته إلى سؤال يومي في التجارة الرقمية: أين يسكن هذا المنتج؟
مكونات التجربة
بنيت النموذج الأولي على ثلاث ركائز:
1. النموذج اللغوي
اخترت نموذج Transformer متعدد اللغات، مدرّبًا على أكثر من 50 لغة، منها العربية والإنجليزية.
وهذا مهم في المتاجر العربية تحديدًا، لأن أوصاف المنتجات تأتي بالعربية حينًا وبالإنجليزية حينًا، وكثيرًا ما تجمع بينهما في سطر واحد. النموذج يضع «Coffee» و«قهوة» في الموقع نفسه تقريبًا على الخريطة.
2. أوصاف التصنيفات (CATEGORY_DESCRIPTIONS)
اسم التصنيف وحده لا يكفي. كلمة «الاتصالات» أقصر من أن يفهم منها النموذج حدود التصنيف. لذلك كتبت لكل تصنيف وصفًا يشرح ما يدخل فيه:
«الاتصالات: تشمل رصيد المكالمات، والإنترنت، وشحن الشرائح، والمكالمات المحلية والدولية»
✓ أول ما تعلّمته من التجربة: جودة التصنيف تبدأ من جودة الوصف. النموذج لا يقارن المنتج باسم التصنيف، بل بوصفه. وكلما كان الوصف أدق، كانت المقارنة أعدل.
3. الكلمات المرجِّحة (KEYWORD_HINTS)
المعنى وحده قد يتردد أحيانًا، خصوصًا مع العلامات التجارية التي لا يحمل اسمها معنى لغويًا. «ليبارا» كلمة لا تعني شيئًا في ذاتها، لكننا نعرف أنها اتصالات.
لذلك ربطت بعض الكلمات المتكررة بتصنيفات محددة، ومنحت كل ربط وزنًا:
"ليبارا": {"الاتصالات": 0.3}
"قهوة": {"مطاعم": 0.25}
"شوكولاتة": {"حلويات": 0.2}
واللافت أن هذه الكلمات لا تقرر التصنيف، بل ترجّحه. هي ليست قاعدة تقول «إن وجدت ليبارا فهذا اتصالات»، بل إشارة تقول «إن وجدت ليبارا فارفع احتمال الاتصالات قليلًا». القرار يبقى للمعنى، والكلمة تعينه ولا تحلّ محله.
من الوصف إلى التصنيف في 5 خطوات
- أجمع بيانات المنتج: الاسم والوصف الكامل بالعربية والإنجليزية.
- أحوّله إلى تمثيل عددي: يحوّل النموذج النص إلى embedding يحمل معناه.
- أقارنه بكل تصنيف: أحسب درجة التشابه بين المنتج ووصف كل تصنيف باستخدام
cosine similarity، وهو مقياس لمدى تقارب تمثيلين على الخريطة. - أرجّح بالكلمات المفتاحية: إن وجدت في الوصف كلمة مرتبطة بتصنيف ما، رفعت درجته بالوزن المحدد لها.
- أحدد النتيجة: الدرجة الأعلى تصبح التصنيف الرئيسي، والدرجات القريبة منها تصبح تصنيفات مرتبطة.
لاحظ أن الكلمات المرجّحة تدخل بعد قياس التشابه لا قبله: المعنى يحسم أولًا، والكلمة تعدّل النتيجة فقط.
أمثلة من التجربة
شحن ليبارا
- الوصف: بطاقة لشحن الرصيد وإجراء المكالمات
- الكلمات المرجِّحة: ليبارا، رصيد، باقة
- النتيجة: الاتصالات ✅
بطاقة ستاربكس
- الوصف: بطاقة لشراء مشروبات ساخنة
- الكلمات المرجِّحة: قهوة، مشروب، ستاربكس
- النتيجة: مطاعم ✅
بطاقة نون
- الوصف: بطاقة مشتريات تشمل ألعابًا وإلكترونيات وأزياء
- التصنيف الرئيسي: تسوّق ✅
- التصنيفات المرتبطة: ألعاب، إلكترونيات، أزياء
ما بعد التصنيف الواحد
المنتج قد يسكن أكثر من مكان
النظام لا يكتفي بأن يقول «هذا المنتج ألعاب»، بل يضيف: «وقد يرتبط بالاشتراكات والترفيه ومتاجر التطبيقات».
بطاقة نون مثال واضح: يشتري بها العميل ألعابًا وملابس وطعامًا. وحصرها في تصنيف واحد يعني إخفاءها عن عميل يبحث في مكان آخر. لذلك يقترح النظام أكثر من تصنيف، فيظهر المنتج حيث يتوقعه العميل، لا حيث قررنا نحن أن نضعه.
استبعاد التطابق غير المنطقي
قد يقترب منتج من تصنيف لا علاقة له به لمجرد تشابه لغوي، كأن يقترب منتج اتصالات من «التوصيل». هذه الحالات استبعدتها يدويًا، أو عبر منطق تنظيف يرفض التطابقات التي لا تستقيم.
تصنيفات تتشكل حسب المتجر
صممت الفكرة بحيث لا تفرض قائمة تصنيفات جاهزة. أي متجر يستطيع:
- تعديل أوصاف التصنيفات (
CATEGORY_DESCRIPTIONS) - تغيير العتبة التي تحدد متى يصبح التصنيف «مرتبطًا»
- إخفاء تصنيفات معينة عن العملاء
أسئلة ما زالت مفتوحة
التجربة الجيدة لا تنتهي بإجابة، بل بأسئلة أفضل. وهذه أسئلتي التي لم أحسمها بعد:
- كيف أقيس الدقة بإنصاف؟ المقارنة العادلة تحتاج مجموعة منتجات صنّفها بشر، ثم نرى أين يتفق النظام معهم وأين يختلف. والمدهش أن البشر أنفسهم لا يتفقون دائمًا.
- ماذا عن المنتج الذي لا يشبه شيئًا؟ حين يظهر نوع جديد كليًا، سيقترب من أقرب تصنيف موجود مهما كان بعيدًا. وربما كان الأذكى أن يعترف النظام بأنه لا يعرف.
- هل أكتب الأوزان أم أتركها تُتعلّم؟ أوزان الكلمات المرجِّحة كتبتها بيدي. لكن سلوك البحث والشراء نفسه قد يكون معلّمًا أفضل مني.
- ماذا لو عكسنا السؤال كله؟ بدل أن نصنّف المنتجات حسب تصنيفات كتبناها مسبقًا، نترك المنتجات تتجمّع بالمعنى على الخريطة، ثم ننظر إلى المجموعات التي تظهر ونسمّيها. قد نكتشف تصنيفات يراها العميل ولا نراها نحن.
الخلاصة
كنت أرى التصنيف مهمة تنظيمية تأكل وقت الفريق. ثم أدركت أنه قرار استراتيجي يحدد كيف يرى العميل أي متجر: ما الذي يجده، وما الذي يفوته، وما الذي يظن أنه غير موجود.
والتحول الحقيقي لم يكن في الأداة، بل في السؤال. توقفت عن سؤال «أين أضع هذا المنتج؟» وبدأت أسأل «أين سيبحث عنه العميل؟». الأول سؤال ترتيب، والثاني سؤال فهم.
هذه التجربة لم تنتهِ بمنتج، بل بطريقة تفكير. أن تنظر إلى المشكلة المألوفة كأنك تراها أول مرة، وأن تسأل الآلة ما نسأله لأنفسنا دون أن نشعر.
فالمنتج، مثل الإنسان، يُفهم بالمعنى لا بالحرف.
مراجع للتوسّع
- Mikolov وآخرون (2013)، «تقدير فعّال لتمثيلات الكلمات في فضاء متجهي»: Efficient Estimation of Word Representations in Vector Space. الورقة التي أطلقت word2vec، وبدأت معها فكرة أن للكلمة موقعًا على خريطة.
- Vaswani وآخرون (2017)، «الانتباه هو كل ما تحتاجه»: Attention Is All You Need. أساس معمارية Transformer التي تقوم عليها النماذج اللغوية الحديثة.
- Reimers وGurevych (2019)، «تمثيلات الجمل عبر شبكات BERT التوأمية»: Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks. كيف تصبح الجملة كاملة متجهًا واحدًا يُقارن بـ
cosine similarity. - Reimers وGurevych (2020)، «جعل تمثيلات الجمل متعددة اللغات»: Making Monolingual Sentence Embeddings Multilingual using Knowledge Distillation. الفكرة التي تضع «قهوة» و«Coffee» في الموقع نفسه.
- بطاقة نموذج على Hugging Face: paraphrase-multilingual-MiniLM-L12-v2. مثال عملي مفتوح المصدر لنموذج متعدد اللغات يدعم العربية، ويحوّل النص إلى متجه من 384 بُعدًا.
- Google، دورة تعلّم الآلة المكثفة: Machine Learning Crash Course: Embeddings. مدخل مبسّط ومرئي لفكرة التمثيلات العددية، لمن يريد أن يبدأ من الأساس.
ما زال في الدفتر كلام
ما أكتبه عن المنتجات والقراءة والحياة، يصلك أول ما ينشر. كتابة هادئة عن المنتجات وما بينها، دون إزعاج