هذا المقال يتطلب مستوى مبتدئ
لو سألت ChatGPT يدوّر في قاعدة بيانات شركتك على "كل المقالات اللي بتتكلم عن الدكاترة" وفجأة لاقيته رجّعلك مقالات فيها كلمة "طبيب" بدون ما تطلبها، إنت قدام تقنية اسمها Embeddings. هي اللي بتخلّي الـ AI يفهم المعنى مش الحروف.
Embeddings: ازاي الكمبيوتر بيتعلّم إن "دكتور" و "طبيب" نفس الحاجة
المشكلة باختصار
الكمبيوتر التقليدي بيقارن النصوص حرف بحرف. لو دوّرت بكلمة "دكتور" مش هيرجّعلك أي نتيجة فيها "طبيب"، حتى لو الإتنين نفس المعنى بالظبط. النتيجة: تطبيق البحث بتاعك بيضيّع 30 إلى 50% من النتائج المهمة، ومحرك التوصيات بيقترح حاجات غلط، والتصنيف الآلي بيفشل في 25% من الحالات. الـ Embeddings بتحلّ ده عن طريق تحويل كل كلمة (أو جملة كاملة) لمتجه أرقام، بحيث الكلمات اللي معناها قريب يبقى متجهاتها قريبة في الفضاء.
المثال البسيط: خريطة المدن
تخيّل خريطة فيها كل مدينة لها إحداثيات (خط طول، خط عرض). القاهرة عند (30.04, 31.23)، الإسكندرية عند (31.20, 29.91). المسافة بينهم 200 كم. أبوظبي بعيدة 2,200 كم، نيويورك أبعد 9,000 كم. لمجرد ما عرفت إحداثيات أي مدينتين، تقدر تقيس قُربهم بدون ما تشوف اسمهم أصلًا.
الـ Embeddings بتعمل نفس الفكرة بالظبط، بس على الكلمات. كل كلمة بتاخد إحداثيات في فضاء (مش بُعدين زي الخريطة، لكن 384 أو 768 أو حتى 3072 بُعد)، والكلمات اللي معناها قريب بتقعد جنب بعض في الفضاء ده. "دكتور" و "طبيب" يبقوا جيران. "دكتور" و "ممرض" أبعد شوية لكن في نفس الحي. "دكتور" و "طماطم" في حته تانية خالص من الخريطة.
الجميل في الموضوع إن الـ Embeddings بتمسك علاقات أعمق من المرادفات. مثال شهير: لو خدت متجه كلمة "ملك" وطرحت منه متجه "رجل" وزوّدت متجه "امرأة"، بتطلع قريبة جدًا من متجه "ملكة". الموديل اتعلّم العلاقة دي من غير ما حد يقوله.
التعريف العلمي: الفضاء الدلالي والمتجهات
الـ Embedding عبارة عن متجه (vector) من أرقام عشرية (floating-point)، طوله عادة بين 128 و 4096 بُعد، بيمثّل كلمة أو جملة كاملة. النموذج اللي بيولّد المتجه ده (زي all-MiniLM-L6-v2 أو text-embedding-3-large) اتدرّب على ملايين من الجمل بطريقة Contrastive Learning: بيتعلّم يقرّب متجهات الجمل اللي معناها واحد ويبعّد متجهات الجمل اللي معناها مختلف.
طريقة قياس القُرب الأشهر اسمها Cosine Similarity. الفكرة بسيطة: بنحسب الزاوية بين متجهين. لو الزاوية صفر (نفس الاتجاه) القيمة = 1 (متطابقين دلاليًا). لو 90 درجة (عمودي) القيمة = 0 (لا علاقة). لو 180 درجة (عكس بعض) القيمة = -1.
الافتراض هنا إن إنت محتاج تطبيق بحث دلالي (semantic search)، تصنيف نصوص، أو RAG. لو شغلك full-text search بسيط على pdf، الـ Embeddings overkill.
مثال بكود Python شغّال
الكود ده يشتغل على CPU عادي بدون GPU، وبيدّيك نتائج فعلية في أقل من دقيقة: