لو سألت ChatGPT أو Claude عن "أفضل أكل للقطط"، الموديل ممكن يرجّعلك نتيجة فيها كلمة "هريرة" أو "قطة صغيرة" حتى لو سؤالك ما فيهوش الكلمتين دول. ده مش سحر. ده شغل تقنية اسمها Embeddings، وهنشرحها هنا من الصفر بمثال واضح وكود تقدر تشغّله في 5 دقايق.
Embeddings: المفهوم اللي بيخلي الـ AI يفهم المعنى
المشكلة باختصار
الكمبيوتر بطبيعته بيفهم أرقام، مش كلمات. لما تكتب له "كلب"، هو شايف مجموعة بايتس ما بتعنيش حاجة. لو طلبت منه يقارن بين "كلب" و"قطة"، هو بيقارن النصوص حرف حرف، وبيلاقي إن الكلمتين مختلفتين تمامًا. لكن إنت كبني آدم عارف إنهم قريبين في المعنى — الاتنين حيوانات أليفة.
الـ Embeddings هي الطريقة اللي بتحوّل الكلمات والجمل لأرقام بحيث الكلمات قريبة المعنى تطلع أرقامها قريبة من بعض. وده اللي بيخلّي البحث الدلالي (semantic search) و RAG و recommendation engines يشتغلوا أصلاً.
مثال للمبتدئ: خريطة المدينة
تخيّل إن عندك خريطة لمدينة. كل مكان فيها له إحداثي (x, y). محلين عربيين بيكونوا قريبين من بعض على الخريطة. مكتبة وكافيه قراءة برضو قريبين. لكن ملعب كرة بعيد عن مكتبة.
الـ Embeddings بتعمل نفس الكلام مع الكلمات، بس على خريطة فيها 1024 بُعد (مش x و y بس). كلمة "كلب" بتكون قريبة من "قطة" و"حيوان أليف"، وبعيدة عن "سيارة" أو "قانون". الموديل بيتعلّم الإحداثيات دي من ملايين الجمل اللي قراها.
بمعنى آخر: لو رسمنا "كلب" نقطة على الخريطة، و"قطة" نقطة تانية، المسافة بينهم هتكون صغيرة. لكن المسافة بين "كلب" و"محرك سيارة" هتكون كبيرة جدًا. الموديل ما حدش قاله ده — هو اتعلّمه إحصائيًا من إن الكلمتين بيظهروا في نفس السياق كتير.
التعريف العلمي بعد ما فهمت الفكرة
دلوقتي بعد ما المثال اتضح، نقدر نتكلم بدقة. الـ Embedding هو vector (متجه) بطول ثابت — مثلاً 1536 رقم في text-embedding-3-small من OpenAI، أو 1024 في text-embedding-3-large مع تقليل الأبعاد، أو 768 في sentence-transformers. كل رقم في الـ vector بيمثّل بُعد من أبعاد المعنى — لكن مش بشكل قابل للتفسير المباشر للبني آدم.
الموديل بيتعلّم الأرقام دي عبر تدريب على كميات ضخمة من النصوص، باستخدام معماريات زي transformers (نفس فكرة BERT و sentence-transformers). الهدف: لو جملتين معناهم متقارب، الـ vectors بتاعتهم تطلع متقاربة في الفضاء.
قياس القُرب بيتم عادةً عبر cosine similarity — وهي ببساطة حساب الزاوية بين متجهين. لو الزاوية صفر، يبقى المتجهين في نفس الاتجاه = نفس المعنى تقريبًا (similarity = 1). لو الزاوية 90 درجة، يبقى مفيش علاقة (similarity = 0).
كود Python شغّال — حسّيها بنفسك في 5 دقايق
المثال ده بيستخدم sentence-transformers (مكتبة مفتوحة المصدر، مش محتاج API key ولا فلوس). شغّله محلي: