- El objetivo del equipo Google Graph Mining es crear una biblioteca altamente escalable para algoritmos y análisis de grafos y aplicarla en productos de Google; actualmente ofrece un conjunto de algoritmos de clustering
- Las herramientas en desarrollo abarcan construcción de grafos de similitud, clustering, clasificación de nodos, embeddings de nodos, entrenamiento de redes neuronales de grafos, visualización de grafos, diversos tipos de muestreo y ranking por similitud
- El área de clustering está compuesta por algoritmos paralelos de memoria compartida que escalan hasta grafos con decenas de miles de millones de aristas, junto con varios algoritmos secuenciales
- Los algoritmos paralelos son implementaciones basadas en trabajos de investigación relacionados con HAC, clustering por correlación, affinity clustering y parline
- El framework de Graph Neural Network se ofrece en un proyecto separado, TF-GNN
- Para ejecutarlo rápidamente, instala Bazel y luego ejecuta
bazel run //examples:quickstart - No es un producto con soporte oficial de Google; las preguntas y comentarios se gestionan creando issues en este repositorio
1 comentarios
Opiniones en Hacker News
La minería de grafos estuvo muy de moda hace unos 10 años. Me hace pensar en GraphX (https://spark.apache.org/graphx/) y GraphLab (https://en.wikipedia.org/wiki/GraphLab), y en las bases de datos de grafos.
Probablemente coincidió con el fenómeno de las redes sociales y, más recientemente, el aprendizaje geométrico, es decir, machine learning sobre grafos y otras estructuras, estaba llamando la atención hasta que los LLM le robaron el protagonismo. Aun así, creo que el aprendizaje geométrico todavía tiene mucho potencial y me gustaría que ganara más popularidad.
Estos grafos suelen tener una enorme cantidad de tipos de aristas distintos, como “casado con” o “tiene temperatura media anual”. En cambio, los algoritmos de grafos como PageRank o centralidad de grafos suelen tener un solo tipo de arista, o apenas unos pocos. Sí existen algoritmos generales que pueden aplicarse a grafos con múltiples tipos de aristas; por ejemplo, el patrón SPARQL
?s1 ?p ?o . ?s2 ?p ?o .encuentra?s1y?s2que comparten algún?oy una relación?p, y sirve como base para una medida de similitud entre ambos. En general, los grafos no tienen una forma fija, pueden tener cualquier estructura y, desde el punto de vista de la latencia de memoria, pueden ser un desastre. Hace tiempo, usando este patrón SPARQL, hice un programa que habría tardado 100 años; luego reempaqué la estructura de datos y encontré una aproximación para que se calculara en menos de 20 minutos. Por eso, en la práctica, muchos son escépticos respecto de las bibliotecas de procesamiento de grafos de propósito general. Es común encontrar problemas en los que se puede escribir código especializado en menos tiempo del que lleva pelearse con el sistema de build, y hacerlo 1000 veces más rápido.Aun así, si quieres seguir la tendencia, hoy arXiv está lleno de papers sobre redes neuronales de grafos que no reciben tanto hype en otros lugares. YOShInOn me preparó una larga lista de papers de GNN para revisar, pero solo hojeé algunos; hay muchos artículos que dicen que se pueden aplicar a problemas de análisis de texto como los míos, pero no parecen claramente mejores que el sistema que usamos YOShInOn y yo, así que no tengo prisa.
Si alguien quiere experimentar con grafos y machine learning, hace poco, revisando la documentación de ArangoDB, vi que incluye integraciones con varias bibliotecas de grafos y frameworks de machine learning: https://docs.arangodb.com/3.11/data-science/adapters/
También vi algunos notebooks de Jupyter sobre machine learning en grafos: https://github.com/arangodb/interactive_tutorials#machine-learning
Entre las integraciones están NetworkX -- https://networkx.org/, DeepGraphLibrary -- https://www.dgl.ai/, cuGraph (Rapids.ai Graph) -- https://docs.rapids.ai/api/cugraph/stable/, y PyG (PyTorch Geometric) -- https://pytorch-geometric.readthedocs.io/en/latest/.
Si hay alguien familiarizado con Bazel, ¿podría dar alguna pista sobre cómo compilar?
bazel buildparece hacer algo, pero como resultado solo se creanbazel-buildybazel-build, y no veo ningún artefacto de compilación evidente//...es parecido al objetivoallde makeSe usa como
bazel build //...,bazel test //...,bazel query //.... Si mal no recuerdo, el último comando lista todos los objetivosbazel build //in_memory/connected_components:asynchronous_union_findAunque quizá no sea muy útil fuera del contexto de una regla
cc_binary. Este enfoque permite compilar y usar solo los paquetes que se necesitan en otros proyectos, sin compilar todo el repositorio. Por ejemplo, si solo quieres usar el headerasynchronous_union_find.h, agrega la biblioteca graph-mining con una reglagit_repositoryen algún lugar del archivoWORKSPACEde tu proyecto (ver el ejemplo deWORKSPACE.bazel) y agrega@graph-mining//in_memory/connected_components:asynchronous_union_finda una reglacc_libraryen el archivoBUILDdentro de tu proyecto. Entonces podrás incluirlo como header desde otros lugares y, al compilar tu proyecto, solo se compilarán ese paquete y sus dependencias, no toda la biblioteca graph-miningbazely ponerlo en una ruta como/usr/local/bin/bazelPero al ejecutar
queryaparece una advertencia del JDK, y al ejecutarbuildfalla porque no hay Java, junto conWARNING: Ignoring JAVA_HOME, because it must point to a JDK, not a JRE.. Pasé unos minutos buscando qué JDK/JRE debía usar si ni siquiera uso Java, hasta que no pude más, así que el “algún día” de hoy volvió a quedar para otro día. Es casi vergonzoso lo mal acostumbrado que estoy a cargo o npm/yarnEdición: gracias a https://sdkman.io/ pude ejecutarlo. Al final no estuvo tan mal
Pregunta de principiante: ¿esta biblioteca podría considerarse una candidata para integrarla con wrappers o bibliotecas de extensión y reunir en un solo lugar algoritmos de clustering basados en grafos? Suponiendo que todavía no esté pensada así
¿O ya existe algún framework que ofrezca mejor la misma funcionalidad? Algo como NetworkX
Tal vez estoy muy atrasado con los tiempos, pero ¿esto está relacionado con Pregel?
Sería de mucha ayuda tener ejemplos
¿Alguien puede explicar para qué es útil esta biblioteca?
En GitHub aparece como C, C++, Starland. ¿Qué es Starland?
Bazel es el sistema de build que se usa aquí
Los algoritmos de grafos necesitan urgentemente cierto grado de estandarización. Piensa en BLAS y LAPACK
Esperaba que fuera literalmente una herramienta para minar grafos estadísticos y hacer detección de anomalías
Al principio es interesante y parece más simple de lo que aparenta