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

【知识扫盲】tokenizer.json中的vocab和merges是什么?

在自然语言处理里,tokenizer.json 文件一般是由 Hugging Face 的 Tokenizers 库生成的,它是分词器配置的核心文件。这里面的 vocabmerges 是子词分词算法(像 BPE 这种)的重要构成要素。下面为你详细解释它们的作用和工作原理:

1. vocab(词汇表)

  • 功能vocab 是一个从 token(子词)到 ID 的映射表,其作用是把文本转换为模型能够处理的数字表示。
  • 内容形式
    • 基础字符:涵盖了单个字符,例如 ["a", "b", "c", ...]
    • 常见子词:包含常见的前缀、后缀或者词片段,例如 ["Ġthe", "Ġquick", "Ġbrown", ...]这里的 Ġ 代表空格)。
    • 特殊 token:有用于填充的 [PAD]、句子开始的 [CLS]、分隔的 [SEP]、未知词的 [UNK] 等。
  • 示例
{"vocab": {"Ġ": 0,"a": 1,"b": 2,"c": 3,"Ġthe": 4,"Ġquick": 5,"[PAD]": 100,"[CLS]": 101,"[SEP]": 102,"[UNK]": 103}
}
  • 运作机制
    在分词时,文本会先被分解成基础字符,接着依据 merges 规则合并成子词,最后通过 vocab 将这些子词转换为对应的 ID。

2. merges(合并规则)

  • 功能merges 是一系列的合并规则,其目的是把基础字符组合成子词。这体现了 BPE(字节对编码)算法的核心思想。
  • 内容形式
    • 它是一个按照合并优先级排序的二元组列表,格式为 ["ab", "Ġt", "he", ...]
    • 排序越靠前的规则,应用的优先级越高。
  • 示例
{"merges": ["a b",    // 先将 "a" 和 "b" 合并为 "ab""Ġ t",    // 再将 "Ġ" 和 "t" 合并为 "Ġt""Ġt h",   // 接着将 "Ġt" 和 "h" 合并为 "Ġth""Ġth e"   // 最后将 "Ġth" 和 "e" 合并为 "Ġthe"]
}
  • 运作机制

    1. 初始状态:文本被拆分成单个字符,比如 "The dog" 会变成 ["Ġ", "T", "h", "e", "Ġ", "d", "o", "g"]
    2. 应用合并规则:按照 merges 中的顺序依次进行合并。
      • 首先合并 "Ġ""T",得到 ["ĠT", "h", "e", "Ġ", "d", "o", "g"]
      • 然后合并 "h""e",得到 ["ĠT", "he", "Ġ", "d", "o", "g"]
      • 继续合并 "d""o",得到 ["ĠT", "he", "Ġ", "do", "g"]
      • 最后合并 "do""g",得到 ["ĠT", "he", "Ġ", "dog"]
    3. 映射到 ID:利用 vocab 将这些子词转换为 ID,例如 [103, 4, 0, 500](假设 "ĠT" 是未知词,对应 [UNK] 的 ID 为 103)。

    这些id就是token id,可参考文章:大模型推理过程中的tokenazier,tokenid,词向量之间的关系

3. 二者的协同工作方式

  • 训练流程
    1. 从所有出现的字符构成初始词汇表。
    2. 统计训练数据中字符对的出现频率。
    3. 不断合并最常出现的字符对,每合并一次就更新一次词汇表。
    4. 重复上述合并过程,直到达到预设的词汇表大小或者合并次数。
  • 分词流程
    1. 把输入文本拆分成字符序列。
    2. 按照 merges 规则进行合并,直到无法再合并或者达到最大子词长度。
    3. 查找 vocab,将子词转换为 ID。

4. 实际应用案例

假设 vocabmerges 已经训练好,对句子 "Hello world!" 进行分词:

  1. 初始字符["Ġ", "H", "e", "l", "l", "o", "Ġ", "w", "o", "r", "l", "d", "!"]
  2. 应用合并规则
    • 合并 "H""e",得到 ["Ġ", "He", "l", "l", "o", "Ġ", "w", "o", "r", "l", "d", "!"]
    • 合并 "l""l",得到 ["Ġ", "He", "ll", "o", "Ġ", "w", "o", "r", "l", "d", "!"]
    • 合并 "He""ll",得到 ["Ġ", "Hell", "o", "Ġ", "w", "o", "r", "l", "d", "!"]
    • 合并 "Hell""o",得到 ["Ġ", "Hello", "Ġ", "w", "o", "r", "l", "d", "!"]
    • 合并 "Ġ""Hello",得到 ["ĠHello", "Ġ", "w", "o", "r", "l", "d", "!"]
    • 合并 "w""o",得到 ["ĠHello", "Ġ", "wo", "r", "l", "d", "!"]
    • 合并 "wo""r",得到 ["ĠHello", "Ġ", "wor", "l", "d", "!"]
    • 合并 "wor""l",得到 ["ĠHello", "Ġ", "worl", "d", "!"]
    • 合并 "worl""d",得到 ["ĠHello", "Ġ", "world", "!"]
    • 合并 "Ġ""world",得到 ["ĠHello", "Ġworld", "!"]
  3. 转换为 ID:假设 vocab 中有对应的项,那么结果就是 [1000, 1001, 1002]

总结

  • vocab:是子词到 ID 的映射表,它能将文本转换为模型可以处理的数字形式。
  • merges:是子词合并规则,它决定了如何从基础字符构建出子词。
  • 相互关系merges 规则生成子词,而 vocab 负责存储这些子词并为它们分配 ID。

通过这种方式,子词分词器能够在处理常见词时保持完整性,同时将罕见词拆分成有意义的片段,有效平衡了词汇表的大小和表达能力。


文章转载自:
http://adytum.isnyv.cn
http://boastful.isnyv.cn
http://apodeictic.isnyv.cn
http://aspermous.isnyv.cn
http://arrestment.isnyv.cn
http://binding.isnyv.cn
http://cetologist.isnyv.cn
http://accountably.isnyv.cn
http://bemazed.isnyv.cn
http://arnhem.isnyv.cn
http://burgundian.isnyv.cn
http://carryall.isnyv.cn
http://atmologist.isnyv.cn
http://anabaptistical.isnyv.cn
http://assaulter.isnyv.cn
http://areography.isnyv.cn
http://cassava.isnyv.cn
http://celiotomy.isnyv.cn
http://arizona.isnyv.cn
http://charybdis.isnyv.cn
http://aeroneer.isnyv.cn
http://bumf.isnyv.cn
http://aircraftman.isnyv.cn
http://antismoking.isnyv.cn
http://aggrieve.isnyv.cn
http://adroit.isnyv.cn
http://avitrice.isnyv.cn
http://amor.isnyv.cn
http://administrivia.isnyv.cn
http://cartilage.isnyv.cn
http://www.dtcms.com/a/280855.html

相关文章:

  • 【机器学习】第二章 Python入门
  • 【Unity】MiniGame编辑器小游戏(十四)基础支持模块(游戏窗口、游戏对象、物理系统、动画系统、射线检测)
  • 数学中的教学思想
  • MySQL 8.0 OCP 1Z0-908 题目解析(24)
  • P3842 [TJOI2007] 线段
  • Sharding-JDBC 分布式事务实战指南:XA/Seata 方案解析
  • sqli-labs靶场通关笔记:第18-19关 HTTP头部注入
  • 【C++】初识C++(1)
  • 课题学习笔记1——文本问答与信息抽取关键技术研究论文阅读(用于无结构化文本问答的文本生成技术)
  • Java 大视界 -- Java 大数据机器学习模型在金融风险传染路径分析与防控策略制定中的应用(347)
  • QT——QList的详细讲解
  • Redis的下载安装+基础操作+redis客户端的安装
  • 使用 1Panel PHP 运行环境部署 WordPress
  • 辨析git reset三种模式以及和git revert的区别:回退到指定版本和撤销指定版本的操作
  • 零样本轴承故障诊断SC - GAN模型
  • 【PCIe 总线及设备入门学习专栏 5.1.2 -- PCIe EP core_rst_n 与 app_rst_n】
  • React-router
  • 未来大模型在中小型企业如何实现普及
  • PG备份一(逻辑备份)
  • Kafka——生产者消息分区机制原理剖析
  • Java基础教程(009): Java 的封装
  • Samba配置使用
  • 算法学习笔记:23.贪心算法之活动选择问题 ——从原理到实战,涵盖 LeetCode 与考研 408 例题
  • 重学前端005 --- 响应式网页设计 CSS 盒子模型
  • Python函数进阶
  • python 基于 httpx 的流式请求
  • 封装---统一处理接口与打印错误信息
  • Linux下调试器gdb/cgdb的使用
  • Linux系统调优和工具
  • [面试] 手写题-对象数组根据某个字段进行分组