分解
- class Decomposition(num_relations: int, input_dim: int = 32, output_dim: int | None = None)[source]
基础类:
Module,ExtraReprMixin,ABC关系特定消息传递的基础模块。
分解模块的实现提供了一种通过学习每个关系的独立\(d^2\)矩阵来减少所需参数数量的方法。在R-GCN中,提出的两种变体被视为超参数,对于不同的数据集,不同的分解在性能上更为优越。
分解模块本身并不从因子计算完整矩阵,而是提供了有效的方法来计算分解矩阵与源节点潜在特征的乘积,以构建消息。这通常比构建完整矩阵更高效。
为了直观理解,你可以考虑一个简单的秩为1的低秩矩阵分解,其中\(W = w w^T\)对于一个\(d\)维向量w。然后,计算\(Wv\)为\((w w^T) v\)会得到一个大小为\(d \times d\)的中间结果,而你也可以计算\(w(w^Tv)\),其中中间结果只是一个标量。
实现使用了基于邻接张量堆叠的高效版本,来自[thanapalasingam2021]。 邻接张量被重塑为稀疏矩阵,以支持通过单个稀疏矩阵乘法进行消息传递,参见
pykeen.nn.utils.adjacency_tensor_to_stacked_matrix()。注意
该模块既不处理自循环,也不应用激活函数。
初始化层。
- Parameters:
方法总结
forward(x, source, target, edge_type[, ...])从源到目标的特定关系消息传递。
forward_horizontally_stacked(x, adj)水平堆叠邻接矩阵的前向传递。
forward_vertically_stacked(x, adj)垂直堆叠邻接矩阵的前向传递。
遍历extra_repr的组件。
重置层的参数。
方法文档
- forward(x: Tensor, source: Tensor, target: Tensor, edge_type: Tensor, edge_weights: Tensor | None = None, accumulator: Tensor | None = None) Tensor[source]
从源到目标的特定关系消息传递。
- Parameters:
x (Tensor) – 形状: (num_nodes, input_dim) 节点表示。
source (Tensor) – 形状: (num_edges,) 源索引。
target (Tensor) – 形状: (num_edges,) 目标索引。
edge_type (Tensor) – 形状: (num_edges,) 边的类型。
edge_weights (Tensor | None) – 形状: (num_edges,) 预计算的边权重。
accumulator (Tensor | None) – 形状: (num_nodes, output_dim) 一个预先分配的输出累加器。如果执行了多个不同的消息传递步骤并通过求和进行累加,则可以使用。如果未提供,则创建一个填充零的累加器。
- Returns:
形状: (num_nodes, output_dim) 丰富的节点嵌入。
- Return type: