이것저것 기록

[python, graph] 그래프 관련 파이썬 라이브러리 소개 및 추천 (geo2dr, karateclub) 본문

코린이/실무를 위한 코딩 기록

[python, graph] 그래프 관련 파이썬 라이브러리 소개 및 추천 (geo2dr, karateclub)

anweh 2021. 1. 10. 17:16

아무래도 졸업 논문에 그래프 관련 모델을 사용하게 될 것 같아서 (특히 whole graphp embedding)

요즘 그래프 이론이나, 파이썬으로 그래프 모델을 구현하는 방법들에 대해 공부하고 있다.

보통 Graph Neural Networks (GNN)에는 DGL이나 NetworkX등의 라이브러리를 사용하는 것으로 알고 있는데,

그래프 임베딩 관련한 라이브러리를 뒤지다가 몇 가지 완제품(?) 라이브러리를 찾게 되었다.

이 중 쓸만한 기능이 있나 어차피 둘러 볼 생각이었고, 공유하면 좋을 듯 하여 이렇게 포스팅을 쓰게 됐다. 

 

우선 이 포스팅에서 짚고 넘어가야 할 부분은, 내가 whole graph embedding을 위해 모델을 찾고 있었다는 점!

그래서 그래프 임베딩 관련한 기능을 중점적으로 정리 및 소개 할 것이다. 

 

 

 

1. Geo2DR 

Geo2DR

링크: geo2dr.readthedocs.io/en/latest/index.html

  • Geo2DR이라는 라이브러리는 위 그림의 파란색 박스처럼 크게 세 가지의 패키지를 제공한다. 

    • 1) geometric2dr.data: 그냥 데이터 불러오는 함수인듯 

    • 2) geometric2dr.decomposition: anonymous walks in graph에 관련한 알고리즘들이 구현되어 있다. 

    • 3) geometric2dr.embedding_methods: CBOW, PVDM, Skipgram 알고리즘들이 구현되어 있다. 내가 주목해서 살펴본 패키지는 바로 이 패키지다. 간단히 설명하고 넘어가보자.

      • CBOW (Mikolov et al. 2013): 기존 word2vec CBOW 알고리즘을 그래프에 적용할 수 있게 짜놨다. 빨간색 박스의 [source]를 클릭하면 소스 코드를 볼 수 있다. 전부 토치 기반이다. 

      • PVDM 

      • SKIPGRAM 

  • 이 라이브러리의 토이코드나 자세한 사용방법이 궁금하면 다음 논문을 읽어보면 된다. 해당 라이브러리를 만든 사람들이 라이브러리에 대한 자세한 설명과, 뒷장에 가면 샘플로 적용한 코드들도 첨부해놨다. 

 

CBOW

 

 

 

2. Karateclub

링크: karateclub.readthedocs.io/en/latest/index.html

  • NetworkX에서 제공하는 샘플데이터 중엥 karateclub이 있는데, 그거랑 다른 거다. 헷갈리지 말자!!

  • Karateclub에서 제공하는 패키지 종류는 크게 다음과 같다.

    • 1) Standardized dataset ingestion

    • 2) API driven design

    • 3) Community deetection

    • 4) Node embedding 

    • 5) Graph embedding <-- 내가 관심있는 패키지! 

    • 6) Benchmark datasets 

  • 5) graph embedding에서 패키지로 제공하는 임베딩 모델들 종류는 다음과 같다. 

    • LDP (Local Degree Profile): ICLR Representation Learning on Graphs and Manifolds Workshop '19 paper "A Simple Yet Effective Baseline for Non-Attributed Graph Classification"

    • FeatherGraph: CIKM '20 paper "Characteristic Functions on Graphs: Birds of Feather, from Statistical Descriptor to Parametric Models"

    • IGE: ICML 2019 Workshop on Learning and Reasoning with Graph-Structured Data paper "Invariant Embedding for Graph Classification"

    • GeoScattering: ICML '19 paper "Geometric Scattering for Graph Data Analysis"

    • GL2Vec: ICONIP '19 paper "GL2vec: Graph Embedding Enriched by Line Graphs with Edge Features" 

    • NetLSD: KDD '18 paper "NetLSD: Hearing the Shape of a Graph"

    • SF: NeurIPS Relational Representation Learning Workshop '18 paper "A Simple Baseline Algorithm for Classification"  <-- 이 모델도 나중에 살펴볼 예정

    • FGSD: NeurIPS '17 paper "Hunt For The Unique, Stable, Sparse And Fast Feature Learning On Graphs" 

    • Graph2Vec <-- 내가 관심있는 모델! 

  • documentation을 읽다보면 알 수 있다시피 graph embedding 패키지의 모델들의 입력데이터는 NetworkX 그래프들의 list이다. 

Karateclub 라이브러리에서 제공하는 그래프 임베딩 모델의 입력데이터 형태

  • 내가 살펴본 바에 의하면, karateclub 라이브러리에서 그래프 임베딩 모델의 입력데이터처럼 데이터를 만들어주는 기능은 없었다. 즉, karateclub 라이브러리에서 제공하는 그래프 임베딩 모델 (나같은 경우는 graph2vec)을 사용하고 싶다면 위의 그림처럼 입력데이터를 만들어서 넣어줘야한다는 뜻이다. 

Comments