PBG(Pytorch-BigGraph)对有向的多关系多图进行操作,其顶点叫做实体。每一条边原实体与目的实体相连接(源实体和目标实体分别叫做左手边和右手边,简记为LHS和RHS)。同一对实体允许右多条边。即左手边和右手边的边是相同的也是允许的。
每个实体具有特定的实体类型(每一个实体有且仅有一个实体类型)。因此,这些类型会把所有实体分成不相交的组。相似地,每一条边也属于一个关系类型。给定关系类型的所有边必须具有相同实体类型的左手边实体和相同类型的右手边实体类型(与右手边实体类型不相同的实体类型)。该属性意味着每一个关系类型有一个左手边实体类型和一个右手边实体类型。
为了使PBG能够对大规模图进行操作,给图会被分成几个小的片段,在每一个小片段上以分布式方式进行训练。通过将每个类型的实体拆分成一定数量的子集,这属首次。拆分的过程叫做分区。然后,对每一个关系类型,其边被划分成桶:对每对分区(对每一个关系类型,一个关系类型来自右手边,另一个关系类型来自右手边),创建一个桶,其包含左手边和右手边实体都在这些分区的类型边。
注意:
由于技术的原因,在当前状态下,出现在某个关系类型左侧的所有实体类型必须划分为相同数量的分区(除了未分区实体)。
对于出现在右侧的所有实体类型也必须如此。在数字术语中,它意味着所有实体的分区数量必须能够广播到相同的值。
所有的实体由类型所标识——分区以及其在该分区内的索引(索引必须是连续的,意味着如果在类型分区中存在 N N N个实体,其索引在半开区间 [ 0 , N ) [0, N) [0,N))。一条边由其类型所标识——桶(即,左手边和右手边实体类型的分区)以及左手边和右手边各自分区类的索引。一条边没有必须指定其左手边和右手边实体,因为其隐含在变得关系类型中了。
正式地,每一个桶都可以一对整数 ( i , j ) (i, j) (i,j)所识别,其中 i i i和 j j j分别是左手边和右手边的分区。在桶中,每一条边都由一个整数三元组 ( x , r , y ) (x, r, y) (x,r,y)所识别, x x x和 y y y分别表示左手边和右手边实体,而 r r r表示关系类型。这条边是通过首先在配置中查找关系类型 r r r而被“解释”的,并且指出其只有左手边的实体类型 e 1 e_1 e1和右手边的实体类型 e 2 e_2 e2。然后可以确定左手边的实体,由 ( e 1 , i , x ) (e_1, i, x) (e1,i,x)给出(其类型,分以及分区类的索引),相似地,左手边的实体由 ( e 2 , j , y ) (e_2, j, y) (e2,j,y)给出。