0Pricing
Learn AI with Python · درس

تصنيف العُقد باستخدام GNN

مجموعة بيانات Cora، وشبكة GCN من طبقتين، وحلقة التدريب، والخسارة المقنّعة، ودقة الاختبار، وتصور التضمينات

تصنيف العُقد باستخدام GNN درس مجاني في Learn AI with Python على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn AI with Python، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn AI with Python 4 دروس في المجموع.

مهمة تصنيف العقد

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

مجموعة بيانات Cora

تُعدّ Cora بمثابة MNIST لتعلّم الرسوم البيانية. وهي رسم بياني للاستشهادات يضم 2,708 ورقة في تعلّم الآلة. وتمثّل الحواف الاستشهادات؛ وتحمل كل ورقة متجه سمات على شكل حقيبة كلمات بطول 1433؛ والهدف هو تصنيف كل ورقة ضمن موضوع واحد من أصل 7 موضوعات.

# Cora:
#   nodes  = 2708 papers
#   edges  = citations
#   features per node = 1433
#   classes = 7

التحميل باستخدام Planetoid

توفّر PyTorch Geometric مجموعة Cora من خلال محمّل Planetoid، الذي ينزّل البيانات وينسّقها في كائن رسم بياني واحد.

from torch_geometric.datasets import Planetoid

dataset = Planetoid(root="data/Cora", name="Cora")
data = dataset[0]
print(data)  # x, edge_index, y, train_mask, test_mask

كائن البيانات

يحتوي كائن الرسم البياني على كل شيء: data.x (السمات 2708 x 1433)، وdata.edge_index (الاتصال)، وdata.y (التسميات الحقيقية)، وأقنعة منطقية تحدد العقد المخصّصة للتدريب والتحقق والاختبار.

GCN لسبع فئات

نبني GCN من طبقتين، تحوّل السمات المدخلة البالغ عددها 1433 عبر طبقة مخفية ذات 64 بُعدًا إلى درجات logits للفئات السبع.

import torch
import torch.nn.functional as F
from torch_geometric.nn import GCNConv

class GCN(torch.nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = GCNConv(1433, 64)
        self.conv2 = GCNConv(64, 7)

    def forward(self, x, edge_index):
        x = F.relu(self.conv1(x, edge_index))
        x = F.dropout(x, training=self.training)
        return self.conv2(x, edge_index)

التعلّم الانتقالي

تتسم Cora بالتعلّم الانتقالي: إذ يكون الرسم البياني بأكمله (بما في ذلك عقد الاختبار وسماتها) ظاهرًا أثناء التدريب، ولا نحجب سوى تسميات الاختبار. ويستخدم النموذج اتصالات جميع العقد، لكنه يتعلّم من عقد التدريب المسمّاة فقط.

القناع train_mask

إن train_mask متجه منطقي يحدد العقد التي تسهم في الخسارة. نشغّل النموذج على الرسم البياني بأكمله، لكننا نحسب الإنتروبيا المتقاطعة على عقد التدريب المحددة بالقناع فقط.

model = GCN()
optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4)

def train():
    model.train()
    optimizer.zero_grad()
    out = model(data.x, data.edge_index)
    loss = F.cross_entropy(out[data.train_mask], data.y[data.train_mask])
    loss.backward()
    optimizer.step()
    return loss.item()

فكرة الخسارة المقنّعة

على الرغم من أن التمرير الأمامي ينتج درجات logits لجميع العقد البالغ عددها 2708، فإن الفهرسة باستخدام train_mask تقصر الخسارة على عقد التدريب المسمّاة. وما زالت العقد غير المسمّاة تمرّر الرسائل، مما يساعد النموذج، لكنها لا تؤثر مباشرةً في التدرج.

التقييم باستخدام test_mask

بعد التدريب، نقيس الدقة على عقد test_mask المحجوزة للاختبار، والتي لم تؤثر فيها الخسارة مطلقًا. ويقيس ذلك قدرة النموذج على التعميم على أوراق لم يرَ تسمياتها من قبل.

@torch.no_grad()
def test():
    model.eval()
    pred = model(data.x, data.edge_index).argmax(dim=1)
    correct = (pred[data.test_mask] == data.y[data.test_mask]).sum()
    return int(correct) / int(data.test_mask.sum())

تصوير التمثيلات باستخدام t-SNE

لرؤية ما تعلّمته GCN، خذوا تمثيلات عقد الطبقة المخفية وأسقطوها إلى بُعدين باستخدام t-SNE. تنتج GCN المدرَّبة جيدًا تكتلات تتجمع فيها العقد من الفئة نفسها معًا.

from sklearn.manifold import TSNE
import matplotlib.pyplot as plt

emb = model.conv1(data.x, data.edge_index).detach().numpy()
z = TSNE(n_components=2).fit_transform(emb)
plt.scatter(z[:, 0], z[:, 1], c=data.y, cmap="tab10", s=8)

تفسير مخطط t-SNE

تعني التكتلات الملوّنة المنفصلة جيدًا أن التمثيلات تميّز بين الفئات، وهو مؤشر على أن GCN تعلّمت بنية مفيدة. وتشير الكتل المتداخلة إلى نقص التدريب أو فرط التنعيم. ويُعدّ t-SNE فحصًا نوعيًا، وليس مقياسًا.

اختبار سريع

اختبروا معرفتكم بتصنيف العقد.

مراجعة

لقد تعلّمتم تصنيف العقد باستخدام GNN:

  • يحمّل Planetoid رسم الاستشهادات البياني Cora
  • تحوّل GCN من طبقتين 1433 إلى 64 إلى 7 فئات
  • يقصر train_mask الخسارة، بينما يقيس test_mask قدرة التعميم
  • يصور t-SNE تمثيلات العقد لفحص الفصل بين الفئات

الأسئلة الشائعة

هل درس «تصنيف العُقد باستخدام GNN» مجاني؟

نعم — نص درس «تصنيف العُقد باستخدام GNN» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn AI with Python، انتقل إلى CoddyKit PRO. تتضمن دورة Learn AI with Python 4 دروس في المجموع.

ماذا ستتعلم في «تصنيف العُقد باستخدام GNN»؟

مجموعة بيانات Cora، وشبكة GCN من طبقتين، وحلقة التدريب، والخسارة المقنّعة، ودقة الاختبار، وتصور التضمينات تتمرن على Learn AI with Python مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Learn AI with Python؟

لا تُشترط خبرة سابقة. Learn AI with Python على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «تصنيف العُقد باستخدام GNN»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Learn AI with Python هذا؟

نعم. كل درس في Learn AI with Python يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. نظرية الرسوم البيانية للتعلم الآلي
  2. الشبكات الالتفافية للرسوم البيانية (GCN)
  3. تصنيف العُقد باستخدام GNN
  4. التنبؤ بالروابط وتصنيف الرسوم البيانية
← العودة إلى Learn AI with Python