3 puan yazan GN⁺ 2023-10-05 | 1 yorum | WhatsApp'ta paylaş
  • 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:quickstart komutu ç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

 
GN⁺ 2023-10-05
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.

    • “Graf veritabanları” içinde, grafı veriye yönelik evrensel bir yaklaşım olarak gören bir akım var; RDF ve SPARQL ile çok sayıda benzer girişim de buna dahil. Bir C programında temel veri yapısının işaretçi grafı olduğu durumları da düşünebiliriz.
      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 ?o ve ?p ilişkisini paylaşan ?s1 ile ?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.
    • Graf analiziyle çözmenin en iyi olduğu problemlerde hâlâ NetworkX çok kullanılıyor ve bu paketin geliştirici deneyimini gerçekten seviyorum.
  • 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 build bir şeyler yapıyor gibi, ama sonuçta sadece bazel-build ve bazel-build oluşuyor; göze çarpan bir derleme çıktısı görünmüyor

    • Bazel’de //..., make’teki all hedefine benzer
      bazel build //..., bazel test //..., bazel query //... şeklinde kullanılabilir. Son komut, hatırladığım kadarıyla tüm hedefleri listeler
    • Yukarıdaki yanıta ek olarak, yalnızca tek bir paketi de derleyebilirsiniz. Örneğin bazel build //in_memory/connected_components:asynchronous_union_find ile asynchronous_union_find derlenebilir
      Ancak cc_binary kuralı 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ızca asynchronous_union_find.h başlığını kullanmak istiyorsanız, projenizin WORKSPACE dosyasında bir yere git_repository kuralıyla graph-mining kütüphanesini ekleyin (WORKSPACE.bazel örneğine bakın) ve projenizdeki BUILD dosyasında bulunan cc_library kuralına @graph-mining//in_memory/connected_components:asynchronous_union_find ekleyin. 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 derlenmez
    • Uzun zamandır bir gün Bazel’e bakmam gerektiğini düşünüyordum; o “bir gün” bugün oldu. Kurmak için önce Bazelisk’i kurup adını bazel olarak değiştirmek ve /usr/local/bin/bazel gibi bir yola koymak önerilen yöntem gibi görünüyor
      Ama query çalıştırınca JDK uyarısı çıktı; build çalıştırınca da WARNING: 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ç verici
      Dü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ı?

    • Pregel dağıtık bir graf işleme sistemi; bu ise bana göre tek bir bilgisayarın belleği içinde graflarla çalışan bir kütüphane
  • Örnekler olursa gerçekten çok yardımcı olurdu

    • Herhangi bir biçimde dokümantasyon olması gerçekten çok yardımcı olur
    • Yakında gelecek. 12 saat sonra tekrar bakarsanız muhtemelen olur
  • Bu kütüphanenin nerelerde işe yarayacağını açıklayabilir misiniz?

    • Kümeleme için kullanılabilir. Benzerlik ölçütleri (bu veri şu veriye benzer) ve güçlü itme özellikleri (bu verinin şu veriden farklı olduğu biliniyor, bu yüzden asla birleştirme) içeren bir düğüm grafı olarak ifade edilebilen problemlerde buradaki korelasyon kümeleyiciyi kullanmıştım
  • GitHub’da C, C++, Starland yazıyor. Starland nedir?

    • Starlark. Bazel derleme sistemini yapılandırmak için kullanılan dil; Bazel de Google’ın dahili derleme sistemi Blaze’in açık kaynak portu. Starlark, Python’ın bir alt kümesi
    • Tahminimce yazım hatası ve Starlark olmalı. Bazel derleme dosyalarında kullanılan dil
      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