1. 程式人生 > >網路表示學習框架OpenNE的搭建

網路表示學習框架OpenNE的搭建

1.介紹

    傳統的網路挖掘方法,一般都是先將網路轉化成鄰接矩陣,然後再用機器學習的模型從而完成網路挖掘任務,比如社群檢測、連結預測、離群點檢測等等。然而這樣的話,鄰接矩陣通常都很稀疏,且維數很大。


    Network Embedding是近幾年比較火的領域,發展迅猛。它主要是從網路中學到隱式的表達矩陣,使得網路重要的資訊能夠被包含在一個新的相對低維的空間向量中,之後再對這個隱式表達矩陣採用機器學習的演算法,從而能夠更好的完成網路挖掘任務。


    NLP的迅速發展也促進了網路挖掘方法的發展,其中NLP中著名的word2vec模型也被應用於網路表示學習,由此開創新性的提出了DeepWalk方法(隨機遊走+skip-gram)。之後,LINE和node2vec被提出用於改進DeepWalk,但是值得注意的是,這幾種方法都是針對同質網路(即網路中節點型別和連結型別都只有一種

)。現實生活中,大多數的網路都是異質的(即網路中有不同型別的節點和連結,比如DBLP等等),所以2017年8月的KDD上提出了metapath2vec以及metapath2vec++來對異質網路進行處理(該框架基於預先指定的元路徑進行隨機遊走來構造路徑,從而能保持“節點上下文”的概念)。2017年11月的CIKM會議中提出了一個HIN2Vec框架(該框架基於神經網路模型,學習節點和關係的表示)。與網路表示學習相關的論文還有很多,在這裡就不做過多總結,可以自行搜尋。

    在瞭解了網路表示學習之後,我們想做的就是可以馬上上手這些方法,所以感謝那些勇於奉獻的大神們,在此膜拜!清華大學電腦科學與技術系的研究人員開源了一款NE/NRL訓練和測試框架——OpenNE,旨在幫助開發者對NE/NRL(Network Representation Learning,網路表示學習)開展相關的實驗和研究。

    OpenNE統一了不同NE模型輸入和輸出介面,併為每個模型提供可擴充套件選擇。此外,還基於TensorFlow實現了經典NE模型,使得這些模型可以用GPU進行訓練。

    OpenNE實現和修改的模型包括DeepWalkLINEnode2vecGraRepTADW 和 GCN,後續還將根據已公佈的NRL 論文持續實現更多有代表性的NE模型。

    所以,踩在巨人的肩膀上做事情可以讓我們學到更多。接下來就是下載這個框架,並且部署實現一下吧,萬事開頭難,一起來攻克它吧!

2.搭建框架

2.1下載程式碼

    首先,在github官網中搜索OpenNE,第一個結果就是我們需要的,點選之後,根據下圖下載,下載之後解壓,放到常用的工作空間(即各種專案的資料夾)中。



2.2環境說明

    我的電腦是win10系統,由於下載的程式碼中用到的python版本是2.7的(print語句輸出不帶括號),並且程式碼中用到了tensorflow,而windows64位作業系統如果想使用tensorflow,要求python版本至少是3.5。所以面臨一個問題,如果繼續用windows作業系統的話,用高版本的python時程式碼執行出錯,用低版本的python時tensorflow無法使用。==,但是我還不想換linux系統,所以這裡是通過修改下載的程式碼來暫時解決這個問題的(如果你也面臨同樣的困擾,當然,linux系統應該就不用考慮這些了),修改方法就是將程式碼中的print都加上括號,工作量不是很大,相信細心的你們可以完成~

    基本的安裝我這裡就不詳細介紹了(確保安裝了python3.5或3.6、pip),想要省事的話直接安裝一個anaconda,網上有很多教程,簡單易用。(Anaconda是一個用於科學計算的Python發行版,支援 Linux, Mac, Windows系統,提供了包管理與環境管理的功能,可以很方便地解決多版本python並存、切換以及各種第三方包安裝問題。Anaconda利用工具/命令conda來進行package和environment的管理,並且已經包含了Python和相關的配套工具。)

2.3執行框架

在eclipse或者Pycharm等開發工具中匯入該專案,目錄結構如下:


開始你可能並不知道怎麼使用,沒關係,直接執行一下main.py,可能會遇到的錯誤如下:

(1)print 錯誤(高版本python輸出需要加上小括號)

解決辦法:print()輸出引數加上括號。

(2)模組缺失

如果缺失一些包會有錯誤提示No module named ‘***’,***可能是tensorflow、numpy、sklearn等模組,

解決辦法:win+R開啟命令列輸入(確保已經安裝了pip命令):

pip install ***     (***是錯誤中提示的模組)

或者如果安裝了anaconda,可以開啟Anaconda Prompt輸入:

conda install ***   (也可以是pip install ***)

(3)import錯誤


    這個bug困擾了我一下午,報錯是No module named ‘***’,***是框架中已經存在的模組,各種百度都試過了,但都有問題,最後我使用了一個笨拙但是有效的方法,在模組前面加上了上級包名。


解決辦法:import  libnrl.walker

(4)執行時缺少必要引數

當出現上圖錯誤時,表示程式已經沒有大毛病了,只是執行時缺少輸入引數,這個可以通過命令列執行來解決

解決辦法:通過閱讀OpenNE-master中README.md檔案可以找到幾個簡單的示例,告訴我們怎麼使用這些方法


由於第二個core資料集較小,執行時間短,所以在這裡執行這個示例程式。

開啟命令列進入到專案所在的資料夾,執行下面程式碼

python src/main.py --method gcn --label-file data/cora/cora_labels.txt --input data/cora/cora_edgelist.txt --graph-format edgelist --feature-file data/cora/cora.features  --epochs 200 --output vec_all.txt --clf-ratio 0.1

然後就是等待,過個半分鐘左右就出現下圖結果


到此,只是把程式碼跑通了而已,具體怎麼實現還需要仔細的去除錯,萬事開頭難,跑通了之後才有繼續下去的動力呢,大家加油吧~

相關推薦

網路表示學習框架OpenNE搭建

1.介紹    傳統的網路挖掘方法,一般都是先將網路轉化成鄰接矩陣,然後再用機器學習的模型從而完成網路挖掘任務,比如社群檢測、連結預測、離群點檢測等等。然而這樣的話,鄰接矩陣通常都很稀疏,且維數很大。    Network Embedding是近幾年比較火的領域,發展迅猛。它

網路表示學習(NRL)方向--論文整理

網路表示學習方法(Network Representation Learning/Network Embedding),也稱為網路嵌入。簡單理解就是一種資料預處理技術,就類似於通訊中對原始訊號做傅立葉變換或拉普拉斯變換,之後就可以通過頻域分析的方法方便理解訊號,網路表示學習的物理意義類似。即

圖嵌入、網路嵌入、網路表示學習領域的論文總結

Graph Embedding Techniques, Applications, and Performance: A Survey——一篇圖嵌入的綜述,很全面 論文連結 Representation Learning on Graphs: Methods and Ap

網路表示學習論文閱讀之HARP

HARP: Hierarchical Representation Learning for Networks 閱讀筆記 摘要 在這篇文章中,作者提出了一種新的方法,能夠在做 network embedding 的時候保持網路高階的結構特徵,具體

網路表示學習綜述:一文理解Network Embedding

在碎片化閱讀充斥眼球的時代,越來越少的人會去關注每篇論文背後的探索和思考。在這個欄目裡,你會快速

網路表示學習——異構圖的分類任務

社交網路的表示學習任務 在日常生活中,會遇到許多的社交網路,比如微博等,展現了不同使用者與微博內容之間的各種關係,還有論文之中的網路,展現了論文作者,作者研究課題,論文出版雜誌社之間的關係。網路表示學習的任務就是學習一種對這些節點的表示方法,以方便其用於機器學

網路表示學習總結

我的GitHub部落格:咖啡成癮患者 最近看了paperweekly的兩次關於網路表示學習的直播,塗存超博士與楊成博士講解了網路表示學習的相關知識。本文將網路表示學習中的一些基本知識,結合自己的一些粗淺的理解,整理記錄下來。 網路的鄰接矩陣表示

windows下MatConvNet深度學習框架搭建

MatConvNet是Matlab下用於機器視覺的一個工具包,主要應用是CNN網路,當然其他的網路也涉及到了。MatConvNet簡潔、高效,可以用於圖片分類、分割和人臉識別等等深度學習的功能。具體的可以參見官網的介紹。 在搭建環境的過程中,發現如今網上對其的資源不太

Unity進階之ET網路遊戲開發框架 05-搭建自己的第一個Scene

版權申明: 本文原創首發於以下網站: 部落格園『優夢創客』的空間:https://www.cnblogs.com/raymondking123 優夢創客的官方部落格:https://91make.top 優夢創客的遊戲講堂:https://91make.ke.qq.com 『優夢創客』的微信公眾號:um

開源脈衝神經網路深度學習框架——驚蟄(SpikingJelly)

開源脈衝神經網路深度學習框架——驚蟄(SpikingJelly) 背景   近年來神經形態計算晶片發展迅速,大量高校企業團隊跟進,這樣的晶片執行SNN的能效比與速度都超越了傳統的通用計算裝置。相應的,神經形態感知晶片也發展迅速。目前已有各種模態的感知晶片,其中如北京大學黃鐵軍教授團隊的Vidar相機,功能上仿

Ubuntu 搭建深度學習框架 keras

all bash VC 使用 learning 是否 技術 ESS image 深度學習框架Keras是基於Tensorflow的所以,安裝keras需要安裝Tensorflow: 1. 安裝教程主要參考於兩個博客的教程: https://www.cnblogs.c

spring學習框架搭建

名稱 .org pat 但是 xmla string spa sch www 1 導入jar包 spring啟來最少要5個包,四個核心包和一個依賴的日誌包 2 創建配置文件   在dynamic web project下的src目錄下,創建一個spring的xml配置文件

搭建深度學習框架-win10 64位+CUDA 9.0+cuDNN v7.0.5 安裝

本人機械狗,研究生接觸到了機器視覺令我神往,雷軍不是說過:站在風口上,豬都能飛起來.能不能飛起來,看你小子本事了。 廢話不多說,摸著石頭過河的同時也要記下自己成長的足跡.第一次嘗試寫安裝教程的部落格,希望能幫助到需要的朋友. 0 檢視電腦系統版本(非常重要) WIN+R->輸入

Elastic-Job學習筆記-定時任務框架搭建

官方文件:http://elasticjob.io/docs/elastic-job-lite/00-overview/ elastic-job學習(網易樂得技術團隊,具體說明) http://tech.lede.com/2017/06/23/rd/server/elasticJob/

《TensorFlow:實戰Google深度學習框架》——6.3 卷積神經網路常用結構

1、卷積層 圖6-8顯示了卷積層神經網路結構中重要的部分:濾波器(filter)或者核心(kernel)。 過濾器可以將當前層神經網路上的一個子節點矩陣轉化為下一層神經網路上的一個單位節點矩陣 。 單位節點矩陣指的是一個長和寬都為1,但深度不限的節點矩陣 。 在一個卷積層巾,過濾器

《TensorFlow:實戰Google深度學習框架》——6.2 卷積神經網路簡介(卷積神經網路的基本網路結構及其與全連線神經網路的差異)

下圖為全連線神經網路與卷積神經網路的結構對比圖: 由上圖來分析兩者的差異:                  全連線神經網路與卷積網路相同點   &nb

《TensorFlow:實戰Google深度學習框架》——6.3 卷積神經網路常用結構(池化層)

池化層在兩個卷積層之間,可以有效的縮小矩陣的尺寸(也可以減小矩陣深度,但實踐中一般不會這樣使用),co。池從而減少最後全連線層中的引數。 池化層既可以加快計算速度也可以防止過度擬合問題的作用。 池化層也是通過一個類似過濾器結構完成的,計算方式有兩種: 最大池化層:採用最

TensorFlow+實戰Google深度學習框架學習筆記(12)------Mnist識別和卷積神經網路LeNet

一、卷積神經網路的簡述 卷積神經網路將一個影象變窄變長。原本【長和寬較大,高較小】變成【長和寬較小,高增加】 卷積過程需要用到卷積核【二維的滑動視窗】【過濾器】,每個卷積核由n*m(長*寬)個小格組成,每個小格都有自己的權重值, 長寬變窄:過濾器的長寬決定的 高度變高:過濾器的個數決定的 &nb

TensorFlow+實戰Google深度學習框架學習筆記(13)------Mnist識別和卷積神經網路AlexNet

一、AlexNet:共8層:5個卷積層(卷積+池化)、3個全連線層,輸出到softmax層,產生分類。  論文中lrn層推薦的引數:depth_radius = 4,bias = 1.0 , alpha = 0.001 / 9.0 , beta = 0.75 lrn現在僅在AlexNet中使用,

VUE框架學習——腳手架的搭建

#我的VUE框架學習 題記:初識VUE,覺得VUE十分的不錯,故決定去深入的瞭解學習它,工欲善其事,必先利其器,下面是我搭建vue環境的過程! #一.專案搭建及初始化 1.安裝:node.js;去官網下載:https://nodejs.org/en/   2.安裝cnp:mnpm in