嵌入

class Embedding(max_id: int | None = None, num_embeddings: int | None = None, embedding_dim: int | None = None, shape: None | int | Sequence[int] = None, initializer: str | Callable[[Tensor], Tensor] | None = None, initializer_kwargs: Mapping[str, Any] | None = None, constrainer: str | Callable[[Tensor], Tensor] | None = None, constrainer_kwargs: Mapping[str, Any] | None = None, trainable: bool = True, dtype: dtype | None = None, **kwargs)[source]

基础类:Representation

可训练的嵌入。

该类提供了与torch.nn.Embedding相同的接口,并且可以在PyKEEN中作为一个功能更全面的直接替代品使用。

它通过添加额外的选项来扩展它,用于归一化、约束或应用dropout。

当选择了一个normalizer时,它会在每次前向传播中应用。它可以用来确保嵌入向量是单位长度。一个constrainer可以类似地使用,但它是在每次参数更新后应用的(使用post_parameter_update钩子),即在自动梯度计算之外。

可选的dropout也可以用作正则化技术。此外,它能够通过诸如Monte-Carlo dropout等技术获得不确定性估计。以下简单示例展示了如何从(未训练的)模型中为单个三元组获得不同的分数。这些分数可以被视为分数分布中的样本。

>>> from pykeen.datasets import Nations
>>> dataset = Nations()
>>> from pykeen.models import ERModel
>>> model = ERModel(
...     triples_factory=dataset.training,
...     interaction='distmult',
...     entity_representations_kwargs=dict(embedding_dim=3, dropout=0.1),
...     relation_representations_kwargs=dict(embedding_dim=3, dropout=0.1),
... )
>>> import torch
>>> batch = torch.as_tensor(data=[[0, 1, 0]]).repeat(10, 1)
>>> scores = model.score_hrt(batch)

实例化一个具有扩展功能的嵌入。

注意

normalizer(参见 Representation)和 constrainer 的区别在于,normalizer 应用于检索到的表示,并且是前向调用的一部分。因此,它是计算图的一部分,可能会对权重接收到的梯度产生影响。而 constrainer 则是在参数更新之后(使用 post_parameter_update() 钩子)应用的,因此 是计算图的一部分。

Parameters:
  • max_id (int) – >0 嵌入的数量。

  • num_embeddings (int | None) – >0 嵌入的数量。

  • embedding_dim (int | None) – >0 嵌入维度。

  • shape (tuple[int, ...]) – 单个表示的形状。

  • initializer (Hint[Initializer]) –

    一个可选的初始化器,它接受一个未初始化的 (num_embeddings, embedding_dim) 张量作为输入,并返回一个相同形状和数据类型的初始化张量(可能是相同的,即初始化可能是原地进行的)。可以作为函数传递,或者作为字符串对应于 pykeen.nn.representation.initializers 中的键,例如:

    • "xavier_uniform"

    • "xavier_uniform_norm"

    • "xavier_normal"

    • "xavier_normal_norm"

    • "normal"

    • "normal_norm"

    • "uniform"

    • "uniform_norm"

    • "init_phases"

  • initializer_kwargs (Mapping[str, Any] | None) – 传递给初始化器的额外关键字参数

  • constrainer (Callable[[Tensor], Tensor] | None) –

    一个函数,在每次参数更新后应用于权重,而不跟踪梯度。 它可以用于在基于梯度的训练之外强制执行模型约束。该函数不需要是原地操作,但权重张量会被原地修改。可以作为函数传递,或者作为字符串传递,对应于pykeen.nn.representation.constrainer_resolver中的键,例如:

    • 'normalize'

    • 'complex_normalize'

    • 'clamp'

    • 'clamp_norm'

  • constrainer_kwargs (Mapping[str, Any] | None) – 传递给约束器的额外关键字参数

  • trainable (bool) – 是否应将包装的嵌入标记为需要梯度。默认为 True。

  • dtype (torch.dtype | None) – 数据类型(否则使用 torch.get_default_dtype() 来查找)

  • kwargs – 传递给 Representation.__init__ 的额外基于关键字的参数

方法总结

post_parameter_update()

应用不应包含在梯度中的约束。

reset_parameters()

重置模块的参数。

方法文档

post_parameter_update()[source]

应用不应包含在梯度中的约束。

reset_parameters() None[来源]

重置模块的参数。

Return type: