NodePiece表示法

class NodePieceRepresentation(*, triples_factory: CoreTriplesFactory, token_representations: str | Representation | type[Representation] | None | Sequence[str | Representation | type[Representation] | None] = None, token_representations_kwargs: Mapping[str, Any] | None | Sequence[Mapping[str, Any] | None] = None, tokenizers: str | Tokenizer | type[Tokenizer] | None | Sequence[str | Tokenizer | type[Tokenizer] | None] = None, tokenizers_kwargs: Mapping[str, Any] | None | Sequence[Mapping[str, Any] | None] = None, num_tokens: int | Sequence[int] = 2, aggregation: None | str | Callable[[Tensor, int], Tensor] = None, max_id: int | None = None, **kwargs)[source]

基础:CombinedRepresentation

节点片段分解的基本实现 [galkin2021]

\[x_e = agg(\{T[t] \mid t \in tokens(e) \})\]

其中 \(T\) 是令牌表示,\(tokens\) 为每个实体选择固定数量的 \(k\) 个令牌,而 \(agg\) 是一个聚合函数,它将各个令牌表示聚合为单个实体表示。

初始化表示。

Parameters:
  • triples_factory (CoreTriplesFactory) – 三元组工厂

  • token_representations (str | Representation | type[Representation] | None | Sequence[str | Representation | type[Representation] | None]) – 令牌表示规范,或预实例化的表示模块。

  • token_representations_kwargs (Mapping[str, Any] | None | Sequence[Mapping[str, Any] | None]) – 额外的基于关键字的参数

  • tokenizers (str | Tokenizer | type[Tokenizer] | None | Sequence[str | Tokenizer | type[Tokenizer] | None]) – 要使用的分词器,参见 pykeen.nn.node_piece.tokenizer_resolver

  • tokenizers_kwargs (Mapping[str, Any] | None | Sequence[Mapping[str, Any] | None]) – 在构建时传递给分词器的额外基于关键字的参数。

  • num_tokens (int | Sequence[int]) – 每个实体的令牌数量。

  • aggregation (None | str | Callable[[Tensor, int], Tensor]) –

    将多个标记表示聚合为单个实体表示。默认情况下, 这使用 torch.mean()。如果提供了字符串,模块假设这是指顶层的 torch 函数,例如“mean”表示 torch.mean(),或“sum”表示 func:torch.sum。聚合也可以 具有可训练的参数,例如 MLP(mean(MLP(tokens)))(参见 [zaheer2017] 中的 DeepSets)。在 这种情况下,模块必须在此组件之外创建。

    我们也可以有导致不同形状输出的聚合,例如所有 标记嵌入的连接导致形状 (num_tokens * d,)。在这种情况下,必须提供 shape

    聚合接受两个参数:标记表示的(批处理)张量,形状为 (*, num_tokens, *dt),以及要聚合的索引。

  • max_id (int) – 仅传递此参数以检查三元组工厂中的实体数量是否相同

  • kwargs – 传递给 CombinedRepresentation.__init__() 的额外基于关键字的参数

方法总结

estimate_diversity()

通过它们的哈希值估计令牌的多样性。

方法文档

estimate_diversity() HashDiversityInfo[来源]

通过它们的哈希值估计令牌的多样性。

Returns:

比率信息元组

Return type:

HashDiversityInfo

根据图结构和标记化参数,标记化策略可能会为多个节点生成完全相同的哈希值。相同的哈希值将导致相同的节点表示,从而可能抑制下游性能。当您需要估计在某种标记化策略下构建的节点哈希值的多样性时,此函数非常有用——理想情况下,您希望每个节点都有一个唯一的哈希值。该函数计算每个表示中以及总体上(如果我们将它们全部连接成一行)有多少节点哈希值是唯一的。1.0 表示所有节点都有唯一的哈希值。

示例用法:

from pykeen.model import NodePiece

model = NodePiece(
    triples_factory=dataset.training,
    tokenizers=["AnchorTokenizer", "RelationTokenizer"],
    num_tokens=[20, 12],
    embedding_dim=64,
    interaction="rotate",
    relation_constrainer="complex_normalize",
    entity_initializer="xavier_uniform_",
)
print(model.entity_representations[0].estimate_diversity())