Sunday , November 24 2024

تحليل العلاقات بين المستخدمين في الشبكات الاجتماعية باستخدام GNN

 الملخص

تتناول هذه الورقة البحثية تحليل العلاقات بين المستخدمين داخل الشبكات الاجتماعية باستخدام الشبكات العصبية المعتمدة على الرسوم البيانية (GNN). تم تطبيق نموذج GNN على شبكة اجتماعية مستمدة من بيانات مستخدمي فيسبوك، حيث تم تحليل الروابط بين المستخدمين لفهم الهيكل الاجتماعي للمجتمع. أظهرت النتائج إمكانية استخدام GNNs لاكتشاف المجتمعات الاجتماعية بشكل فعال، مما يسهم في تطوير استراتيجيات تحليل الشبكات الاجتماعية.

 1. المقدمة

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

 2. الأعمال السابقة

تعددت الدراسات التي تتناول تحليل الشبكات الاجتماعية، ومعظمها يستخدم تقنيات مختلفة مثل التعلم الآلي التقليدي. ومع ذلك، فإن استخدام الشبكات العصبية المعتمدة على الرسوم البيانية يعتبر تقدمًا ملحوظًا في هذا المجال، حيث يمكن لهذه التقنية استغلال المعلومات الهيكلية بشكل أفضل.

 3. البيانات والمصادر

تم استخدام بيانات الروابط المستخرجة من شبكة فيسبوك. تم تحميل بيانات الروابط من ملف `facebook_combined.txt`، الذي يحتوي على معلومات حول الروابط بين المستخدمين.

 4. المنهجية

4.1 إعداد البيانات

تم إنشاء شبكة باستخدام مكتبة NetworkX وتم إعداد البيانات لتتناسب مع متطلبات PyTorch Geometric.

نموذج GNN

تم تصميم نموذج GNN مكون من طبقتين باستخدام طبقات GCNConv. تم إعداد ميزات العقد باستخدام درجة كل عقدة.

التدريب

تم تدريب النموذج باستخدام خوارزمية Adam optimizer، وتم استخدام تسميات عشوائية لتدريب النموذج.

الكود :

# -*- coding: utf-8 -*-

"""

Created on [date]

Author: [laktati]

"""

import pandas as pd

import torch

import torch.nn.functional as F

from torch_geometric.data import Data

from torch_geometric.nn import GCNConv

import networkx as nx

import matplotlib.pyplot as plt

import community  # For Louvain method

file_path = 'dataset/facebook_combined.txt'  

edges = pd.read_csv(file_path, delim_whitespace=True, header=None)

G = nx.Graph()

G.add_edges_from(edges.values)

edge_index = torch.tensor(edges.values.T, dtype=torch.long)

num_nodes = G.number_of_nodes()

class GNN(torch.nn.Module):

    def __init__(self, in_channels, out_channels):

        super(GNN, self).__init__()

        self.conv1 = GCNConv(in_channels, 16)

        self.conv2 = GCNConv(16, out_channels)

    def forward(self, x, edge_index):

        x = self.conv1(x, edge_index)

        x = F.relu(x)

        x = F.dropout(x, training=self.training)

        x = self.conv2(x, edge_index)

        return F.log_softmax(x, dim=1)

# إعداد ميزات العقد (features)

features = torch.tensor([[G.degree(i)] for i in range(num_nodes)], dtype=torch.float)

model = GNN(in_channels=1, out_channels=2)  

optimizer = torch.optim.Adam(model.parameters(), lr=0.01)

def train():

    model.train()

    optimizer.zero_grad()

    out = model(features, edge_index)

       labels = torch.randint(0, 2, (num_nodes,), dtype=torch.long)

    loss = F.nll_loss(out, labels)

    loss.backward()

    optimizer.step()

    return loss.item()

num_epochs = 100

for epoch in range(num_epochs):

    loss = train()

    if epoch % 10 == 0:

        print(f'Epoch {epoch}, Loss: {loss:.4f}')

model.eval()

with torch.no_grad():

    out = model(features, edge_index)

    preds = out.argmax(dim=1)

# رسم الشبكة

plt.figure(figsize=(12, 12))

pos = nx.spring_layout(G)

node_color = preds.numpy()  

nx.draw(G, pos, node_color=node_color, with_labels=True, node_size=20, font_size=10, cmap=plt.get_cmap('coolwarm'))

plt.title("Social Network Graph with GNN Predictions")

plt.show()

partition = community.best_partition(G)

grouped_nodes = {}

for node, group in partition.items():

    if group not in grouped_nodes:

        grouped_nodes[group] = []

    grouped_nodes[group].append(node)

print("Detected communities:")

for group, members in grouped_nodes.items():

    print(f"Group {group}: {members}")

 5. النتائج

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

 6. المناقشة

تشير النتائج إلى أن GNNs يمكن أن تلعب دورًا حيويًا في تحليل العلاقات الاجتماعية، مما يساعد في الكشف عن المجتمعات ويعزز من فهم الهيكل الاجتماعي للشبكات.

 7. الخاتمة

تقدم هذه الورقة البحثية لمحة عن استخدام GNNs في تحليل الشبكات الاجتماعية، مما يفتح المجال لأبحاث مستقبلية لاستكشاف المزيد من التطبيقات في هذا المجال.

Share

About Jilali LAKTATI

Master en multimédia et technologie de web. Développeur informatique.