Transformers 文件

ModernBERT

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

PyTorch FlashAttention SDPA

ModernBERT

ModernBERTBERT 的現代化版本,在 2T 詞元上進行了訓練。它為原始架構帶來了許多改進,例如旋轉位置嵌入以支援長達 8192 個詞元的序列、unpadding 以避免在填充詞元上浪費計算資源、GeGLU 層和交替注意力機制。

你可以在 ModernBERT 合集中找到所有原始的 ModernBERT 檢查點。

點選右側邊欄中的 ModernBERT 模型,檢視更多關於如何將 ModernBERT 應用於不同語言任務的示例。

下面的示例演示瞭如何使用 PipelineAutoModel 以及從命令列預測 [MASK] 詞元。

流水線
自動模型
Transformers CLI
import torch
from transformers import pipeline

pipeline = pipeline(
    task="fill-mask",
    model="answerdotai/ModernBERT-base",
    torch_dtype=torch.float16,
    device=0
)
pipeline("Plants create [MASK] through a process known as photosynthesis.")

ModernBertConfig

class transformers.ModernBertConfig

< >

( vocab_size = 50368 hidden_size = 768 intermediate_size = 1152 num_hidden_layers = 22 num_attention_heads = 12 hidden_activation = 'gelu' max_position_embeddings = 8192 initializer_range = 0.02 initializer_cutoff_factor = 2.0 norm_eps = 1e-05 norm_bias = False pad_token_id = 50283 eos_token_id = 50282 bos_token_id = 50281 cls_token_id = 50281 sep_token_id = 50282 global_rope_theta = 160000.0 attention_bias = False attention_dropout = 0.0 global_attn_every_n_layers = 3 local_attention = 128 local_rope_theta = 10000.0 embedding_dropout = 0.0 mlp_bias = False mlp_dropout = 0.0 decoder_bias = True classifier_pooling: typing.Literal['cls', 'mean'] = 'cls' classifier_dropout = 0.0 classifier_bias = False classifier_activation = 'gelu' deterministic_flash_attn = False sparse_prediction = False sparse_pred_ignore_index = -100 reference_compile = None repad_logits_with_grad = False **kwargs )

引數

  • vocab_size (int, 可選, 預設為 50368) — ModernBert 模型的詞彙表大小。定義了在呼叫 ModernBertModel 時傳入的 inputs_ids 可以表示的不同詞元的數量。
  • hidden_size (int, 可選, 預設為 768) — 隱藏表示的維度。
  • intermediate_size (int, 可選, 預設為 1152) — MLP 表示的維度。
  • num_hidden_layers (int, 可選, 預設為 22) — Transformer 解碼器中的隱藏層數量。
  • num_attention_heads (int, 可選, 預設為 12) — Transformer 解碼器中每個注意力層的注意力頭數量。
  • hidden_activation (strfunction, 可選, 預設為 "gelu") — 解碼器中的非線性啟用函式(函式或字串)。如果未指定,將預設為 "gelu"
  • max_position_embeddings (int, 可選, 預設為 8192) — 該模型可能使用的最大序列長度。
  • initializer_range (float, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的標準差。
  • initializer_cutoff_factor (float, 可選, 預設為 2.0) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的截斷因子。
  • norm_eps (float, 可選, 預設為 1e-05) — rms 歸一化層使用的 epsilon 值。
  • norm_bias (bool, 可選, 預設為 False) — 是否在歸一化層中使用偏置。
  • pad_token_id (int, 可選, 預設為 50283) — 填充詞元的 ID。
  • eos_token_id (int, 可選, 預設為 50282) — 序列結束詞元的 ID。
  • bos_token_id (int, 可選, 預設為 50281) — 序列開始詞元的 ID。
  • cls_token_id (int, 可選, 預設為 50281) — 分類詞元的 ID。
  • sep_token_id (int, 可選, 預設為 50282) — 分隔詞元的 ID。
  • global_rope_theta (float, 可選, 預設為 160000.0) — 全域性 RoPE 嵌入的基期。
  • attention_bias (bool, 可選, 預設為 False) — 是否在自注意力機制的 query、key、value 和輸出投影層中使用偏置。
  • attention_dropout (float, 可選, 預設為 0.0) — 注意力機率的 dropout 比率。
  • global_attn_every_n_layers (int, 可選, 預設為 3) — 全域性注意力層之間的層數。
  • local_attention (int, 可選, 預設為 128) — 區域性注意力的視窗大小。
  • local_rope_theta (float, 可選, 預設為 10000.0) — 區域性 RoPE 嵌入的基期。
  • embedding_dropout (float, 可選, 預設為 0.0) — 嵌入的 dropout 比率。
  • mlp_bias (bool, 可選, 預設為 False) — 是否在 MLP 層中使用偏置。
  • mlp_dropout (float, 可選, 預設為 0.0) — MLP 層的 dropout 比率。
  • decoder_bias (bool, 可選, 預設為 True) — 是否在解碼器層中使用偏置。
  • classifier_pooling (str, 可選, 預設為 "cls") — 分類器的池化方法。應為 "cls""mean"。在區域性注意力層中,CLS 詞元在長序列中不關注所有詞元。
  • classifier_dropout (float, 可選, 預設為 0.0) — 分類器的 dropout 比率。
  • classifier_bias (bool, 可選, 預設為 False) — 是否在分類器中使用偏置。
  • classifier_activation (str, 可選, 預設為 "gelu") — 分類器的啟用函式。
  • deterministic_flash_attn (bool, 可選, 預設為 False) — 是否使用確定性的 flash attention。如果為 False,推理速度會更快,但不是確定性的。
  • sparse_prediction (bool, 可選, 預設為 False) — 是否對掩碼語言模型使用稀疏預測,而不是返回完整的密集 logits。
  • sparse_pred_ignore_index (int, 可選, 預設為 -100) — 稀疏預測中要忽略的索引。
  • reference_compile (bool, 可選) — 是否編譯在預訓練期間已編譯的模型層。如果為 None,則在以下情況下會編譯模型的某些部分:1) 安裝了 triton,2) 模型不在 MPS 上,3) 模型不在裝置間共享,以及 4) 初始化後模型未調整大小。如果為 True,則在某些情況下模型可能會更快。
  • repad_logits_with_grad (bool, 可選, 預設為 False) — 當為 True 時,ModernBertForMaskedLM 在重新填充輸出時會跟蹤 logits 的梯度。這僅適用於使用帶有傳遞標籤的 Flash Attention 2。否則輸出 logits 始終具有梯度。

這是用於儲存 ModernBertModel 配置的配置類。它用於根據指定的引數例項化 ModernBert 模型,定義模型架構。使用預設值例項化配置將產生與 ModernBERT-base 類似的配置。例如 answerdotai/ModernBERT-base

配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請閱讀 PretrainedConfig 的文件。

示例

>>> from transformers import ModernBertModel, ModernBertConfig

>>> # Initializing a ModernBert style configuration
>>> configuration = ModernBertConfig()

>>> # Initializing a model from the modernbert-base style configuration
>>> model = ModernBertModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config
Pytorch
隱藏 Pytorch 內容

ModernBertModel

class transformers.ModernBertModel

< >

( config: ModernBertConfig )

引數

  • config (ModernBertConfig) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法以載入模型權重。

一個基礎的 Modernbert 模型,輸出原始的隱藏狀態,頂部沒有任何特定的模型頭。

該模型繼承自 PreTrainedModel。有關該庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等),請檢視超類文件。

該模型也是 PyTorch torch.nn.Module 的子類。可將其用作常規的 PyTorch 模組,並參考 PyTorch 文件瞭解所有與常規用法和行為相關的事項。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.Tensor] = None sliding_window_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None inputs_embeds: typing.Optional[torch.Tensor] = None indices: typing.Optional[torch.Tensor] = None cu_seqlens: typing.Optional[torch.Tensor] = None max_seqlen: typing.Optional[int] = None batch_size: typing.Optional[int] = None seq_len: typing.Optional[int] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) transformers.modeling_outputs.BaseModelOutputtuple(torch.FloatTensor)

引數

  • input_ids (torch.LongTensor,形狀為 (batch_size, sequence_length)可選) — 詞彙表中輸入序列詞元的索引。預設情況下將忽略填充。

    可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什麼是輸入 ID?

  • attention_mask (torch.Tensor,形狀為 (batch_size, sequence_length)可選) — 用於避免在填充詞元索引上執行注意力的掩碼。掩碼值在 [0, 1] 中選擇:

    • 1 表示**未被遮蔽**的詞元,
    • 0 表示**被遮蔽**的詞元。

    什麼是注意力掩碼?

  • sliding_window_mask (torch.Tensor,形狀為 (batch_size, sequence_length)可選) — 用於避免在填充或遠距離詞元上執行注意力的掩碼。在 ModernBert 中,只有少數幾層執行全域性注意力,而其餘層執行區域性注意力。當不使用 Flash Attention 時,此掩碼用於避免在區域性注意力層中關注遠距離的詞元。
  • position_ids (torch.LongTensor,形狀為 (batch_size, sequence_length)可選) — 位置嵌入中每個輸入序列詞元的位置索引。在 [0, config.n_positions - 1] 範圍內選擇。

    什麼是位置 ID?

  • inputs_embeds (torch.Tensor,形狀為 (batch_size, sequence_length, hidden_size)可選) — 可選地,你可以不傳遞 input_ids,而是直接傳遞嵌入表示。如果你想比模型的內部嵌入查詢矩陣更好地控制如何將 input_ids 索引轉換為關聯向量,這會很有用。
  • indices (torch.Tensor,形狀為 (total_unpadded_tokens,)可選) — 輸入序列中非填充詞元的索引。用於對輸出進行解填充。
  • cu_seqlens (torch.Tensor,形狀為 (batch + 1,)可選) — 輸入序列的累積序列長度。用於索引未填充的張量。
  • max_seqlen (int, 可選) — 批次中不包括填充詞元的最大序列長度。用於對 input_ids 進行解填充並對輸出張量進行填充。
  • batch_size (int, 可選) — 輸入序列的批次大小。用於填充輸出張量。
  • seq_len (int, 可選) — 輸入序列的序列長度,包括填充詞元。用於填充輸出張量。
  • output_attentions (bool, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的 attentions
  • output_hidden_states (bool, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的 hidden_states
  • return_dict (bool, 可選) — 是否返回一個 ModelOutput 而不是一個普通的元組。

返回

transformers.modeling_outputs.BaseModelOutputtuple(torch.FloatTensor)

一個 transformers.modeling_outputs.BaseModelOutput 或一個 torch.FloatTensor 元組(如果傳遞了 return_dict=False 或當 config.return_dict=False 時),根據配置 (ModernBertConfig) 和輸入包含不同的元素。

  • last_hidden_state (torch.FloatTensor, 形狀為 (batch_size, sequence_length, hidden_size)) — 模型最後一層輸出的隱藏狀態序列。

  • hidden_states (tuple(torch.FloatTensor), 可選, 當傳遞 output_hidden_states=Trueconfig.output_hidden_states=True 時返回) — torch.FloatTensor 的元組 (如果模型有嵌入層,則一個是嵌入層的輸出,+ 每個層的輸出一個),形狀為 (batch_size, sequence_length, hidden_size)

    模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。

  • attentions (tuple(torch.FloatTensor), 可選, 當傳遞 output_attentions=Trueconfig.output_attentions=True 時返回) — torch.FloatTensor 的元組 (每層一個),形狀為 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。

ModernBertModel 的前向傳播方法,重寫了 __call__ 特殊方法。

儘管前向傳播的配方需要在此函式內定義,但之後應呼叫 Module 例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會默默地忽略它們。

ModernBertForMaskedLM

class transformers.ModernBertForMaskedLM

< >

( config: ModernBertConfig )

引數

  • config (ModernBertConfig) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法以載入模型權重。

帶有解碼器頭的 ModernBert 模型,用於掩碼語言建模。

該模型繼承自 PreTrainedModel。有關該庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等),請檢視超類文件。

該模型也是 PyTorch torch.nn.Module 的子類。可將其用作常規的 PyTorch 模組,並參考 PyTorch 文件瞭解所有與常規用法和行為相關的事項。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.Tensor] = None sliding_window_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = None labels: typing.Optional[torch.Tensor] = None indices: typing.Optional[torch.Tensor] = None cu_seqlens: typing.Optional[torch.Tensor] = None max_seqlen: typing.Optional[int] = None batch_size: typing.Optional[int] = None seq_len: typing.Optional[int] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None **kwargs ) transformers.modeling_outputs.MaskedLMOutputtuple(torch.FloatTensor)

引數

  • input_ids (torch.LongTensor,形狀為 (batch_size, sequence_length)可選) — 詞彙表中輸入序列詞元的索引。預設情況下將忽略填充。

    可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什麼是輸入 ID?

  • attention_mask (torch.Tensor,形狀為 (batch_size, sequence_length)可選) — 用於避免在填充詞元索引上執行注意力的掩碼。掩碼值在 [0, 1] 中選擇:

    • 1 表示**未被遮蔽**的詞元,
    • 0 表示**被遮蔽**的詞元。

    什麼是注意力掩碼?

  • sliding_window_mask (torch.Tensor,形狀為 (batch_size, sequence_length)可選) — 用於避免在填充或遠距離詞元上執行注意力的掩碼。在 ModernBert 中,只有少數幾層執行全域性注意力,而其餘層執行區域性注意力。當不使用 Flash Attention 時,此掩碼用於避免在區域性注意力層中關注遠距離的詞元。
  • position_ids (torch.Tensor,形狀為 (batch_size, sequence_length)可選) — 位置嵌入中每個輸入序列詞元的位置索引。在 [0, config.n_positions - 1] 範圍內選擇。

    什麼是位置 ID?

  • inputs_embeds (torch.Tensor,形狀為 (batch_size, sequence_length, hidden_size)可選) — 可選地,你可以不傳遞 input_ids,而是直接傳遞嵌入表示。如果你想比模型的內部嵌入查詢矩陣更好地控制如何將 input_ids 索引轉換為關聯向量,這會很有用。
  • labels (torch.Tensor,形狀為 (batch_size, sequence_length)可選) — 用於計算掩碼語言建模損失的標籤。索引應在 [0, ..., config.vocab_size] 或 -100 中 (請參閱 input_ids 文件字串)。設定為 -100 的詞元索引將被忽略 (遮蔽),損失僅針對標籤在 [0, ..., config.vocab_size] 中的詞元計算。
  • indices (torch.Tensor,形狀為 (total_unpadded_tokens,)可選) — 輸入序列中非填充詞元的索引。用於對輸出進行解填充。
  • cu_seqlens (torch.Tensor,形狀為 (batch + 1,)可選) — 輸入序列的累積序列長度。用於索引未填充的張量。
  • max_seqlen (int, 可選) — 批次中不包括填充詞元的最大序列長度。用於對 input_ids 進行解填充並對輸出張量進行填充。
  • batch_size (int, 可選) — 輸入序列的批次大小。用於填充輸出張量。
  • seq_len (int, 可選) — 輸入序列的序列長度,包括填充詞元。用於填充輸出張量。
  • output_attentions (bool, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的 attentions
  • output_hidden_states (bool, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的 hidden_states
  • return_dict (bool, 可選) — 是否返回一個 ModelOutput 而不是一個普通的元組。

返回

transformers.modeling_outputs.MaskedLMOutputtuple(torch.FloatTensor)

一個 transformers.modeling_outputs.MaskedLMOutput 或一個 torch.FloatTensor 元組(如果傳遞了 return_dict=False 或當 config.return_dict=False 時),根據配置 (ModernBertConfig) 和輸入包含不同的元素。

  • loss (形狀為 (1,)torch.FloatTensor可選,當提供 labels 時返回) — 掩碼語言建模 (MLM) 損失。

  • logits (形狀為 (batch_size, sequence_length, config.vocab_size)torch.FloatTensor) — 語言建模頭部的預測分數(SoftMax 之前的每個詞彙標記的分數)。

  • hidden_states (tuple(torch.FloatTensor), 可選, 當傳遞 output_hidden_states=Trueconfig.output_hidden_states=True 時返回) — torch.FloatTensor 的元組 (如果模型有嵌入層,則一個是嵌入層的輸出,+ 每個層的輸出一個),形狀為 (batch_size, sequence_length, hidden_size)

    模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。

  • attentions (tuple(torch.FloatTensor), 可選, 當傳遞 output_attentions=Trueconfig.output_attentions=True 時返回) — torch.FloatTensor 的元組 (每層一個),形狀為 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。

ModernBertForMaskedLM 的前向傳播方法,重寫了 __call__ 特殊方法。

儘管前向傳播的配方需要在此函式內定義,但之後應呼叫 Module 例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會默默地忽略它們。

示例

>>> from transformers import AutoTokenizer, ModernBertForMaskedLM
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("answerdotai/ModernBERT-base")
>>> model = ModernBertForMaskedLM.from_pretrained("answerdotai/ModernBERT-base")

>>> inputs = tokenizer("The capital of France is <mask>.", return_tensors="pt")

>>> with torch.no_grad():
...     logits = model(**inputs).logits

>>> # retrieve index of <mask>
>>> mask_token_index = (inputs.input_ids == tokenizer.mask_token_id)[0].nonzero(as_tuple=True)[0]

>>> predicted_token_id = logits[0, mask_token_index].argmax(axis=-1)
>>> tokenizer.decode(predicted_token_id)
...

>>> labels = tokenizer("The capital of France is Paris.", return_tensors="pt")["input_ids"]
>>> # mask labels of non-<mask> tokens
>>> labels = torch.where(inputs.input_ids == tokenizer.mask_token_id, labels, -100)

>>> outputs = model(**inputs, labels=labels)
>>> round(outputs.loss.item(), 2)
...

ModernBertForSequenceClassification

class transformers.ModernBertForSequenceClassification

< >

( config: ModernBertConfig )

引數

  • config (ModernBertConfig) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法以載入模型權重。

帶有執行池化操作的序列分類頭的 ModernBert 模型。

該模型繼承自 PreTrainedModel。有關該庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等),請檢視超類文件。

該模型也是 PyTorch torch.nn.Module 的子類。可將其用作常規的 PyTorch 模組,並參考 PyTorch 文件瞭解所有與常規用法和行為相關的事項。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.Tensor] = None sliding_window_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = None labels: typing.Optional[torch.Tensor] = None indices: typing.Optional[torch.Tensor] = None cu_seqlens: typing.Optional[torch.Tensor] = None max_seqlen: typing.Optional[int] = None batch_size: typing.Optional[int] = None seq_len: typing.Optional[int] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None **kwargs ) transformers.modeling_outputs.SequenceClassifierOutputtuple(torch.FloatTensor)

引數

  • input_ids (torch.LongTensor,形狀為 (batch_size, sequence_length)可選) — 詞彙表中輸入序列詞元的索引。預設情況下將忽略填充。

    可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什麼是輸入 ID?

  • attention_mask (torch.Tensor,形狀為 (batch_size, sequence_length)可選) — 用於避免在填充詞元索引上執行注意力的掩碼。掩碼值在 [0, 1] 中選擇:

    • 1 表示**未被遮蔽**的詞元,
    • 0 表示**被遮蔽**的詞元。

    什麼是注意力掩碼?

  • sliding_window_mask (torch.Tensor,形狀為 (batch_size, sequence_length)可選) — 用於避免對填充或遠距離標記執行注意力的掩碼。在 ModernBert 中,只有少數層執行全域性注意力,其餘層執行區域性注意力。當不使用 Flash Attention 時,此掩碼用於避免在區域性注意力層中關注遠距離的標記。
  • position_ids (torch.Tensor,形狀為 (batch_size, sequence_length)可選) — 位置嵌入中每個輸入序列標記的位置索引。選擇範圍為 [0, config.n_positions - 1]

    什麼是位置 ID?

  • inputs_embeds (torch.Tensor,形狀為 (batch_size, sequence_length, hidden_size)可選) — 可選地,你可以選擇直接傳遞嵌入表示而不是 input_ids。如果你想比模型內部的嵌入查詢矩陣更好地控制如何將 input_ids 索引轉換為關聯向量,這會很有用。
  • labels (torch.LongTensor,形狀為 (batch_size,)可選) — 用於計算序列分類/迴歸損失的標籤。索引應在 [0, ..., config.num_labels - 1] 範圍內。如果 config.num_labels == 1,則計算迴歸損失(均方損失);如果 config.num_labels > 1,則計算分類損失(交叉熵)。
  • indices (torch.Tensor,形狀為 (total_unpadded_tokens,)可選) — 輸入序列中非填充標記的索引。用於對輸出進行去填充。
  • cu_seqlens (torch.Tensor,形狀為 (batch + 1,)可選) — 輸入序列的累積序列長度。用於索引未填充的張量。
  • max_seqlen (int可選) — 批次中不包括填充標記的最大序列長度。用於對 input_ids 進行去填充和對輸出張量進行填充。
  • batch_size (int可選) — 輸入序列的批次大小。用於填充輸出張量。
  • seq_len (int可選) — 包括填充標記在內的輸入序列的序列長度。用於填充輸出張量。
  • output_attentions (bool可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的 attentions
  • output_hidden_states (bool可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的 hidden_states
  • return_dict (bool可選) — 是否返回一個 ModelOutput 而不是一個普通的元組。

返回

transformers.modeling_outputs.SequenceClassifierOutputtuple(torch.FloatTensor)

一個 transformers.modeling_outputs.SequenceClassifierOutput 或一個 torch.FloatTensor 的元組(如果傳遞了 return_dict=Falseconfig.return_dict=False),根據配置 (ModernBertConfig) 和輸入包含不同的元素。

  • loss (形狀為 (1,)torch.FloatTensor可選,當提供 labels 時返回) — 分類損失(如果 config.num_labels==1,則為迴歸損失)。

  • logits (形狀為 (batch_size, config.num_labels)torch.FloatTensor) — 分類(如果 config.num_labels==1,則為迴歸)分數(SoftMax 之前)。

  • hidden_states (tuple(torch.FloatTensor), 可選, 當傳遞 output_hidden_states=Trueconfig.output_hidden_states=True 時返回) — torch.FloatTensor 的元組 (如果模型有嵌入層,則一個是嵌入層的輸出,+ 每個層的輸出一個),形狀為 (batch_size, sequence_length, hidden_size)

    模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。

  • attentions (tuple(torch.FloatTensor), 可選, 當傳遞 output_attentions=Trueconfig.output_attentions=True 時返回) — torch.FloatTensor 的元組 (每層一個),形狀為 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。

ModernBertForSequenceClassification 的 forward 方法會覆蓋 __call__ 特殊方法。

儘管前向傳播的配方需要在此函式內定義,但之後應呼叫 Module 例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會默默地忽略它們。

單標籤分類示例

>>> import torch
>>> from transformers import AutoTokenizer, ModernBertForSequenceClassification

>>> tokenizer = AutoTokenizer.from_pretrained("answerdotai/ModernBERT-base")
>>> model = ModernBertForSequenceClassification.from_pretrained("answerdotai/ModernBERT-base")

>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")

>>> with torch.no_grad():
...     logits = model(**inputs).logits

>>> predicted_class_id = logits.argmax().item()
>>> model.config.id2label[predicted_class_id]
...

>>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
>>> num_labels = len(model.config.id2label)
>>> model = ModernBertForSequenceClassification.from_pretrained("answerdotai/ModernBERT-base", num_labels=num_labels)

>>> labels = torch.tensor([1])
>>> loss = model(**inputs, labels=labels).loss
>>> round(loss.item(), 2)
...

多標籤分類示例

>>> import torch
>>> from transformers import AutoTokenizer, ModernBertForSequenceClassification

>>> tokenizer = AutoTokenizer.from_pretrained("answerdotai/ModernBERT-base")
>>> model = ModernBertForSequenceClassification.from_pretrained("answerdotai/ModernBERT-base", problem_type="multi_label_classification")

>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")

>>> with torch.no_grad():
...     logits = model(**inputs).logits

>>> predicted_class_ids = torch.arange(0, logits.shape[-1])[torch.sigmoid(logits).squeeze(dim=0) > 0.5]

>>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
>>> num_labels = len(model.config.id2label)
>>> model = ModernBertForSequenceClassification.from_pretrained(
...     "answerdotai/ModernBERT-base", num_labels=num_labels, problem_type="multi_label_classification"
... )

>>> labels = torch.sum(
...     torch.nn.functional.one_hot(predicted_class_ids[None, :].clone(), num_classes=num_labels), dim=1
... ).to(torch.float)
>>> loss = model(**inputs, labels=labels).loss

ModernBertForTokenClassification

class transformers.ModernBertForTokenClassification

< >

( config: ModernBertConfig )

引數

  • config (ModernBertConfig) — 模型配置類,包含模型的所有引數。使用配置檔案初始化不會載入與模型相關的權重,僅載入配置。請檢視 from_pretrained() 方法來載入模型權重。

帶有詞元分類頭的 ModernBert 模型,例如用於命名實體識別(NER)任務。

該模型繼承自 PreTrainedModel。有關該庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等),請檢視超類文件。

該模型也是 PyTorch torch.nn.Module 的子類。可將其用作常規的 PyTorch 模組,並參考 PyTorch 文件瞭解所有與常規用法和行為相關的事項。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.Tensor] = None sliding_window_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = None labels: typing.Optional[torch.Tensor] = None indices: typing.Optional[torch.Tensor] = None cu_seqlens: typing.Optional[torch.Tensor] = None max_seqlen: typing.Optional[int] = None batch_size: typing.Optional[int] = None seq_len: typing.Optional[int] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) transformers.modeling_outputs.TokenClassifierOutputtuple(torch.FloatTensor)

引數

  • input_ids (torch.LongTensor,形狀為 (batch_size, sequence_length)可選) — 詞彙表中輸入序列標記的索引。預設情況下,將忽略填充。

    可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什麼是輸入 ID?

  • attention_mask (torch.Tensor,形狀為 (batch_size, sequence_length)可選) — 避免對填充標記索引執行注意力的掩碼。掩碼值選擇範圍為 [0, 1]

    • 1 表示未被掩碼的標記,
    • 0 表示被掩碼的標記。

    什麼是注意力掩碼?

  • sliding_window_mask (torch.Tensor,形狀為 (batch_size, sequence_length)可選) — 用於避免對填充或遠距離標記執行注意力的掩碼。在 ModernBert 中,只有少數層執行全域性注意力,其餘層執行區域性注意力。當不使用 Flash Attention 時,此掩碼用於避免在區域性注意力層中關注遠距離的標記。
  • position_ids (torch.Tensor,形狀為 (batch_size, sequence_length)可選) — 位置嵌入中每個輸入序列標記的位置索引。選擇範圍為 [0, config.n_positions - 1]

    什麼是位置 ID?

  • inputs_embeds (torch.Tensor,形狀為 (batch_size, sequence_length, hidden_size)可選) — 可選地,你可以選擇直接傳遞嵌入表示而不是 input_ids。如果你想比模型內部的嵌入查詢矩陣更好地控制如何將 input_ids 索引轉換為關聯向量,這會很有用。
  • labels (torch.LongTensor,形狀為 (batch_size, sequence_length)可選) — 用於計算詞元分類損失的標籤。索引應在 [0, ..., config.num_labels - 1] 範圍內。
  • indices (torch.Tensor,形狀為 (total_unpadded_tokens,)可選) — 輸入序列中非填充標記的索引。用於對輸出進行去填充。
  • cu_seqlens (torch.Tensor,形狀為 (batch + 1,)可選) — 輸入序列的累積序列長度。用於索引未填充的張量。
  • max_seqlen (int可選) — 批次中不包括填充標記的最大序列長度。用於對 input_ids 進行去填充和對輸出張量進行填充。
  • batch_size (int可選) — 輸入序列的批次大小。用於填充輸出張量。
  • seq_len (int可選) — 包括填充標記在內的輸入序列的序列長度。用於填充輸出張量。
  • output_attentions (bool可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的 attentions
  • output_hidden_states (bool可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的 hidden_states
  • return_dict (bool可選) — 是否返回一個 ModelOutput 而不是一個普通的元組。

返回

transformers.modeling_outputs.TokenClassifierOutputtuple(torch.FloatTensor)

一個 transformers.modeling_outputs.TokenClassifierOutput 或一個 torch.FloatTensor 的元組(如果傳遞了 return_dict=Falseconfig.return_dict=False),根據配置 (ModernBertConfig) 和輸入包含不同的元素。

  • loss (形狀為 (1,)torch.FloatTensor可選,當提供 labels 時返回) — 分類損失。

  • logits (形狀為 (batch_size, sequence_length, config.num_labels)torch.FloatTensor) — 分類分數(SoftMax 之前)。

  • hidden_states (tuple(torch.FloatTensor), 可選, 當傳遞 output_hidden_states=Trueconfig.output_hidden_states=True 時返回) — torch.FloatTensor 的元組 (如果模型有嵌入層,則一個是嵌入層的輸出,+ 每個層的輸出一個),形狀為 (batch_size, sequence_length, hidden_size)

    模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。

  • attentions (tuple(torch.FloatTensor), 可選, 當傳遞 output_attentions=Trueconfig.output_attentions=True 時返回) — torch.FloatTensor 的元組 (每層一個),形狀為 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。

ModernBertForTokenClassification 的 forward 方法會覆蓋 __call__ 特殊方法。

儘管前向傳播的配方需要在此函式內定義,但之後應呼叫 Module 例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會默默地忽略它們。

示例

>>> from transformers import AutoTokenizer, ModernBertForTokenClassification
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("answerdotai/ModernBERT-base")
>>> model = ModernBertForTokenClassification.from_pretrained("answerdotai/ModernBERT-base")

>>> inputs = tokenizer(
...     "HuggingFace is a company based in Paris and New York", add_special_tokens=False, return_tensors="pt"
... )

>>> with torch.no_grad():
...     logits = model(**inputs).logits

>>> predicted_token_class_ids = logits.argmax(-1)

>>> # Note that tokens are classified rather then input words which means that
>>> # there might be more predicted token classes than words.
>>> # Multiple token classes might account for the same word
>>> predicted_tokens_classes = [model.config.id2label[t.item()] for t in predicted_token_class_ids[0]]
>>> predicted_tokens_classes
...

>>> labels = predicted_token_class_ids
>>> loss = model(**inputs, labels=labels).loss
>>> round(loss.item(), 2)
...

ModernBertForQuestionAnswering

class transformers.ModernBertForQuestionAnswering

< >

( config: ModernBertConfig )

引數

  • config (ModernBertConfig) — 模型配置類,包含模型的所有引數。使用配置檔案初始化不會載入與模型相關的權重,僅載入配置。請檢視 from_pretrained() 方法來載入模型權重。

帶有片段分類頭的 Modernbert transformer,用於抽取式問答任務,如 SQuAD(在隱藏狀態輸出之上有一個線性層,用於計算 span start logitsspan end logits)。

該模型繼承自 PreTrainedModel。有關該庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等),請檢視超類文件。

該模型也是 PyTorch torch.nn.Module 的子類。可將其用作常規的 PyTorch 模組,並參考 PyTorch 文件瞭解所有與常規用法和行為相關的事項。

forward

< >

( input_ids: typing.Optional[torch.Tensor] attention_mask: typing.Optional[torch.Tensor] = None sliding_window_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None start_positions: typing.Optional[torch.Tensor] = None end_positions: typing.Optional[torch.Tensor] = None indices: typing.Optional[torch.Tensor] = None cu_seqlens: typing.Optional[torch.Tensor] = None max_seqlen: typing.Optional[int] = None batch_size: typing.Optional[int] = None seq_len: typing.Optional[int] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None **kwargs ) transformers.modeling_outputs.QuestionAnsweringModelOutputtuple(torch.FloatTensor)

引數

  • input_ids (torch.Tensor,形狀為 (batch_size, sequence_length)可選) — 詞彙表中輸入序列標記的索引。預設情況下,將忽略填充。

    可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什麼是輸入 ID?

  • attention_mask (torch.Tensor,形狀為 (batch_size, sequence_length)可選) — 避免對填充標記索引執行注意力的掩碼。掩碼值選擇範圍為 [0, 1]

    • 1 表示未被掩碼的標記,
    • 0 表示被掩碼的標記。

    什麼是注意力掩碼?

  • sliding_window_mask (torch.Tensor,形狀為 (batch_size, sequence_length)可選) — 用於避免對填充或遠距離標記執行注意力的掩碼。在 ModernBert 中,只有少數層執行全域性注意力,其餘層執行區域性注意力。當不使用 Flash Attention 時,此掩碼用於避免在區域性注意力層中關注遠距離的標記。
  • position_ids (torch.Tensor,形狀為 (batch_size, sequence_length)可選) — 位置嵌入中每個輸入序列標記的位置索引。選擇範圍為 [0, config.n_positions - 1]

    什麼是位置 ID?

  • start_positions (torch.Tensor,形狀為 (batch_size,)可選) — 用於計算詞元分類損失的標記片段開始位置(索引)的標籤。位置被限制在序列長度(sequence_length)內。序列之外的位置在計算損失時不予考慮。
  • end_positions (torch.Tensor,形狀為 (batch_size,)可選) — 用於計算詞元分類損失的標記片段結束位置(索引)的標籤。位置被限制在序列長度(sequence_length)內。序列之外的位置在計算損失時不予考慮。
  • indices (torch.Tensor,形狀為 (total_unpadded_tokens,)可選) — 輸入序列中非填充標記的索引。用於對輸出進行去填充。
  • cu_seqlens (torch.Tensor,形狀為 (batch + 1,)可選) — 輸入序列的累積序列長度。用於索引未填充的張量。
  • max_seqlen (int可選) — 批次中不包括填充標記的最大序列長度。用於對 input_ids 進行去填充和對輸出張量進行填充。
  • batch_size (int可選) — 輸入序列的批次大小。用於填充輸出張量。
  • seq_len (int可選) — 包括填充標記在內的輸入序列的序列長度。用於填充輸出張量。
  • output_attentions (bool可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的 attentions
  • output_hidden_states (bool可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的 hidden_states
  • return_dict (bool可選) — 是否返回一個 ModelOutput 而不是一個普通的元組。

返回

transformers.modeling_outputs.QuestionAnsweringModelOutputtuple(torch.FloatTensor)

一個 transformers.modeling_outputs.QuestionAnsweringModelOutput 或一個 torch.FloatTensor 的元組(如果傳遞了 return_dict=Falseconfig.return_dict=False),根據配置 (ModernBertConfig) 和輸入包含不同的元素。

  • loss (torch.FloatTensor of shape (1,), 可選, 當提供 labels 時返回) — 總範圍提取損失是起始位置和結束位置的交叉熵之和。

  • start_logits (torch.FloatTensor of shape (batch_size, sequence_length)) — 範圍起始分數(SoftMax 之前)。

  • end_logits (torch.FloatTensor of shape (batch_size, sequence_length)) — 範圍結束分數(SoftMax 之前)。

  • hidden_states (tuple(torch.FloatTensor), 可選, 當傳遞 output_hidden_states=Trueconfig.output_hidden_states=True 時返回) — torch.FloatTensor 的元組 (如果模型有嵌入層,則一個是嵌入層的輸出,+ 每個層的輸出一個),形狀為 (batch_size, sequence_length, hidden_size)

    模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。

  • attentions (tuple(torch.FloatTensor), 可選, 當傳遞 output_attentions=Trueconfig.output_attentions=True 時返回) — torch.FloatTensor 的元組 (每層一個),形狀為 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。

ModernBertForQuestionAnswering 的 forward 方法會覆蓋 __call__ 特殊方法。

儘管前向傳播的配方需要在此函式內定義,但之後應呼叫 Module 例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會默默地忽略它們。

示例

>>> from transformers import AutoTokenizer, ModernBertForQuestionAnswering
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("answerdotai/ModernBERT-base")
>>> model = ModernBertForQuestionAnswering.from_pretrained("answerdotai/ModernBERT-base")

>>> question, text = "Who was Jim Henson?", "Jim Henson was a nice puppet"

>>> inputs = tokenizer(question, text, return_tensors="pt")
>>> with torch.no_grad():
...     outputs = model(**inputs)

>>> answer_start_index = outputs.start_logits.argmax()
>>> answer_end_index = outputs.end_logits.argmax()

>>> predict_answer_tokens = inputs.input_ids[0, answer_start_index : answer_end_index + 1]
>>> tokenizer.decode(predict_answer_tokens, skip_special_tokens=True)
...

>>> # target is "nice puppet"
>>> target_start_index = torch.tensor([14])
>>> target_end_index = torch.tensor([15])

>>> outputs = model(**inputs, start_positions=target_start_index, end_positions=target_end_index)
>>> loss = outputs.loss
>>> round(loss.item(), 2)
...

使用技巧

可以使用 HuggingFace Transformers 庫及其用於問答任務的官方指令碼對 ModernBert 模型進行微調。

< > 在 GitHub 上更新

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