在大模型仓库(如Hugging Face)中,例如:https://modelscope.cn/models/ZhipuAI/glm-4-9b-chat/files,通常会发现以下几类文件:
- 模型权重文件:存储训练好的模型参数,是模型推理和微调的基础
.pt
、.ckpt
、.safetensors
- 配置文件:确保模型架构的一致性,使得权重文件能够正确加载
config.json
、generation_config.json
- 词汇表文件:保证输入输出的一致性
tokenizer.json
、tokenizer_config.json
1、模型权重文件
-
模型权重文件是存储训练好的模型参数,是模型推理和微调的基础 ,常见的有
.pt
、.ckpt
、.safetensors
-
不同的框架(如TensorFlow、PyTorch)使用不同的模型文件格式
例如:- safetensors:适配多种框架,支持transformers库的模型加载
- PyTorch:选择下载
.pt
或.bin
格式的模型文件。 - TensorFlow:选择下载
.ckpt
或.h5
格式的模型文件。
1.1 safetensors是什么?
-
.safetensors
是由Hugging Face提出的一种新型的模型权重文件格式,有以下特点:- 安全性:
.safetensors
采用了加密和校验机制,防止模型文件被篡改或注入恶意代码 - 性能:优化了数据加载和解析速度
- 跨框架支持:有多种深度学习框架的兼容性,便于在不同环境中使用
- 安全性:
-
.safetensors
中,大模型可被分为多个部分,格式类似modelname-0001.safetensors
、modelname-0002.safetensors
-
model.safetensors.index.json
是索引文件,记录了模型的各个部分的位置和大小信息
2、配置文件
config.json
、generation_config.json
2.1 config.json
config.json
包含模型的配置信息(如模型架构、参数设置等),可能包含隐藏层的数量、每层的神经元数、注意力头的数量等config.json
的基本结构如下:
{"architectures": ["LlamaForCausalLM"],"hidden_act": "silu","hidden_size": 8192,"num_hidden_layers": 80,"max_position_embeddings": 8192,"model_type": "llama","num_attention_heads": 64,"vocab_size": 128256,......
}
- 例如
architectures
字段指定了模型的架构,hidden_act
字段指定了隐藏层的激活函数,hidden_size
字段指定了隐藏层的神经元数 num_attention_heads
字段指定了注意力头的数量,max_position_embeddings
字段指定了模型能处理的最大输入长度等
2.2 generation_config.json
generation_config.json
是用于生成文本的配置文件,包含了生成文本时的参数设置,如max_length
、temperature
、top_k
等generation_config.json
的基本结构如下:
{"bos_token_id": 128000,"eos_token_id": 128001,"do_sample": true,"temperature": 0.6,"max_length": 4096,"top_p": 0.9,"transformers_version": "4.40.0.dev0"
}
- 例如
bos_token_id
字段指定了开始标记的ID,eos_token_id
字段指定了结束标记的ID,do_sample
字段指定了是否使用采样,temperature
字段用于控制生成文本的随机性,max_length
字段指定了生成文本的最大长度,top_p
字段指定了采样的概率等 config.json
和generation_config.json
都可能包含"bos_token_id"
(Beginning of Sequence Token ID)和"eos_token_id"
(End of Sequence Token ID)。在config.json
中,这两个字段用于模型的加载和训练,而在generation_config.json
中,这两个字段用于生成文本时的参数设置config.json
提供模型的基本信息,而generation_config.json
则细化为生成任务的具体需求
3、词汇表文件
词汇表文件包含了模型使用的词汇表或标记器信息,是自然语言处理模型理解和生成文本的基础。
tokenizer.json
、tokenizer_config.json
3.1 tokenizer.json
tokenizer.json
包含了模型使用的词汇表信息,如词汇表的大小、特殊标记的ID等tokenizer.json
的基本结构如下:
{"version": "1.0","truncation": {"max_length": 128,"strategy": "longest_first"},"padding": {"side": "right","pad_id": 0,"pad_token": "[PAD]"},"added_tokens": [{"id": 128010,"content": "[CUSTOM]"}],"normalizer": {"type": "NFD","lowercase": true,"strip_accents": true},"pre_tokenizer": {"type": "ByteLevel","add_prefix_space": true},"post_processor": {"type": "AddSpecialTokens","special_tokens": {"cls_token": "[CLS]","sep_token": "[SEP]"}},"decoder": {"type": "ByteLevel"},"model": {"type": "BPE",...}
}
- 其中
truncation
是定义截断策略,用于限制输入序列的最大长度,padding
用于统一输入序列的长度,added_tokens
列出分词器额外添加到词汇表中的特殊标记或自定义标记 normalizer
用于定义文本标准化的步骤和规则,用于在分词前对输入文本进行预处理,pre_tokenizer
定义分词器如何将输入文本分割为初步的tokens,post_processor
定义分词后处理的步骤decoder
定义如何将tokens ID 序列解码回原始文本,model
定义了分词器的模型信息,如词汇表、合并规则(对于 BPE)等
3.2 tokenizer_config.json
tokenizer_config.json
是用于生成文本的配置文件,包含了生成文本时的参数设置,如max_length
、temperature
、top_k
等tokenizer_config.json
的基本结构如下:
{"added_tokens_decoder": [],"bos_token": "begin_of_text |>","clean_up_tokenization_spaces": true,"eos_token": "<|end_of_text|>","model_input_names": ["input_ids", "attention_mask"],"model_max_length": 1000000,"tokenizer_class": "PreTrainedTokenizerFast"
}
- 其中
added_tokens_decoder
定义分词器在解码(将 token ID 转换回文本)过程中需要额外处理的特殊标记或自定义标记 bos_token
、eos_token
定义开始、结束标记,clean_up_tokenization_spaces
定义了是否清除分词后的多余空格等tokenizer.json
和tokenizer_config.json
的区别:tokenizer.json
侧重于分词器的训练和加载,而tokenizer_config.json
更侧重于生成文本时的参数设置
为什么很多模型都没有 vocab.txt 了?现代分词器采用了更为丰富和灵活的文件格式,如 tokenizer.json,以支持更复杂的分词策略和特殊标记处理