class BlockDecomposition(input_dim, num_relations, num_blocks=None, output_dim=None)[source]

Bases: pykeen.nn.message_passing.Decomposition

Represent relation-specific weight matrices via block-diagonal matrices.

The block-diagonal decomposition restricts each transformation matrix to a block-diagonal-matrix, i.e.,

\[\mathbf{W}_r^l = diag(\mathbf{B}_{r,1}^l, \ldots, \mathbf{B}_{r,B}^l)\]

where \(\mathbf{B}_{r,i} \in \mathbb{R}^{(d^{(l) }/ B) \times (d^{(l)} / B)}\).

Initialize the layer.

  • input_dim (int) – >0 The input dimension.

  • num_relations (int) – >0 The number of relations.

  • num_blocks (Optional[int]) – >0 The number of blocks to use. Has to be a divisor of input_dim.

  • output_dim (Optional[int]) – >0 The output dimension. If None is given, defaults to input_dim.

Methods Summary

forward(x, node_keep_mask, source, target, ...)

Relation-specific message passing from source to target.


Reset the parameters of this layer.

Methods Documentation

forward(x, node_keep_mask, source, target, edge_type, edge_weights=None)[source]

Relation-specific message passing from source to target.

  • x (FloatTensor) – shape: (num_nodes, input_dim) The node representations.

  • node_keep_mask (Optional[BoolTensor]) – shape: (num_nodes,) The node-keep mask for self-loop dropout.

  • source (LongTensor) – shape: (num_edges,) The source indices.

  • target (LongTensor) – shape: (num_edges,) The target indices.

  • edge_type (LongTensor) – shape: (num_edges,) The edge types.

  • edge_weights (Optional[FloatTensor]) – shape: (num_edges,) Precomputed edge weights.

Return type



shape: (num_nodes, output_dim) The enriched node embeddings.


Reset the parameters of this layer.