dgl.sampling.global_uniform_negative_sampling

dgl.sampling.global_uniform_negative_sampling(g, num_samples, exclude_self_loops=True, replace=False, etype=None, redundancy=None)[source]

执行负采样,生成源-目标对,使得具有给定类型的边不存在。

具体来说,此函数接收一个边类型和多个样本。它返回两个张量 srcdst,前者在 [0, num_src) 范围内,后者在 [0, num_dst) 范围内,其中 num_srcnum_dst 分别表示源节点类型和目标节点类型的节点数量。它保证在源节点类型的 src 和目标节点类型的 dst 对应的对之间不会存在边。

注意

这个负采样器会尝试生成尽可能多的负样本,但有时可能会返回少于num_samples的负样本。这种情况更可能发生在图非常小或非常密集,以至于没有很多唯一的负样本存在时。

Parameters:
  • g (DGLGraph) – The graph.

  • num_samples (int) – 要生成的负样本数量。

  • exclude_self_loops (bool, optional) –

    是否从负样本中排除自循环。仅影响源节点类型和目标节点类型相同的边类型。

    默认值:True。

  • replace (bool, optional) – Whether to sample with replacement. Setting it to True will make things faster. (Default: False)

  • etype (strtuplestr, 可选) – 边的类型。如果图只有一种边类型,则可以省略。

  • 冗余 (float, 可选) –

    表示在拒绝采样过程中,实际生成多少更多的负样本,以找到唯一的配对。

    增加它将增加获得num_samples负样本的可能性,但也会花费更多的时间和内存。

    (默认值:由图的密度自动确定)

Returns:

源和目标对。

Return type:

tuple[Tensor, Tensor]

示例

>>> g = dgl.graph(([0, 1, 2], [1, 2, 3]))
>>> dgl.sampling.global_uniform_negative_sampling(g, 3)
(tensor([0, 1, 3]), tensor([2, 0, 2]))