当前位置: 首页 > news >正文

【TrOCR】模型预训练权重各个文件说明

预训练权重与模型训练结果解读

huggingface上预训练权重trocr-base-printed
在这里插入图片描述
下载后的trocr-base-printed是一个文件夹,结构如下:
在这里插入图片描述

以下为你详细解释 trocr-base-printed 模型文件夹中各文件的含义与作用,帮你理解模型的组成结构:

1. 模型配置相关文件

  • config.json
    模型核心配置文件,记录了模型架构的关键参数,比如:

    • 编码器(Encoder)和解码器(Decoder)的层数、隐藏层维度、注意力头数等网络结构信息;
    • 模型训练时的超参数(如 hidden_sizenum_attention_heads 等);
    • 用于文本生成的基础配置(如 max_length 初始值,不过更详细的生成配置一般在 generation_config.json 中)。
      加载模型时,transformers 会依据此文件还原模型结构。
  • generation_config.json
    专门用于文本生成(model.generate)的配置文件,定义了生成文本时的策略:

    • max_new_tokens/max_length:限制生成文本的最大长度;
    • num_beams:beam search 算法的 beam 数量(影响生成多样性和质量);
    • temperature:控制生成的随机性(值越高越随机,越低越保守);
    • early_stopping:是否在 beam search 中提前终止(找到“足够好”的结果就停止);
    • 还有 no_repeat_ngram_size(避免重复短语)、length_penalty(长度惩罚系数)等,直接决定生成文本的行为。
  • preprocessor_config.json
    记录预处理相关配置(若用 TrOCRProcessor 这类工具),定义了图像/文本输入如何转换为模型可接受的格式:

    • 图像预处理: resize 尺寸、归一化参数(均值、方差)、是否转灰度等;
    • 文本预处理:分词器关联(比如关联 vocab.json 对应的分词规则)、特殊 token 映射等。
      确保输入数据能按预训练时的逻辑,被正确编码为模型可用的张量。
  • tokenizer_config.json
    分词器(Tokenizer)的配置文件,说明分词器的类型、行为:

    • 定义分词器的基础参数(如 model_max_length 限制文本最大长度);
    • 关联 vocab.jsonmerges.txt 等文件,指定分词规则(BPE 分词的话,就靠 merges.txt 定义子词合并方式);
    • 声明特殊 token(如 cls_tokensep_tokenpad_token 的 id 和文本形式),让分词器知道如何处理这些特殊标记。

2. 文本分词与词表相关文件

  • vocab.json
    词表文件,存储了模型分词后的“原子单元”(子词或 token)与对应 ID 的映射。
    比如英文中可能有 "hello": 123, "##world": 456## 表示子词延续),是分词器将文本拆分为模型可理解 token 的依据,所有文本输入都会先转成这些 ID 序列,再喂给模型。

  • merges.txt
    若用 BPE(字节对编码)分词算法,这个文件记录了子词合并的规则。
    训练分词器时,会统计最频繁共现的字符对,逐步合并成更长的子词,merges.txt 按顺序保存这些合并操作,分词时反向拆分/正向合并文本,确保和预训练时的分词逻辑一致。

  • special_tokens_map.json
    显式定义特殊 token 的映射关系,说明哪些 token 对应 cls(分类)、sep(分隔)、pad(填充)、eos(结束)等角色。
    让分词器、模型能统一识别这些特殊标记,比如模型解码到 eos_token 就知道文本生成结束,pad_token 用于对齐 batch 内不等长的文本。

3. 模型权重文件

  • model.safetensors
    模型的权重文件,用 safetensors 格式存储(安全、高效的张量存储格式),包含:
    • 编码器(Vision Encoder)的所有层权重(卷积、注意力、全连接等参数);
    • 解码器(Text Decoder)的 Transformer 层权重;
    • 可能还有输出层(Projection)的参数,负责将解码器输出映射到 vocab.json 的词表空间。
      加载模型时,from_pretrained 会读取这里的权重,初始化网络参数,让模型具备预训练好的能力。

这些文件相互配合,从 数据预处理(靠 preprocessor/tokenizer 配置)→ 模型结构定义config.json)→ 权重加载model.safetensors)→ 文本生成策略generation_config.json),完整支撑了模型从“加载”到“运行”的全流程 。理解它们的作用,也能更清晰排查模型使用、微调时遇到的问题~

vocab.json

在这里插入图片描述
用Pycharm快捷键Ctrl+Alt+L,格式化一下:

在这里插入图片描述
以下为你详细解读 vocab.json 中各类 Token 的含义、作用,以及背后的分词逻辑(结合 TrOCR 这类基于 BPE 分词的模型场景),帮你理解文本是如何被“拆”成模型能懂的单元:

一、核心特殊 Token(模型运行的基础标记)

TokenID含义与作用
<s>0一般是 序列开始标记(Sentence Start),文本生成任务中,常作为解码器的“起始信号”。比如用 model.generate 时,解码器会先拿到 <s>,再逐步生成后续内容。
<pad>1填充标记(Padding),用来对齐一个 batch 中长度不一的文本。短文本会用 <pad> 填充到最大长度,模型会忽略这些位置的损失(或特殊处理)。
</s>2序列结束标记(Sentence End),文本生成时,模型输出 </s> 就表示生成结束;也用于区分不同文本片段(比如多句子输入时)。
<unk>3未知标记(Unknown),遇到分词器不认识的字符/子词时,会替换成 <unk>,避免因词表外内容报错,不过也会损失一些语义信息。

二、标点与常见词 Token(文本内容的基础单元)

  • 标点符号:如 .:4、,:6、-:12
    这些是文本中常见的标点,会被单独拆分为 Token(或和前后子词结合,取决于 BPE 规则)。作用是保留文本的语法结构,让模型理解句子停顿、断句等。

  • 常见英文单词/子词:如 Ġthe:5、Ġto:7、Ġand:8

    • 前面的 Ġ(实际是一个特殊的空白符号,可能显示为 Ġ## 类似标记),表示这个 Token 是词的开头(或独立词)。
    • 比如 Ġthe 就是完整的单词 the,而如果有 ##e 这样的 Token(假设存在),则表示它是某个词中间的子词(比如 another 可能被拆成 an + ##other )。
    • 这类常见词的 Token,是预训练时统计高频出现的结果,让模型能高效处理日常文本。

三、特殊字符与缩写 Token(覆盖多样文本场景)

  • 特殊字符:如 âĢ:17(可能是文本编码问题,或原始数据中的特殊符号)
    预训练数据中如果包含特殊符号、小众语言字符、emoji 等,会被编码成对应的 Token 存入词表,确保模型能“看见”这些内容(虽然可能出现频率低,语义难捕捉)。

  • 缩写/词缀:如 's:18(英文里的所有格缩写,如 Virgil's 可能拆成 ĠVirgil + 's
    这类 Token 处理语言中的“紧凑表达”,让分词器不用生硬拆分 's,保留语义完整性。

四、分词逻辑与 merges.txt 的关联(BPE 分词的关键)

vocab.json 里的 Token 是 BPE 分词的“终点”——预训练时,先统计所有可能的字符对,按频率合并成子词,直到达到预设词表大小。而 merges.txt 就记录了合并的步骤(比如先合并 eses,再合并 theesthees 等,不过实际是更细的字符对合并)。

举个流程示例:
原始文本 → 拆成字符(t, h, e, , w, o, r, l, d…)→ 按 merges.txt 合并高频对 → 最终得到 vocab.json 里的 ĠtheĠworld 等 Token。

所以,vocab.json 里的每个 Token,都是 BPE 算法“合并到不能再合并(或达到词表限制)”的产物,平衡了词表大小和语义表达力。

五、对模型训练/推理的影响

  • 训练阶段:模型学习的是这些 Token 之间的关联(比如看到 Ġthe 后,更可能接 Ġworld 还是 Ġof ),通过预测下一个 Token 学习文本规律。
  • 推理阶段:输入文本会先经分词器,按 vocab.jsonmerges.txt 拆成对应 Token ID,再喂给模型;模型输出的 ID,也会通过 vocab.json 转回文本(比如 ID5 对应 Ġthe,最终去掉 Ġ 显示为 the )。

简单说,vocab.json 就是模型的“字典”——所有输入输出都要通过这个“字典”转成数字 ID 才能被模型理解,而背后的 merges.txt 则是“字典是怎么造出来的”规则书。理解这套逻辑,调参(比如词表大小)、处理未登录词(Out-of-Vocabulary)时就更清晰啦~

http://www.dtcms.com/a/342296.html

相关文章:

  • 从800米到2000米:耐达讯自动化Profibus转光纤如何让软启动器效率翻倍?
  • 表达式(CSP-J 2021-Expr)题目详解
  • Django的生命周期
  • 如何在DHTMLX Scheduler中实现带拖拽的任务待办区(Backlog)
  • 非常飘逸的 Qt 菜单控件
  • logger级别及大小
  • 如何安装和配置W3 Total Cache以提升WordPress网站性能
  • C++设计模式--策略模式与观察者模式
  • 小红书AI落地与前端开发技术全解析(From AI)
  • Python 正则表达式(更长的正则表达式示例)
  • 【基础排序】CF - 赌场游戏Playing in a Casino
  • 机器学习4
  • 精算中的提升曲线(Lift Curve)与机器学习中的差别
  • 网络打印机安装操作指南
  • 健康常识查询系统|基于java和小程序的健康常识查询系统设计与实现(源码+数据库+文档)
  • CentOS7安装部署PostgreSQL
  • 《PostgreSQL内核学习:slot_deform_heap_tuple 的分支消除与特化路径优化》
  • ES_文档
  • 2025-08-21 Python进阶6——迭代器生成器与with
  • Python项目开发- 动态设置工作目录与模块搜索路径
  • strerror和perror函数的使用及其联系和区别
  • 43-Python基础语法-3
  • QWidget/QMainWindow与QLayout的布局
  • CSDN使用技巧
  • Pandas中数据分组进阶以及数据透视表
  • 链表-143.重排链表-力扣(LeetCode)
  • 微信小程序集成vant-weapp时,构建npm报错的解决办法
  • 基于springboot的中医养生管理系统
  • Pytorch基础学习--张量(生成,索引,变形)
  • 火语言 RPA 进阶功能:让自动化更实用​