You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改HuggingFace预训练Longformer模型的token长度等参数

问题1:设置max_length=20但tokenizer未填充到对应长度的原因

padding=True参数的默认逻辑是仅填充到当前批次内的最长序列长度,你的批次里只有1个句子,tokenize后的实际长度是7,所以最终输出长度为7。要填充到你指定的max_length,需要把padding参数的值改为'max_length',同时建议补充truncation=True防止句子超过max_length时报错。

修改后的编码代码如下:

# 注意你传入的text是列表,取第一个元素即可
input_ids = torch.tensor(tokenizer.encode(text[0], max_length=20, padding='max_length', truncation=True, add_special_tokens=True)).unsqueeze(0)
# 此时输出的序列长度就是20

更推荐直接使用tokenizer的调用方法,同时返回input_ids和attention_mask,避免手动构造mask出错:

encoded_input = tokenizer(text[0], max_length=20, padding='max_length', truncation=True, return_tensors='pt')
input_ids = encoded_input.input_ids
attention_mask = encoded_input.attention_mask

问题2:模型输出token数固定为512的解决方案

Longformer本身支持动态序列长度,输出的hidden states维度会完全匹配输入的input_ids长度,出现固定512的原因有两个:

  1. 你输入的input_ids实际长度就被补到了512(对应第一个参数设置错误的问题)
  2. 旧版本Longformer会默认将输入序列填充到attention_window参数的整数倍,默认attention_window=512,所以长度不足时会自动补到512。

你可以在加载模型时指定attention_window为你常用的最大长度,或者在调用模型时补充参数pad_to_multiple_of=1关闭自动填充:

# 加载模型时指定关闭自动填充到窗口倍数
model = LongformerModel.from_pretrained(
    'allenai/longformer-base-4096',
    output_hidden_states = True,
    pad_to_multiple_of=1
)

按上述方法修改后,输入的序列长度是多少,模型输出的hidden states对应的token维度就是多少,完全适配动态输入长度。


内容的提问来源于stack exchange,提问作者MAC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 08:06:00