UniformNegativeSamplerΒΆ

class dgl.graphbolt.UniformNegativeSampler(datapipe, graph, negative_ratio)[source]ΒΆ

Bases: torch.utils.data.datapipes.datapipe.IterDataPipe[torch.utils.data.datapipes.iter.callable.T_co]

Sample negative destination nodes for each source node based on a uniform distribution.

Functional name: sample_uniform_negative.

It’s important to note that the term β€˜negative’ refers to false negatives, indicating that the sampled pairs are not ensured to be absent in the graph. For each edge (u, v), it is supposed to generate negative_ratio pairs of negative edges (u, v'), where v' is chosen uniformly from all the nodes in the graph.

Parameters
  • datapipe (DataPipe) – The datapipe.

  • graph (FusedCSCSamplingGraph) – The graph on which to perform negative sampling.

  • negative_ratio (int) – The proportion of negative samples to positive samples.

Examples

>>> from dgl import graphbolt as gb
>>> indptr = torch.LongTensor([0, 1, 2, 3, 4])
>>> indices = torch.LongTensor([1, 2, 3, 0])
>>> graph = gb.fused_csc_sampling_graph(indptr, indices)
>>> node_pairs = torch.tensor([[0, 1], [1, 2], [2, 3], [3, 0]])
>>> item_set = gb.ItemSet(node_pairs, names="node_pairs")
>>> item_sampler = gb.ItemSampler(
...     item_set, batch_size=4,)
>>> neg_sampler = gb.UniformNegativeSampler(
...     item_sampler, graph, 2)
>>> for minibatch in neg_sampler:
...       print(minibatch.negative_srcs)
...       print(minibatch.negative_dsts)
None
tensor([[2, 1],
    [2, 1],
    [3, 2],
    [1, 3]])