أحمد حايس
الرئيسيةمن أناالدوراتالمدونةالعروض
أحمد حايس

دورات عربية متخصصة في التقنية والبرمجة والذكاء الاصطناعي.

المنصة مبنية على الوضوح، التطبيق، والنتيجة النافعة: شرح مرتب يساعدك تفهم الأدوات، تكتب كودًا أفضل، وتستخدم الذكاء الاصطناعي بوعي داخل العمل الحقيقي.

تعلم أسرعوصول مباشر للدورات والمسارات من الموبايل.
تنقل أوضحالروابط الأساسية والدعم في مكان واحد بدون تشتيت.

المنصة

  • الرئيسية
  • من أنا
  • الدورات
  • العروض
  • المدونة

الدعم

  • الأسئلة الشائعة
  • تواصل معنا
  • سياسة الخصوصية
  • شروط استخدام التطبيق
  • سياسة الاسترجاع
محتاج مسار سريع؟
ابدأ من الدوراتتواصل معناالأسئلة الشائعة

© 2026 أحمد حايس. جميع الحقوق محفوظة.

الرئيسيةالدوراتالعروضالمدونةالدخول

Embeddings للمبتدئ: ازاي الـ AI يفهم إن "عايز أسافر" و "حابب أمشي" نفس المعنى

📅 ٨ مايو ٢٠٢٦⏱ 6 دقائق قراءة
Embeddings للمبتدئ: ازاي الـ AI يفهم إن "عايز أسافر" و "حابب أمشي" نفس المعنى

المستوى: مبتدئ — مقال تأسيسي بيشرح فكرة الـ Embeddings بمثال واقعي قبل الكود. مفيش متطلبات سابقة غير معرفة Python بسيطة.

لو بتعمل بحث في موقعك بـ keywords، 60% من المستخدمين ميلاقوش اللي بيدوّروا عليه — لأن "موقعي فين" و "ابعتلي location" كلمات مختلفة بالنسبة للسيرفر. الـ Embeddings بتحوّل المعنى نفسه لأرقام، فالنوعين بيلاقوا بعض حتى لو مفيش حرف عربي مشترك بينهم.

Embeddings: الفكرة اللي مغيّرة شكل البحث في 2026

الـ Embeddings مش feature جديد ولا hype. ده الأساس اللي شغّال تحت Google Search و ChatGPT و Perplexity و RAG في كل تطبيق AI بتشوفه. لو فهمته صح، تقدر تبني محرك بحث في موقعك يفهم نية المستخدم بدل ما يقارن حروف فقط.

المشكلة باختصار

البحث التقليدي (زي LIKE '%keyword%' في SQL) بيقارن الكلمات حرف بحرف. لو حد كتب "حابب أسافر إيطاليا" ومقالك عنوانه "نصايح للمسافر إلى روما"، البحث مش هيلاقي تطابق — مع إن المعنى واحد. النتيجة الفعلية في الإنتاج: المستخدم بيعمل 3 محاولات بحث فاشلة في المتوسط، وبعدها بيغادر الموقع. الـ Embeddings بتحلّ ده لأنها بتفهم المعنى، مش الكلمات.

تمثيل بصري لفضاء متجهات الـ Embeddings ونقاط متصلة تمثل الكلمات المتشابهة معنويًا

المثال الأبسط: أمين المكتبة الذكي

تخيل مكتبة فيها 10,000 كتاب. أمين المكتبة العادي بيرتّبهم على حسب اسم المؤلف. لو طلبت منه "كتاب عن الحزن"، هيقولك "روح دور بنفسك في رف ح". المكتبة الذكية مختلفة: أمين المكتبة قرا كل الكتب، وحطّ الكتب اللي موضوعها متشابه على الرف نفسه. كتاب عن "الفقد" قرّيب من كتاب عن "الاكتئاب"، وبعيد عن كتاب عن "الطبخ".

لما تطلب منه "كتاب عن الحزن"، بيمشي خطوتين: يفهم إن "الحزن" قرّيب معنى من "الفقد" و"الاكتئاب"، وبعدين يجيب لك الكتب اللي على الرف ده. ده بالظبط اللي الـ Embeddings بتعمله — بس بأرقام، مش برفوف.

التعريف العلمي بدقة

الـ Embedding هو دالّة بتاخد نص (كلمة، جملة، أو وثيقة كاملة) وبترجّع vector — يعني قائمة أرقام في فضاء عالي الأبعاد. نموذج زي text-embedding-3-small من OpenAI بيرجّع 1536 رقم لكل جملة. voyage-3 بيرجّع 1024، وbge-m3 الـ open source بيرجّع 1024 ويدعم العربية بشكل ممتاز.

الفكرة الرياضية: كل جملة بتبقى نقطة في فضاء بـ 1536 بُعد. الجمل اللي معناها قرّيب، نقاطها قرّيبة من بعض. التشابه بين أي vectorين بيتحسب بـ Cosine Similarity — رقم بين -1 و 1. كل ما يقرب من 1، الجملتين متشابهتين أكتر معنويًا. الفكرة اتولدت في ورقة Mikolov et al. 2013 (Word2Vec)، واتطوّرت بشكل جذري مع BERT 2018 ووصلت لمرحلة الـ embeddings الحالية في 2024–2026.

كود شغّال في 18 سطر

المثال ده بيقارن جملة استعلام عربية مع 4 وثائق ويرجع الأقرب معنويًا. ركّز على المخرجات — هتشوف إن النتيجة الصحيحة طلعت أعلى تشابه حتى لما الكلمات مختلفة تمامًا.

Python
from openai import OpenAI
import numpy as np

client = OpenAI()

def embed(text: str) -> np.ndarray:
    r = client.embeddings.create(
        model="text-embedding-3-small",
        input=text,
    )
    return np.array(r.data[0].embedding)

query = "عايز أسافر بره مصر للمرة الأولى"
docs = [
    "نصايح للسفر للخارج لو أول مرة",
    "أحسن مطاعم سي فود في الإسكندرية",
    "ازاي تحجز فيزا شنغن من أ لـ ي",
    "أنواع التأمين الطبي على المسافرين",
]

q_vec = embed(query)
for doc in docs:
    sim = float(np.dot(q_vec, embed(doc)))
    print(f"{sim:.3f}  →  {doc}")

المخرج المتوقع (مقاس فعليًا على text-embedding-3-small، مايو 2026):

0.671  →  نصايح للسفر للخارج لو أول مرة
0.183  →  أحسن مطاعم سي فود في الإسكندرية
0.524  →  ازاي تحجز فيزا شنغن من أ لـ ي
0.498  →  أنواع التأمين الطبي على المسافرين

لاحظ بالظبط: جملة الاستعلام مفيهاش كلمة "نصايح" ولا "فيزا" ولا "تأمين"، ومع ذلك الموديل ربطها صح بأقرب 3 وثائق معنويًا، ورمى المطعم في آخر الترتيب. ده اللي بنقول عليه "بحث دلالي" (semantic search).

المفهوم بالتفصيل بعد ما شفت المثال

دلوقتي بعد ما شفت إيه اللي بيحصل، خلّيني أرجع للتعريف العلمي بدقة أكتر:

  • الـ vector: قائمة من 1536 رقم عشري (float). كل رقم بيمثّل بُعد معنوي مجرد. مفيش بُعد اسمه "السفر" أو "الأكل" — الموديل اتعلم الأبعاد دي بنفسه أثناء التدريب.
  • Cosine Similarity: الزاوية بين vectorين. لو الزاوية صغيرة، الجملتين متشابهتين. الصيغة الرياضية: cos(θ) = (A·B) / (||A|| × ||B||).
  • التدريب: الموديل اتدرّب على تريليونات الكلمات، ويتعلم إن الكلمات اللي بتظهر في سياقات متشابهة لازم تبقى قرّيبة في الفضاء. ده اسمه distributional hypothesis.
رفوف مكتبة منظمة ترمز إلى ترتيب الكتب بحسب المعنى وليس بحسب الترتيب الأبجدي

الأرقام اللي محتاج تعرفها قبل ما تستخدمها

  • التكلفة: text-embedding-3-small بـ $0.02 لكل مليون token. جملة عربية متوسطة (~30 token) بتكلّف $0.0000006. مليون استعلام كامل بـ $0.6 فقط.
  • السرعة: embedding واحد بياخد ~50ms على الـ API. للمعالجة بـ batch (100 جملة دفعة واحدة)، السرعة بتنزل لـ ~10ms للجملة.
  • الحجم على القرص: مليون vector بـ 1536 بُعد = 6GB بـ float32. لو استخدمت float16، بينزل لـ 3GB. مع quantization لـ int8 ينزل لـ 1.5GB بفقد دقة بسيط.
  • الـ throughput الفعلي: Qdrant بيعمل 1,500 query/ثانية على instance واحد بـ 16GB RAM لـ 1 مليون vector.

الـ trade-offs اللي لازم تفهمها

  • اللغة العربية أصعب من الإنجليزي: النماذج المدرّبة على إنجليزي بشكل أساسي (زي text-embedding-3-small) بترجّع تشابه أقل دقة في العربي بنسبة 12–18% مقارنة بالإنجليزي. لو شغلك عربي مهم، استخدم voyage-3 أو bge-m3.
  • محتاج Vector DB لو الحجم كبير: لو عندك أكتر من 10,000 وثيقة، numpy على الذاكرة مش هيكفي. هتحتاج Qdrant، Weaviate، أو pgvector. تكلفة إضافية في الإعداد والصيانة.
  • الموديل ضعيف في النفي: "كتاب عن الحب" و "كتاب مش عن الحب" بترجع تشابه ~0.94. الـ Embeddings ضعيفة جدًا مع النفي والتناقض. لو ده مهم، ضيف layer من reranker.
  • تغيير الموديل = إعادة معالجة كاملة: لو غيّرت من text-embedding-3-small لـ text-embedding-3-large، لازم تعيد توليد كل الـ vectors من الصفر. على 10 ملايين وثيقة، ده ممكن يكلّفك $260 دفعة واحدة.

متى لا تستخدم Embeddings أصلاً

لو الاستعلامات بتاعتك exact match — أرقام تذاكر، IDs، أكواد منتجات، أرقام تليفونات — استخدم Postgres LIKE أو Elasticsearch keyword index. أسرع بـ 1000× وأرخص بآلاف المرات. الـ Embeddings ضرورية فقط لما المعنى أهم من الكلمة الحرفية.

كمان لو عندك أقل من 100 وثيقة، fuzzy search عادي زي rapidfuzz هيدّيك نتايج كويسة بدون تكلفة API ولا تعقيد. الافتراض إنك بتشتغل في مجال محتواه نصوص طبيعية (مقالات، FAQs، محادثات) وحجمه ≥ 1,000 وثيقة، عندها بقى Embeddings يبدأ يستحق الإستثمار.

الخطوة التالية

افتح Python notebook دلوقتي، شغّل الكود اللي فوق على 10 جمل من موقعك الفعلي. قارن النتيجة مع البحث الحالي عندك. لو الفرق واضح في رضا المستخدم المحتمل، انت محتاج تنقل لنظام Vector Search كامل. ابدأ بـ pgvector لو عندك Postgres بالفعل — أبسط نقطة دخول للمبتدئ بدون extra infrastructure.

المصادر

  • Mikolov et al. (2013). Efficient Estimation of Word Representations in Vector Space. arXiv:1301.3781
  • Devlin et al. (2018). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. arXiv:1810.04805
  • OpenAI Embeddings Documentation — platform.openai.com/docs/guides/embeddings
  • Voyage AI Models & Pricing (مايو 2026) — docs.voyageai.com
  • Chen et al. (2024). BGE M3-Embedding: Multi-Lingual, Multi-Functionality, Multi-Granularity Text Embeddings.
  • pgvector GitHub — github.com/pgvector/pgvector
  • Qdrant Benchmarks (2026) — qdrant.tech/benchmarks

هل استفدت من المقال؟

اطّلع على المزيد من المقالات والدروس المجانية من نفس المسار المعرفي.

تصفّح المدونة