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

Huggingface从零训练RoBERTa类模型加载预训练权重问题咨询

问题确认

你看到的提示确实说明当前训练是基于roberta-base的公开预训练权重做微调,不是从零开始的随机初始化训练。

问题产生的原因

你运行脚本时传入的参数--model_name_or_path roberta-base优先级高于--config_name,run_mlm.py的默认逻辑会优先加载model_name_or_path对应的预训练权重,即使你指定了自定义配置目录也不会覆盖权重加载逻辑。

另外你的自定义config.json还有两处不匹配的问题:

  • 你训练的自定义分词器词表大小是52000,但从roberta-base导出的配置里vocab_size仍然是默认的50265,词表维度不匹配
  • 你训练参数里设置了max_seq_length=1024,但原配置里max_position_embeddings只有514,无法支持1024长度的序列输入

修改步骤

  1. 调整训练启动命令
    把参数--model_name_or_path roberta-base替换为--model_type roberta,修改后命令如下:
python transformer_run_mlm.py \
--model_type roberta  \
--config_name ./my_dir/ \
--tokenizer_name ./my_dir/ \
--no_use_fast_tokenizer \
--train_file ./my_own_training_file.txt \
--validation_split_percentage 10 \
--line_by_line \
--output_dir /my_output_dir/ \
--do_train \
--do_eval \
--per_device_train_batch_size 64 \
--per_device_eval_batch_size 16 \
--learning_rate 1e-4 \
--max_seq_length 1024 \
--seed 42 \
--num_train_epochs 100 

这样脚本就只会读取你自定义的配置,不会加载任何公开预训练权重,自动随机初始化模型参数。

  1. 修正自定义配置文件
    建议直接通过RobertaConfig生成适配你需求的配置,不要从预训练模型导出,可以避免参数遗留问题,生成代码参考:
from transformers import RobertaConfig

config = RobertaConfig(
    vocab_size=52000, # 匹配你自定义分词器的词表大小
    max_position_embeddings=1026, # 适配1024的最大序列长度(RoBERTa默认多预留2个位置)
    hidden_size=768,
    num_attention_heads=12,
    num_hidden_layers=12,
    hidden_act="gelu",
    attention_probs_dropout_prob=0.1,
    hidden_dropout_prob=0.1,
    intermediate_size=3072,
    layer_norm_eps=1e-05,
    initializer_range=0.02,
    type_vocab_size=1,
    pad_token_id=1,
    bos_token_id=0,
    eos_token_id=2,
    architectures=["RobertaForMaskedLM"]
)

# 保存到自定义目录
config.save_pretrained("./my_dir/")

修改完成后重新启动训练,就不会再出现加载roberta-base预训练权重的提示,模型完全从零开始训练。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:27:03