有没有办法在没有配置文件的情况下使用预训练的变压器模型?
Posted
技术标签:
【中文标题】有没有办法在没有配置文件的情况下使用预训练的变压器模型?【英文标题】:Is there a way to use a pre-trained transformers model without the configuration file? 【发布时间】:2021-10-15 20:32:02 【问题描述】:我想在问答中微调一个预先训练的变形金刚模型。该模型已在大型工程和科学相关语料库上进行了预训练。
我收到了一个包含模型权重的“checkpoint.pt”文件。他们还为我提供了一个“bert_config.json”文件,但我不确定这是否是正确的配置文件。
from transformers import AutoModel, AutoTokenizer, AutoConfig
MODEL_PATH = "./checkpoint.pt"
config = AutoConfig.from_pretrained("./bert_config.json")
model = AutoModel.from_pretrained(MODEL_PATH, config=config)
我认为 bert_config.json 与“./checkpoint.pt”文件不匹配的原因是,当我使用上面的代码加载模型时,我收到如下错误。
初始化 BertModel 时未使用 ./aerobert/phase2_ckpt_4302592.pt 的模型检查点的某些权重:['files', 'optimizer', 'model', 'master params']
如果您是从针对其他任务或使用其他架构训练的模型的检查点初始化 BertModel(例如,从 BertForPreTraining 模型初始化 BertForSequenceClassification 模型),则这是预期的。 如果您从希望完全相同的模型的检查点初始化 BertModel(从 BertForSequenceClassification 模型初始化 BertForSequenceClassification 模型),则不会出现这种情况。 BertModel 的一些权重没有从 ./aerobert/phase2_ckpt_4302592.pt 的模型检查点初始化,而是新初始化:['encoder.layer.2.attention.output.LayerNorm.weight', 'encoder.layer.6.output. LayerNorm.bias','encoder.layer.7.intermediate.dense.bias','encoder.layer.2.output.LayerNorm.bias','encoder.layer.21.attention.self.value.bias',' encoder.layer.11.attention.self.value.bias',…………
如果我正确地假设“bert_config.json”不是正确的,有没有办法在没有 config.json 文件的情况下正确加载这个模型?
有没有办法从保存的 checkpoint.pt 文件的权重中查看模型架构?
【问题讨论】:
【参考方案1】:这是警告消息,而不是错误。
这意味着预训练模型在某些任务(如问答、传销等)中进行了预训练,如果您自己的微调任务与那些预训练任务相同,那么这不是预期的 ;除非这是预期的,因为某些预训练模型的池化器将不会被微调。
但这条消息并不意味着bert_config.json
不是正确的。你可以在huggingface's official colab notebook上测试它
您可以在此issue 中找到更多信息。
【讨论】:
感谢您的回复。这是一个警告消息而不是错误是正确的。在这种情况下,我只是用 AutoModel 以一般方式加载模型,而不是为 AutoModelForQuestionAnswering 等特定任务加载模型。如果配置正确,是否仍会显示此警告? @Miles-can 是的,你可以在 colab 里试试。以上是关于有没有办法在没有配置文件的情况下使用预训练的变压器模型?的主要内容,如果未能解决你的问题,请参考以下文章