-
Notifications
You must be signed in to change notification settings - Fork 558
Euler 2.0 Euler OP接口
tf_euler定义了一系列OP来进行TensorFlow和Euler之间的桥接,用户可以通过在TensorFlow计算图中直接引入这些OP来进行图查询。所有的OP均可以在tf_euler顶层模块访问。
tf_euler.initialize_embedded_graph(
data_dir, sampler_type='all', data_type='node'
)
加载一份完整的图并独立使用
-
data_dir: 图数据路径
-
sampler_typ: 所需要的采样器,默认是all,如果只需要采样节点就设置为node,只需要采样边则设置为edge
-
data_type: 所需要加载的数据,默认为node,还可以设置为all
- 返回bool,表示图是否初始化成功
tf_euler.initialize_shared_graph(
data_dir, zk_addr, zk_path, shard_num
)
在不同的worker之间自动的进行图数据的切分和共享
-
data_dir: 图数据路径
-
zk_addr: Zookeeper地址,ip:port
-
zk_path: Zookeeper根节点,用于协调各个shard
-
shard_idx: shard编号
-
shard_num: shard总数
- 返回bool,表示图是否初始化成功
tf_euler.sample_node(
count, node_type, condition=''
)
依据condition,采样count个数的类型为node_type的节点
-
count: 0-D int32 tensor,表示采样数目
-
node_type: 0-D string tensor,表示采样节点类型
-
condition:采样条件(可选),类似于"price gt 3",price为属性索引的名字,gt表示大于,还可以填ge(大于等于),le(小于等于),lt(小于等于),eq(相等),ne(不等于)
- 返回 1-D tensor 表示采样得到的节点,shape=[count]
tf_euler.sample_edge(
count, edge_type=None
)
采样count个数的类型为edge_type的边
-
count:0-D int32 tensor,表示采样数目
-
edge_type:0-D string tensor,表示采样边类型,默认为None
- 返回 2-D tensor 表示采样得到的边,shape=[count,2]
tf_euler.sample_node_with_src(
src_nodes, count
)
采样count个数的类型和src_nodes一样的点
-
src_nodes:1-d int64 tensor,表示节点列表
-
coun: 每个节点采样count个与该节点同类型的节点
- 返回 2-D tensor,shape=[src_nodes.len(), count]
tf_euler.sample_neighbor(
nodes, edge_types, count, default_node=-1, condition=''
)
在condition下,为每个nodes采样count个数的边类型为edge_types的邻居节点
-
nodes:1-D int64 tensor,表示根节点id列表
-
edge_types:1-D string tensor,表示要采样的边类型
-
count: 0-D int32 tensor,表示每个根节点采样的邻居数目
-
default_node:节点不存在或不存在邻居情况下的默认填充值,默认为-1
-
condition: 采样条件(可选),同sample_node接口
返回 Python 3元组,分别为邻居、权重,与边类型
-
邻居:2-D int64 tf.Tensor,shape=[#nodes, count]
-
权重:2-D float tf.Tensor,shape=[#nodes, count]
-
边类型:2-D int32 tf.Tensor,shape=[#nodes, count]
tf_euler.get_full_neighbor(
nodes, edge_types, condition=''
)
在condition下,获取每个nodes的边类型为edge_types的所有邻居节点
-
nodes:1-D int64 tensor,表示根节点id列表
-
edge_types:1-D string tensor,表示要获取的边类型
-
condition:邻居节点过滤条件(可选),同sample_node接口
返回 Python 3元组,分别为邻居、权重,与边类型
-
邻居:2-D int64 tf.Tensor,shape=[#nodes, max_num_neighbors]
-
权重:2-D float tf.Tensor,shape=[#nodes, max_num_neighbors]
-
边类型:2-D int32 tf.Tensor,shape=[#nodes, max_num_neighbors]
tf_euler.get_sorted_full_neighbor(
nodes, edge_types, condition=''
)
在condition下,获取每个nodes的边类型为edge_types的所有邻居节点,并按照边权排序返回
-
nodes:1-D int64 tensor,表示根节点id列表
-
edge_types:1-D string tensor,表示要获取的边类型
-
condition:邻居节点过滤条件(可选),同sample_node接口
返回 Python 3元组,分别为邻居、权重,与边类型
-
邻居:2-D int64 tf.SparseTensor,shape=[#nodes, max_num_neighbors]
-
权重:2-D float tf.SparseTensor,shape=[#nodes, max_num_neighbors]
-
边类型:2-D int32 tf.SparseTensor,shape=[#nodes, max_num_neighbors]
tf_euler.get_top_k_neighbor(
nodes, edge_types, k, default_node=-1, condition=''
)
在condition下,获取每个nodes的边类型为edge_types的,边权为前k的k个邻居节点
-
nodes:1-D int64 tf.Tensor,顶点集合
-
edge_types:1-D int64 tf.Tensor,边类型集合(多值)
-
k:int
-
default_node:节点不存在或不存在邻居情况下的默认填充值,默认为-1
-
condition:邻居节点过滤条件(可选),同sample_node接口
返回 Python 3元组,分别为邻居、权重,与边类型
-
邻居:2-D int64 tf.Tensor [#nodes, k]
-
权重:2-D float tf.Tensor [#nodes, k]
-
边类型:2-D int32 tf.Tensor [#nodes, k]
tf_euler中特征为三种:稠密、稀疏,和二进制特征:
- 稠密特征对应于图中的Float32Feature,可以在模型中作为全连接或卷积层的输入;
- 稀疏特征对应于图中的UInt64Feature,可以在模型中作为tf.nn.embedding_lookop_sparse的输入;
- 二进制特征对应于图中的BinaryFeature,可以按照用户自定义的方式消费。
tf_euler对点和边都提供这三种特征的访问操作。
tf_euler.get_dense_feature(
nodes, feature_names, dimensions, thread_num=1
)
获取每个nodes的feature_names对应的dense特征
- nodes:1-D int64 tf.Tensor,顶点集合
- feature_names:Python列表,成员为string,稠密特征列表
- dimensions:Python列表,成员为int,稠密特征维度
- thread_num: 线程数,默认为1
- 返回 Python列表,列表中每个成员为 2-D float tf.Tensor [#nodes, dimension],列表长度为len(feature_names)
tf_euler.get_sparse_feature(
nodes, feature_names,default_values=None, thread_num=1
)
获取每个nodes的feature_names对应的sparse特征
- nodes:1-D int64 tf.Tensor,顶点集合
- feature_names:Python列表,成员为string,稀疏特征列表
- default_value:int,顶点不存在,或该特征为空时填充单值,默认为None
- thread_num: 线程数,默认为1
- 返回 Python列表,列表中每个成员为 2-D float tf.SparseTensor [#nodes, max_num_features],列表长度为len(feature_names)
tf_euler.get_binary_feature(
nodes, feature_names, thread_num=1
)
获取每个nodes的feature_names对应的binary特征
- nodes:1-D int64 tf.Tensor,顶点集合
- feature_names:Python列表,成员为string,二进制特征列表
- thread_num: 线程数,默认为1
Returns
- 返回 Python列表,列表中每个成员为 1-D string tf.Tensor [#nodes],列表长度为len(feature_names)
tf_euler.get_edge_dense_feature(
edges, feature_names, dimensions, thread_num=1
)
获取每个edges的feature_names对应的dense特征
- edges:2-D int64 tf.Tensor [#edges, 3],边集合
- feature_names:Python列表,成员为string,稠密特征列表
- dimensions:Python列表,成员为int,稠密特征维度
- thread_num: 线程数,默认为1
- 返回 Python列表,列表中每个成员为 2-D float tf.Tensor [#edges, dimension],列表长度为len(feature_names)
tf_euler.get_edge_sparse_feature(
edges, feature_names,default_values=None, thread_num=1
)
获取每个edges的feature_names对应的sparse特征
- edges:2-D int64 tf.Tensor [#edges, 3],边集合
- feature_names:Python列表,成员为string,稀疏特征列表
- default_value:int,顶点不存在,或该特征为空时填充单值
- thread_num: 线程数,默认为1
- 返回 Python列表,列表中每个成员为 2-D int64 tf.SparseTensor [#edges, max_num_features],列表长度为len(feature_names)
tf_euler.get_edge_binary_feature(
edges, feature_names, thread_num=1
)
获取每个edges的feature_names对应的binary特征
- edges:2-D int64 tf.Tensor [#edges, 3],边集合
- feature_names:Python列表,成员为int,二进制特征列表
- thread_num: 线程数,默认为1
- 返回 Python列表,列表中每个成员为 1-D string tf.Tensor [#edges],列表长度为len(feature_names)
tf_euler.sample_fanout(
nodes, edge_types, counts, default_node=-1
)
获取每个nodes的边类型为edge_types的多跳邻居节点
- nodes:1-D int64 tf.Tensor,顶点集合
- edge_types:Python列表,成员为 1-D int64 tf.Tensor,每步的边类型集合(多值)
- counts:Python列表,成员为 int,每步的采样个数
- default_node:顶点不存在或出边不足时填充值,默认-1
返回3元组,分别为邻居列表、权重列表,与边类型列表
- 邻居列表:[2-D int64 tf.Tensor [#nodes], [#nodes x count1], [#nodes x count1 x count2], ...]
- 权重列表: [2-D float tf.Tensor [#nodes x count1], [#nodes x count1 x count2], ...]
- 边类型列表:[2-D int32 tf.Tensor [#nodes x count1], [#nodes x count1 x count2], ...]
tf_euler.random_walk(
nodes, edge_types, p=1.0, q=1.0, default_node=-1
)
从nodes出发进行随机游走,游走规则参照node2vec。
- nodes:1-D int64 tf.Tensor,游走源点
- edge_types:Python列表,成员为string,每步的游走边类型(多值)
- p:float,回采参数,默认1
- q:float,外采参数,默认1
- default_node:int,源点不存在,或没有出边时填充值,默认-1
- 返回 2-D int64 tf.Tensor [#nodes, len(edge_types) + 1],游走结果
tf_euler.gen_pair(
paths,left_win_size,right_win_size
)
通过随机游走的path,生成节点对
- paths:2-D int64 tf.Tensor,游走结果
- left_win_size:int,左滑动窗口长度
- right_win_size: int,右滑动窗口长度
- 返回 3-D int64 tf.Tensor [#paths, #pairs, 2],所有路径的顶点正例对走结果