3 पॉइंट द्वारा GN⁺ 2023-10-05 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Google Graph Mining टीम का लक्ष्य ग्राफ एल्गोरिद्म और विश्लेषण के लिए एक उच्च-स्केलेबल लाइब्रेरी बनाना और उसे Google प्रोडक्ट्स में लागू करना है; फिलहाल उपलब्ध दायरा clustering algorithms के संग्रह तक सीमित है
  • जिन टूल्स पर विकास हो रहा है, उनमें similarity graph निर्माण, clustering, node classification, node embedding, graph neural network training, graph visualization, विभिन्न sampling, और similarity ranking शामिल हैं
  • clustering क्षेत्र में shared-memory parallel algorithms और कई sequential algorithms शामिल हैं, जो सैकड़ों अरब edges वाले ग्राफ तक स्केल हो सकते हैं
  • parallel algorithms, HAC, correlation clustering, affinity clustering, और parline से संबंधित शोध-पत्रों पर आधारित implementations हैं
  • Graph Neural Network framework एक अलग प्रोजेक्ट TF-GNN में उपलब्ध है
  • तेज़ी से चलाने के लिए Bazel इंस्टॉल करने के बाद bazel run //examples:quickstart चलाएँ
  • यह Google का आधिकारिक रूप से समर्थित प्रोडक्ट नहीं है; सवाल और राय इस repository में issue बनाकर संभाले जाते हैं

1 टिप्पणियां

 
GN⁺ 2023-10-05
Hacker News की रायें
  • Graph mining करीब 10 साल पहले सचमुच बहुत ट्रेंड में था। GraphX (https://spark.apache.org/graphx/) और GraphLab (https://en.wikipedia.org/wiki/GraphLab), और graph databases याद आते हैं
    शायद यह social network वाली लहर के समय के आसपास ही था, और हाल के समय में graphs और दूसरी structures पर machine learning, यानी geometric learning, ध्यान खींच रहा था, लेकिन LLM ने सारी चर्चा अपने नाम कर ली। फिर भी मुझे लगता है कि geometric learning में अभी भी काफी संभावना है, और काश यह और लोकप्रिय हो

    • “Graph database” में graph को data के लिए एक सार्वभौमिक approach मानने वाली धारा है, और RDF, SPARQL व ऐसी बहुत-सी मिलती-जुलती कोशिशें हैं। यह भी सोचा जा सकता है कि C program में core data structure pointer graph हो
      ऐसे graphs में आम तौर पर “~से शादी की है”, “वार्षिक औसत तापमान है” जैसी अलग-अलग edge types की संख्या बहुत बड़ी होती है। इसके उलट PageRank या graph centrality जैसे graph algorithms में अक्सर edge type एक ही होता है या बहुत कम होते हैं। कई तरह के edges वाले graph पर भी लागू किए जा सकने वाले general algorithms मौजूद हैं; उदाहरण के लिए SPARQL pattern ?s1 ?p ?o . ?s2 ?p ?o . उन ?s1, ?s2 को ढूंढता है जो किसी ?o और relation ?p को साझा करते हैं, और उनके बीच similarity measure का आधार बनता है। Graphs का आम तौर पर कोई fixed shape नहीं होता, वे किसी भी तरह की structure रख सकते हैं, और memory latency के लिहाज से यह आपदा बन सकता है। पहले मैंने इसी SPARQL pattern का इस्तेमाल करते हुए ऐसा program बना दिया था जिसे चलने में 100 साल लगते; फिर data structure को फिर से pack करके और approximation ढूंढकर उसे 20 मिनट के अंदर calculate करने लायक बनाया। इसलिए practitioners general-purpose graph processing libraries को लेकर संदेह में रहते हैं। वजह यह है कि ऐसे problems आम हैं जिनके लिए build system से जूझने में लगने वाले समय से कम समय में special-purpose code लिखकर उसे 1000 गुना तेज बनाया जा सकता है
      फिर भी अगर आप ट्रेंड के साथ चलना चाहते हैं, तो आजकल arXiv पर graph neural network papers की भरमार है, जिन्हें दूसरी जगहों पर उतना hype नहीं मिला है। YOShInOn ने देखने के लिए GNN papers की लंबी सूची बनाई थी, लेकिन मैंने उनमें से कुछ ही देखे हैं; मेरे text analysis problems पर लागू होने की बात करने वाले लेख तो बहुत हैं, मगर वे YOShInOn और मेरे इस्तेमाल वाले systems से खास बेहतर नहीं लगते, इसलिए मुझे कोई जल्दी नहीं है
    • जिन problems को graph analysis से हल करना सबसे अच्छा होता है, उनमें आज भी NetworkX का काफी इस्तेमाल होता है, और इस package का developer experience मुझे सचमुच बहुत पसंद है
  • अगर कोई graphs और machine learning के साथ हाथ आजमाना चाहता है, तो हाल में ArangoDB docs देखते समय मैंने देखा कि उसमें कई graph libraries और machine learning framework integrations शामिल हैं https://docs.arangodb.com/3.11/data-science/adapters/
    Graphs में machine learning पर कुछ Jupyter notebooks भी दिखीं https://github.com/arangodb/interactive_tutorials#machine-learning
    integrations में 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/ शामिल हैं

  • अगर कोई Bazel से परिचित है, तो क्या बिल्ड करने का तरीका बताने के लिए कोई hint दे सकता है? bazel build कुछ करता तो है, लेकिन नतीजे में सिर्फ bazel-build और bazel-build बनते हैं, और कोई साफ़ दिखने वाला build artifact नहीं दिखता

    • Bazel में //..., make के all target जैसा होता है
      इसे bazel build //..., bazel test //..., bazel query //... की तरह इस्तेमाल कर सकते हैं। आख़िरी command, मेरी याद के मुताबिक, सभी targets list कर देगा
    • ऊपर वाले जवाब में जोड़ते हुए, आप सिर्फ़ एक package भी build कर सकते हैं। उदाहरण के लिए bazel build //in_memory/connected_components:asynchronous_union_find से asynchronous_union_find build कर सकते हैं
      हालांकि cc_binary rule के context के बाहर यह शायद बहुत उपयोगी न हो। यह तरीका आपको पूरा repository build किए बिना, दूसरे projects में केवल ज़रूरी packages build करके इस्तेमाल करने देता है। उदाहरण के लिए अगर आप सिर्फ़ asynchronous_union_find.h header इस्तेमाल करना चाहते हैं, तो अपने project की WORKSPACE file में कहीं git_repository rule के जरिए graph-mining library जोड़ें (WORKSPACE.bazel example देखें), और project के अंदर BUILD file में मौजूद cc_library rule में @graph-mining//in_memory/connected_components:asynchronous_union_find जोड़ दें। फिर उसे दूसरी जगह header की तरह include किया जा सकेगा, और project build करते समय सिर्फ़ वह package और उसकी dependencies build होंगी; पूरी graph-mining library build नहीं होगी
    • काफ़ी समय से सोच रहा था कि कभी Bazel देखना चाहिए, और वह “कभी” आज हो गया। install करने के लिए लगता है पहले Bazelisk install करना, फिर उसका नाम बदलकर bazel करना और /usr/local/bin/bazel जैसे path में रखना recommended तरीका है
      लेकिन query चलाने पर JDK warning आई, और build चलाने पर WARNING: Ignoring JAVA_HOME, because it must point to a JDK, not a JRE. के साथ Java न होने की वजह से fail हो गया। मैं Java इस्तेमाल भी नहीं कर रहा, फिर कौन-सा JDK/JRE चाहिए—यह कुछ मिनट खोजा, फिर आगे नहीं कर पाया, तो आज वाला “कभी” फिर किसी और दिन के लिए टल गया। cargo या npm/yarn की आदत इतनी पड़ गई है कि शर्मनाक लगता है
      सुधार: https://sdkman.io/ की वजह से चल गया। आखिर में इतना भी बुरा नहीं था
  • शुरुआती सवाल है: क्या इस library को wrappers या extension libraries के साथ integrate करके graph-based clustering algorithms को एक जगह इकट्ठा करने के candidate के तौर पर देखा जा सकता है? यह मानकर चल रहा हूँ कि यह पहले से ऐसा नहीं है
    या फिर इसी functionality को बेहतर तरीके से देने वाला कोई framework पहले से मौजूद है? जैसे NetworkX

  • हो सकता है मैं समय से काफ़ी पीछे हूँ, लेकिन क्या इसका Pregel से कोई संबंध है?

    • Pregel एक distributed graph processing system है, और मुझे यह single computer की memory के अंदर graph handle करने वाली library लगती है
  • examples हों तो सच में बहुत मदद मिलेगी

    • किसी भी रूप में documentation हो तो सच में बहुत मदद मिलेगी
    • जल्द आने वाला है। 12 घंटे बाद फिर check करेंगे तो शायद मिल जाएगा
  • क्या कोई समझा सकता है कि यह library कहाँ उपयोगी है?

    • इसे clustering के लिए इस्तेमाल किया जा सकता है। मैंने यहाँ के correlation clusterer को ऐसे problems पर इस्तेमाल किया है जिन्हें nodes के graph के रूप में represent किया जा सकता है—जहाँ similarity metric हो (यह data उस data जैसा है) और strong repulsion features हों (यह data उस data से अलग माना गया है, इसलिए इन्हें कभी merge न करें)
  • GitHub पर C, C++, Starland लिखा है। Starland क्या है?

    • Starlark है। यह Bazel build system configure करने की भाषा है, और Bazel, Google के internal build system Blaze का open-source port है। Starlark Python का subset है
    • मेरा guess है कि यह typo है और Starlark होना चाहिए। यह Bazel build files में इस्तेमाल होने वाली भाषा है
      Bazel यहाँ इस्तेमाल किया गया build system है
  • graph algorithms में कुछ हद तक standardization की सख़्त ज़रूरत है। BLAS और LAPACK के बारे में सोचें

  • उम्मीद थी कि यह सचमुच statistical graphs को mine करके anomaly detection करने वाला tool होगा

    • https://en.wikipedia.org/wiki/Graph_theory
      शुरुआत में यह दिलचस्प और दिखने से ज़्यादा सरल लगता है
    • यहाँ इस्तेमाल किया गया “graph” शायद मेरे इस्तेमाल वाले अर्थ से अलग है
    • वह अपेक्षाकृत आसान है; https://en.m.wikipedia.org/wiki/Interquartile_range देखें