Embeddings
تمثيلات النص المتجهة (Embeddings) Embeddings
Embedding يحوّل كل token (أو كلمة) لمتجه رقمي كثيف ذو أبعاد ثابتة (مثل 768)، يلتقط المعنى بحيث الكلمات المتشابهة دلاليًا تكون قريبة في الفضاء.
Embedding تمثيل كثيف لكل token في فضاء متجهي منخفض الأبعاد (100-1024 بعدًا)، بدل One-Hot الذي يستخدم بُعدًا لكل كلمة في القاموس. cosine similarity مقياس لاتجاه المتجهات — قيمته قريبة من +1 حين الاتجاهات متشابهة، وقريبة من 0 حين تكون متجهات الـ embedding متعامدة تقريبًا في ذلك الفضاء (low directional similarity). لا يضمن هذا أي دلالة دلالية بذاته: المعنى الدلالي ينبع من طريقة تعلّم المتجهات وعلى أي بيانات، وليس من التشابه الرياضي وحده.
الأنواع: Word2Vec (Mikolov 2013 — نموذج بسيط تعلّم تضمينات من سياق الكلمات)، GloVe (Pennington 2014 — يدمج إحصاءات co-occurrence العالمية)، Embeddings من نماذج مدربة مسبقًا (BERT، GPT) — هذه ليست word embeddings بل contextual embeddings (كل كلمة لها تمثيل مختلف حسب سياقها).
التضمينات السياقية (من BERT/Transformer) أحدث وأقوى: كلمة "bank" في "river bank" و "bank account" لها تمثيلان مختلفان. Word2Vec و GloVe يعطيان تمثيلًا واحدًا لكل كلمة بصرف النظر عن السياق. في PyTorch: nn.Embedding(num_embeddings, embedding_dim) طبقة قابلة للتعلّم، أو استخدم pre-trained embeddings من Hugging Face.
الصياغة
# طبقة embedding قابلة للتعلّم
embedding = nn.Embedding(num_tokens, embedding_dim)
input_ids = torch.tensor([[1, 5, 12, 8]]) # token IDs
vectors = embedding(input_ids) # shape: (1, 4, embedding_dim)
# Pre-trained من Hugging Face
from transformers import AutoModel
model = AutoModel.from_pretrained("bert-base-uncased")
outputs = model(input_ids).last_hidden_state📄 مثال
import torch
import torch.nn as nn
# طبقة embedding قابلة للتعلّم (vocab=1000، dim=64)
# ملاحظة: قبل التدريب، المتجهات هنا عشوائية ولا تحمل أي معنى دلالي.
embedding = nn.Embedding(num_embeddings=1000, embedding_dim=64)
# token IDs: كل رقم يشير لكلمة/قطعة في القاموس
input_ids = torch.tensor([[42, 7, 123, 88]])
vectors = embedding(input_ids)
print(f"Input shape: {input_ids.shape}") # torch.Size([1, 4])
print(f"Output shape: {vectors.shape}") # torch.Size([1, 4, 64])
# تشابه cosine على متجهات غير مدربة — قيمته هنا لا تدل على معنى دلالي
v1 = vectors[0, 0]
v2 = vectors[0, 2]
cos_sim = torch.nn.functional.cosine_similarity(v1, v2, dim=0)
print(f"Cosine similarity (غير مدرب): {cos_sim:.3f}")أهم النقاط
| النقطة | الوظيفة |
|---|---|
| Word2Vec | Mikolov 2013 — تعلّم تضمينات من نافذة السياق |
| GloVe | Pennington 2014 — يدمج إحصاءات co-occurrence العالمية |
| Contextual Embeddings | من BERT/Transformer — تمثيل يتغير حسب السياق |
| Cosine Similarity | مقياس لاتجاه المتجهين — قريب من +1 = اتجاه متشابه، قريب من 0 = متعامد تقريبًا في فضاء الـ embedding |
💡 نصائح عملية
- ابدأ بـ contextual embeddings من نموذج مدرب مسبقًا (BERT، DistilBERT) للمهام التي يعتمد فيها المعنى بشكل قوي على السياق — التمثيل الأنسب يظل قرارًا مرتبطًا بالمهمة والبيانات والكمون المطلوب وقيود النموذج
- حين تضمينات مخصصة، وحّد أبعادها واطبع nearest neighbors للتأكد من منطقية التعلّم
⚠️ أخطاء شائعة
- افتراض أن Word2Vec يلتقط السياق — يعطي تمثيلًا واحدًا لكل كلمة بصرف النظر عن الجملة
- خلط word embeddings (ثابتة لكل كلمة) مع contextual embeddings (تختلف حسب السياق) — الأولى من GloVe/Word2Vec، الثانية من BERT
- قراءة معنى دلالي من cosine similarity على متجهات nn.Embedding قبل التدريب — المتجهات عشوائية، وقيم التشابه لا تدلّ على دلالة حقيقية
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار AI-ML الكامل بالعربي.