模型
- 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)[源代码]
-
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) – 用于初始化模型权重的随机种子。应该在追求可重复性时设置。
属性摘要
返回模型的设备。
默认损失函数类的默认参数
计算模型所有参数使用的字节数。
计算模型的参数数量。
返回关系的实际数量(不包括逆关系)。
方法总结
获取损失函数的正则化项。
获取需要梯度的参数。
load_state(path)加载模型的状态。
在计算前向损失后运行。
必须在每次参数更新后调用。
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)使用右侧(尾部)预测进行前向传递,以获取所有可能尾部的分数。
重置模型的所有参数并强制执行模型约束。
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
返回关系的实际数量(不包括逆关系)。
方法文档
- predict(hrt_batch: Tensor, target: Literal['head', 'relation', 'tail'], full_batch: bool = True, ids: Tensor | None = None, **kwargs) Tensor[source]
预测给定目标的分数。
- Parameters:
- Raises:
ValueError – 如果目标无效
- Returns:
形状: (batch_size, num) 分数
- Return type:
- 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:
- predict_hrt(hrt_batch: Tensor, *, mode: Literal['training', 'validation', 'testing'] | None = None) Tensor[source]
计算三元组的分数。
该方法接受每个三元组的头、关系和尾,并计算相应的分数。
此外,模型被设置为评估模式。
- 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:
- 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:
注意
我们只期望右侧预测,即 \((h,r,*)\) 在模型使用逆关系训练时改变其默认行为(主要是因为LCWA训练方法的行为)。这就是为什么
predict_h()的行为会根据训练中是否使用逆三元组而有所不同,以及为什么此函数的行为无论是否使用逆三元组都保持不变。
- 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:
- score_h_inverse(rt_batch: Tensor, *, heads: Tensor | None = None, **kwargs)[source]
使用逆关系的尾部预测\((t,r_{inv},*)\)对一批(r,t)对的头部进行评分。
- abstract score_hrt(hrt_batch: Tensor, *, mode: Literal['training', 'validation', 'testing'] | None = None) 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)\) 计算的。 此功能使用户能够检查通过使用相应的逆三元组获得的分数。
- 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:
- 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: