【知识扫盲】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://www.pswp.cn/news/915269.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/915269.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【安卓笔记】RxJava的Hook机制,整体拦截器

0. 环境: 电脑:Windows10 Android Studio: 2024.3.2 编程语言: Java Gradle version:8.11.1 Compile Sdk Version:35 Java 版本:Java11 1. 使用场景 整个项目都是用了RxJava,需要对 整个/部分 项目…

NX二次开发常用函数——从一个坐标系到另一个坐标系的转换(UF_MTX4_csys_to_csys )相同体坐标转化

再做项目时相信大家都会用到坐标转化,例如,我之前写的案例分享中的博客都用到过,之前总是找借口进行if else判断,虽然可以实现,但是比起坐标变换无论代码复杂程度还是运行速度都比较差,之前参加过曹大师的教学训练营,但是明显感觉到大佬写代码的逻辑性以及模块化能力都比…

数据库防止数组字符串序列化

请求接到数组["aa","bb"]后,后端需要转换成字符串Java 8 使用 String.join()String[] arr {"aa", "bb"}; String str String.join(",", arr); // "aa,bb"如果采用其他转换,在字段存入数据库后会["\"a…

若依框架文件上传返回路径端口错误 - Nginx代理环境下serverConfig.getUrl()获取端口异常

目录一 、问题描述二、问题现象三、问题根本原因3.1 代码分析3.2 问题核心四、解决方案五、总结一 、问题描述 在使用若依框架进行项目开发时,遇到了一个令人困扰的问题:文件上传功能在本地开发环境运行正常,但部署到服务器后,上…

使用PyInstaller打包 Python 工程

引言:大模型是个好工具,尽管好多内容都是拼凑的,但是整理学到的就是自己的。因工作需要隐藏python源代码,方法有PyInstaller 、Cpython等多种方法,PyInstaller更为常用,PyInstaller打包 Python 工程步骤整理如下: 一、确保系统环境准备就绪 安装 Python 和 pip 确认版本…

Python 程序设计讲义(1):PyCharm 安装教程

Python 程序设计讲义(1):PyCharm 安装教程 一、安装 Python 解释器 1、下载 Python 安装文件 点击如下链接进入 Python 官网: https://www.python.org/ 在弹出的页面中单击【Downloads】,然后单击下面的【Download Pyt…

uniapp云打包安卓

1、基础云打包 2、修改logo3、怎么实现下拉菜单4、修改启动页启动页默认这样 5、URL Scheme页面跳转

Python----NLP自然语言处理(英文分词器--NLTK)

一、NLTK_介绍NLTK(Natural Language Toolkit,自然语言处理工具包),一个主要用于清洗和处理英文文本的Python工具包。它有很多的功能,我们主要使用的是它的分词功能,之前讲过中文分词是比较复杂的&#xff…

传统浏览器过时了?Dia如何用AI重新定义上网体验

欢迎来到我的博客,代码的世界里,每一行都是一个故事🎏:你只管努力,剩下的交给时间 🏠 :小破站 传统浏览器过时了?Dia如何用AI重新定义上网体验它是什么核心功能搜索编程左右互动感谢…

基于DTLC-AEC与DTLN的轻量级实时语音增强系统设计与实现

基于DTLC-AEC与DTLN的轻量级实时语音增强系统设计与实现 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 1. 引言 在当今的互联网通信时代,实时语音通信已成为人们日常生活中不可或缺的一部分。然而,语音通信质量常…

Attu-Milvus向量数据库可视化工具

本文介绍了如何安装可视化工具Attu,包括使用Docker镜像启动并访问Attu服务。 目录 前言 一、Attu安装 1. Docker容器安装 2. 桌面程序安装 二、使用 Milvus Web U 前言 Attu是一款专为Milvus向量数据库打造的开源数据库管理工具,提供了便捷的图形化…

高效检测数据突变的MDAM算法详解

在数据分析领域,我们经常需要检测数据序列中的异常变化。今天给大家介绍一种简单但非常有效的算法——MDAM (Mean Drift Accumulation Monitor),它能帮你轻松发现数据中的均值突变现象!1. 🔍 算法原理累计数均值突变检测算法(MDAM…

记录一道sql面试题3

题目:有一张表a,和一张表ba:id age name1 18 kethy2 32 kavin3 22 tonyb:id dept description2 sale today2 dev sunday提问:将a和b两张表左连接查询,条件是a.id b.id会得到什么结果。查询的字段为a.*,b.* 。说明:左表 a 中 id1 …

linux系统------LVS+KeepAlived+Nginx高可用方案

目录 一、环境搭建 1.环境准备 2.安装ipvsadm 和 安装 keepalived(Lvs服务器) 3.为两台RS配置虚拟ip(nginx服务器) 1.配置虚拟网络子接口(回环接口) 2.修改内容如下: 3.配置ARP 二、KeepalivedLvsN…

【MySQL】性能优化实战指南:释放数据库潜能的艺术

文章目录MySQL性能优化实战指南:释放数据库潜能的艺术🚀 引言为什么需要MySQL性能优化?📋 性能优化基础知识MySQL性能瓶颈分析1. 硬件资源瓶颈2. MySQL内部瓶颈🏆 优化配置策略大全💾 内存配置优化InnoDB缓…

Unity 3D碰撞器

在Unity中,碰撞器(Collider)是用于检测物体之间碰撞的组件,它们定义了物体的物理边界。碰撞器与刚体(Rigidbody)配合使用,实现物理模拟。下面我将按您的要求,从碰撞器的种类、常用参…

Windows批处理实现带时间戳ping

windows环境 , 将以下代码保存为 .bat文件 echo off echo.---------------------------------------------------------- echo.----------------------------------------------------------- echo off set /p hostplease input your destination ip : set logfi…

GeoPandas 城市规划:Python 空间数据初学者指南

安装和设置 在深入研究数据之前,我们需要准备好工具。设置 GeoPandas 及其必要的依赖项是第一步。 我们将在 Google Colab 中完成此操作。 !pip install geopandas contextily matplotlib 空间数据有多种格式,但 GeoJSON 是常见且易于访问的格式。Ge…

力扣面试150题--环形子数组的最大和

Day 80 题目描述思路 初次做法:在昨天代码的基础上修改 计算普通子数组的最大和 使用动态规划计算以每个位置为起点的最大子数组和(存储在 val 中),并更新全局最大值 rightmax。计算后缀和与前缀和 sum[i]:从位置 i 到…

python类Keys

类Keys的定义:Elass Keys (object): 程轩开Set of special keys codes.#n# 第 15 章 网络爬虫 合情些准出照地限公轵 esms0 pro 瘀 Δ器代刍奄炖慧 图 15-39 工件肉业鱼光得 国有上子 理人场营,有司;可有B 相关围书 图 15-40 页源代码 ython". 名可能不鞋 NUL…