Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PGL
提交
570bf814
P
PGL
项目概览
PaddlePaddle
/
PGL
通知
76
Star
4
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
11
列表
看板
标记
里程碑
合并请求
1
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PGL
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
11
Issue
11
列表
看板
标记
里程碑
合并请求
1
合并请求
1
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
570bf814
编写于
2月 14, 2020
作者:
L
liweibin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
release hetergraph
上级
38057f1d
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
189 addition
and
28 deletion
+189
-28
examples/GATNE/Dataset.py
examples/GATNE/Dataset.py
+1
-1
examples/GATNE/model.py
examples/GATNE/model.py
+1
-1
examples/metapath2vec/Dataset.py
examples/metapath2vec/Dataset.py
+11
-3
examples/metapath2vec/config.yaml
examples/metapath2vec/config.yaml
+2
-1
examples/metapath2vec/sample.py
examples/metapath2vec/sample.py
+1
-1
pgl/__init__.py
pgl/__init__.py
+2
-0
pgl/contrib/__init__.py
pgl/contrib/__init__.py
+0
-18
pgl/heter_graph.py
pgl/heter_graph.py
+0
-0
pgl/heter_graph_wrapper.py
pgl/heter_graph_wrapper.py
+2
-2
pgl/redis_hetergraph.py
pgl/redis_hetergraph.py
+1
-1
pgl/tests/test_hetergraph.py
pgl/tests/test_hetergraph.py
+92
-0
pgl/tests/test_metapath_randomwalk.py
pgl/tests/test_metapath_randomwalk.py
+76
-0
未找到文件。
examples/GATNE/Dataset.py
浏览文件 @
570bf814
...
...
@@ -21,7 +21,7 @@ import tqdm
import
numpy
as
np
import
logging
import
random
from
pgl
.contrib
import
heter_graph
from
pgl
import
heter_graph
import
pickle
as
pkl
...
...
examples/GATNE/model.py
浏览文件 @
570bf814
...
...
@@ -21,7 +21,7 @@ import logging
import
paddle.fluid
as
fluid
import
paddle.fluid.layers
as
fl
from
pgl
.contrib
import
heter_graph_wrapper
from
pgl
import
heter_graph_wrapper
class
GATNE
(
object
):
...
...
examples/metapath2vec/Dataset.py
浏览文件 @
570bf814
...
...
@@ -23,7 +23,7 @@ import tqdm
import
time
import
logging
import
random
from
pgl
.contrib
import
heter_graph
from
pgl
import
heter_graph
import
pickle
as
pkl
...
...
@@ -71,8 +71,12 @@ class Dataset(object):
if
len
(
walk
)
>
1
:
self
.
sentences_count
+=
1
for
word
in
walk
:
self
.
token_count
+=
1
word_freq
[
word
]
=
word_freq
.
get
(
word
,
0
)
+
1
if
int
(
word
)
>=
self
.
config
[
'paper_start_index'
]:
# remove paper
continue
else
:
self
.
token_count
+=
1
word_freq
[
word
]
=
word_freq
.
get
(
word
,
0
)
+
1
wid
=
0
logging
.
info
(
'Read %d sentences.'
%
self
.
sentences_count
)
...
...
@@ -126,6 +130,10 @@ class Dataset(object):
with
open
(
filename
)
as
reader
:
for
line
in
reader
:
words
=
line
.
strip
().
split
()
words
=
[
w
for
w
in
words
if
int
(
w
)
<
self
.
config
[
'paper_start_index'
]
]
if
len
(
words
)
>
1
:
word_ids
=
[
self
.
word2id
[
w
]
for
w
in
words
if
w
in
self
.
word2id
...
...
examples/metapath2vec/config.yaml
浏览文件 @
570bf814
...
...
@@ -42,9 +42,10 @@ data_loader:
walk_path
:
walks/*
word2id_file
:
word2id.pkl
batch_size
:
32
win_size
:
7
# default: 7
win_size
:
5
# default: 7
neg_num
:
5
min_count
:
10
paper_start_index
:
1697414
model
:
type
:
SkipgramModel
...
...
examples/metapath2vec/sample.py
浏览文件 @
570bf814
...
...
@@ -28,7 +28,7 @@ import tqdm
import
time
import
logging
import
random
from
pgl
.contrib
import
heter_graph
from
pgl
import
heter_graph
from
pgl.sample
import
metapath_randomwalk
from
utils
import
*
...
...
pgl/__init__.py
浏览文件 @
570bf814
...
...
@@ -18,4 +18,6 @@ from pgl import layers
from
pgl
import
graph_wrapper
from
pgl
import
graph
from
pgl
import
data_loader
from
pgl
import
heter_graph
from
pgl
import
heter_graph_wrapper
from
pgl
import
contrib
pgl/contrib/__init__.py
已删除
100644 → 0
浏览文件 @
38057f1d
# Copyright (c) 2019 PaddlePaddle Authors. All Rights Reserved
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Generate Contrib api
"""
from
pgl.contrib
import
heter_graph
from
pgl.contrib
import
heter_graph_wrapper
pgl/
contrib/
heter_graph.py
→
pgl/heter_graph.py
浏览文件 @
570bf814
文件已移动
pgl/
contrib/
heter_graph_wrapper.py
→
pgl/heter_graph_wrapper.py
浏览文件 @
570bf814
...
...
@@ -64,8 +64,8 @@ class HeterGraphWrapper(object):
import paddle.fluid as fluid
import numpy as np
from pgl
.contrib
import heter_graph
from pgl
.contrib
import heter_graph_wrapper
from pgl import heter_graph
from pgl import heter_graph_wrapper
num_nodes = 4
node_types = [(0, 'user'), (1, 'item'), (2, 'item'), (3, 'user')]
edges = {
...
...
pgl/
contrib/
redis_hetergraph.py
→
pgl/redis_hetergraph.py
浏览文件 @
570bf814
...
...
@@ -28,7 +28,7 @@ import pgl.graph as pgraph
import
pickle
as
pkl
from
pgl.utils.logger
import
log
import
pgl.graph_kernel
as
graph_kernel
from
pgl
.contrib
import
heter_graph
from
pgl
import
heter_graph
import
pgl.redis_graph
as
rg
...
...
pgl/tests/test_hetergraph.py
0 → 100644
浏览文件 @
570bf814
# Copyright (c) 2019 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""test_hetergraph"""
import
time
import
unittest
import
json
import
os
import
numpy
as
np
from
pgl.sample
import
metapath_randomwalk
from
pgl.graph
import
Graph
from
pgl
import
heter_graph
class
HeterGraphTest
(
unittest
.
TestCase
):
"""HeterGraph test
"""
@
classmethod
def
setUpClass
(
cls
):
np
.
random
.
seed
(
1
)
edges
=
{}
# for test no successor
edges
[
'c2p'
]
=
[(
1
,
4
),
(
0
,
5
),
(
1
,
9
),
(
1
,
8
),
(
2
,
8
),
(
2
,
5
),
(
3
,
6
),
(
3
,
7
),
(
3
,
4
),
(
3
,
8
)]
edges
[
'p2c'
]
=
[(
v
,
u
)
for
u
,
v
in
edges
[
'c2p'
]]
edges
[
'p2a'
]
=
[(
4
,
10
),
(
4
,
11
),
(
4
,
12
),
(
4
,
14
),
(
4
,
13
),
(
6
,
12
),
(
6
,
11
),
(
6
,
14
),
(
7
,
12
),
(
7
,
11
),
(
8
,
14
),
(
9
,
10
)]
edges
[
'a2p'
]
=
[(
v
,
u
)
for
u
,
v
in
edges
[
'p2a'
]]
# for test speed
# edges['c2p'] = [(0, 4), (0, 5), (1, 9), (1,8), (2,8), (2,5), (3,6), (3,7), (3,4), (3,8)]
# edges['p2c'] = [(v,u) for u, v in edges['c2p']]
# edges['p2a'] = [(4,10), (4,11), (4,12), (4,14), (5,13), (6,13), (6,11), (6,14), (7,12), (7,11), (8,14), (9,13)]
# edges['a2p'] = [(v,u) for u, v in edges['p2a']]
node_types
=
[
'c'
for
_
in
range
(
4
)]
+
[
'p'
for
_
in
range
(
6
)
]
+
[
'a'
for
_
in
range
(
5
)]
node_types
=
[(
i
,
t
)
for
i
,
t
in
enumerate
(
node_types
)]
cls
.
graph
=
heter_graph
.
HeterGraph
(
num_nodes
=
len
(
node_types
),
edges
=
edges
,
node_types
=
node_types
)
def
test_num_nodes_by_type
(
self
):
print
()
n_types
=
{
'c'
:
4
,
'p'
:
6
,
'a'
:
5
}
for
nt
in
n_types
:
num_nodes
=
self
.
graph
.
num_nodes_by_type
(
nt
)
self
.
assertEqual
(
num_nodes
,
n_types
[
nt
])
def
test_node_batch_iter
(
self
):
print
()
batch_size
=
2
ground
=
[[
4
,
5
],
[
6
,
7
],
[
8
,
9
]]
for
idx
,
nodes
in
enumerate
(
self
.
graph
.
node_batch_iter
(
batch_size
=
batch_size
,
shuffle
=
False
,
n_type
=
'p'
)):
self
.
assertEqual
(
len
(
nodes
),
batch_size
)
self
.
assertListEqual
(
list
(
nodes
),
ground
[
idx
])
def
test_sample_nodes
(
self
):
print
()
p_ground
=
[
4
,
5
,
6
,
7
,
8
,
9
]
sample_num
=
10
nodes
=
self
.
graph
.
sample_nodes
(
sample_num
=
sample_num
,
n_type
=
'p'
)
self
.
assertEqual
(
len
(
nodes
),
sample_num
)
for
n
in
nodes
:
self
.
assertIn
(
n
,
p_ground
)
# test n_type == None
ground
=
[
i
for
i
in
range
(
15
)]
nodes
=
self
.
graph
.
sample_nodes
(
sample_num
=
sample_num
,
n_type
=
None
)
self
.
assertEqual
(
len
(
nodes
),
sample_num
)
for
n
in
nodes
:
self
.
assertIn
(
n
,
ground
)
if
__name__
==
"__main__"
:
unittest
.
main
()
pgl/tests/test_metapath_randomwalk.py
0 → 100644
浏览文件 @
570bf814
# Copyright (c) 2019 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""test_metapath_randomwalk"""
import
time
import
unittest
import
json
import
os
import
numpy
as
np
from
pgl.sample
import
metapath_randomwalk
from
pgl.graph
import
Graph
from
pgl
import
heter_graph
np
.
random
.
seed
(
1
)
class
MetapathRandomwalkTest
(
unittest
.
TestCase
):
"""metapath_randomwalk test
"""
def
setUp
(
self
):
edges
=
{}
# for test no successor
edges
[
'c2p'
]
=
[(
1
,
4
),
(
0
,
5
),
(
1
,
9
),
(
1
,
8
),
(
2
,
8
),
(
2
,
5
),
(
3
,
6
),
(
3
,
7
),
(
3
,
4
),
(
3
,
8
)]
edges
[
'p2c'
]
=
[(
v
,
u
)
for
u
,
v
in
edges
[
'c2p'
]]
edges
[
'p2a'
]
=
[(
4
,
10
),
(
4
,
11
),
(
4
,
12
),
(
4
,
14
),
(
4
,
13
),
(
6
,
12
),
(
6
,
11
),
(
6
,
14
),
(
7
,
12
),
(
7
,
11
),
(
8
,
14
),
(
9
,
10
)]
edges
[
'a2p'
]
=
[(
v
,
u
)
for
u
,
v
in
edges
[
'p2a'
]]
# for test speed
# edges['c2p'] = [(0, 4), (0, 5), (1, 9), (1,8), (2,8), (2,5), (3,6), (3,7), (3,4), (3,8)]
# edges['p2c'] = [(v,u) for u, v in edges['c2p']]
# edges['p2a'] = [(4,10), (4,11), (4,12), (4,14), (5,13), (6,13), (6,11), (6,14), (7,12), (7,11), (8,14), (9,13)]
# edges['a2p'] = [(v,u) for u, v in edges['p2a']]
self
.
node_types
=
[
'c'
for
_
in
range
(
4
)]
+
[
'p'
for
_
in
range
(
6
)
]
+
[
'a'
for
_
in
range
(
5
)]
node_types
=
[(
i
,
t
)
for
i
,
t
in
enumerate
(
self
.
node_types
)]
self
.
graph
=
heter_graph
.
HeterGraph
(
num_nodes
=
len
(
node_types
),
edges
=
edges
,
node_types
=
node_types
)
def
test_metapath_randomwalk
(
self
):
meta_path
=
'c2p-p2a-a2p-p2c'
path
=
[
'c'
,
'p'
,
'a'
,
'p'
,
'c'
]
start_nodes
=
[
0
,
1
,
2
,
3
]
walk_len
=
10
walks
=
metapath_randomwalk
(
graph
=
self
.
graph
,
start_nodes
=
start_nodes
,
metapath
=
meta_path
,
walk_length
=
walk_len
)
self
.
assertEqual
(
len
(
walks
),
4
)
for
walk
in
walks
:
for
i
in
range
(
len
(
walk
)):
idx
=
i
%
(
len
(
path
)
-
1
)
self
.
assertEqual
(
self
.
node_types
[
walk
[
i
]],
path
[
idx
])
if
__name__
==
"__main__"
:
unittest
.
main
()
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录