Skip to content

Euler 2.0 Euler OP接口

origin edited this page Jun 29, 2020 · 2 revisions

tf_euler定义了一系列OP来进行TensorFlow和Euler之间的桥接,用户可以通过在TensorFlow计算图中直接引入这些OP来进行图查询。所有的OP均可以在tf_euler顶层模块访问。

初始化图

tf_euler.initialize_embedded_graph(
    data_dir, sampler_type='all', data_type='node'
)

加载一份完整的图并独立使用

Args:

  • data_dir: 图数据路径

  • sampler_typ: 所需要的采样器,默认是all,如果只需要采样节点就设置为node,只需要采样边则设置为edge

  • data_type: 所需要加载的数据,默认为node,还可以设置为all

Returns

  • 返回bool,表示图是否初始化成功

tf_euler.initialize_shared_graph(
    data_dir, zk_addr, zk_path, shard_num
)

在不同的worker之间自动的进行图数据的切分和共享

Args:

  • data_dir: 图数据路径

  • zk_addr: Zookeeper地址,ip:port

  • zk_path: Zookeeper根节点,用于协调各个shard

  • shard_idx: shard编号

  • shard_num: shard总数

Returns

  • 返回bool,表示图是否初始化成功

获取节点、边

tf_euler.sample_node(
    count, node_type, condition=''
)

依据condition,采样count个数的类型为node_type的节点

Args:

  • count: 0-D int32 tensor,表示采样数目

  • node_type: 0-D string tensor,表示采样节点类型

  • condition:采样条件(可选),类似于"price gt 3",price为属性索引的名字,gt表示大于,还可以填ge(大于等于),le(小于等于),lt(小于等于),eq(相等),ne(不等于)

Returns

  • 返回 1-D tensor 表示采样得到的节点,shape=[count]

tf_euler.sample_edge(
    count, edge_type=None
)

采样count个数的类型为edge_type的边

Args:

  • count:0-D int32 tensor,表示采样数目

  • edge_type:0-D string tensor,表示采样边类型,默认为None

Returns

  • 返回 2-D tensor 表示采样得到的边,shape=[count,2]

tf_euler.sample_node_with_src(
    src_nodes, count
)

采样count个数的类型和src_nodes一样的点

Args:

  • src_nodes:1-d int64 tensor,表示节点列表

  • coun: 每个节点采样count个与该节点同类型的节点

Returns

  • 返回 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的邻居节点

Args:

  • nodes:1-D int64 tensor,表示根节点id列表

  • edge_types:1-D string tensor,表示要采样的边类型

  • count: 0-D int32 tensor,表示每个根节点采样的邻居数目

  • default_node:节点不存在或不存在邻居情况下的默认填充值,默认为-1

  • condition: 采样条件(可选),同sample_node接口

Returns

返回 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的所有邻居节点

Args:

  • nodes:1-D int64 tensor,表示根节点id列表

  • edge_types:1-D string tensor,表示要获取的边类型

  • condition:邻居节点过滤条件(可选),同sample_node接口

Returns

返回 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的所有邻居节点,并按照边权排序返回

Args:

  • nodes:1-D int64 tensor,表示根节点id列表

  • edge_types:1-D string tensor,表示要获取的边类型

  • condition:邻居节点过滤条件(可选),同sample_node接口

Returns

返回 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个邻居节点

Args:

  • nodes:1-D int64 tf.Tensor,顶点集合

  • edge_types:1-D int64 tf.Tensor,边类型集合(多值)

  • k:int

  • default_node:节点不存在或不存在邻居情况下的默认填充值,默认为-1

  • condition:邻居节点过滤条件(可选),同sample_node接口

Returns

返回 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特征

Args:

  • nodes:1-D int64 tf.Tensor,顶点集合
  • feature_names:Python列表,成员为string,稠密特征列表
  • dimensions:Python列表,成员为int,稠密特征维度
  • thread_num: 线程数,默认为1

Returns

  • 返回 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特征

Args:

  • nodes:1-D int64 tf.Tensor,顶点集合
  • feature_names:Python列表,成员为string,稀疏特征列表
  • default_value:int,顶点不存在,或该特征为空时填充单值,默认为None
  • thread_num: 线程数,默认为1

Returns

  • 返回 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特征

Args:

  • 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特征

Args:

  • edges:2-D int64 tf.Tensor [#edges, 3],边集合
  • feature_names:Python列表,成员为string,稠密特征列表
  • dimensions:Python列表,成员为int,稠密特征维度
  • thread_num: 线程数,默认为1

Returns

  • 返回 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特征

Args:

  • edges:2-D int64 tf.Tensor [#edges, 3],边集合
  • feature_names:Python列表,成员为string,稀疏特征列表
  • default_value:int,顶点不存在,或该特征为空时填充单值
  • thread_num: 线程数,默认为1

Returns

  • 返回 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特征

Args:

  • edges:2-D int64 tf.Tensor [#edges, 3],边集合
  • feature_names:Python列表,成员为int,二进制特征列表
  • thread_num: 线程数,默认为1

Returns

  • 返回 Python列表,列表中每个成员为 1-D string tf.Tensor [#edges],列表长度为len(feature_names)

高阶OP接口

tf_euler.sample_fanout(
    nodes, edge_types, counts, default_node=-1
)

获取每个nodes的边类型为edge_types的多跳邻居节点

Args:

  • nodes:1-D int64 tf.Tensor,顶点集合
  • edge_types:Python列表,成员为 1-D int64 tf.Tensor,每步的边类型集合(多值)
  • counts:Python列表,成员为 int,每步的采样个数
  • default_node:顶点不存在或出边不足时填充值,默认-1

Returns

返回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。

Args:

  • nodes:1-D int64 tf.Tensor,游走源点
  • edge_types:Python列表,成员为string,每步的游走边类型(多值)
  • p:float,回采参数,默认1
  • q:float,外采参数,默认1
  • default_node:int,源点不存在,或没有出边时填充值,默认-1

Returns

  • 返回 2-D int64 tf.Tensor [#nodes, len(edge_types) + 1],游走结果

tf_euler.gen_pair(
    paths,left_win_size,right_win_size
)

通过随机游走的path,生成节点对

Args:

  • paths:2-D int64 tf.Tensor,游走结果
  • left_win_size:int,左滑动窗口长度
  • right_win_size: int,右滑动窗口长度

Returns

  • 返回 3-D int64 tf.Tensor [#paths, #pairs, 2],所有路径的顶点正例对走结果
Clone this wiki locally