时序层邻居采样器
- class dgl.graphbolt.TemporalLayerNeighborSampler(datapipe, graph, fanouts, replace=False, prob_name=None, node_timestamp_attr_name=None, edge_timestamp_attr_name=None)[source]
基类:
TemporalNeighborSamplerImpl
从图中进行时序邻居边采样并返回采样的子图。
函数名:
temporal_sample_layer_neighbor
。该采样器通过劳动采样(labor sampling)为多层 GNN 构建节点表示的计算依赖关系,源自 NeurIPS 2023 论文 Layer-Neighbor Sampling – Defusing Neighborhood Explosion in GNNs。
层邻居采样器负责从给定数据中采样子图。它返回一个诱导子图以及压缩信息。在节点分类任务中,邻居采样器直接使用提供的节点作为种子节点。然而,在涉及链接预测的场景中,该过程需要另一个预处理操作。即,从给定的节点对中收集唯一节点,包括正节点对和负节点对,并将这些节点用作后续步骤的种子节点。当图是异构图时,即使采样后为空,minibatch 中的采样子图也将包含每种边类型。
实现了论文附录 A.3 中描述的方法。与 dgl.dataloading.LaborSampler 相似,但它使用 sequential poisson sampling 代替 poisson sampling,以保持每个顶点的采样边数像 NeighborSampler 一样确定。因此,它可以直接替换 NeighborSampler。然而,与 NeighborSampler 不同的是,在多层 GNN 场景中,它采样更少的顶点和边,而不会损害训练迭代的收敛速度。
- 参数:
datapipe (DataPipe) – 数据管道(datapipe)。
graph (FusedCSCSamplingGraph) – 执行子图采样的图。
fanouts (list[torch.Tensor] or list[int]) – 为每个节点采样的边数,可以考虑或不考虑边类型。此参数的长度隐含地表示正在进行的采样层。注意:fanout 的顺序是从最外层到最内层。例如,fanout '[15, 10, 5]' 意味着最外层为 15,中间层为 10,最内层为 5。
replace (bool) – 布尔值,指示采样是否带有替换。如果为 True,一个值可以被选择多次。否则,每个值只能被选择一次。
prob_name (str, optional) – 用作每个节点采样权重的边属性名称。此属性张量应包含对应于节点每条相邻边的(未归一化)概率。它必须是 1D 浮点或布尔张量,元素数量等于总边数。
node_timestamp_attr_name (str, optional) – 用作节点时间戳的节点属性名称。它必须是 1D 整型张量,元素数量等于总节点数。
edge_timestamp_attr_name (str, optional) – 用作边时间戳的边属性名称。它必须是 1D 整型张量,元素数量等于总边数。
示例
TODO(zhenkun): 在传递时间戳的 API 最终确定后添加示例。