模型

class Model(*, triples_factory: KGInfo, loss: str | Loss | type[Loss] | None = None, loss_kwargs: Mapping[str, Any] | None = None, predict_with_sigmoid: bool = False, random_seed: int | None = None)[源代码]

基础类:Module, ABC

KGE模型的基础模块。

Model 的子类可以自行决定如何存储实体和关系的表示,如何查找它们,以及如何对它们进行评分。OModel 提供了一个常用的接口,用于以 pykeen.nn.Embedding 的形式存储实体和关系表示的模型。

初始化模块。

Parameters:
  • triples_factory (KGInfo) – 三元组工厂便于访问数据集。

  • loss (Loss) – 要使用的损失函数。如果为None,则使用模型子类特定的默认损失函数。

  • loss_kwargs (Mapping[str, Any] | None) – 在实例化时传递给损失实例的基于关键字的参数

  • predict_with_sigmoid (bool) – 是否在预测分数时对分数应用sigmoid函数。在预测时应用sigmoid可能会导致某些分数非常高或非常低的三元组得分完全相同。如果在训练时没有应用sigmoid(或使用BCEWithLogitsLoss),则分数未经过校准,无法在使用sigmoid时表现良好。

  • random_seed (int | None) – 用于初始化模型权重的随机种子。应该在追求可重复性时设置。

属性摘要

device

返回模型的设备。

loss_default_kwargs

默认损失函数类的默认参数

num_parameter_bytes

计算模型所有参数使用的字节数。

num_parameters

计算模型的参数数量。

num_real_relations

返回关系的实际数量(不包括逆关系)。

方法总结

collect_regularization_term()

获取损失函数的正则化项。

get_grad_params()

获取需要梯度的参数。

load_state(path)

加载模型的状态。

post_forward_pass()

在计算前向损失后运行。

post_parameter_update()

必须在每次参数更新后调用。

predict(hrt_batch, target[, full_batch, ids])

预测给定目标的分数。

predict_h(rt_batch, **kwargs)

使用左侧(头部)预测进行前向传递,以获取所有可能头部的分数。

predict_hrt(hrt_batch, *[, mode])

计算三元组的分数。

predict_r(ht_batch, **kwargs)

使用中间(关系)预测进行前向传递,以获取所有可能关系的分数。

predict_t(hr_batch, **kwargs)

使用右侧(尾部)预测进行前向传递,以获取所有可能尾部的分数。

reset_parameters_()

重置模型的所有参数并强制执行模型约束。

save_state(path)

保存模型的状态。

score_h(rt_batch, *[, slice_size, mode, heads])

使用左侧(头部)预测进行前向传递。

score_h_inverse(rt_batch, *[, heads])

使用逆关系的尾部预测\((t,r_{inv},*)\)对一批(r,t)对的头部进行评分。

score_hrt(hrt_batch, *[, mode])

前向传播。

score_hrt_inverse(hrt_batch, *[, mode])

基于逆三元组对三元组进行评分,即根据\(f(t,r_{inv},h)\)计算\(f(h,r,t)\)

score_r(ht_batch, *[, slice_size, mode, ...])

使用中间(关系)预测进行前向传递。

score_t(hr_batch, *[, slice_size, mode, tails])

使用右侧(尾部)预测进行前向传递。

score_t_inverse(hr_batch, *[, tails])

使用逆关系的头部预测\((*,r_{inv},h)\)对一批(h,r)对的尾部进行评分。

属性文档

device

返回模型的设备。

loss_default_kwargs: ClassVar[Mapping[str, Any] | None] = {'margin': 1.0, 'reduction': 'mean'}

默认损失函数类的默认参数

num_parameter_bytes

计算模型所有参数使用的字节数。

num_parameters

计算模型的参数数量。

num_real_relations

返回关系的实际数量(不包括逆关系)。

方法文档

abstract collect_regularization_term() Tensor[来源]

获取损失函数的正则化项。

Return type:

Tensor

get_grad_params() Iterable[Parameter][source]

获取需要梯度的参数。

Return type:

Iterable[Parameter]

load_state(path: str | PathLike) None[source]

加载模型的状态。

Parameters:

path (str | PathLike) – 从中加载状态的文件路径。

Return type:

post_forward_pass()[source]

在计算前向损失后运行。

post_parameter_update() None[source]

必须在每次参数更新后调用。

Return type:

predict(hrt_batch: Tensor, target: Literal['head', 'relation', 'tail'], full_batch: bool = True, ids: Tensor | None = None, **kwargs) Tensor[source]

预测给定目标的分数。

Parameters:
  • hrt_batch (Tensor) – 形状: (batch_size, 3) 或 (batch_size, 2) 完整的批次,或其相关部分

  • 目标 (Literal['head', 'relation', 'tail']) – 要预测的目标

  • full_batch (bool) – 是否 hrt_batch 是完整的批次,或者只是目标预测方法的“输入”部分

  • ids (Tensor | None) – 将预测限制为仅这些id

  • kwargs – 传递给特定目标预测方法的额外基于关键字的参数。

Raises:

ValueError – 如果目标无效

Returns:

形状: (batch_size, num) 分数

Return type:

Tensor

predict_h(rt_batch: Tensor, **kwargs) Tensor[source]

使用左侧(头部)预测进行前向传递,以获取所有可能头部的分数。

此方法为每个(关系,尾部)对计算所有可能头部的分数。

注意

如果模型已经用逆关系进行了训练,预测头实体的任务就变成了预测逆三元组的尾实体的任务,即\(f(*,r,t)\)通过\(f(t,r_{inv},*)\)来预测。

此外,模型被设置为评估模式。

Parameters:
  • rt_batch (Tensor) – 形状: (batch_size, 2), 数据类型: long (关系, 尾部) 对的索引。

  • kwargs – 传递给 Model.score_h() 的额外基于关键字的参数

Returns:

形状: (batch_size, num_heads), 数据类型: float 对于每个r-t对,所有可能头部的分数。

Return type:

Tensor

predict_hrt(hrt_batch: Tensor, *, mode: Literal['training', 'validation', 'testing'] | None = None) Tensor[source]

计算三元组的分数。

该方法接受每个三元组的头、关系和尾,并计算相应的分数。

此外,模型被设置为评估模式。

Parameters:
  • hrt_batch (Tensor) – 形状: (三元组数量, 3), 数据类型: long (head, relation, tail) 三元组的索引。

  • mode (Literal['training', 'validation', 'testing'] | None) – 传递模式。在传导模式下为None,在归纳模式下为“training” / “validation” / “testing”。

Returns:

形状:(三元组数量,1),数据类型:浮点型 每个三元组的得分。

Return type:

Tensor

predict_r(ht_batch: Tensor, **kwargs) Tensor[源代码]

使用中间(关系)预测进行前向传递,以获取所有可能关系的分数。

此方法为每个(头,尾)对计算所有可能关系的分数。

此外,模型被设置为评估模式。

Parameters:
  • ht_batch (Tensor) – 形状: (batch_size, 2), 数据类型: long (head, tail) 对的索引。

  • kwargs – 传递给 Model.score_r() 的额外基于关键字的参数

Returns:

形状: (batch_size, num_relations), 数据类型: float 对于每个h-t对,所有可能关系的分数。

Return type:

Tensor

predict_t(hr_batch: Tensor, **kwargs) Tensor[source]

使用右侧(尾部)预测进行前向传递,以获取所有可能尾部的分数。

此方法为每个(头,关系)对计算所有可能尾部的分数。

此外,模型被设置为评估模式。

Parameters:
  • hr_batch (Tensor) – 形状: (batch_size, 2), 数据类型: long (head, relation) 对的索引。

  • kwargs – 传递给 Model.score_t() 的额外基于关键字的参数

Returns:

形状: (batch_size, num_tails), 数据类型: float 对于每个h-r对,所有可能尾部的分数。

Return type:

Tensor

注意

我们只期望右侧预测,即 \((h,r,*)\) 在模型使用逆关系训练时改变其默认行为(主要是因为LCWA训练方法的行为)。这就是为什么 predict_h() 的行为会根据训练中是否使用逆三元组而有所不同,以及为什么此函数的行为无论是否使用逆三元组都保持不变。

reset_parameters_()[source]

重置模型的所有参数并强制执行模型约束。

save_state(path: str | PathLike) None[source]

保存模型的状态。

Parameters:

path (str | PathLike) – 存储状态的文件路径。

Return type:

abstract score_h(rt_batch: Tensor, *, slice_size: int | None = None, mode: Literal['training', 'validation', 'testing'] | None = None, heads: Tensor | None = None) Tensor[source]

使用左侧(头部)预测进行前向传递。

此方法为每个(关系,尾部)对计算所有可能头部的分数。

Parameters:
  • rt_batch (Tensor) – 形状: (batch_size, 2), 数据类型: long (关系, 尾部) 对的索引。

  • slice_size (int | None) – >0 使用切片时评分函数的除数。

  • mode (Literal['training', 'validation', 'testing'] | None) – 传递模式,在传导设置中为None,在归纳设置中为“training”、“validation”或“testing”之一。

  • heads (Tensor | None) – 形状: (num_heads,) | (batch_size, num_heads) 要评分的目标头实体索引。如果为None,则对所有实体进行评分(从给定模式中)。

Returns:

形状: (batch_size, num_heads), 数据类型: float 对于每个r-t对,所有可能头部的分数。

Return type:

Tensor

score_h_inverse(rt_batch: Tensor, *, heads: Tensor | None = None, **kwargs)[source]

使用逆关系的尾部预测\((t,r_{inv},*)\)对一批(r,t)对的头部进行评分。

Parameters:
abstract score_hrt(hrt_batch: Tensor, *, mode: Literal['training', 'validation', 'testing'] | None = None) Tensor[源代码]

前向传播。

该方法接受每个三元组的头、关系和尾,并计算相应的分数。

Parameters:
  • hrt_batch (Tensor) – 形状: (batch_size, 3), 数据类型: long (head, relation, tail) 三元组的索引。

  • mode (Literal['training', 'validation', 'testing'] | None) – 传递模式,在传导设置中为None,在归纳设置中为“training”、“validation”或“testing”之一。

Returns:

形状: (batch_size, 1), 数据类型: float 每个三元组的分数。

Return type:

Tensor

score_hrt_inverse(hrt_batch: Tensor, *, mode: Literal['training', 'validation', 'testing'] | None = None) Tensor[source]

基于逆三元组对三元组进行评分,即根据\(f(t,r_{inv},h)\)计算\(f(h,r,t)\)

在使用逆关系进行训练时,模型为三元组 \((h,r,t) \in K\) 生成两个(不同的)分数。 正向分数是从 \(f(h,r,t)\) 计算的,而逆分数是从 \(f(t,r_{inv},h)\) 计算的。 此功能使用户能够检查通过使用相应的逆三元组获得的分数。

Parameters:
  • hrt_batch (Tensor) – 形状: (b, 3) 三元组的批次

  • mode (Literal['training', 'validation', 'testing'] | None) – 归纳模式,或 None 表示传导模式

Returns:

通过逆关系获得的三重分数

Return type:

Tensor

abstract score_r(ht_batch: Tensor, *, slice_size: int | None = None, mode: Literal['training', 'validation', 'testing'] | None = None, relations: Tensor | None = None) Tensor[source]

使用中间(关系)预测进行前向传递。

此方法为每个(头,尾)对计算所有可能关系的分数。

Parameters:
  • ht_batch (Tensor) – 形状: (batch_size, 2), 数据类型: long (head, tail) 对的索引。

  • slice_size (int | None) – >0 使用切片时评分函数的除数。

  • mode (Literal['training', 'validation', 'testing'] | None) – 传递模式,在传导设置中为None,在归纳设置中为“training”、“validation”或“testing”之一。

  • relations (Tensor | None) – 形状: (num_relations,) | (batch_size, num_relations) 要评分的relation索引。如果为None,则对所有relations进行评分(从给定模式中)。

Returns:

形状: (batch_size, num_real_relations), 数据类型: float 对于每个h-t对,所有可能关系的分数。

Return type:

Tensor

abstract score_t(hr_batch: Tensor, *, slice_size: int | None = None, mode: Literal['training', 'validation', 'testing'] | None = None, tails: Tensor | None = None) Tensor[source]

使用右侧(尾部)预测进行前向传递。

此方法为每个(头,关系)对计算所有可能尾部的分数。

Parameters:
  • hr_batch (Tensor) – 形状: (batch_size, 2), 数据类型: long (head, relation) 对的索引。

  • slice_size (int | None) – >0 使用切片时评分函数的除数。

  • mode (Literal['training', 'validation', 'testing'] | None) – 传递模式,在传导设置中为None,在归纳设置中为“training”、“validation”或“testing”之一。

  • tails (Tensor | None) – 形状: (num_tails,) | (batch_size, num_tails) 要评分的尾部实体索引。如果为None,则对所有实体进行评分(从给定模式中)。

Returns:

形状: (batch_size, num_tails), 数据类型: float 对于每个h-r对,所有可能尾部的分数。

Return type:

Tensor

score_t_inverse(hr_batch: Tensor, *, tails: Tensor | None = None, **kwargs)[source]

使用逆关系的头部预测\((*,r_{inv},h)\)对一批(h,r)对的尾部进行评分。

Parameters: