接着 Transformers中加载预训练模型的过程剖析(一) 来讲模型初始和载入预训练权重。
初始化模型
经过以上两个步骤,对于下载的 shibing624/text2vec-base-chinese-paraphrase 预训练模型(底层的模型是ernie),我们从代码 model = AutoModel.from_pretrained(model_path) 成功加载了配置文件,并且最终返回了 model = ErnieModel.from_pretrained(model_path) ,换成以其他模型为基础的预训练模型,对应会得到 model = xxx.from_pretrained(model_path) 。
下面来看看用配置文件来初始化模型和构建模型的各个层和结构的过程。
类 ErnieModel 里是没有 from_pretrained 方法的,它只拿了配置文件和定义了模型的架构(将用于初始化模型),如图15所示。顺着父类可以发现 from_pretrained 方法是在 transformers/modeling_utils.py 文件中(其他模型的话同样也会找到这里),且其是一个类方法,cls表示调用它的类 ErnieModel ,如图16所示。