ما هي Vector Embeddings؟
تعرّفوا إلى كيفية تحويل الشبكات العصبية النصوص إلى متجهات كثيفة في فضاء عالي الأبعاد، ولماذا تنتج النصوص المتشابهة دلاليًا متجهات متقاربة، وما الذي يقيسه التشابه الجيبي.
ما هي Vector Embeddings؟ درس مجاني في AI Engineering Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AI Engineering Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AI Engineering Academy 4 دروس في المجموع.
المعنى الكامن وراء الأرقام
إن التضمين المتجهي عبارة عن قائمة من الأرقام (متجه) تمثل معنى جزء من النص. فبدلًا من تخزين الكلمات كسلاسل خام، تتعلم الشبكات العصبية ترميز المعنى الدلالي في مصفوفات عددية كثيفة. وينتج النصان المتشابهان في المعنى متجهين متقاربين في هذا الفضاء عالي الأبعاد.
الفضاء المتجهي عالي الأبعاد
تحتوي التضمينات الحديثة عادةً على 768 إلى 3072 بُعدًا. يلتقط كل بُعد سمة كامنة من المعنى، مثل الموضوع والمشاعر والأسلوب والعلاقات، من دون برمجتها صراحةً. والنتيجة هي فضاء هندسي غني تصبح فيه العلاقات الدلالية مسافات قابلة للقياس.
فعلى سبيل المثال، ينتج text-embedding-3-small متجهات ذات 1536 بُعدًا، بينما ينتج text-embedding-3-large متجهات ذات 3072 بُعدًا.
كيف تتعلم الشبكات العصبية التضمينات
تُدرَّب نماذج التضمين على مجموعات نصية ضخمة للتنبؤ بالكلمات المفقودة (نمذجة اللغة المقنّعة)، أو للتمييز بين الأزواج المتشابهة دلاليًا والأزواج المختلفة. وأثناء التدريب، تعدّل الشبكة ملايين الأوزان حتى تتجمع النصوص المتشابهة طبيعيًا في مجموعات داخل الفضاء المتجهي المتعلَّم.
ولهذا تُسمّى التضمينات تمثيلات كثيفة، إذ يحمل كل بُعد معلومات، بخلاف ترميزات one-hot المتناثرة التي تكون معظم قيمها أصفارًا.
التشابه الكوني: قياس التقارب
يقيس التشابه الكوني الزاوية بين متجهين، ويعيد قيمة بين -1 و1. وتعني الدرجة 1 أن المتجهين يشيران تمامًا إلى الاتجاه نفسه (معنى متطابق)، وتعني 0 أنهما متعامدان (غير مرتبطين)، بينما تعني -1 أنهما يشيران إلى اتجاهين متعاكسين.
ويُفضَّل هذا المقياس على المسافة الإقليدية للنصوص لأنه يتجاهل مقدار المتجه ويركز على الاتجاه وحده، مما يجعله متينًا أمام اختلاف أطوال النصوص.
import numpy as np
def cosine_similarity(vec_a, vec_b):
dot_product = np.dot(vec_a, vec_b)
norm_a = np.linalg.norm(vec_a)
norm_b = np.linalg.norm(vec_b)
return dot_product / (norm_a * norm_b)
# Example with tiny 3D vectors
v1 = np.array([0.8, 0.2, 0.5])
v2 = np.array([0.9, 0.1, 0.4])
print(cosine_similarity(v1, v2)) # Close to 1.0أهمية التشابه الدلالي
يفشل البحث التقليدي بالكلمات المفتاحية عندما يعيد المستخدمون صياغة عباراتهم: فالبحث عن automobile قد لا يعثر على مستندات تتحدث عن cars. وتحل التضمينات المتجهية هذه المشكلة لأن النصوص المتكافئة دلاليًا تُحوَّل إلى متجهات متقاربة، بغض النظر عن الكلمات المستخدمة بالضبط.
ويتيح ذلك البحث الدلالي، حيث تجدون النتيجة الأكثر صلة بناءً على المعنى بدلًا من تطابق الكلمات، وهي قدرة أساسية تحتاج إليها أنظمة RAG.
تصوير متجه التضمين
تخيلوا رسم الجمل على خريطة ثنائية الأبعاد (كتشبيه مبسّط). ستتجمع الجمل المتعلقة بـ التعلم الآلي في منطقة، والجمل المتعلقة بـ الطبخ في منطقة أخرى، بينما تشكل الجمل المتعلقة بـ الرياضة مجموعة ثالثة. تنشئ التضمينات المتجهية هذه الخريطة في آلاف الأبعاد.
العلاقات الشهيرة مثل king - man + woman ≈ queen هي عمليات حسابية حقيقية في هذا الفضاء؛ إذ ترمز عمليات المتجهات إلى أوجه التشابه الدلالية.
إنشاء تضمين بسيط
تقبل واجهة API الخاصة بتضمينات OpenAI نصًا وتعيد قائمة من قيم الفاصلة العائمة. ويمكن لاستدعاء واحد لواجهة API أن ينشئ تضمينًا لجملة واحدة أو لفقرة كاملة. ويكون للمتجه المُعاد بُعد ثابت بغض النظر عن طول الإدخال.
مهم: لا تنتج المدخلات الأطول متجهات أكبر؛ فهي تنتج المتجه الثابت الحجم نفسه، لكن النصوص الطويلة جدًا قد تفقد التفاصيل الدقيقة لأن النموذج يضغط كل شيء في ذلك الفضاء الثابت.
from openai import OpenAI
client = OpenAI() # uses OPENAI_API_KEY from environment
response = client.embeddings.create(
model='text-embedding-3-small',
input='Vector embeddings capture semantic meaning.'
)
embedding = response.data[0].embedding
print(f'Dimensions: {len(embedding)}') # 1536
print(f'First 5 values: {embedding[:5]}')تضمين نصوص متعددة دفعة واحدة
يمكنكم تضمين سلاسل متعددة في استدعاء واحد لواجهة API عبر تمرير قائمة إلى المعامل input. وهذا أكثر كفاءة بكثير من إرسال طلب لكل نص، لأنه يقلل جولات الاتصال بالشبكة ويتيح لواجهة API تجميع العمليات الحسابية.
تحتوي الاستجابة على كائن تضمين واحد لكل إدخال، وبالترتيب نفسه، لذا يمكنكم جمعها مع نصوصكم الأصلية باستخدام zip.
from openai import OpenAI
client = OpenAI()
texts = [
'Python is a programming language.',
'Snakes are reptiles.',
'Machine learning requires data.'
]
response = client.embeddings.create(
model='text-embedding-3-small',
input=texts
)
for text, result in zip(texts, response.data):
print(f'{text[:30]}... -> {len(result.embedding)}D vector')الضرب النقطي مقابل التشابه الكوني
إذا كانت تضميناتكم L2-normalized (متجهات وحدية مقدارها 1)، فإن الضرب النقطي يساوي التشابه الكوني. وتعيد نماذج تضمين OpenAI متجهات مُطبَّعة، لذا يمكنكم استخدام أي من المقياسين، مع كون حساب الضرب النقطي أسرع قليلًا.
لكن عند دمج تضمينات من نماذج أو مصادر مختلفة قد لا تكون مُطبَّعة، احسبوا دائمًا التشابه الكوني صراحةً لتجنب النتائج المضللة.
import numpy as np
def normalize(vec):
return vec / np.linalg.norm(vec)
v1 = normalize(np.array([3.0, 4.0, 0.0]))
v2 = normalize(np.array([4.0, 3.0, 0.0]))
# For unit vectors: dot product == cosine similarity
dot = np.dot(v1, v2)
print(f'Dot product: {dot:.4f}') # same as cosine simالتضمينات مقابل ترميز One-Hot
يمثل ترميز One-hot كل كلمة بمتجه يحتوي على 1 واحد بالضبط، وجميع القيم الأخرى 0. وتنتج مفردات مكونة من 50,000 كلمة متجهات ذات 50,000 بُعد، معظمها أصفار تقريبًا، وهو أمر غير فعّال جدًا.
تستخدم التضمينات الكثيفة 768 إلى 3072 بُعدًا، لكن كل بُعد يحمل معلومات حقيقية. ويكون الفضاء أصغر من 10 إلى 20 مرة، مع قدرته على التقاط فروق دقيقة أكبر بكثير، بما في ذلك المرادفات والعلاقات التشبيهية والمعنى التركيبي الذي يفوّت ترميز One-hot تمامًا.
حالات الاستخدام الشائعة للتضمينات
إلى جانب البحث الدلالي، تدعم التضمينات العديد من التطبيقات العملية:
- البحث الدلالي — العثور على المستندات حسب المعنى، لا الكلمات المفتاحية
- أنظمة التوصية — اقتراح عناصر مشابهة للعناصر التي أعجب بها المستخدم
- التجميع — تجميع المستندات تلقائيًا حسب الموضوع
- التصنيف — تمرير التضمينات إلى مصنّف خطي
- إزالة التكرار — اكتشاف المحتوى المكرر تقريبًا
تعتمد جميع أنظمة RAG على التضمينات لمطابقة استعلامات المستخدم مع مقاطع المستندات ذات الصلة.
تحقق سريع
اختبروا مدى فهمكم لمفاهيم هندسة الذكاء الاصطناعي الواردة في هذا الدرس.
مراجعة الدرس
تعلمتم في هذا الدرس أن التضمينات المتجهية ترمز إلى المعنى الدلالي في صورة مصفوفات عددية كثيفة، وأن التشابه الكوني يقيس التقارب الدلالي عبر مقارنة اتجاهات المتجهات، وأن واجهة API الخاصة بتضمينات OpenAI تحوّل النص إلى متجهات ثابتة الحجم في استدعاء واحد. بعد ذلك، سنستكشف كيفية إنشاء التضمينات ومقارنتها باستخدام نماذج OpenAI عمليًا.
الأسئلة الشائعة
هل درس «ما هي Vector Embeddings؟» مجاني؟
نعم — نص درس «ما هي Vector Embeddings؟» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Engineering Academy، انتقل إلى CoddyKit PRO. تتضمن دورة AI Engineering Academy 4 دروس في المجموع.
ماذا ستتعلم في «ما هي Vector Embeddings؟»؟
تعرّفوا إلى كيفية تحويل الشبكات العصبية النصوص إلى متجهات كثيفة في فضاء عالي الأبعاد، ولماذا تنتج النصوص المتشابهة دلاليًا متجهات متقاربة، وما الذي يقيسه التشابه الجيبي. تتمرن على AI Engineering Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ AI Engineering Academy؟
لا تُشترط خبرة سابقة. AI Engineering Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «ما هي Vector Embeddings؟»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس AI Engineering Academy هذا؟
نعم. كل درس في AI Engineering Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- ما هي Vector Embeddings؟
- إنشاء Embeddings باستخدام OpenAI
- البحث الدلالي باستخدام NumPy
- تجميع Embeddings وتصويرها