لو فتحت أي مقال عن RAG أو Semantic Search أو حتى ChatGPT، هتلاقي كلمة "Embeddings" بتتذكر كأنها معروفة. الواقع إن أغلب الناس بيستخدموها بدون ما يفهموا اللي بيحصل تحتها بالظبط. المقال ده بيشرحلك Embeddings من الصفر، بمثال يفهمه أي حد، وبعدين بكود حقيقي تقدر تجربه دلوقتي على لابتوبك.
Embeddings: المفهوم اللي بيخلي الـ AI يفهم اللغة
المشكلة باختصار
الكمبيوتر مبيفهمش إن "كلب" و "جرو" دول كلمتين قريبين من بعض. هو شايفهم سلسلتين حروف مختلفتين تمامًا. لو بنيت بحث على string matching، البحث عن "كلب" مش هيرجعلك "جرو" ولا "كلاب" ولا "Dog". المشكلة دي قتلت محركات البحث الكلاسيكية لسنين، لحد ما الـ Embeddings ظهرت وحلت اللعبة.
المثال البسيط: المعاني كنقط على خريطة
بدل ما نتكلم رياضيات من الأول، تخيل معايا مدينة فيها أحياء متخصصة. حي للأكل، حي للحيوانات، حي للسيارات. كل كلمة في اللغة بنحطها في إحداثي (x, y) داخل المدينة دي حسب معناها:
- "كلب" في إحداثي (10, 20) داخل حي الحيوانات
- "جرو" في إحداثي (11, 21) — جنبه بالظبط لأنه نفس المعنى تقريبًا
- "قطة" في إحداثي (15, 18) — قريبة برضه، نفس فئة الحيوانات الأليفة
- "عربية" في إحداثي (200, 350) — في حي السيارات، بعيدة جدًا
دلوقتي لو سألت الكمبيوتر "إيه الكلمات القريبة من كلب؟"، هو هيحسب المسافة بالأرقام ويرجعلك جرو وقطة، مش عربية. مفيش string matching هنا، فيه حساب مسافة هندسي بحت. ده بالظبط اللي بتعمله الـ Embeddings، بس بدل بُعدين، بتشتغل في 1536 بُعد أو أكتر.
التعريف العلمي الدقيق
الـ Embedding هو تمثيل عددي (vector) لكلمة أو جملة أو صورة في فضاء متعدد الأبعاد. النموذج (زي text-embedding-3-small من OpenAI أو voyage-3 من Voyage AI) بياخد نص ويرجّع array من الأرقام، عادةً بين 256 و 3072 رقم. النماذج دي اتدربت على مليارات النصوص، فالأرقام مش عشوائية — هي بتعكس علاقات دلالية حقيقية بين الكلمات.
السحر بالظبط في حاجتين:
- التشابه الدلالي = قرب هندسي. كلمات معانيها قريبة، vectorهم قريب في الفضاء.
- اللغة مش فارقة. "كلب" بالعربي و "Dog" بالإنجليزي بيطلعوا قريبين في فضاء النماذج متعددة اللغات زي text-embedding-3-large.
إزاي تقيس القرب؟ Cosine Similarity
الطريقة المعيارية لقياس قرب vectorين هي Cosine Similarity. القيمة بتطلع بين -1 و 1، ومعناها كالتالي:
- 1 = نفس المعنى تمامًا (نفس الجملة حرفيًا)
- 0.75 وأكتر = متشابهين جدًا (مرادفات أو نفس الموضوع)
- 0 = مفيش علاقة بين الجملتين
- أقل من صفر = معاني متضادة (نادر في النماذج الحديثة)
عمليًا في تطبيقات الإنتاج، أي حاجة فوق 0.75 بنعتبرها "متشابهة جدًا" ونعرضها للمستخدم في نتائج البحث.