Sunday , November 24 2024

Analyse des relations entre utilisateurs dans les réseaux sociaux en utilisant les réseaux neuronaux graphiques

 Résumé

Cet article de recherche aborde l’analyse des relations entre utilisateurs au sein des réseaux sociaux en utilisant des réseaux neuronaux graphiques (GNN). Un modèle GNN a été appliqué à un réseau social dérivé des données des utilisateurs de Facebook, analysant les liens entre les utilisateurs pour comprendre la structure sociale de la communauté. Les résultats ont montré l’efficacité de l’utilisation des GNN pour la détection des communautés sociales, contribuant au développement des stratégies d’analyse des réseaux sociaux.

 1. Introduction

À l’ère de l’information numérique, comprendre les relations entre les utilisateurs dans les réseaux sociaux devient de plus en plus important. Cette étude analyse le réseau social de Facebook en utilisant des techniques d’apprentissage profond, en particulier les réseaux neuronaux graphiques, qui se sont révélés efficaces pour traiter des données structurelles.

 2. Travaux Précédents

De nombreuses études ont abordé l’analyse des réseaux sociaux, la plupart utilisant diverses techniques telles que l’apprentissage automatique traditionnel. Cependant, l’utilisation des réseaux neuronaux graphiques représente une avancée significative dans ce domaine, car cette technique peut mieux exploiter les informations structurelles.

 3. Données et Sources

Les données de lien ont été extraites du réseau Facebook. Les données de lien ont été chargées à partir du fichier `facebook_combined.txt`, qui contient des informations sur les liens entre les utilisateurs.

 4. Méthodologie

 4.1 Préparation des Données

Un réseau a été créé en utilisant la bibliothèque NetworkX, et les données ont été préparées pour s’adapter aux exigences de PyTorch Geometric.

 4.2 Modèle GNN

Un modèle GNN composé de deux couches a été conçu en utilisant des couches GCNConv. Les caractéristiques des nœuds ont été définies en utilisant le degré de chaque nœud.

 4.3 Entraînement

Le modèle a été entraîné en utilisant l’optimiseur Adam, et des étiquettes aléatoires ont été utilisées pour former le modèle.

# -*- 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. Résultats

Les résultats ont été analysés après l’entraînement, où le modèle a démontré sa capacité à classer les utilisateurs en fonction des prédictions du modèle. Le réseau social a également été visualisé avec les prédictions du modèle.

 6. Discussion

Les résultats indiquent que les GNN peuvent jouer un rôle crucial dans l’analyse des relations sociales, aidant à la détection des communautés et renforçant la compréhension de la structure sociale des réseaux.

 7. Conclusion

Cet article de recherche fournit un aperçu de l’utilisation des GNN pour l’analyse des réseaux sociaux, ouvrant des perspectives pour de futures recherches afin d’explorer d’autres applications dans ce domaine.

 8. Références

1. Kipf, T. N., & Welling, M. (2017). Classification semi-supervisée avec des réseaux de neurones convolutifs sur graphes. *ICLR*.

2. Newman, M. E. J. (2006). Modularité et structure communautaire dans les réseaux. *Actes de l’Académie nationale des sciences*.

3. Zhang, S., & Zhan, X. (2019). Une enquête sur les réseaux neuronaux graphiques : modèles, applications et orientations futures. *arXiv*.

Share

About Jilali LAKTATI

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