التنبؤ بالروابط وتصنيف الرسوم البيانية
مهمة التنبؤ بالحواف، وأخذ العينات السلبية، والتجميع على مستوى الرسم البياني، وGINConv لتصنيف الرسوم البيانية
التنبؤ بالروابط وتصنيف الرسوم البيانية درس مجاني في Learn AI with Python على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn AI with Python، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn AI with Python 4 دروس في المجموع.
مهمتا رسم بياني جديدتان
إلى جانب تصنيف العقد، تتعامل GNNs مع ما يلي:
- التنبؤ بالروابط: هل ستوجد حافة بين عقدتين؟ (اقتراح الأصدقاء، والتفاعلات الدوائية)
- تصنيف الرسوم البيانية: إسناد تسمية إلى رسم بياني كامل (هل هذا الجزيء سام؟)
إعداد التنبؤ بالروابط
في التنبؤ بالروابط، نحسب أولًا تمثيلات العقد باستخدام GNN، ثم نقيّم أزواج العقد المرشحة. وتعني الدرجة العالية أن النموذج يعتقد أنه ينبغي أن تصل بينهما حافة.
تقييم حافة
تتمثل إحدى درجات الحواف الشائعة في الضرب النقطي لتمثيلي العقدتين: score = dot(h_u, h_v). وتنتج التمثيلات المتشابهة ضربًا نقطيًا عاليًا، مما يتنبأ بوجود رابط محتمل.
h = gnn(data.x, data.edge_index) # node embeddings
score = (h[u] * h[v]).sum(dim=-1) # dot product per pairأخذ العينات السلبية
لا يسرد الرسم البياني سوى الحواف الموجودة (الأمثلة الموجبة). ولتدريب مصنّف، نحتاج أيضًا إلى أزواج لا توجد بينها حواف. ويختار أخذ العينات السلبية عشوائيًا أزواج عقد غير متصلة بوصفها أمثلة سالبة، مما يوازن مجموعة التدريب.
from torch_geometric.utils import negative_sampling
neg_edge_index = negative_sampling(
edge_index=data.edge_index,
num_nodes=data.num_nodes,
num_neg_samples=data.edge_index.size(1),
)BCEWithLogitsLoss
التنبؤ بالروابط ثنائي (حافة أو لا حافة). نقيّم الأزواج الموجبة والسالبة، ونسميها 1 و0، وندرّب النموذج باستخدام BCEWithLogitsLoss، الذي يدمج دالة sigmoid مع الإنتروبيا المتقاطعة الثنائية بطريقة مستقرة عدديًا.
import torch
pos = (h[pos_u] * h[pos_v]).sum(-1)
neg = (h[neg_u] * h[neg_v]).sum(-1)
scores = torch.cat([pos, neg])
labels = torch.cat([torch.ones_like(pos), torch.zeros_like(neg)])
loss = torch.nn.functional.binary_cross_entropy_with_logits(scores, labels)الانتقال إلى تصنيف الرسوم البيانية
في تصنيف الرسوم البيانية، نحتاج إلى متجه واحد لكل رسم بياني، لا متجه لكل عقدة. وبعد أن تنتج طبقات GNN تمثيلات العقد، نقوم بتجميعها في تمثيل واحد على مستوى الرسم البياني.
global_mean_pool
تحسب global_mean_pool متوسط جميع تمثيلات العقد في الرسم البياني لإنتاج متجه واحد ثابت الحجم، بغض النظر عن حجم الرسم البياني. ويحدد فهرس batch الرسوم البيانية التي تنتمي إليها العقد عند تجميع الرسوم البيانية معًا.
from torch_geometric.nn import global_mean_pool
h = gnn(x, edge_index) # [num_nodes, dim]
hg = global_mean_pool(h, batch) # [num_graphs, dim]
logits = classifier(hg)أهمية التجميع
يجعل التجميع النموذج غير متأثر بترتيب العقد وحجم الرسم البياني: فالرسمان البيانيان المتطابقان بنيويًا ينتجان المتجه المجمّع نفسه. ويتميز التجميع بالمتوسط بالبساطة، بينما يُعدّ التجميع بالجمع والتجميع بالقيمة العظمى بديلين ذوي حساسية مختلفة.
GINConv
GINConv (Graph Isomorphism Network) هي عملية التفاف أكثر تعبيرًا. وتستخدم شبكة MLP وتجميعًا بالجمع، صُمّما خصيصًا لتعظيم القدرة التمييزية لتمرير الرسائل في المهام على مستوى الرسم البياني.
from torch_geometric.nn import GINConv
import torch
mlp = torch.nn.Sequential(
torch.nn.Linear(in_dim, hid),
torch.nn.ReLU(),
torch.nn.Linear(hid, hid),
)
conv = GINConv(mlp)الارتباط باختبار Weisfeiler-Leman
صُمّمت GIN لتكون بقوة اختبار Weisfeiler-Leman (WL)، وهو خوارزمية كلاسيكية للتمييز بين الرسوم البيانية غير المتشابهة. تعجز كثير من شبكات GNN الأبسط عن التمييز بين رسوم بيانية معيّنة، بينما تستطيع GIN ذلك ضمن حدود اختبار WL، مما يجعلها قوية في تصنيف الرسوم البيانية.
اختيار الأداة المناسبة
طابقوا البنية مع المهمة:
- التنبؤ بالروابط: تضمينات GNN + تسجيل حاصل الضرب النقطي + أخذ عينات سلبية + دالة الخسارة BCE
- تصنيف الرسوم البيانية: عمليات التفاف معبّرة مثل GINConv + تجميع شامل + مصنّف
تحقق سريع
اختبروا معرفتكم.
مراجعة
تعلّمتم التنبؤ بالروابط وتصنيف الرسوم البيانية:
- درجة الحافة =
dot(h_u, h_v)، ويجري التدريب باستخدام أخذ عينات سلبية وBCEWithLogitsLoss - تحوّل global_mean_pool تضمينات العقد إلى متجه على مستوى الرسم البياني
- تتميّز GINConv بقدرة تعبيرية عالية، إذ تضاهي اختبار Weisfeiler-Leman
الأسئلة الشائعة
هل درس «التنبؤ بالروابط وتصنيف الرسوم البيانية» مجاني؟
نعم — نص درس «التنبؤ بالروابط وتصنيف الرسوم البيانية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn AI with Python، انتقل إلى CoddyKit PRO. تتضمن دورة Learn AI with Python 4 دروس في المجموع.
ماذا ستتعلم في «التنبؤ بالروابط وتصنيف الرسوم البيانية»؟
مهمة التنبؤ بالحواف، وأخذ العينات السلبية، والتجميع على مستوى الرسم البياني، وGINConv لتصنيف الرسوم البيانية تتمرن على Learn AI with Python مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Learn AI with Python؟
لا تُشترط خبرة سابقة. Learn AI with Python على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «التنبؤ بالروابط وتصنيف الرسوم البيانية»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Learn AI with Python هذا؟
نعم. كل درس في Learn AI with Python يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- نظرية الرسوم البيانية للتعلم الآلي
- الشبكات الالتفافية للرسوم البيانية (GCN)
- تصنيف العُقد باستخدام GNN
- التنبؤ بالروابط وتصنيف الرسوم البيانية