Coder Social home page Coder Social logo

dhgnn's Introduction

DHGNN: Dynamic Hypergraph Neural Networks

Created by Jianwen Jiang, Yuxuan Wei, Yifan Feng, Jingxuan Cao and Yue Gao from Tsinghua University and Xiamen University. framework

Introduction

This work has been published in IJCAI 2019.
Dynamic Hypergraph Neural Networks (DHGNN) is a kind of neural networks modeling dynamically evolving hypergraph structures, which is composed of the stacked layers of two modules: dynamic hypergraph construction (DHG) and hypergrpah convolution (HGC). Considering initially constructed hypergraph is probably not a suitable representation for data, the DHG module dynamically updates hypergraph structure on each layer. Then hypergraph convolution is introduced to encode high-order data relations in a hypergraph structure. The HGC module includes two phases: vertex convolution and hyperedge convolution, which are designed to aggregate feature among vertices and hyperedges, respectively. We have evaluated our method on standard datasets, the Cora citation network and Microblog dataset. Detailed introduction can be found in the original paper.
In this repository, we release the code for train and test DHGNN on Cora citation dataset.

Citation

@inproceedings{Jiang2019Dynamic,
  title={Dynamic Hypergraph Neural Networks},
  author={Jianwen Jiang, Yuxuan Wei, Yifan Feng, Jingxuan Cao and Yue Gao},
  booktitle={Proceedings of International Joint Conferences on Artificial Intelligence},
  page={2635-2641},
  year={2019}
}

Installation

The code has been tested with Python 3.6, CUDA 9.0 on Ubuntu 16.04. GPU is needed to run the code. You can install all the requirements by pip install -r requirements.txt.
Requirements list:

  • alabaster==0.7.10
  • asn1crypto==0.24.0
  • astroid==1.6.3
  • astropy==3.0.2
  • attrs==18.1.0
  • Babel==2.5.3
  • backcall==0.1.0
  • backports.shutil-get-terminal-size==1.0.0
  • beautifulsoup4==4.6.0
  • bitarray==0.8.1
  • bkcharts==0.2
  • blaze==0.11.3
  • bleach==2.1.3
  • bokeh==0.12.16
  • boto==2.48.0
  • Bottleneck==1.2.1
  • certifi==2018.4.16
  • cffi==1.11.5
  • chardet==3.0.4
  • click==6.7
  • cloudpickle==0.5.3
  • clyent==1.2.2
  • colorama==0.3.9
  • conda==4.5.4
  • conda-build==3.10.5
  • conda-verify==2.0.0
  • contextlib2==0.5.5
  • cryptography==2.2.2
  • cycler==0.10.0
  • Cython==0.28.2
  • cytoolz==0.9.0.1
  • dask==0.17.5
  • datashape==0.5.4
  • decorator==4.3.0
  • distributed==1.21.8
  • docutils==0.14
  • entrypoints==0.2.3
  • et-xmlfile==1.0.1
  • fastcache==1.0.2
  • filelock==3.0.4
  • Flask==1.0.2
  • Flask-Cors==3.0.4
  • gevent==1.3.0
  • glob2==0.6
  • gmpy2==2.0.8
  • greenlet==0.4.13
  • h5py==2.7.1
  • heapdict==1.0.0
  • html5lib==1.0.1
  • idna==2.6
  • imageio==2.3.0
  • imagesize==1.0.0
  • ipdb==0.12.3
  • ipykernel==4.8.2
  • ipython==6.4.0
  • ipython-genutils==0.2.0
  • ipywidgets==7.2.1
  • isort==4.3.4
  • itsdangerous==0.24
  • jdcal==1.4
  • jedi==0.12.0
  • jieba==0.39
  • Jinja2==2.10
  • jsonschema==2.6.0
  • jupyter==1.0.0
  • jupyter-client==5.2.3
  • jupyter-console==5.2.0
  • jupyter-core==4.4.0
  • jupyterlab==0.32.1
  • jupyterlab-launcher==0.10.5
  • kiwisolver==1.0.1
  • lazy-object-proxy==1.3.1
  • llvmlite==0.23.1
  • locket==0.2.0
  • lxml==4.2.1
  • MarkupSafe==1.0
  • matplotlib==2.2.2
  • mccabe==0.6.1
  • mistune==0.8.3
  • mkl-fft==1.0.0
  • mkl-random==1.0.1
  • more-itertools==4.1.0
  • mpmath==1.0.0
  • msgpack-python==0.5.6
  • multipledispatch==0.5.0
  • navigator-updater==0.2.1
  • nbconvert==5.3.1
  • nbformat==4.4.0
  • networkx==1.11
  • nltk==3.3
  • nose==1.3.7
  • notebook==5.5.0
  • numba==0.38.0
  • numexpr==2.6.5
  • numpy==1.14.3
  • numpydoc==0.8.0
  • odo==0.5.1
  • olefile==0.45.1
  • openpyxl==2.5.3
  • packaging==17.1
  • pandas==0.23.0
  • pandocfilters==1.4.2
  • parso==0.2.0
  • partd==0.3.8
  • path.py==11.0.1
  • pathlib2==2.3.2
  • patsy==0.5.0
  • pep8==1.7.1
  • pexpect==4.5.0
  • pickleshare==0.7.4
  • Pillow==5.1.0
  • pkginfo==1.4.2
  • pluggy==0.6.0
  • ply==3.11
  • prompt-toolkit==1.0.15
  • psutil==5.4.5
  • ptyprocess==0.5.2
  • py==1.5.3
  • pycodestyle==2.4.0
  • pycosat==0.6.3
  • pycparser==2.18
  • pycrypto==2.6.1
  • pycurl==7.43.0.1
  • pyflakes==1.6.0
  • Pygments==2.2.0
  • pylint==1.8.4
  • pyodbc==4.0.23
  • pyOpenSSL==18.0.0
  • pyparsing==2.2.0
  • PySocks==1.6.8
  • pytest==3.5.1
  • pytest-arraydiff==0.2
  • pytest-astropy==0.3.0
  • pytest-doctestplus==0.1.3
  • pytest-openfiles==0.3.0
  • pytest-remotedata==0.2.1
  • python-dateutil==2.7.3
  • pytz==2018.4
  • PyWavelets==0.5.2
  • PyYAML==3.12
  • pyzmq==17.0.0
  • QtAwesome==0.4.4
  • qtconsole==4.3.1
  • QtPy==1.4.1
  • requests==2.18.4
  • rope==0.10.7
  • ruamel-yaml==0.15.35
  • scikit-image==0.13.1
  • scikit-learn==0.19.1
  • scipy==1.1.0
  • seaborn==0.8.1
  • Send2Trash==1.5.0
  • simplegeneric==0.8.1
  • singledispatch==3.4.0.3
  • six==1.11.0
  • snowballstemmer==1.2.1
  • sortedcollections==0.6.1
  • sortedcontainers==1.5.10
  • Sphinx==1.7.4
  • sphinxcontrib-websupport==1.0.1
  • spyder==3.2.8
  • SQLAlchemy==1.2.7
  • statsmodels==0.9.0
  • sympy==1.1.1
  • tables==3.4.3
  • tblib==1.3.2
  • terminado==0.8.1
  • testpath==0.3.1
  • thop==0.0.31.post1909230639
  • toolz==0.9.0
  • torch==0.4.1
  • torchvision==0.2.1
  • tornado==5.0.2
  • traitlets==4.3.2
  • typing==3.6.4
  • unicodecsv==0.14.1
  • urllib3==1.22
  • wcwidth==0.1.7
  • webencodings==0.5.1
  • Werkzeug==0.14.1
  • widgetsnbextension==3.2.1
  • wrapt==1.10.11
  • xlrd==1.1.0
  • XlsxWriter==1.0.4
  • xlwt==1.3.0
  • zict==0.1.3

Usage

Data Preparation

Github repo of - planetoid (Zhilin Yang, William W. - Cohen, Ruslan Salakhutdinov, Revisiting Semi-Supervised Learning with Graph Embeddings, ICML 2016) provided a preprocessed Cora dataset and a fixed splitting. After downloading the Cora dataset, put it - under path $data_root/$citation_root, where $data_root and $citation_root is configured - in config/config.yaml. Make sure to edit these two properties of configuration before - running the code.

  • Train and Test Model

You can run the model by the following command:

python train.py --gpu_id $GPU_ID --model_version DHGNN_v1

License

Our code is released under MIT License (see LICENSE file for details).

dhgnn's People

Contributors

weiyx15 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

dhgnn's Issues

About the DHGNN model

I was wondering where is the code for DHGNN model, maybe you forget releasing the part of this. I only found the HGNN model, and still don't know the type of G in models/model.py line821, it seems not like the egde_dict in other models like DynamicGCN, could you add some annotation about this.
Best wishes!

关于微博推文情感分析任务的一些疑问

作者你好,阅读论文后发现你们关于动态构建超图网络的想法非常酷,也很受启发。特别是论文中谈到的关于微博推文情感分析任务,我觉得用超图网络来做情感分析任务很有意思。
我想问一下关于使用动态超图网络来做情感分析任务的一些细节问题,因为我没有从代码里找到关于情感分析任务相关的代码或者微博推文数据处理的代码。

  1. 不同于cora数据,情感分析任务中的数据本身不存在图结构(把每一篇推文看作一个节点的话,节点之间是没有关联的)。所以我很好奇,针对情感分析任务,输入数据是不存在结构(edge_dict节点仅自相关),还是说对数据做了预处理,节点之间构建了关联并将其作为先验知识输入模型。如果做了预处理,是怎么样做的?
  2. 关于训练数据,不知道我理解有没有偏差,我没有在代码中看到batch_size的设置,模型似乎是针对所有训练数据进行建模的。我看到论文里介绍的推文数据量是5550条,如果数据量较大,例如有20万条推文,该方法是否可行?有哪些应对方法?(我看到代码中有矩阵H和G计算,节点数量到十万量级那么矩阵计算代价会非常恐怖)

The problem about DHGNN on citation network

The paper claims that it can jointly learn embeddings from given graph structure and a hypergraph structure from feature space. I am confused about this process since the paper did not clearly explain this.

关于超边集merge的一些疑问

作者您好,阅读论文后发现你们关于动态构建超图网络的想法非常酷,看了文章后深受启发。有两个问题
1.在微博情感分析任务中,有三个模态,分别是文本,图像和表情,文中你您提出构建三个超边集来对应三个模态构成的超边,然后再merge这个三个超边集,这个merge是指在列维度上concate起来吗?例如第一模态超边集大小为10,第二模态20,第三模态30,最后形成的大超边集是,N个结点*60超边?如果是上面这个想法,后面的特征聚合该如何实现?
2.使用DHGNN这篇文章中,在每一次聚类时候簇的个数,簇内结点个数,knn每个邻居结点个数,目标结点u选择周围最近簇的个数,这都是预先设置好了,应用时候该如何确定最佳设定这些个值?

新的特征嵌入和超图进化的问题

感谢你们团队出色的工作,在看完论文和代码后我有几个疑惑,希望可以得到解答。
1、图2所示是一个DHGNN流程,最后得到新的特征嵌入和原始特征维度相同,那么是如何确保这些特征是正确的。如何训练的。
2、如果按照代码里进行分类任务,是如何体现超图进化的**。

怎么把该模型运用到超图数据集中?

拜读了您的工作,觉得很新颖很前沿。该模型的实验集中于包含图结构的数据或不包含图结构的数据,那么作为一个超图模型,更应该在超图数据集上进行实验呀。因为在卷积过程中,固定了超边内顶点个数,这对现实的超图数据集来说是不可取的,所以该模型目前我没有很好的想法,能在超图上进行实验。所以,请问该模型该如何运用到超图数据集中呢?

The problem about train

Hi, I want to ask about that when I try to run train.py, something is wrong. It shows the 'G has no attribute adjacency_list()'in the cora.py. Can you give me some advice for this

关于随机划分cora数据集

您好,
代码中关于任意划分cora数据集的函数是cora.py中的load_cora_data(cfg, add_self_path=True)函数,其中idx_features_labels = np.genfromtxt(cfg['cora_ft'], dtype=np.dtype(str))一行中的cfg['cora_ft']参数是什么意思,在config_cora.yaml文件中并未见到,希望能指点一下,非常感谢。

超图神经网络能应用于图分类任务吗?

我对您提出的新模型十分感兴趣。但在将其应用于我自己的工作的时候产生了疑问。该网络模型似乎是专门应用于对节点进行分类,想请问一下,该模型能否应用于对整张超图进行分类的任务,如果可以,是否需要对模型做出何种改变,谢谢

Installation

There are so many problems with the requirements.txt file, which doesn't install packages in google colab. Some package's version don't match. Could you please update this for colab, or can you test the requirements.txt file on google colab

关于 _structure_select 的问题

您好,请问 _structure_select 的意义是利用初始的构图信息吗,模型会同时利用生成的新超图和初始的旧超图?
完整的 hyperedge set 是不是包括
1、使用 K-means 生成的 n_cluster 个簇中离节点 u 最近的 n_center 个簇形成的 n_center(也即论文中的S-1) 超边
2、以节点 u 为中心使用k-nn 算法生成的一个超边
3、使用原始构图信息(edge_dict)选出 k_structured 个和节点 u 邻接的节点组成的另一个超边
所以完整的 hyperedge set 其实包括 S+1 个超边?

跑到第10个epoch就卡住了

作者您好,我对您这篇工作比较感兴趣,尝试在ubuntu上跑代码,但是在跑到第10个epoch就卡住了,查看了一下GPU、CPU资源,都充足。不知道是什么原因

Confusion about some code tricks

Hi !
I have been focus on your team's work for about one year.Thank you for your amazing idea and your hypergraph learning team!
I am a little confused about some details in code,and are they created for better experiment results?:

  1. Warm-up parameters: does the warm-up procedure really work?
    image

2.HGNN_CONV / GRAPH_CONV before DHGlayer module: I have no idea about why graph convolution operation is conducted before dynamic graph convolution.
image

3.Sample selection: I am unfamiliar with graph structure data, and if I use DHGNN for image data, should the sample selection be discarded?
image
image

4._structure_select funtcion : Similar to previous question,if I use DHGNN for image data, should the structure selection be discarded? Because I think edge_dict is not a priori knowledge for image data.
image
I am an undergrate without a lot of experience in the hypergraph filed,maybe these questions are a little inaccurate.Thank you a lot for your kindness!
Best Wishes!!!!!!!!!!!!!!!!!!!!!!!!!!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.