知识图谱嵌入模型

在PyKEEN中,知识图谱嵌入模型的基础类是pykeen.models.ERModel

它将实体和关系表示与交互函数结合起来。 在非常高的层次上,三元组分数是通过首先提取与头实体、尾实体和关系(作为整数索引给出)相对应的表示,然后使用交互函数从中计算出一个标量分数来获得的。

本教程对这些组件进行了高层次的概述,并解释了如何扩展和修改它们。

表示

一个pykeen.nn.representation.Representation模块提供了一种方法来获取给定整数索引的表示,例如向量。这些索引可能对应于实体或关系索引。通过向参数提供适当的输入来选择表示。

  • entity_representations / entity_representations_kwargs 用于实体表示,或

  • relation_representations / relation_representations_kwargs 用于关系表示。

这些输入随后用于通过pykeen.nn.representation_resolver.make_many()实例化表示。请注意,模型类pykeen.models.ERModel负责将max_id参数填充到…_kwargs中。默认情况下,使用单个pykeen.nn.Embedding来表示实体和关系,这在许多出版物中都有所体现。

以下示例适用于实体表示,但同样可以用于关系表示。

  • 一个单一的pykeen.nn.Embedding,维度为64,适用于例如pykeen.nn.TransEInteractionpykeen.nn.DistMultInteraction等交互。

    model = ERModel(
        # the default:
        # entity_representations=None,
        # equivalent to
        # entity_representations=[None],
        # equivalent to
        # entity_representations=[pykeen.nn.Embedding],
        entity_representations_kwargs=dict(shape=64),
        ...,
    )
    
  • 两个具有相同维度64的pykeen.nn.Embedding,适用于例如pykeen.nn.BoxEInteraction等交互

    model = ERModel(
        entity_representations=[None, None],
        # note: ClassResolver.make_many supports "broad-casting" kwargs
        entity_representations_kwargs=dict(shape=64),
        # equivalent:
        # entity_representations_kwargs=[dict(shape=64), dict(shape=64)],
        ...,
    )
    

注意

如果您不确定选择实体表示的方式,请查看pykeen.nn.Representation的子类。

注意

在内部,使用了class_resolver库来支持各种替代参数化,例如,表示类的字符串名称、class对象或pykeen.nn.Representation类的实例。您还可以将自己的类注册到解析器中。详细信息可以在包的文档或使用解析器中找到。

交互功能

交互函数从头、关系和尾表示中计算标量分数。 这些分数可以解释为三元组的合理性,即分数越高,三元组越合理。 因此,好的模型应该为真实的三元组输出高分,为虚假的三元组输出低分。

在 PyKEEN 中,交互是通过 pykeen.nn.Interaction 的子类提供的,它是一个 torch.nn.Module,也就是说,它可以持有额外的(可训练的)参数,并且也可以在 PyKEEN 之外使用。 它的核心方法是 pykeen.nn.Interaction.forward(),该方法接收头、关系和尾表示的批次,并计算相应的三元组分数。

与表示形式一样,传递给pykeen.models.ERModel的交互被解析,这次使用 pykeen.nn.interaction_resolver.make()。因此,我们可以提供例如对应于交互 函数的字符串,而不是实例化的类。更多信息可以在使用解析器中找到。

注意

交互函数可能需要不同数量或形状的实体和关系表示。可以通过pykeen.nn.Interaction.entity_shapepykeen.nn.Interaction.relation_shape访问预期的表示数量及其形状的符号描述。