BoxE交互
- class BoxEInteraction(tanh_map: bool = True, p: int = 2, power_norm: bool = False)[source]
基础:
NormBasedInteraction[tuple[Tensor,Tensor],tuple[Tensor,Tensor,Tensor,Tensor,Tensor,Tensor],tuple[Tensor,Tensor]]来自[abboud2020]的BoxE交互。
实体由两个\(d\)维向量表示,描述基础位置以及平移碰撞,后者将所有与该实体在事实中共现的实体从其基础位置转换到其最终嵌入,称为“碰撞”。
关系被表示为固定数量的超矩形,对应于关系的元数。 由于我们在这里只考虑单跳链接预测,元数总是二,即一个框 用于头部位置,另一个用于尾部位置。有不同的可能性来 参数化一个超矩形,其中最常见的方法可能是将其描述为两个 相对顶点的坐标。BoxE建议通过以下方式为每个框提供不同的参数化
一个由其中心给出的基准位置,一个\(d\)维向量\(\mathbf{c} \in \mathbb{R}^d\)
每个维度中的一个范围。这个大小进一步被考虑在内
一个标量全局标量缩放因子,\(s \in \mathbb{R}\)
每个维度中的归一化范围,即范围总和为一,表示为 \(\mathbf{e} \in \mathbb{R}^d\), 其中 \(\|\mathbf{e}\| = 1\) 且对于所有 \(i\),\(0 \leq \mathbf{e}_i\)。
实例化交互模块。
另请参阅
参数
p和power_norm直接传递给NormBasedInteraction。- Parameters:
tanh_map (bool) – 是否在BoxE计算后使用tanh映射(默认为true)。双曲正切映射将嵌入空间限制在[-1, 1]范围内,因此这种映射隐式地正则化空间,以防止通过任意增大盒子来减少损失。
p (int) – 与
torch.linalg.vector_norm()一起使用的范数。通常为1或2。power_norm (bool) – 是否使用\(L_p\)范数的p次方。它的优点是在0附近可微分,并且在数值上更稳定。
属性摘要
实体表示的符号形状
关系表示的符号形状
方法总结
boxe_kg_arity_position_score(entity_pos, ...)在单个元数位置执行BoxE计算。
compute_box(base, delta, size)计算生成框的上下角。
forward(h, r, t)评估交互函数。
point_to_box_distance(points, box_lows, ...)以元素方式计算由[abboud2020]提出的点到盒子距离函数。
product_normalize(x[, dim])沿给定维度对张量进行归一化,使得几何平均值为1.0。
属性文档
方法文档
- classmethod boxe_kg_arity_position_score(entity_pos: Tensor, other_entity_bump: Tensor, relation_box: tuple[Tensor, Tensor], tanh_map: bool, p: int, power_norm: bool) Tensor[来源]
在单个元数位置执行BoxE计算。
注意
这个计算在所有位置上都是可并行的
注意
entity_pos、other_entity_bump、relation_box_low 和 relation_box_high 必须具有可广播的形状。
- Parameters:
entity_pos (Tensor) – 形状:
(*s_p, d)这是出现在目标位置的实体的基础实体位置。例如, 对于一个事实 \(r(h, t)\) 和头部元数位置,entity_pos 是 \(h\) 的基础位置。other_entity_bump (Tensor) – 形状:
(*s_b, d)这是事实中另一个位置的实体的凸起。例如,给定一个事实 \(r(h, t)\) 和头部元数位置,other_entity_bump 是 \(t\) 的凸起。relation_box (tuple[Tensor, Tensor]) – 形状:
(*s_r, d)目标元数位置的关系框的下/上角。tanh_map (bool) – 是否应用tanh映射正则化器
p (int) – 与
torch.linalg.vector_norm()一起使用的范数。通常为1或2。power_norm (bool) – 是否使用\(L_p\)范数的p次方。它的优点是在0附近可微分,并且在数值上更稳定。
- Returns:
形状:
*s实体相对于目标关系框的位置得分。数值越大越好。形状是从位置、凸起和框广播的形状,其中最后一个维度已被移除。- Return type:
- classmethod compute_box(base: Tensor, delta: Tensor, size: Tensor) tuple[Tensor, Tensor][source]
计算生成框的上下角。
- forward(h: tuple[Tensor, Tensor], r: tuple[Tensor, Tensor, Tensor, Tensor, Tensor, Tensor], t: tuple[Tensor, Tensor]) Tensor[源代码]
评估交互函数。
另请参阅
Interaction.forward提供了关于交互函数通用批处理形式的详细描述。- Parameters:
h (tuple[Tensor, Tensor]) – 形状:
(*batch_dims, d)和(*batch_dims, d)头部表示。r (tuple[Tensor, Tensor, Tensor, Tensor, Tensor, Tensor]) – 形状:
(*batch_dims, d),(*batch_dims, d),(*batch_dims, s),(*batch_dims, d),(*batch_dims, d), 和(*batch_dims, s)关系表示。t (tuple[Tensor, Tensor]) – 形状:
(*batch_dims, d)和(*batch_dims, d)尾部表示。
- Returns:
形状:
batch_dims分数。- Return type:
- static point_to_box_distance(points: Tensor, box_lows: Tensor, box_highs: Tensor) Tensor[source]
以元素方式计算由[abboud2020]提出的点到盒距离函数。
- Parameters:
- Returns:
根据上述定义的逐元素距离函数得分
给定点 \(p\),盒子的下界 \(l\),和盒子的上界 \(h\),定义了以下量:
宽度 \(w\) 是盒子上界和下界之间的差值:\(w = h - l\)
盒子中心 \(c\) 是盒子边界的平均值:\(c = (h + l) / 2\)
最后,点到盒子的距离 \(dist(p,l,h)\) 定义为以下分段函数:
\[\begin{split}dist(p,l,h) = \begin{cases} |p-c|/(w+1) & l <= p <+ h \\ |p-c|*(w+1) - 0.5*w*((w+1)-1/(w+1)) & 否则 \\ \end{cases}\end{split}\]- Return type: