- L’objectif de l’équipe Google Graph Mining est de construire une bibliothèque hautement scalable pour les algorithmes et l’analyse de graphes, puis de l’appliquer aux produits Google ; le périmètre actuellement proposé couvre un ensemble d’algorithmes de clustering
- Les outils visés portent sur la construction de graphes de similarité, le clustering, la classification de nœuds, les embeddings de nœuds, l’entraînement de réseaux de neurones de graphes, la visualisation de graphes, divers échantillonnages et le ranking par similarité
- Le domaine du clustering se compose d’algorithmes parallèles à mémoire partagée scalables jusqu’à des graphes comptant des dizaines de milliards d’arêtes, ainsi que de plusieurs algorithmes séquentiels
- Les algorithmes parallèles sont des implémentations fondées sur des articles de recherche liés à HAC, au clustering par corrélation, à l’affinity clustering et à parline
- Le framework de Graph Neural Network est fourni dans un projet séparé, TF-GNN
- Pour un démarrage rapide, installez Bazel puis exécutez
bazel run //examples:quickstart - Ce n’est pas un produit officiellement pris en charge par Google ; les questions et commentaires doivent être adressés en créant une issue dans ce dépôt
1 commentaires
Avis de Hacker News
Le graph mining était vraiment à la mode il y a une dizaine d’années. Cela me rappelle GraphX (https://spark.apache.org/graphx/) et GraphLab (https://en.wikipedia.org/wiki/GraphLab), ainsi que les bases de données orientées graphe.
C’était probablement lié à l’essor des réseaux sociaux à la même période ; plus récemment, c’est le geometric learning, c’est-à-dire le machine learning sur des graphes et d’autres structures, qui a attiré l’attention avant de se faire voler la vedette par les LLM. Je pense toutefois que le geometric learning a encore beaucoup de potentiel, et j’aimerais qu’il devienne plus populaire.
Dans ce type de graphe, il y a généralement énormément de types d’arêtes différents, comme « est marié à » ou « a pour température moyenne annuelle ». À l’inverse, les algorithmes de graphe comme PageRank ou la centralité de graphe ont souvent un seul type d’arête, ou seulement quelques-uns. Il existe bien des algorithmes généraux applicables aux graphes comportant plusieurs types d’arêtes ; par exemple, le motif SPARQL
?s1 ?p ?o . ?s2 ?p ?o .trouve les?s1et?s2qui partagent un certain?oet une relation?p, et sert de base à une mesure de similarité entre eux. Les graphes n’ont généralement pas de forme prédéfinie : ils peuvent avoir n’importe quelle structure, ce qui peut être catastrophique du point de vue de la latence mémoire. Il m’est déjà arrivé, en utilisant ce motif SPARQL, de produire un programme qui aurait pris 100 ans ; en repackant la structure de données et en trouvant des approximations, j’ai réussi à faire le calcul en moins de 20 minutes. C’est pourquoi les praticiens ont tendance à se méfier des bibliothèques génériques de traitement de graphes. Il est courant de rencontrer des problèmes pour lesquels on peut écrire du code spécialisé en moins de temps qu’il n’en faut pour se battre avec le système de build, et le rendre 1000 fois plus rapide.Cela dit, si vous voulez suivre la tendance, arXiv regorge aujourd’hui d’articles sur les réseaux de neurones de graphes qui ne sont pas aussi survendus ailleurs. YOShInOn m’a préparé une longue liste d’articles sur les GNN à lire, mais je n’en ai parcouru que quelques-uns ; beaucoup disent que c’est applicable aux problèmes d’analyse de texte sur lesquels je travaille, mais cela ne semble pas vraiment meilleur que le système que YOShInOn et moi utilisons, donc je ne suis pas pressé.
Si vous voulez expérimenter avec les graphes et le machine learning, j’ai récemment parcouru la documentation d’ArangoDB et vu qu’elle inclut des intégrations avec plusieurs bibliothèques de graphes et frameworks de machine learning : https://docs.arangodb.com/3.11/data-science/adapters/
J’ai aussi vu quelques notebooks Jupyter consacrés au machine learning sur graphes : https://github.com/arangodb/interactive_tutorials#machine-learning
Les intégrations couvrent NetworkX -- https://networkx.org/, DeepGraphLibrary -- https://www.dgl.ai/, cuGraph (Rapids.ai Graph) -- https://docs.rapids.ai/api/cugraph/stable/, et PyG (PyTorch Geometric) -- https://pytorch-geometric.readthedocs.io/en/latest/.
S’il y a quelqu’un qui connaît bien Bazel, pourrait-il donner des pistes sur la manière de compiler ?
bazel buildfait bien quelque chose, mais au final seulsbazel-buildetbazel-buildapparaissent, et je ne vois aucun artefact de build évident//...ressemble à la cibleallde makeOn l’utilise comme
bazel build //...,bazel test //...,bazel query //.... De mémoire, la dernière commande liste toutes les ciblesbazel build //in_memory/connected_components:asynchronous_union_findpermet de compiler asynchronous_union_findCela dit, en dehors du contexte d’une règle
cc_binary, ce n’est pas forcément très utile. Cette approche permet de ne pas compiler tout le dépôt, mais seulement les packages nécessaires à un autre projet. Par exemple, si vous voulez seulement utiliser l’en-têteasynchronous_union_find.h, vous pouvez ajouter la bibliothèque graph-mining dans le fichierWORKSPACEde votre projet avec une règlegit_repository(voir l’exempleWORKSPACE.bazel), puis ajouter@graph-mining//in_memory/connected_components:asynchronous_union_findà une règlecc_librarydans un fichierBUILDde votre projet. Vous pourrez alors l’inclure ailleurs comme en-tête, et lors du build du projet, seuls ce package et ses dépendances seront compilés, pas toute la bibliothèque graph-miningbazelet de le placer dans un chemin comme/usr/local/bin/bazelMais en lançant
query, j’obtiens un avertissement JDK, et en lançantbuild, ça échoue faute de Java avecWARNING: Ignoring JAVA_HOME, because it must point to a JDK, not a JRE.. J’ai cherché quelques minutes quel JDK/JRE il fallait utiliser alors que je n’utilise même pas Java, puis j’ai abandonné : le “un jour” d’aujourd’hui redevient un autre jour. C’est presque pitoyable à quel point je suis devenu habitué à cargo ou npm/yarnÉdition : grâce à https://sdkman.io/, ça fonctionne. Finalement, ce n’était pas si terrible
Question de débutant : cette bibliothèque pourrait-elle être considérée comme une candidate pour être intégrée à des wrappers ou bibliothèques d’extension afin de regrouper au même endroit des algorithmes de clustering basés sur les graphes ? En supposant que ce ne soit pas déjà le cas
Ou bien existe-t-il déjà un framework qui fournit mieux les mêmes fonctionnalités ? Quelque chose comme NetworkX, par exemple
Je suis peut-être très en retard sur mon époque, mais est-ce que cela a un lien avec Pregel ?
Des exemples seraient vraiment utiles
Quelqu’un peut-il expliquer à quoi cette bibliothèque peut servir ?
Sur GitHub, il est indiqué C, C++, Starland. Qu’est-ce que Starland ?
Bazel est le système de build utilisé ici
Les algorithmes de graphes ont vraiment besoin d’une certaine standardisation. Pensez à BLAS et LAPACK
J’espérais que ce soit littéralement un outil pour miner des graphes statistiques et faire de la détection d’anomalies
Au début, c’est intéressant et plus simple que ça n’en a l’air