【大模型理论篇】主流大模型的分词器选择及讨论(BPE/BBPE/WordPiece/Unigram)
1. 背景分析
分词是将输入和输出文本拆分成更小单位的过程,使得大模型能够处理。token可以是单词、字符、子词或符号,取决于模型的类型和大小。分词可以帮助模型处理不同的语言、词汇和格式,并降低计算和内存成本。分词还可以通过影响token的含义和上下文,影响生成文本的质量和多样性。
我们在前述文章《BPE原理及代码示例》、《WordPiece原理及代码示例》、《Unigram原理及代码示例》三篇文章讨论了在预训练模型中最常用的三种tokenizer算法:BPE、WordPiece、Unigram。
对这几类技术再做下简述,详细的可以点击链接看我们的文章:
BPE(字节对编码)
BPE的核心概念是从字母开始,反复合并频率最高且相邻的两个token,直到达到目标词数。
BBPE
BBPE的基本思想是将BPE从字符级别扩展到字节(Byte)级别。BPE在处理unicode编码时可能会导致基础字符集过大,而BBPE将每个字节视为一个“字符”,不论实际字符集用多少字节表示。这样,基础字符集的大小就固定为256(2^8),从而实现跨语言共享词表,并显著缩减词表大小。然而,对于像中文这样的语言,文本序列长度会显著增加,这可能使得BBPE模型的性能优于BPE模型,但其序列长度较长也会导致训练和推理时间增加。BBPE的实现与BPE类似,主要差别在于基础词表使用256的字节集。
WordPiece
WordPiece算法可视为BPE的变种。不同之处在于,WordPiece通过概率生成新的subword,而不是简单地选择频率最高的字节对。WordPiece每次从词表中选出两个子词合并成一个新子词,但选择的是能最大化语言模型概率的相邻子词。
Unigram
Unigram与BPE和WordPiece在本质上有明显区别。前两者从小词表开始,逐步增加到设定的词汇量,而Unigram则先初始化一个大词表,通过语言模型评估逐步减少词表,直到达到目标词汇量。
2. 分词粒度的讨论
技术有这么多,那该如何选择?首先我们来看下不同粒度的token有哪些影响?
2.1 针对小的token的分析
优势:
1.较小的token使得模型能够生成和理解更广泛的单词,包括通过组合较小的部分来处理从未见过的单词。
2.由于token较小,词汇大小通常较小,从而在某些方面节省内存和计算资源。
3.较小的token一般也更适合处理多种语言或代码,尤其是当这些语言具有不同的句法或语法结构时。
4.较小的token可能更好地处理拼写错误。
缺点:
1.较小的token意味着给定文本会被拆分成更多的词元,从而增加处理文本的计算成本。
2.另外由于固定的最大token限制,使用较小的token可能导致模型能够考虑的实际内容的“上下文”减少。
3.较小的token可能导致表达存在一定的模糊度,使模型在没有足够上下文的情况下更难理解token序列的含义。
2.2 针对大的token的分析
优点:
1.较大的token减少表示文本所需的token数量,从而在计算上提高了处理效率。
2.在固定的最大token数限制下,较大的token允许模型考虑更长的文本,从而可能提高理解和生成能力。
3.较大的token可能直接捕捉到更多细致的含义,减少因将单词拆分成更小部分而产生的模糊性。
缺点:
1.较大的token通常需要更大的词汇来捕捉相同范围的文本,这可能会带来占用大量内存的现象。
2.较大的token可能限制模型对未见或稀有单词的泛化能力,因为整个token必须与模型的词汇中的某个内容匹配。
3.较大的token可能在处理复杂形态或句法的语言时效果不佳,或在需要理解多种语言的任务中。
4.较大的token对拼写错误、拼写变体及其他文本中的小变化敏感。
3. 主流大模型的分词器选择
| 模型 | 分词器 |
| GPT-4o | BPE(BBPE)【2】 |
| GPT3 | BPE(BBPE)【3】 |
| GPT2 | BPE(BBPE)【4】 |
| GPT | BPE【5】 |
| Llama3 | BPE(BBPE)【6,8】 |
| Llama2 | BPE(BBPE)【7,8】 |
| Qwen2 | BPE(BBPE)【9,10】 |
| Qwen | BPE(BBPE)【11】 |
| ChatGLM | BBPE【12】 |
| Baichuan | BPE【13】 |
| RoBERTa | BPE【5】 |
| BART | BPE【5】 |
| DeBERTa | BPE【5】 |
| MPNET | WordPiece【14】 |
| Funnel Transformers | WordPiece【14】 |
| MobileBERT | WordPiece【14】 |
| DistilBERT | WordPiece【14】 |
| BERT | WordPiece【14】 |
| T5 | Unigram【15】 |
| AlBERT | Unigram【15】 |
| mBART | Unigram【15】 |
| XLNet | Unigram【15】 |
当然虽然说GPT系列或者其他大模型用的都是BPE(BBPE),但在处理上还会有一些细微的差异。可以试用下openai提供的在线tokenizer工具:https://platform.openai.com/tokenizer

此外, OpenAI、Google、huggingface分别都提供了开源的tokenizer工具:tiktoken、sentencepiece、tokenizers,支持主流的分词算法。
扩展阅读:
《全方位解读大模型:多样知识点的深度探讨与技术分享小结》
4. 参考材料
【1】Understanding “tokens” and tokenization in large language models
【2】openai/tiktoken
【3】gpt-tokenizer
【4】Language Models are Unsupervised Multitask Learners
【5】Byte-Pair Encoding tokenization
【6】Llama3
【7】Llama2
【8】Llama (LLM)
【9】qwen2-concepts
【10】tokenization_qwen2
【11】qwen/tokenization_note
【12】tokenization_chatglm
【13】Baichuan-7B
【14】WordPiece tokenization
【15】Unigram tokenization
相关文章:
【大模型理论篇】主流大模型的分词器选择及讨论(BPE/BBPE/WordPiece/Unigram)
1. 背景分析 分词是将输入和输出文本拆分成更小单位的过程,使得大模型能够处理。token可以是单词、字符、子词或符号,取决于模型的类型和大小。分词可以帮助模型处理不同的语言、词汇和格式,并降低计算和内存成本。分词还可以通过影响token的…...
入侵检测算法平台部署LiteAIServer视频智能分析平台行人入侵检测算法
在当今科技日新月异的时代,行人入侵检测技术作为安全防护的重要组成部分,正经历着前所未有的发展。入侵检测算法平台部署LiteAIServer作为这一领域的佼佼者,凭借其卓越的技术实力与广泛的应用价值,正逐步成为守护公共安全的新利器…...
000010 - Mapreduce框架原理
Mapreduce框架原理 1. InputFormat 数据输入1.1 切片与 MapTask 并行度决定机制1.2 Job 提交流程源码和切片源码详解1.2.1 Job 提交流程源码详解1.2.2 FileInputFormat 切片源码解析(input.getSplits(job)) 1.3 FileInputFormat 切片机制1.3.1 切片机制1…...
OpenCV未定义标识符CV_XXX
报错“未定义标识符CV_XXX”,即编译器找不到常量CV_XXX,如果代码是基于旧版本的OpenCV编写的,而环境中安装的是一个更新的版本,可能会导致一些标识符被重命名或移除,导致不匹配情况。 经常遇到的包括:CV_R…...
flask服务通过gunicorn启动
使用 Gunicorn 启动 Flask 服务通常可以提升 Flask 应用的性能。以下是通过 Gunicorn 启动 Flask 服务的步骤: 1. 安装依赖 首先,确保已安装 Flask 和 Gunicorn: pip install flask gunicorn2. 创建 Flask 应用 创建一个简单的 Flask 应用…...
用更多的钱买电脑而不是手机
如果,我们对自己的定义是知识工作者,那么在工作、学习相关的电子设备投入上,真的别舍不得花钱。 需要留意的是,手机,对于大部分在电脑前工作的人,不是工作设备。在我看来,每年投入到电脑的钱&…...
10.25学习
1.程序链接库 程序链接库(Library),通常简称为库,是程序设计中一种常用的代码组织方式。它包含了一组预先编写好的代码,这些代码可以被多个不同的程序调用,以实现特定的功能。使用链接库的主要目的包括&am…...
用xshell给服务器上传jar包
首先,用xshell登录并进入到你的jar包目录下 然后使用 sudo rz -be命令,就可以选择本地文件了,选择jar包上传 一般如果提示传输失败,大概率是你的文件夹下有这个jar包了,名字相同冲突了, 那么你需要用这个…...
从零搭建开源陪诊系统:关键技术栈与架构设计
构建一个开源陪诊系统是一个涉及多种技术的复杂工程。为了让这个系统具备高效、可靠和可扩展的特点,我们需要从架构设计、技术栈选择到代码实现等方面进行全面的考量。本文将从零开始,详细介绍搭建开源陪诊系统的关键技术栈和架构设计,并提供…...
java List<Map<String, Object>> 转 List<JSONObject> 的几种方式
目录 方法一:使用传统循环 方法二:使用 Java 8 的流(Stream)API 方法三:使用 Guava 库 总结 将 List<Map<String, Object>> 转换为 List<JSONObject> 有多种方法。以下是几种常见的方法…...
使用Python来下一场深夜雪
效果图:(真实情况是动态的) 完整代码: import turtle import random# 初始化画布 turtle.bgcolor("#001f3f") # 偏深蓝色的背景 turtle.title("下雪的画面") turtle.speed(0) turtle.hideturtle() turtle.t…...
uniapp使用easyinput文本框显示输入的字数和限制的字数
uniapp使用easyinput文本框显示输入的字数和限制的字数 先上效果图: 整体代码如下: <template><view class"nameInfoContent"><uni-easyinput class"uni-mt-5" suffixIcon"checkmarkempty" v-model&quo…...
蓝牙技术的多种模式详解
蓝牙作为一种广泛应用的无线通信技术,已经在我们的日常生活中无处不在。随着技术的发展,蓝牙已经不再仅限于传统的音频传输,而是扩展到了各种应用领域。本文将深入探讨蓝牙的各种模式及其应用场景。 1. 经典蓝牙(BR/EDRÿ…...
攻防世界-流量分析WP
流量分析1来自 <攻防世界> 题目描述:流量分析,你知道这堆流量做了什么事情吗,你能恢复出来flag吗? 1,首先查看IPv4统计信息 如果该流量记录的是黑客的攻击行为产生的流量,那么出现频率最高的流量应该来自攻击者…...
打印爱心型
#include<stdio.h> int main() { printf("\n\n\n"); //输出梯形 // printf("\033{31m"); int t0,i0,j0; for (i 0; i <3; i)//输出行数 { for (t 1; t<5-i*2;t)//输出空格 printf(" "); …...
WASM 使用说明23事(RUST实现)
文章目录 1. wasm是什么1.1 chatgpt定义如下:1.2 wasm关键特性: 2. wasm demo2.1 cargo 创建项目2.2 编写code2.3 安装wasm-pack2.4 编译 3.1 html页面引用wasm代码(js引用)3.2 访问页面4 导入js function4.1 编写lib.rs文件,内容…...
Visual studio 下载安装
1,Visual stutdio 网址 下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux 2,下划页面,点击 较早的下载 3,选择对应的版本进行下载...
jEasyUI 创建自定义视图
jEasyUI 创建自定义视图 jEasyUI(jQuery EasyUI)是一个基于jQuery的用户界面插件集合,它为用户提供了一系列的UI组件,如菜单、窗口、表格等,使得Web界面的开发变得更加简单快捷。在本文中,我们将探讨如何使…...
SpringMVC6-SpringMVC的视图
目录 ThymeleafView 转发视图 重定向视图 视图控制器view-controller SpringMVC中的视图是View接口,视图的作用:渲染数据,将模型Model中的数据展示给用户 SpringMVC视图的种类很多,默认有转发视图InternalResourceView 和重定…...
echarts给Y轴的不同轴线设置不同的颜色的样式
官方文档 option {xAxis: {type: category,data: [Mon, Tue, Wed, Thu, Fri, Sat, Sun]},yAxis: {type: value},series: [{data: [150, 230, 224, 218, 135, 147, 260],type: line,}] }; 效果: 需要添加参数markLine option {xAxis: {type: category,data: [M…...
Midjourney Spinach印相实操手册:手把手配置--sref、--stylize、--cw权重,5分钟复刻暗房级颗粒与褪色层次
更多请点击: https://intelliparadigm.com 第一章:Midjourney Spinach印相的核心美学溯源 Midjourney Spinach印相并非官方功能命名,而是社区对一类高对比度、低饱和、肌理感强烈且带有手工暗房隐喻的图像生成风格的诗意指称。“Spinach”一…...
Claude智能优化器:提升大模型工具调用准确性的工程实践
1. 项目概述与核心价值最近在折腾大语言模型应用开发时,我一直在思考一个问题:如何让像Claude这样的顶级AI助手,在回答复杂问题时,能更稳定、更聪明地调用外部工具和函数?直接调用API,模型有时会“犯懒”或…...
ARM PMU性能监控架构与寄存器详解
1. ARM PMU性能监控架构概述 性能监控单元(Performance Monitoring Unit, PMU)是现代处理器中用于硬件级性能分析的关键模块。作为ARM架构的重要组成部分,PMU通过一组可编程计数器来记录处理器运行过程中发生的各类微架构事件,为系统性能分析和优化提供数…...
Re:Linux系统篇(九)工具篇 · 一:3分钟学会yum,让软件安装像呼吸一样简单
◆ 博主名称: 晓此方-CSDN博客 大家好,欢迎来到晓此方的博客。 ⭐️Linux系列个人专栏: 【主题曲】Linux ⭐️Re系列专栏:我们思考 (Rethink) 我们重建 (Rebuild) 我们记录 (Record) 文章目录概要&序論一、在 Linux 环境下…...
ARM ETE Trace ID寄存器详解与应用
1. ARM ETE Trace ID寄存器概述在ARM架构的嵌入式调试系统中,Trace ID寄存器(TRCIDR)是嵌入式跟踪宏单元(ETE)的核心组件。这些寄存器提供了非侵入式的实时程序流分析能力,对于芯片验证、性能优化和系统调试具有不可替代的价值。ETE的Trace ID寄存器从TR…...
AI Agent配置安全扫描:AgentLint工具实战与供应链风险防护
1. 项目概述:AI Agent配置的“安全门卫”最近在折腾Claude Code和Cursor这类AI编程助手时,我发现了一个既让人兴奋又有点不安的事实:这些工具的配置文件(比如.claude/目录、CLAUDE.md或.cursorrules)功能强大到可以执行…...
BioClaw:基于自然语言对话的生物信息学智能分析平台
1. 项目概述:BioClaw,一个能聊天的生物信息学工具箱 如果你是一名生物医学领域的研究者,我猜你对下面这个场景一定不陌生:你刚拿到一批测序数据,需要先跑个FastQC看看质量;同时,实验室的师弟在…...
别再死记硬背了!用Python和C语言手把手带你理解CRC32查表法的实现原理
从数学到代码:用Python和C语言彻底搞懂CRC32查表法的实现 在数据传输和存储过程中,错误检测是确保数据完整性的关键环节。CRC32作为一种广泛应用的校验算法,从网络协议到压缩工具,再到文件系统,几乎无处不在。但很多开…...
为 OpenClaw 配置 Taotoken 以实现自动化工作流中的模型调用
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为 OpenClaw 配置 Taotoken 以实现自动化工作流中的模型调用 OpenClaw 是一款强大的自动化工作流工具,能够通过编排任务…...
告别I帧卡顿!用H.264帧内刷新(Intra Refresh)让你的直播码率稳如老狗
告别I帧卡顿!用H.264帧内刷新(Intra Refresh)让你的直播码率稳如老狗 直播技术发展到今天,画面流畅度已经成为用户体验的核心指标之一。但许多开发者在实际推流中常遇到一个棘手问题:明明网络带宽充足,却在…...
