The Graph Mining Library - Grafik algoritmaları ve analiz kütüphanesi
(github.com/google)- Google Graph Mining ekibinin hedefi, grafik algoritmaları ve analizi için yüksek ölçeklenebilirliğe sahip bir kütüphane oluşturup bunu Google ürünlerine uygulamak; şu anda sunulan kapsam kümeleme algoritmaları koleksiyonundan oluşuyor
- Geliştirme hedefindeki araçlar; benzerlik grafiği oluşturma, kümeleme, düğüm sınıflandırma, düğüm gömme, grafik sinir ağı eğitimi, grafik görselleştirme, çeşitli örnekleme yöntemleri ve benzerlik sıralaması
- Kümeleme alanı, on milyarlarca kenara sahip grafiklere kadar ölçeklenebilen paylaşımlı bellek paralel algoritmaları ile çeşitli sıralı algoritmalardan oluşuyor
- Paralel algoritmalar; HAC, correlation clustering, affinity clustering ve parline ile ilgili araştırma makalelerine dayanan uygulamalar
- Graph Neural Network çerçevesi, ayrı bir proje olan TF-GNN üzerinden sunuluyor
- Hızlı çalıştırma için Bazel kurulduktan sonra
bazel run //examples:quickstartkomutu çalıştırılıyor - Bu, Google tarafından resmi olarak desteklenen bir ürün değil; soru ve görüşler için bu depoda issue oluşturulması isteniyor
1 yorum
Hacker News yorumları
Graf madenciliği yaklaşık 10 yıl önce gerçekten çok modaydı. Aklıma GraphX (https://spark.apache.org/graphx/) ve GraphLab (https://en.wikipedia.org/wiki/GraphLab) ile graf veritabanları geliyor.
Muhtemelen sosyal ağ fenomeniyle aynı döneme denk gelmişti; daha yakın zamanda ise graf ve diğer yapılar üzerinde makine öğrenimi olan geometrik öğrenme ilgi görürken gündemi LLM'lere kaptırdı. Yine de geometrik öğrenmede hâlâ büyük potansiyel olduğunu düşünüyorum ve daha popüler olmasını isterim.
Bu tür graflarda genellikle “~ ile evli”, “yıllık ortalama sıcaklığa sahip” gibi birbirinden farklı kenar türleri muazzam sayıda bulunur. Buna karşılık PageRank ya da graf merkeziliği gibi graf algoritmalarında kenar türü çoğu zaman bir tanedir ya da birkaç taneyle sınırlıdır. Birden çok kenar türü olan graflara uygulanabilecek genel algoritmalar da var; örneğin SPARQL deseni
?s1 ?p ?o . ?s2 ?p ?o ., herhangi bir?ove?pilişkisini paylaşan?s1ile?s2yi bulur ve ikisi arasında bir benzerlik ölçütünün temeli olur. Grafların genel olarak biçimi önceden belirli değildir; herhangi bir yapıya sahip olabilirler ve bellek gecikmesi açısından felaket olabilirler. Eskiden bu SPARQL desenini kullanırken 100 yıl sürecek bir program yapmıştım; veri yapısını yeniden paketleyip bir yaklaşık çözüm bularak hesaplamayı 20 dakikanın altına indirmiştim. Bu yüzden pratikte çalışanlar, genel amaçlı graf işleme kütüphanelerine kuşkuyla yaklaşma eğilimindedir. Çünkü derleme sistemiyle boğuşarak geçecek zamandan daha kısa sürede özel amaçlı kod yazıp 1000 kat hızlandırılabilecek problemler yaygındır.Yine de modayı takip etmek istiyorsanız, bugünlerde arXiv, başka yerlerde çok abartılmayan graf sinir ağı makaleleriyle dolu. YOShInOn, bakmam için uzun bir GNN makale listesi hazırladı ama yalnızca birkaçına göz attım; üzerinde çalıştığım metin analizi problemlerine uygulanabileceğini söyleyen çok yazı var, fakat YOShInOn ile benim kullandığımız sistemlerden özellikle daha iyi görünmedikleri için acele etmiyorum.
Graflar ve makine öğrenimiyle uğraşmak isteyenler için, yakın zamanda ArangoDB dokümanlarına bakarken çeşitli graf kütüphaneleri ve makine öğrenimi framework entegrasyonları içerdiğini gördüm https://docs.arangodb.com/3.11/data-science/adapters/
Graflarda makine öğrenimini ele alan birkaç Jupyter not defteri de gördüm https://github.com/arangodb/interactive_tutorials#machine-learning
Entegrasyon hedefleri arasında 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/ bulunuyor.
Bazel’e aşina biri varsa nasıl derleneceği konusunda ipucu verebilir mi?
bazel buildbir şeyler yapıyor gibi, ama sonuçta sadecebazel-buildvebazel-buildoluşuyor; göze çarpan bir derleme çıktısı görünmüyor//..., make’tekiallhedefine benzerbazel build //...,bazel test //...,bazel query //...şeklinde kullanılabilir. Son komut, hatırladığım kadarıyla tüm hedefleri listelerbazel build //in_memory/connected_components:asynchronous_union_findile asynchronous_union_find derlenebilirAncak
cc_binarykuralı bağlamı dışında pek kullanışlı olmayabilir. Bu yöntem, tüm depoyu derlemeden başka projelerde yalnızca gereken paketleri derleyip kullanmayı sağlar. Örneğin yalnızcaasynchronous_union_find.hbaşlığını kullanmak istiyorsanız, projenizinWORKSPACEdosyasında bir yeregit_repositorykuralıyla graph-mining kütüphanesini ekleyin (WORKSPACE.bazelörneğine bakın) ve projenizdekiBUILDdosyasında bulunancc_librarykuralına@graph-mining//in_memory/connected_components:asynchronous_union_findekleyin. Böylece başka yerlerde başlık olarak dahil edilebilir; proje derlenirken yalnızca ilgili paket ve bağımlılıkları derlenir, tüm graph-mining kütüphanesi derlenmezbazelolarak değiştirmek ve/usr/local/bin/bazelgibi bir yola koymak önerilen yöntem gibi görünüyorAma
queryçalıştırınca JDK uyarısı çıktı;buildçalıştırınca daWARNING: Ignoring JAVA_HOME, because it must point to a JDK, not a JRE.mesajıyla birlikte Java olmadığı için başarısız oldu. Java kullanmıyor bile olmama rağmen hangi JDK/JRE’yi kullanmam gerektiğini birkaç dakika aradıktan sonra daha fazla uğraşamadım; bugünkü “bir gün” yine başka bir güne kaldı. cargo ya da npm/yarn’a bu kadar alışmış olmam neredeyse utanç vericiDüzenleme: https://sdkman.io/ sayesinde çalıştı. Sonuçta o kadar da kötü değilmiş
Acemi sorusu ama bu kütüphane, sarmalayıcılar veya genişletme kütüphaneleriyle entegre edilip graf tabanlı kümeleme algoritmalarını tek yerde toplamak için bir aday olarak görülebilir mi? Zaten böyle olmadığını varsayarsak
Yoksa aynı işlevi daha iyi sunan bir framework zaten var mı? NetworkX gibi
Çağın epey gerisinde kalmış olabilirim ama bunun Pregel ile ilgisi var mı?
Örnekler olursa gerçekten çok yardımcı olurdu
Bu kütüphanenin nerelerde işe yarayacağını açıklayabilir misiniz?
GitHub’da C, C++, Starland yazıyor. Starland nedir?
Bazel de burada kullanılan derleme sistemi
Graf algoritmalarında ciddi ölçüde standardizasyona ihtiyaç var. BLAS ve LAPACK’i düşünün
Kelimenin tam anlamıyla istatistiksel grafikleri madencilikle inceleyip anomali tespiti yapan bir araç olmasını ummuştum
İlk başta ilginç ve göründüğünden daha basit duruyor