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 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.