The Graph Mining Library — biblioteca de algoritmos e análise de grafos
(github.com/google)- O objetivo da equipe Google Graph Mining é criar uma biblioteca altamente escalável para algoritmos e análise de grafos e aplicá-la aos produtos do Google; o escopo atualmente oferecido é uma coleção de algoritmos de clustering
- As ferramentas em desenvolvimento incluem construção de grafos de similaridade, clustering, classificação de nós, embeddings de nós, treinamento de redes neurais de grafos, visualização de grafos, várias formas de amostragem e ranking por similaridade
- A área de clustering é composta por algoritmos paralelos de memória compartilhada que escalam até grafos com dezenas de bilhões de arestas, além de vários algoritmos sequenciais
- Os algoritmos paralelos são implementações baseadas em artigos de pesquisa relacionados a HAC, clustering por correlação, affinity clustering e parline
- O framework de Graph Neural Network é fornecido em um projeto separado, TF-GNN
- Para executar rapidamente, instale o Bazel e rode
bazel run //examples:quickstart - Não é um produto com suporte oficial do Google; perguntas e comentários devem ser encaminhados criando issues neste repositório
1 comentários
Opiniões no Hacker News
Mineração de grafos esteve muito em alta cerca de 10 anos atrás. Isso me faz lembrar do GraphX (https://spark.apache.org/graphx/) e do GraphLab (https://en.wikipedia.org/wiki/GraphLab), além dos bancos de dados de grafos.
Talvez tenha coincidido com o fenômeno das redes sociais e, mais recentemente, o aprendizado geométrico, isto é, machine learning sobre grafos e outras estruturas, vinha chamando atenção até os LLMs roubarem os holofotes. Ainda assim, acho que o aprendizado geométrico tem muito potencial e gostaria que ganhasse mais popularidade.
Esses grafos normalmente têm uma quantidade enorme de tipos de arestas diferentes, como “é casado com” ou “tem temperatura média anual”. Por outro lado, algoritmos de grafos como PageRank ou centralidade em grafos muitas vezes têm apenas um ou poucos tipos de aresta. Existem algoritmos gerais que também podem ser aplicados a grafos com vários tipos de aresta; por exemplo, o padrão SPARQL
?s1 ?p ?o . ?s2 ?p ?o .encontra?s1e?s2que compartilham algum?oe uma relação?p, servindo como base para uma medida de similaridade entre os dois. Grafos, em geral, não têm uma forma fixa e podem assumir qualquer estrutura, o que pode ser um desastre do ponto de vista da latência de memória. Certa vez, usando esse padrão SPARQL, criei um programa que levaria 100 anos; depois reempacotei as estruturas de dados e encontrei aproximações, fazendo o cálculo terminar em menos de 20 minutos. Por isso, profissionais tendem a ser céticos em relação a bibliotecas genéricas de processamento de grafos. É comum haver problemas em que se consegue escrever código especializado em menos tempo do que se gastaria brigando com o sistema de build, e ainda deixá-lo 1000 vezes mais rápido.Ainda assim, se você quiser seguir a tendência, hoje o arXiv está cheio de artigos sobre redes neurais de grafos que não são tão exagerados em outros lugares. YOShInOn me fez uma longa lista de artigos sobre GNN para ver, mas só passei os olhos por alguns; há muitos textos dizendo que eles são aplicáveis aos problemas de análise de texto em que trabalho, mas não parecem particularmente melhores que os sistemas que YOShInOn e eu usamos, então não estou com pressa.
Para quem quer experimentar grafos e machine learning, ao consultar recentemente a documentação do ArangoDB vi que ela inclui integração com várias bibliotecas de grafos e frameworks de machine learning: https://docs.arangodb.com/3.11/data-science/adapters/
Também vi alguns notebooks Jupyter sobre machine learning em grafos: https://github.com/arangodb/interactive_tutorials#machine-learning
As integrações incluem NetworkX -- https://networkx.org/, DeepGraphLibrary -- https://www.dgl.ai/, cuGraph (Rapids.ai Graph) -- https://docs.rapids.ai/api/cugraph/stable/, PyG (PyTorch Geometric) -- https://pytorch-geometric.readthedocs.io/en/latest/.
Se alguém familiarizado com Bazel puder dar uma dica sobre como compilar, agradeço.
bazel buildaté faz alguma coisa, mas no resultado só aparecembazel-buildebazel-build, e não vejo nenhum artefato de build evidente//...é parecido com o alvoalldo make.Dá para usar como
bazel build //...,bazel test //...,bazel query //.... Pelo que me lembro, o último comando lista todos os alvosbazel build //in_memory/connected_components:asynchronous_union_findcompila o asynchronous_union_find.Mas talvez isso não seja muito útil fora do contexto de uma regra
cc_binary. Essa abordagem permite compilar e usar apenas os pacotes necessários em outro projeto, sem compilar o repositório inteiro. Por exemplo, se você só quiser usar o headerasynchronous_union_find.h, adicione a biblioteca graph-mining em algum lugar do arquivoWORKSPACEdo seu projeto com uma regragit_repository(veja o exemplo emWORKSPACE.bazel) e adicione@graph-mining//in_memory/connected_components:asynchronous_union_findà regracc_libraryno arquivoBUILDdentro do seu projeto. Assim você poderá incluí-lo como header em outros lugares e, ao compilar o projeto, apenas esse pacote e suas dependências serão compilados, não a biblioteca graph-mining inteirabazele colocá-lo em um caminho como/usr/local/bin/bazel.Mas, ao executar
query, apareceu um aviso do JDK; ao executarbuild, falhou por falta de Java, junto comWARNING: Ignoring JAVA_HOME, because it must point to a JDK, not a JRE.. Passei alguns minutos pesquisando qual JDK/JRE eu deveria usar, já que nem estou usando Java, e acabei desistindo; o “um dia” de hoje ficou para outro dia. É até vergonhoso o quanto fiquei acostumado com cargo ou npm/yarn.Edit: graças a https://sdkman.io/, consegui rodar. No fim, não foi tão ruim assim
Pergunta de iniciante: será que dá para considerar esta biblioteca como candidata para integrar wrappers ou bibliotecas de extensão e reunir algoritmos de clusterização baseada em grafos em um só lugar? Supondo que ela já não faça isso.
Ou já existe algum framework que ofereça melhor a mesma funcionalidade? Algo como NetworkX
Posso estar muito defasado em relação aos tempos atuais, mas isso tem alguma relação com Pregel?
Seria muito útil ter exemplos
Alguém poderia explicar onde esta biblioteca é útil?
No GitHub aparece C, C++, Starland. O que é Starland?
Bazel é o sistema de build usado aqui
Algum grau de padronização faz muita falta em algoritmos de grafos. Pense em BLAS e LAPACK
Eu esperava que fosse literalmente uma ferramenta para minerar grafos estatísticos e fazer detecção de anomalias
De início é interessante e parece mais simples do que aparenta