Welcome to PyTorch-BigGraph’s documentation - Data model
源链接:https://torchbiggraph.readthedocs.io/en/latest/data_model.html
PBG operates 是有向多关系多图,图上的顶点称为实体,每个边将源连接到目标实体。源和目标分别称为左侧和右侧(简称lhs和rhs)。同一对实体之间允许有多个边,也允许使用环,即左侧和右侧相同的边。
每个实体都属于特定的实体类型(即每个实体只有一种类型)。所以类型将所有实体划分为不相交的组。同样,每个边也只属于一个关系类型,并且关系类型的边的左侧实体应该有相同实体类型,以及右侧应该也是相同实体类型(左右侧实体类型可以具有不同的实体类型)。此属性表示每个关系类型都有左侧实体类型和右侧实体类型。
为了让PBG能够让大规模的图形能运行,我们将图形分解成小块,在这些小块上可以进行分布式的训练。首先是通过将每种类型的实体进一步拆分为若干个子集(称为分区)。然后,对于每种关系类型,它的边被划分为桶:对于每对分区(一个来自左侧,另一个来自右侧实体类型)将创建一个桶,其中包含特定类型的边及对应左、右侧实体。
注:出于技术原因,当前出现在关系类型左侧的所有实体类型必须划分为相同数量的分区(未分区的实体除外)。对于出现在右侧的所有实体类型,必须保持相同的状态。在numpy中,这意味着所有实体的分区数必须可以扩展到相同的值。
一个实体通过自身的类型、分桶、分组中的索引来定义(索引必须是连续的,这意味着如果一个类型的分区中有n个实体,则其索引位于半开放区间[0,n])。一条边铜鼓变得类型,分桶(即其左侧和右侧实体类型的分区)以及其左侧和右侧实体在各自分区中的索引来标识。边缘不必指定其左侧和右侧实体类型,因为它们隐式地存在于边缘的关系类型中。
形式上,每个桶都可以通过一对整数(i,j)来标识,其中i和j分别是左侧和右侧分区。在该桶中,每个边都可以由整数(x,r,y)的三联体标识,x和y分别表示左侧和右侧实体,r表示关系类型。通过首先在配置中查找关系类型R来“解释”此边缘,并发现其左侧只能有类型e1的实体,右侧只能有类型e2的实体。然后可以确定左侧实体,由(e1,i,x)(其类型、分区及其在分区内的索引)给出,同样,也可以确定右侧实体(e2,j,y)。
在同一模型中,图形边缘然后根据其源节点和目标节点分为P2存储桶。一旦节点和边缘被分区,就可以一次在一个桶上执行训练。桶(p1,p2)的训练仅需要将分区p1和p2的嵌入存储在存储器中。PBG结构保证桶具有至少一个先前训练的嵌入分区。