网络表示学习框架OpenNE的搭建与调试

  • OpenNE的简单介绍

    OpenNE,是清华大学计算机科学与技术系的研究人员在 GitHub 上发布的基于网络表示学习(NE/NRL) 的训练和测试框架 ,其中统一了 NE 模型输入/输出/评测接口,并且修订和复现了目前比较经典的网络表征学习模型”。
    传统的节点表示方式是采用向量的形式,整个社交网络的表示是以邻接矩阵的方式表示的,显然邻接矩阵都很稀疏,而且维数很大。所以为了解决这些传统网络带来的问题,Network enmbedding应运而生,它主要是从社交网络中的节点以一个低纬度的向量形式进行表达。
    其中在2014年提出的DeepWalk算法,第一次将文字中中的向量表示方式应用到离散的社交网络图中,2016年出现的Node2vec模型是在DeepWalk的基础之上进行了随机游走策略的改进,实现了深度优先和广度优先搜索策略的一种平衡。2015年提出的LINE算法结合了一阶相似度和二阶相似度,进行了社区发现。
    OpenNE实现和修改的模型包括DeepWalk、LINE、node2vec、GraRep、TADW 和 GCN,后续还将根据已公布的NRL 论文持续实现更多有代表性的NE模型。
    接下来,我们言归正传,开始OpenNE框架的搭建与测试。

  • OpenNE框架的搭建与调试

  • OpenNE代码下载
    首先打开github官方网站,搜索OpenNE,点击排名第一个的链接
    https://github.com/thunlp/OpenNE
    点击“Download Zip”,下载到常用的工作区文件夹中并解压
    网络表示学习框架OpenNE的搭建与调试_第1张图片

  • 搭建运行环境
    解压之后的项目目录情况如下,解释一下:这里项目名称是OpenNE-master1(我自己改名字了,原来是OpenNE-master),也就是项目的主目录;下面有data文件夹,包含的是4个数据集;src文件夹,包含openne文件夹和一些.py文件,其中主要的__main__.py文件就在openne文件夹下面;首先我们肯定最先想要做的就是运行__main__.py文件,要在cmd命令框中进入到OpenNE-master目录下,输入python main.py命令。
    网络表示学习框架OpenNE的搭建与调试_第2张图片
    输入命令之后就会报出一堆的错误,为什么呢,因为环境不对。所以首先就要检查一下自己电脑上python的版本,cmd命令框中输入python --version
    在这里插入图片描述
    结果显示,我的电脑上安装的是python3.7.3版本的,很遗憾,OpenNE框架代码是在python2.7的环境上运行的,但我们不可能去重新下载一个python环境,这样太不现实了。所以我推荐的最佳解决方法是:安装Anaconda,创建虚拟环境。(不要试图把python2.7版本的代码改成python3.7.3版本的,相信我 会让你改到崩溃,我就在这个坑里待了1天半的时间,最终还是放弃了,用了Anaconda,结果晚上就调试通了代码)。

  • Anaconda的下载和安装

  • 认识Anaconda
    Anaconda指的是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。 因为包含了大量的科学包,Anaconda 的下载文件比较大(约 531 MB),如果只需要某些包,或者需要节省带宽或存储空间,也可以使用Miniconda这个较小的发行版(仅包含conda和 Python)。
    Conda是一个开源的包、环境管理器,可以用于在同一个机器上安装不同版本的软件包及其依赖,并能够在不同的环境之间切换
    Anaconda包括Conda、Python以及一大堆安装好的工具包,比如:numpy、pandas等,Miniconda包括Conda、Python。

  • Anaconda的下载和安装
    下载链接地址https://www.anaconda.com/download/
    网络表示学习框架OpenNE的搭建与调试_第3张图片
    我下载的是windows3.7 64位的(具体下载哪个版本要根据自己的实际情况,选择32-bit或者64bit的),安装包有662MB,耐心等待。
    在这里插入图片描述
    双击这个Anaconda3-2019.03-Windows-x86.exe文件进行安装,安装路径我选择了默认 C:\ProgramData\Anaconda3(自己可以根据情况需要安装到其他路径);
    一路点击next进行到下一步,经过漫长的等待,终于安装成功。
    网络表示学习框架OpenNE的搭建与调试_第4张图片
    这一个选项可以都选上。

  • 设置环境变量

windows用户可以打开控制面板-系统-高级系统设置-环境变量-path,进行设置
网络表示学习框架OpenNE的搭建与调试_第5张图片
在变量值里面加上anaconda的安装目录的Scripts文件夹,我的路径是E:\CodeAPP\Anacoda3.0\Scripts,则在变量值一栏末尾输入 ;E:\CodeAPP\Anacoda3.0\Scripts(注意是英文分号)
检查anaconda安装是否成功,cmd+r 打开命令行输入 conda --version
网络表示学习框架OpenNE的搭建与调试_第6张图片
如果出现conda 4.6.11类似的语句,就说明安装成功
为了避免一些不必要的错误,在命令行中输入conda upgrade --all 先把所有工具包进行升级。

  • 创建虚拟环境

接下来我们就可以用anaconda来创建许多独立的python环境,接下来可以打开Anaconda Prompt命令框了,

active

active可以帮助我们建立一个个独立的虚拟环境,我们这里需要的是创建一个名称为python27的虚拟环境并指定python版本为2.7(这里conda会自动找2.7中最新的版本下载)
conda create -n pthon27 python=2.7
这样,我们就成功的创建了一个虚拟环境, 接下来我们要切换这个环境,同样还是用active命令,后面要加上要切换的环境名称。

  • 切换环境

activate learn
这里我们可以先用conda env list展示一下环境列表
网络表示学习框架OpenNE的搭建与调试_第7张图片
好了,到这里我们已经成功拥有了一个独立的python2.7的环境,接下来我们需要配置OpenNE框架所用到的包。

  • anaconda安装包

第一步,我们需要做的是要读清楚OpenNE需要哪些版本的包,看requirements.txt;
网络表示学习框架OpenNE的搭建与调试_第8张图片
这里需要7个包,我们要下载对应的版本。安装之前我们可以用conda list命令先检查一下已经安装的包有哪些
网络表示学习框架OpenNE的搭建与调试_第9张图片
这里显示了所有的已经安装的包,但是对应的版本并不是OpenNE框架中所需要的,所以我们要重新安装,首先要卸载之前的包 ,如之前的numpy包为1.16版本,卸载命令 conda remove numpy,然后安装numpy 1.14版本,命令为conda install numpy=1.14,

conda install numpy==1.14 //这里的==可以改成=
conda install networkx==2.0
conda install scipy==0.19.1
conda install tensorflow==1.10.0
conda install gensim==3.0.1
conda install scikit-learn==0.19.0

如果遇到安装失败的情况,多试几遍就可以了,可能是网络延迟的问题,记住一定不要打错字母!

  • 注意:关于import 问题,即报错是No module named ‘–’,但‘–’是框架中已经存在的模块,这个问题真是很坑啊,其实没必要在模块前面加上级包名,其实原因是进错了目录,是主目录,不是openne目标(即不是__main__.py的父级目录)! 其实去查看github官网上的阅读须知就明白了!网络表示学习框架OpenNE的搭建与调试_第10张图片网络表示学习框架OpenNE的搭建与调试_第11张图片
    官网上明确写明了是主目录!
  • 参数问题 网络表示学习框架OpenNE的搭建与调试_第12张图片
    如果出现上述错误,说明是代码差不多跑通了,只是运行的时候没有提交参数,加油!
  • 运行时加入参数
    首先我选择了数据集最小的CORA进行gcn算法的调试,命令为
python src/openne/__main__.py --method gcn --label-file data/cora/cora_labels.txt --input data/cora/cora_edgelist.txt --graph-format edgelist --feature data/cora/cora.features --epochs 200 --output vec_all.txt --clf-ratio 0.1

进行到这里,说明离成功不远了,但是我把其中一个的cora写成了core,然后报出了FileEorror的错误,显然这是文件路径错误!我还傻傻的调了1个半小时,唉~ 所以敲命令的时候要格外的认真!

  • 代码跑通,出现结果
    等待几分钟之后,结果出现
    网络表示学习框架OpenNE的搭建与调试_第13张图片
    进行到这一步,代码终于跑通了!**但是,**只是代码跑通了一个而已,具体怎么实现还需要仔细的调试运行,然后就是根据自己的理解、自己的算法让代码按照自己的想法进行,加油,后续的OpenNE框架的具体理解还会继续分享~

你可能感兴趣的:(网络表示学习NE)