Transformers documentation
ESMC
该模型于 2026-08-19 贡献至 Hugging Face Transformers。
ESMC
概述
ESMC(ESM Cambrian)是由 BioHub 发布的一系列蛋白质语言模型。 它是一个双向 Transformer 编码器,通过在氨基酸序列上执行掩码语言建模目标进行训练。 与 ESM-2 类似,ESMC 生成每个残基的表示,可用于下游蛋白质建模任务。
ESMC 适用于蛋白质分类或 token 分类任务的微调。它也被用作 ESMFold2 的骨干网络,在其中生成表示,并将其作为折叠头的输入。
预训练检查点在 Hugging Face Hub 上可用:
使用示例
ESMC 已注册到 auto 类(AutoModel、AutoModelForMaskedLM、AutoModelForSequenceClassification、AutoModelForTokenClassification)。
import torch
from transformers import pipeline
extractor = pipeline(
task="feature-extraction",
model="biohub/ESMC-300M",
)
# Per-residue representations of shape (batch, sequence_length, hidden_size).
representations = extractor("MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQ", return_tensors="pt")import torch
from transformers import AutoModel, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("biohub/ESMC-300M")
model = AutoModel.from_pretrained("biohub/ESMC-300M")
inputs = tokenizer("MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQ", return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs)
# Per-residue representations of shape (batch, sequence_length, hidden_size).
representations = outputs.last_hidden_stateEsmcConfig
class transformers.EsmcConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonevocab_size: int = 64hidden_size: int = 2560intermediate_size: int = 6912num_hidden_layers: int = 80num_attention_heads: int = 40num_key_value_heads: int | None = Nonehidden_act: str = 'silu'max_position_embeddings: int = 2048initializer_range: float = 0.02pad_token_id: int | None = 1bos_token_id: int | None = 0eos_token_id: int | list[int] | None = 2tie_word_embeddings: bool = Falserope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = Noneattention_bias: bool = Falseattention_dropout: int | float | None = 0.0mlp_bias: bool = Falsehead_dim: int | None = Nonemask_token_id: int | None = 32classifier_dropout: float | None = 0.1 )
参数
- vocab_size (int,可选,默认为 64) — 模型的词汇表大小。定义了 input_ids 可以表示的不同 token 数量。
- hidden_size (int,可选,默认为 2560) — 隐藏表示的维度。
- intermediate_size (int,可选,默认为 6912) — MLP 表示的维度。
- num_hidden_layers (int,可选,默认为 80) — Transformer 解码器中的隐藏层数量。
- num_attention_heads (int,可选,默认为 40) — Transformer 解码器中每个注意力层的注意力头数量。
- num_key_value_heads (int, optional) — 这是用于实现 Grouped Query Attention 的 key_value 头数。如果 num_key_value_heads=num_attention_heads,模型将使用 Multi Head Attention (MHA);如果 num_key_value_heads=1,模型将使用 Multi Query Attention (MQA);否则将使用 GQA。在将多头检查点转换为 GQA 检查点时,每个组的 key 和 value 头应通过对该组内所有原始头进行 meanpooling 来构建。更多详情请参阅 这篇论文。如果未指定,则默认为 num_attention_heads。
- hidden_act (str,可选,默认为 silu) — 解码器中的非线性激活函数(函数或字符串)。例如,“gelu”、 “relu”、“silu” 等。
- max_position_embeddings (int,可选,默认为 2048) — 该模型可能使用的最大序列长度。
- initializer_range (float,可选,默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
- pad_token_id (int,可选,默认为 1) — 词表中用于填充的 token id。
- bos_token_id (int,可选,默认为 0) — 词汇表中用于表示流起始的 token id。
- eos_token_id (Union[int, list[int]],可选,默认为 2) — 词汇表中用于表示流结束(end-of-stream)的 token id。
- tie_word_embeddings (bool,可选,默认为 False) — 是否根据模型的 tied_weights_keys 映射来绑定权重嵌入。
- rope_parameters (Union[~modeling_rope_utils.RopeParameters, dict], 可选) — 包含 RoPE 嵌入配置参数的字典。该字典应包含 rope_theta 的值,并且如果希望使用 RoPE 处理更长的 max_position_embeddings,则可选地包含用于缩放的参数。
- attention_bias (bool,可选,默认为 False) — 在自注意力机制中,是否在查询、键、值和输出投影层中使用偏置。
- attention_dropout (Union[int, float],可选,默认为 0.0) — 注意力概率的 dropout 比率。
- mlp_bias (bool,可选,默认为 False) — 是否在 MLP 层的 up_proj、down_proj 和 gate_proj 层中使用偏置。
- head_dim (int, optional) — 注意力头维度。如果为 None,则默认为 hidden_size // num_attention_heads
- mask_token_id (int, optional, 默认值为 32) —
词汇表中 mask token(
"<mask>")的索引,用于掩码语言建模。 - classifier_dropout (float,可选,默认为 0.1) — 分类头的 Dropout 比率。
这是用于存储 EsmcModel 配置的类。它根据指定的参数实例化 Esmc 模型,并定义模型架构。使用默认值实例化配置将生成与 biohub/ESMC-6B 类似的配置。
配置对象继承自 [PreTrainedConfig],可用于控制模型输出。有关更多信息,请参阅 [PreTrainedConfig] 的文档。
示例:
>>> from transformers import EsmcConfig, EsmcModel
>>> # Initializing an ESMC biohub/ESMC-6B style configuration
>>> configuration = EsmcConfig()
>>> # Initializing a model (with random weights) from the configuration
>>> model = EsmcModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configEsmcTokenizer
class transformers.EsmcTokenizer
< source >( unk_token = '<unk>'cls_token = '<cls>'pad_token = '<pad>'mask_token = '<mask>'eos_token = '<eos>'bos_token = Nonechain_break_token = '|'extra_special_tokens = None**kwargs )
参数
- unk_token (str,可选,默认为 ”
” ) — 未知标记。 - cls_token (str,可选,默认为 ”
” ) — 分类标记(会添加到每个序列的开头)。 - pad_token (str,可选,默认为 ”
” ) — 填充标记。 - mask_token (str,可选,默认为 ”
” ) — 掩码标记,用于掩码语言建模。 - eos_token (str,可选,默认为 ”
” ) — 序列结束标记(会附加到每个序列的末尾)。 - bos_token (str,可选,默认为 ”
” ) — 序列起始标记(会添加到每个序列的开头)。如果未设置,则使用 cls_token。 - chain_break_token (str,可选,默认为 ”|”) — 在多链蛋白质输入中,插入到各链之间的 Token。它被注册为模型特定的特殊 Token,因此以 chain_break_token / chain_break_token_id 的形式暴露。
- extra_special_tokens (list[str],可选) — 需要注册到分词器中的额外特殊标记(从已保存的配置中往返传递)。
构建一个 ESMC 分词器。
此分词器是一个基于 HuggingFace tokenizers 库的字符级分词器。
它使用 <cls> 和 <eos> 标记包裹每个序列,并支持用于多链输入的 | 链中断标记。
EsmcModel
class transformers.EsmcModel
< source >( config: EsmcConfig )
参数
- config (EsmcConfig) — 模型的配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
Esmc 基础模型,输出原始隐藏状态,顶部未添加任何特定分类头。
该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。
forward
< source >( input_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = Nonesequence_id: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → [~modeling_outputs.BaseModelOutput] or tuple(torch.FloatTensor)
参数
- input_ids (torch.Tensor 形状为 (batch_size, sequence_length, 可选) —
输入序列中各 token 在词表中的索引。默认情况下,填充(padding)部分将被忽略。
可以使用 [AutoTokenizer] 获取索引。有关详细信息,请参阅 [PreTrainedTokenizer.encode] 和 [PreTrainedTokenizer.call]。
- attention_mask (torch.Tensor ,形状为 ((batch_size, sequence_length), ,可选) —
用于避免对填充(padding)标记索引执行注意力机制的掩码。掩码值取自 [0, 1]:1 表示未屏蔽的标记,0 表示被屏蔽的标记。什么是注意力掩码? [0, 1]:
- 1 表示未被屏蔽的 token,
- 对于被掩码的 token,值为 0。
- position_ids (torch.Tensor ,形状为 (batch_size, sequence_length, ,可选) —
序列中每个 token 的位置,供 RoPE 使用。默认为
arange(sequence_length).ESMC 位置在整个输入上是绝对位置,并且在多链输入中会跨越链边界持续递增。链结构由
sequence_id单独承载,用于对注意力进行掩码:因此,与库中其他位置使用的打包序列格式不同,这些位置 ID 并非从 0 开始逐链重置,并且链结构也刻意不从中推断。 - sequence_id (torch.Tensor,形状为 (batch_size, sequence_length),可选) —
用于链感知注意力掩码的整数链 ID 张量。具有相同非负整数值标记可以相互关注;具有不同值的标记则不能(跨链掩码)。填充位置应设置为
-1,且输入必须为 右填充(RoPE 使用从 0 开始的绝对位置)。提供此参数时,attention_mask将被忽略。传入sequence_id会构建自定义注意力掩码,这需要torch>=2.6。多链输入还要求使用非 flash 的attn_implementation('sdpa'/'eager'/'flex_attention');flash attention 仅支持单链情况。
返回值
[~modeling_outputs.BaseModelOutput] 或 tuple(torch.FloatTensor)
一个 [~modeling_outputs.BaseModelOutput] 或 torch.FloatTensor 元组(当传入 return_dict=False 或 config.return_dict=False 时),其包含的元素取决于配置([EsmcConfig])和输入。
[EsmcModel] 的 forward 方法重写了 call 特殊方法。
尽管前向传播的实现需要在此函数中定义,但之后应调用 [Module] 实例,而不是调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。
last_hidden_state(形状为 (batch_size, sequence_length, hidden_size) 的 torch.FloatTensor)— 模型最后一层输出的隐藏状态序列。
hidden_states (tuple(torch.FloatTensor),可选,在传入 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 一个 torch.FloatTensor 元组(如果模型具有嵌入层,则包含嵌入层的输出,以及每一层的输出),形状为 (batch_size, sequence_length, hidden_size)。
模型在每一层输出处的隐藏状态,以及可选的初始嵌入输出。
attentions(tuple(torch.FloatTensor),可选,在传入 output_attentions=True 或 config.output_attentions=True 时返回)—— 一个 torch.FloatTensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。
注意力权重,即经过注意力 softmax 之后的权重,用于在自注意力头中计算加权平均值。
示例:
>>> from transformers import AutoTokenizer, EsmcModel
>>> model = EsmcModel.from_pretrained("biohub/ESMC-300M")
>>> tokenizer = AutoTokenizer.from_pretrained("biohub/ESMC-300M")
>>> inputs = tokenizer(["MLKNVQVQLV"], return_tensors="pt")
>>> outputs = model(**inputs)
>>> outputs.last_hidden_state.shape
torch.Size([1, 12, 960])EsmcForMaskedLM
class transformers.EsmcForMaskedLM
< source >( config: EsmcConfig )
参数
- config (EsmcConfig) — 模型的配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
带有 language modeling 头部的 Esmc 模型。”
该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。
forward
< source >( input_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = Nonesequence_id: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → [~modeling_outputs.MaskedLMOutput] or tuple(torch.FloatTensor)
参数
- input_ids (torch.Tensor 形状为 (batch_size, sequence_length, 可选) —
输入序列中各 token 在词表中的索引。默认情况下,填充(padding)部分将被忽略。
可以使用 [AutoTokenizer] 获取索引。有关详细信息,请参阅 [PreTrainedTokenizer.encode] 和 [PreTrainedTokenizer.call]。
- attention_mask (torch.Tensor ,形状为 ((batch_size, sequence_length), ,可选) —
用于避免对填充(padding)标记索引执行注意力机制的掩码。掩码值取自 [0, 1]:1 表示未屏蔽的标记,0 表示被屏蔽的标记。什么是注意力掩码? [0, 1]:
- 1 表示未被屏蔽的 token,
- 对于被掩码的 token,值为 0。
- position_ids (torch.Tensor ,形状为 ((batch_size, sequence_length), ,可选) — 输入序列中每个 token 在位置嵌入中的位置索引。取值范围为 [0, config.n_positions - 1]。什么是位置 ID?.
- sequence_id(形状为 (batch_size, sequence_length) 的 torch.Tensor,可选) — 传递给编码器的整数链 ID 张量,用于链感知注意力掩码。有关编码方式,请参阅 EsmcModel.forward()。
- labels (torch.LongTensor,形状为 (batch_size, sequence_length),可选) —
用于掩码语言建模损失的标签。标签为
-100的位置将被忽略。其他位置的标签必须位于[0, config.vocab_size)范围内。
返回值
[~modeling_outputs.MaskedLMOutput] 或 tuple(torch.FloatTensor)
一个 [~modeling_outputs.MaskedLMOutput] 或 torch.FloatTensor 元组(当传入 return_dict=False 或 config.return_dict=False 时),其包含的元素取决于配置([EsmcConfig])和输入。
[EsmcForMaskedLM] 的 forward 方法重写了 call 特殊方法。
尽管前向传播的实现需要在此函数中定义,但之后应调用 [Module] 实例,而不是调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。
loss (torch.FloatTensor,形状为 (1,),可选,当提供 labels 时返回) — 掩码语言建模(MLM)损失。
logits(形状为 (batch_size, sequence_length, config.vocab_size) 的 torch.FloatTensor)— 语言建模头的预测分数(SoftMax 之前每个词汇表 token 的分数)。
hidden_states (tuple(torch.FloatTensor),可选,在传入 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 一个 torch.FloatTensor 元组(如果模型具有嵌入层,则包含嵌入层的输出,以及每一层的输出),形状为 (batch_size, sequence_length, hidden_size)。
模型在每一层输出处的隐藏状态,以及可选的初始嵌入输出。
attentions(tuple(torch.FloatTensor),可选,在传入 output_attentions=True 或 config.output_attentions=True 时返回)—— 一个 torch.FloatTensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。
注意力权重,即经过注意力 softmax 之后的权重,用于在自注意力头中计算加权平均值。
示例:
>>> from transformers import AutoTokenizer, EsmcForMaskedLM
>>> import torch
>>> model = EsmcForMaskedLM.from_pretrained("biohub/ESMC-300M")
>>> tokenizer = AutoTokenizer.from_pretrained("biohub/ESMC-300M")
>>> inputs = tokenizer(["MLKNVQ<mask>LV"], return_tensors="pt")
>>> outputs = model(**inputs)
>>> outputs.logits.shape
torch.Size([1, 11, 64])EsmcForSequenceClassification
class transformers.EsmcForSequenceClassification
< source >( config: EsmcConfig )
参数
- config (EsmcConfig) — 模型的配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
ESMC 模型,顶部带有序列分类/回归头(在池化输出之上添加一个线性层),例如用于 GLUE 任务。
该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.FloatTensor] = Nonelabels: typing.Optional[torch.LongTensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → SequenceClassifierOutput or tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor形状为(batch_size, sequence_length), ,可选) — 输入序列中各 token 在词汇表中的索引。默认情况下,填充(padding)将被忽略。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor形状为(batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自[0, 1]:- 1 表示未被屏蔽的 token,
- 对于被掩码的 token,值为 0。
- position_ids (
torch.LongTensor形状为(batch_size, sequence_length), 可选) — 输入序列中每个 token 在位置嵌入中的位置索引。取值范围为[0, config.n_positions - 1]. - inputs_embeds (
torch.FloatTensor,形状为(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,则计算分类损失(交叉熵)。
返回值
SequenceClassifierOutput 或 tuple(torch.FloatTensor)
SequenceClassifierOutput 或 torch.FloatTensor 元组(当传入 return_dict=False 或 config.return_dict=False 时),其包含的元素取决于配置(EsmcConfig)和输入。
EsmcForSequenceClassification 的 forward 方法重写了 __call__ 特殊方法。
尽管前向传播的实现需要在此函数中定义,但之后应调用
Module实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。
loss (
torch.FloatTensor,形状为(1,),可选,当提供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=True或config.output_hidden_states=True时返回) — 一个torch.FloatTensor元组(如果模型具有嵌入层,则包含嵌入层的输出,以及每一层的输出),形状为(batch_size, sequence_length, hidden_size)。模型在每一层输出处的隐藏状态,以及可选的初始嵌入输出。
attentions(
tuple(torch.FloatTensor),可选,在传入output_attentions=True或config.output_attentions=True时返回)—— 一个torch.FloatTensor元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。注意力权重,即经过注意力 softmax 之后的权重,用于在自注意力头中计算加权平均值。
单标签分类示例:
>>> import torch
>>> from transformers import AutoTokenizer, EsmcForSequenceClassification
>>> tokenizer = AutoTokenizer.from_pretrained("biohub/ESMC-6B")
>>> model = EsmcForSequenceClassification.from_pretrained("biohub/ESMC-6B")
>>> 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 = EsmcForSequenceClassification.from_pretrained("biohub/ESMC-6B", num_labels=num_labels)
>>> labels = torch.tensor([1])
>>> loss = model(**inputs, labels=labels).loss
>>> round(loss.item(), 2)
...多标签分类示例:
>>> import torch
>>> from transformers import AutoTokenizer, EsmcForSequenceClassification
>>> tokenizer = AutoTokenizer.from_pretrained("biohub/ESMC-6B")
>>> model = EsmcForSequenceClassification.from_pretrained("biohub/ESMC-6B", 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 = EsmcForSequenceClassification.from_pretrained(
... "biohub/ESMC-6B", 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).lossEsmcForTokenClassification
forward
< source >( input_ids: torch.LongTensor | None = Noneattention_mask: torch.Tensor | None = Noneposition_ids: torch.LongTensor | None = Nonepast_key_values: Cache | None = Noneinputs_embeds: torch.FloatTensor | None = Nonelabels: torch.LongTensor | None = Noneuse_cache: bool | None = None**kwargs: Unpack[TransformersKwargs] ) → TokenClassifierOutput
参数
- input_ids (
torch.LongTensor形状为(batch_size, sequence_length), ,可选) — 输入序列中各 token 在词汇表中的索引。默认情况下,填充(padding)将被忽略。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor形状为(batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自[0, 1]:- 1 表示未被屏蔽的 token,
- 对于被掩码的 token,值为 0。
- position_ids (
torch.LongTensor形状为(batch_size, sequence_length), 可选) — 输入序列中每个 token 在位置嵌入中的位置索引。取值范围为[0, config.n_positions - 1]. - past_key_values (
Cache, 可选) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常由模型在解码的先前阶段返回的past_key_values组成,此时use_cache=True或config.use_cache=True.仅允许将 Cache 实例作为输入,请参阅我们的 kv cache 指南。 如果未传入
past_key_values,则默认会初始化 DynamicCache。模型将输出与输入相同的缓存格式。
如果使用了
past_key_values,用户应仅输入未处理的input_ids(即未向该模型提供其过去键值状态的那些),其形状为(batch_size, unprocessed_length),而不是形状为(batch_size, sequence_length)的全部input_ids。 - inputs_embeds (
torch.FloatTensor,形状为(batch_size, sequence_length, hidden_size),可选) — 可选地,您可以选择直接传入嵌入表示,而不是传入input_ids。如果您希望对input_ids索引如何转换为相应向量拥有比模型内部嵌入查找矩阵更多的控制权,这将非常有用。 - labels(形状为
(batch_size, sequence_length)的torch.LongTensor,可选) — 用于计算 token 分类损失的标签。索引应在[0, ..., config.num_labels - 1]范围内。 - use_cache (
bool,可选) — 如果设置为True,则会返回past_key_values键值状态,可用于加速解码(参见past_key_values)。
返回值
TokenClassifierOutput
GenericForTokenClassification 的 forward 方法重写了 __call__ 特殊方法。
尽管前向传播的实现需要在此函数中定义,但之后应调用
Module实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。