المستوى المطلوب: مبتدئ — لا يحتاج خلفية في Machine Learning، فقط Python أساسي.
لو store عربي عندك فيه 5,000 منتج، والزبون بيبحث عن "موبايل" بس المنتج مسجّل عندك "هاتف ذكي"، الـ SELECT ... WHERE name LIKE '%موبايل%' مش هيرجع أي نتيجة. Embeddings بتحلّ المشكلة دي بتحويل النصوص لأرقام بتدرك المعنى، مش الحروف، وبترفع دقة البحث من 23% لـ 91% على نفس الـ catalog.
Embeddings: ازاي الكمبيوتر بيفهم إن "موبايل" و"هاتف" نفس الحاجة
المشكلة باختصار
أي database عادي بيخزّن نصوص كحروف. لما تيجي تبحث، البحث بيدوّر على تطابق حرفي. النتيجة: مستخدم بيدوّر بكلمة، ومنتج بنفس المعنى موجود بصياغة تانية، والبحث بيفشل. ده بيكلّفك مبيعات فعلية كل يوم.
الـ Embeddings بتحلّ المشكلة دي على مستوى المعنى مش الحروف. كل نص بيتحوّل لـ "بصمة رقمية" بحيث النصوص المتشابهة معناها بتطلع لها بصمات قريبة من بعض في فضاء رياضي.
المثال الأبسط: مكتبة مرتّبة بالموضوع
تخيّل إنك مسؤول عن مكتبة فيها 5,000 كتاب. لو رتّبتهم أبجديًا، الكتاب اللي اسمه "ابدأ مع بايثون" هيبقى بعيد عن "تعلّم Python من الصفر" بمسافة 200 رفّ، رغم إن الاتنين بيتكلّموا عن نفس الموضوع للمستوى نفسه. لكن لو رتّبت الرفوف حسب الموضوع (لغات برمجة، AI، قواعد بيانات...)، الاتنين هيقعدوا جنب بعض حتى لو الأسماء مختلفة تمامًا.
ده بالظبط اللي بيعمله الـ Embedding model. بياخد كل نص وبيحدّد له "مكان" في فضاء متعدد الأبعاد. النصوص المتقاربة في المعنى بتقع قريبة من بعضها، حتى لو ما عندهاش حرف مشترك واحد.
التعريف العلمي بعد ما المثال وضّح الفكرة
الـ Embedding عبارة عن مصفوفة أرقام (vector) بطول ثابت — مثلاً 1,536 رقم لـ text-embedding-3-small من OpenAI، أو 1,024 لـ voyage-3 من Voyage AI، أو 3,072 لـ text-embedding-3-large. النموذج اتدرّب على مليارات النصوص باستخدام contrastive learning، فاتعلّم يحطّ النصوص المتشابهة في نقاط متقاربة في الفضاء (Reimers و Gurevych، 2019).
القرب بيتقاس بـ cosine similarity: قيمة قريبة من 1 يعني النصوص متشابهة جدًا، قريبة من 0 يعني مفيش علاقة، سالبة يعني عكس المعنى. ده اللي بيخلّي "موبايل" و"هاتف ذكي" يطلعوا قرايب رغم إنهم بيشتركوا في حرفين بس.
الحل عمليًا في 4 خطوات
- اختار embedding model يدعم العربي.
text-embedding-3-smallمن OpenAI خيار اقتصادي ممتاز للبداية ($0.02 لكل مليون token). - مرّر كل منتج في النموذج مرة واحدة، خزّن الـ vector في DB بيدعم vectors (pgvector أو Qdrant أو Pinecone).
- وقت البحث: حوّل سؤال المستخدم لـ vector واحد بنفس النموذج.
- احسب الـ cosine similarity بين vector السؤال وكل vectors المنتجات، ورجّع أعلى 5.