Construction pratique de graphes de connaissances : Créer votre premier graphe sectoriel avec Python et Neo4j

Construction pratique de graphes de connaissances : Créer votre premier graphe sectoriel avec Python et Neo4j

Ces dernières années, les graphes de connaissances ont évolué d'un concept académique pour s'intégrer dans de nombreux scénarios business concrets tels que la recherche et recommandation, les questions-réponses intelligentes et la gestion des risques. De nombreux développeurs en ont entendu parler, mais l'idée d'en construire un eux-mêmes semble souvent inaccessible, impliquant traitement du langage naturel, bases de données graphiques et théories de modélisation complexes, ce qui peut être décourageant. En réalité, avec une bonne compréhension des fondamentaux et l'utilisation de Python associé à une base de données graphique conviviale, il est tout à fait possible de mettre en place un prototype fonctionnel et précis d'un graphe de connaissances sectoriel en un seul week-end. Cet article vous guidera à travers le processus complet, de la préparation et traitement des données à leur importation et interrogation, en prenant comme exemple un graphe simplifié du domaine de l'e-commerce.

1. Préparation de l'environnement et sélection des outils essentiels

Avant de commencer, il faut préparer notre environnement de travail. La chaîne d'outils est simple : Python comme langage pour le traitement de données et la logique d'application, et Neo4j comme base de données graphique pour le stockage et les requêtes. Ne vous laissez pas intimider par l'expression "base de données graphique" - Neo4j dispose d'une version communautaire complète et d'un driver Python bien documenté, ce qui le rend particulièrement convivial pour les développeurs.

Assurez-vous d'abord que votre environnement local dispose de Python 3.7 ou d'une version plus récente. Nous installerons plusieurs bibliothèques clés via pip :

pip install neo4j pandas py2neo


Voici un bref explication :

  • neo4j: Driver officiel fourni par Neo4j pour connecter la base de données et exécuter des requêtes Cypher.
  • pandas: Couteau suisse pour le traitement et l'analyse de données, que nous utiliserons pour nettoyer et structurer les données brutes.
  • py2neo: Un driver tiers Neo4j plus fonctionnel qui offre une approche plus "Pythonique" via un ORM (mappage objet-relation), très pratique pour des applications complexes. Cet article utilisera principalement le driver neo4j pour les démonstrations de base.

Ensuite, la base de données Neo4j. La méthode la plus rapide consiste à utiliser son image Docker, avec une seule commande :

docker run \
    --name mon-neo4j \
    -p 7474:7474 -p 7687:7687 \
    -d \
    --env NEO4J_AUTH=neo4j/votre_mot_de_passe \
    neo4j:latest


Remarque : Remplacez votre_mot_de_passe par un mot de passe fort de votre choix. Le port 7474 est utilisé pour accéder au Neo4j Browser (interface web de gestion graphique), tandis que le port 7687 est réservé aux connexions d'applications.

Une fois exécuté, ouvrez votre navigateur et accédez à http://localhost:7474, connectez-vous avec le nom d'utilisateur neo4j et le mot de passe que vous avez défini. Vous verrez alors l'interface du Neo4j Browser, un outil précieux pour explorer visuellement notre graphe.

2. Acquisition et traitement des données : des données brutes aux "entités-relations"

La construction d'un graphe de connaissances dépend à 70% des données. Il n'est pas réaliste de commencer par des données complexes de plusieurs millions d'enregistrements, aussi utiliserons-nous un jeu de données simplifié du domaine de l'e-commerce comme exemple. Supposons que nous disposions de données semi-structurées sur les produits, les avis clients et les journaux de commandes.

Notre objectif est d'identifier trois types d'entités : Produit, Marque, Utilisateur. Et deux types de relations : Produit-appartient-à->Marque, Utilisateur-a-acheté->Produit.

Imaginons que nos données brutes proviennent d'un fichier CSV donnees_brutes.csv, dont le contenu pourrait être désorganisé :

id,contenu
1,L'utilisateur "Jean" a acheté le "iPhone 15 Pro d'Apple", cette téléphone est de la marque Apple.
2,Le téléphone "Huawei Mate 60" a reçu un avis positif de l'utilisateur "Marie".
3,L'utilisateur "Paul" a consulté simultanément les ordinateurs portables "MacBook Pro d'Apple" et "Dell XPS 13".


Dans un projet réel, cette étape nécessiterait probablement l'utilisation de techniques de TAL (Traitement Automatique du Langage) pour l'extraction d'entités et de relaitons. Mais pour nous concentrer sur le processus, nous allons simuler manuellement cette extraction en générant avec Python des tables d'entités et de relations structurées.

import pandas as pd

# Simulation de données structurées extraites des données brutes
produits_data = pd.DataFrame({
    'id_produit': ['iphone_15_pro', 'huawei_mate_60', 'macbook_pro', 'dell_xps_13'],
    'nom': ['iPhone 15 Pro', 'Huawei Mate 60', 'MacBook Pro', 'Dell XPS 13'],
    'categorie': ['smartphone', 'smartphone', 'ordinateur_portable', 'ordinateur_portable']
})

marques_data = pd.DataFrame({
    'id_marque': ['apple', 'huawei', 'dell'],
    'nom': ['Apple', 'Huawei', 'Dell']
})

utilisateurs_data = pd.DataFrame({
    'id_utilisateur': ['jean', 'marie', 'paul'],
    'nom': ['Jean', 'Marie', 'Paul']
})

relations_appartenance = pd.DataFrame({
    'id_produit': ['iphone_15_pro', 'huawei_mate_60', 'macbook_pro', 'dell_xps_13'],
    'id_marque': ['apple', 'huawei', 'apple', 'dell']
})

relations_achat = pd.DataFrame({
    'id_utilisateur': ['jean', 'marie'],
    'id_produit': ['iphone_15_pro', 'huawei_mate_60'],
    'date_achat': ['2023-10-15', '2023-11-02']
})

print("Produits :")
print(produits_data)
print("\nMarques :")
print(marques_data)
print("\nUtilisateurs :")
print(utilisateurs_data)
print("\nRelations d'appartenance :")
print(relations_appartenance)
print("\nRelations d'achat :")
print(relations_achat)

Maintenant que nous avons nos données structurées, la prochaine étape consiste à les importer dans Neo4j.

Étiquettes: graphe de connaissances Python neo4j base de données graphique e-commerce

Publié le 18 juin à 05h31