Transformers 文档

Graphormer

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

Graphormer

PyTorch

此模型仅处于维护模式,我们不接受任何更改其代码的新 PR。如果您在运行此模型时遇到任何问题,请重新安装支持此模型的最后一个版本:v4.40.2。您可以通过运行以下命令进行安装:pip install -U transformers==4.40.2

概述

Graphormer 模型由 Chengxuan Ying, Tianle Cai, Shengjie Luo, Shuxin Zheng, Guolin Ke, Di He, Yanming Shen 和 Tie-Yan Liu 在 Transformers 在图表示方面真的表现不佳吗?中提出。它是一个图 Transformer 模型,通过在预处理和整理过程中生成嵌入和感兴趣的特征,然后使用修改后的注意力机制,允许在图而不是文本序列上进行计算。

论文摘要如下:

Transformer 架构已成为自然语言处理和计算机视觉等许多领域的主导选择。然而,与主流 GNN 变体相比,它尚未在图级预测的流行排行榜上取得有竞争力的表现。因此,Transformer 如何在图表示学习中表现良好仍然是一个谜。在本文中,我们通过介绍 Graphormer 来解决这个谜团,Graphormer 建立在标准 Transformer 架构之上,可以在广泛的图表示学习任务中取得优异结果,尤其是在最近的 OGB 大规模挑战中。我们利用 Transformer 在图中的关键见解是必须有效地将图的结构信息编码到模型中。为此,我们提出了几种简单而有效的结构编码方法,以帮助 Graphormer 更好地建模图结构数据。此外,我们对 Graphormer 的表达能力进行了数学表征,并展示了通过我们编码图结构信息的方式,许多流行的 GNN 变体可以作为 Graphormer 的特例被涵盖。

该模型由 clefourrier 贡献。原始代码可在 此处 找到。

使用技巧

该模型在大型图(超过 100 个节点/边)上效果不佳,因为它会导致内存爆炸。您可以减小批处理大小,增加 RAM,或在 algos_graphormer.pyx 中减小 UNREACHABLE_NODE_DISTANCE 参数,但很难超过 700 个节点/边。

此模型不使用分词器,而是在训练期间使用特殊的收集器。

GraphormerConfig

class transformers.GraphormerConfig

< >

( num_classes: int = 1 num_atoms: int = 4608 num_edges: int = 1536 num_in_degree: int = 512 num_out_degree: int = 512 num_spatial: int = 512 num_edge_dis: int = 128 multi_hop_max_dist: int = 5 spatial_pos_max: int = 1024 edge_type: str = 'multi_hop' max_nodes: int = 512 share_input_output_embed: bool = False num_hidden_layers: int = 12 embedding_dim: int = 768 ffn_embedding_dim: int = 768 num_attention_heads: int = 32 dropout: float = 0.1 attention_dropout: float = 0.1 activation_dropout: float = 0.1 layerdrop: float = 0.0 encoder_normalize_before: bool = False pre_layernorm: bool = False apply_graphormer_init: bool = False activation_fn: str = 'gelu' embed_scale: typing.Optional[float] = None freeze_embeddings: bool = False num_trans_layers_to_freeze: int = 0 traceable: bool = False q_noise: float = 0.0 qn_block_size: int = 8 kdim: typing.Optional[int] = None vdim: typing.Optional[int] = None bias: bool = True self_attention: bool = True pad_token_id = 0 bos_token_id = 1 eos_token_id = 2 **kwargs )

参数

  • num_classes (int, 可选, 默认为 1) — 目标类别或标签的数量,对于 n 个任务的二分类设置为 n。
  • num_atoms (int, 可选, 默认为 512*9) — 图中节点类型的数量。
  • num_edges (int, 可选, 默认为 512*3) — 图中边类型的数量。
  • num_in_degree (int, 可选, 默认为 512) — 输入图中入度类型的数量。
  • num_out_degree (int, 可选, 默认为 512) — 输入图中出度类型的数量。
  • num_edge_dis (int, 可选, 默认为 128) — 输入图中边距离类型的数量。
  • multi_hop_max_dist (int, 可选, 默认为 20) — 两个节点之间多跳边的最大距离。
  • spatial_pos_max (int, 可选, 默认为 1024) — 图注意力偏置矩阵中节点之间的最大距离,在预处理和整理期间使用。
  • edge_type (str, 可选, 默认为 multihop) — 选择的边关系类型。
  • max_nodes (int, 可选, 默认为 512) — 输入图中可解析的最大节点数。
  • share_input_output_embed (bool, 可选, 默认为 False) — 在编码器和解码器之间共享嵌入层 - 注意,True 未实现。
  • num_layers (int, 可选, 默认为 12) — 层数。
  • embedding_dim (int, 可选, 默认为 768) — 编码器中嵌入层的维度。
  • ffn_embedding_dim (int, 可选, 默认为 768) — 编码器中“中间”(通常称为前馈)层的维度。
  • num_attention_heads (int, 可选, 默认为 32) — 编码器中注意力头的数量。
  • self_attention (bool, 可选, 默认为 True) — 模型是否自注意力(False 未实现)。
  • activation_function (strfunction, 可选, 默认为 "gelu") — 编码器和池化器中的非线性激活函数(函数或字符串)。如果是字符串,支持 "gelu", "relu", "silu""gelu_new"
  • dropout (float, 可选, 默认为 0.1) — 嵌入、编码器和池化器中所有全连接层的 dropout 概率。
  • attention_dropout (float, 可选, 默认为 0.1) — 注意力权重的 dropout 概率。
  • activation_dropout (float, 可选, 默认为 0.1) — 线性 Transformer 层的激活函数的 dropout 概率。
  • layerdrop (float, 可选, 默认为 0.0) — 编码器的 LayerDrop 概率。更多详细信息,请参见 [LayerDrop 论文](参见 https://huggingface.co/papers/1909.11556)。
  • bias (bool, 可选, 默认为 True) — 在注意力模块中使用偏置 - 目前不支持。
  • embed_scale(float, 可选, 默认为 None) — 节点嵌入的缩放因子。
  • num_trans_layers_to_freeze (int, 可选, 默认为 0) — 要冻结的 Transformer 层数。
  • encoder_normalize_before (bool, 可选, 默认为 False) — 在编码图之前对特征进行归一化。
  • pre_layernorm (bool, 可选, 默认为 False) — 在自注意力和前馈网络之前应用层归一化。否则,将使用后层归一化。
  • apply_graphormer_init (bool, 可选, 默认为 False) — 在训练前对模型应用自定义 Graphormer 初始化。
  • freeze_embeddings (bool, 可选, 默认为 False) — 冻结嵌入层,或与模型一起训练。
  • encoder_normalize_before (bool, 可选, 默认为 False) — 在每个编码器块之前应用层归一化。
  • q_noise (float, 可选, 默认为 0.0) — 量化噪声量(参见“Training with Quantization Noise for Extreme Model Compression”)。 (有关更多详细信息,请参见 fairseq 关于 quant_noise 的文档)。
  • qn_block_size (int, 可选, 默认为 8) — 后续 iPQ 量化(参见 q_noise)的块大小。
  • kdim (int, 可选, 默认为 None) — 注意力中键的维度,如果与其它值不同。
  • vdim (int, 可选, 默认为 None) — 注意力中值的维度,如果与其它值不同。
  • use_cache (bool, 可选, 默认为 True) — 模型是否应返回最后一个键/值注意力(并非所有模型都使用)。
  • traceable (bool, 可选, 默认为 False) — 将编码器的内部状态的返回值更改为堆叠张量。
  • 示例

这是用于存储 ~GraphormerModel 配置的配置类。它用于根据指定参数实例化 Graphormer 模型,定义模型架构。使用默认值实例化配置将产生与 Graphormer graphormer-base-pcqm4mv1 架构类似的配置。

配置对象继承自 PretrainedConfig,可用于控制模型输出。有关更多信息,请阅读 PretrainedConfig 的文档。

GraphormerModel

class transformers.GraphormerModel

< >

( config: GraphormerConfig )

Graphormer 模型是一个图编码器模型。

它将图转换为其表示形式。如果您想将此模型用于下游分类任务,请使用 GraphormerForGraphClassification。对于任何其他下游任务,请随意添加新类,或将此模型与您选择的下游模型结合使用,遵循 GraphormerForGraphClassification 中的示例。

forward

< >

( input_nodes: LongTensor input_edges: LongTensor attn_bias: Tensor in_degree: LongTensor out_degree: LongTensor spatial_pos: LongTensor attn_edge_type: LongTensor perturb: typing.Optional[torch.FloatTensor] = None masked_tokens: None = None return_dict: typing.Optional[bool] = None **unused )

GraphormerForGraphClassification

class transformers.GraphormerForGraphClassification

< >

( config: GraphormerConfig )

此模型可用于图级别分类或回归任务。

它可以用于训练

  • 回归(通过将 config.num_classes 设置为 1);每个图应有一个浮点型标签
  • 单任务分类(通过将 config.num_classes 设置为类别数量);每个图应有一个整数标签
  • 二元多任务分类(通过将 config.num_classes 设置为标签数量);每个图应有一个整数标签列表。

forward

< >

( input_nodes: LongTensor input_edges: LongTensor attn_bias: Tensor in_degree: LongTensor out_degree: LongTensor spatial_pos: LongTensor attn_edge_type: LongTensor labels: typing.Optional[torch.LongTensor] = None return_dict: typing.Optional[bool] = None **unused )

< > 在 GitHub 上更新