分解

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:
  • num_relations (int) – >0 关系的数量。

  • input_dim (int) – >0 输入维度。

  • output_dim (int | None) – >0 输出维度。如果未指定,默认为 input_dim。

方法总结

forward(x, source, target, edge_type[, ...])

从源到目标的特定关系消息传递。

forward_horizontally_stacked(x, adj)

水平堆叠邻接矩阵的前向传递。

forward_vertically_stacked(x, adj)

垂直堆叠邻接矩阵的前向传递。

iter_extra_repr()

遍历extra_repr的组件。

reset_parameters()

重置层的参数。

方法文档

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:

Tensor

abstract forward_horizontally_stacked(x: Tensor, adj: Tensor) Tensor[source]

水平堆叠邻接矩阵的前向传递。

Parameters:
  • x (Tensor) – 形状: (num_entities, input_dim) 输入的实体表示

  • adj (Tensor) – 形状: (num_entities, num_relations * num_entities), 稀疏 水平堆叠的邻接矩阵

Returns:

形状: (num_entities, output_dim) 更新后的实体表示。

Return type:

Tensor

abstract forward_vertically_stacked(x: Tensor, adj: Tensor) Tensor[source]

垂直堆叠邻接矩阵的前向传递。

Parameters:
  • x (Tensor) – 形状: (num_entities, input_dim) 输入的实体表示

  • adj (Tensor) – 形状: (num_entities * num_relations, num_entities), 稀疏 垂直堆叠的邻接矩阵

Returns:

形状: (num_entities, output_dim) 更新后的实体表示。

Return type:

Tensor

iter_extra_repr() Iterable[str][source]

遍历extra_repr的组件。

Return type:

Iterable[str]

reset_parameters()[源代码]

重置层的参数。