【大模型理论篇】主流大模型的分词器选择及讨论(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-4oBPE(BBPE)【2】
GPT3BPE(BBPE)【3】
GPT2BPE(BBPE)【4】
GPTBPE【5】
Llama3BPE(BBPE)【6,8】
Llama2BPE(BBPE)【7,8】
Qwen2BPE(BBPE)【9,10】
QwenBPE(BBPE)【11】
ChatGLMBBPE【12】
BaichuanBPE【13】
RoBERTaBPE【5】
BARTBPE【5】
DeBERTaBPE【5】
MPNETWordPiece【14】
Funnel TransformersWordPiece【14】
MobileBERTWordPiece【14】
DistilBERTWordPiece【14】
BERTWordPiece【14】
T5Unigram【15】
AlBERTUnigram【15】
mBARTUnigram【15】
XLNetUnigram【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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/883444.shtml

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

相关文章

fmql之Linux RTC

模拟i2c&#xff0c;连接rtc芯片。 dts&#xff1a; /{ // 根节点i2c_gpio: i2c-gpio {#address-cells <1>;#size-cells <0>;compatible "i2c-gpio";// MIO56-SDA, MIO55-SCL // 引脚编号gpios <&portc 2 0&portc 1 0 >;i2c-gp…

Modbus TCP报错:Response length is only 0 bytes

问题描述&#xff1a; 使用modbus_tk库&#xff0c;通过Modbus tcp连接PLC时&#xff0c;python中的一个报错信息&#xff1a; Response length is only 0 bytes报错原因&#xff1a; 与Modbus TCP 服务端建立连接后没有断开&#xff0c;继续作为长连接使用&#xff0c;客户端…

随笔—git操作

1. 创建一个 GitHub 仓库 登录到 GitHub。点击右上角的 “” 按钮&#xff0c;然后选择 “New repository”。填写仓库名称和描述&#xff0c;选择是否公开&#xff0c;最后点击 “Create repository”。 2. 在本地初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; 在…

【Lammps】atomsk安装与环境变量设置(Linux环境)

【Lammps】atomsk安装与环境变量设置&#xff08;Linux环境&#xff09; 官网配置环境变量测试 官网 https://atomsk.univ-lille.fr/dl.php 下载的安装包如下&#xff1a; 使用Linux的解压命令进行解压&#xff1a; tar -xzvf file.tar.gz注意&#xff1a;file.tar.gz 替换…

【Vue 3】最全组件设计指南:从基础到进阶

&#x1f9d1;‍&#x1f4bc; 一名茫茫大海中沉浮的小小程序员&#x1f36c; &#x1f449; 你的一键四连 (关注 点赞收藏评论)是我更新的最大动力❤️&#xff01; &#x1f4d1; 目录 &#x1f53d; 前言1️⃣ 组件的基础概念与构建2️⃣ 组件通信的核心技术3️⃣ 组件的生命…

2024 Rust现代实用教程:变量与常见数据类型

文章目录 一、Rust中的变量基础知识参考 一、Rust中的变量基础知识 1.在Rust中&#xff0c;使用Iet关键字来声明变量 2.Rust支持类型推导&#xff0c;但你也可以显式指定变量的类型&#xff1a; let x:i325;/显式指定x的类型为i323.变量名蛇形命名法(Snake Case),而枚举和结…

【文献及模型、制图分享】中国自然保护地典型治理模式成效比较——基于社区居民感知视角

采取何种治理模式能够更好地提升自然保护地治理的生态、社会和经济成效?基于制度分析与发展&#xff08;IAD&#xff09;框架&#xff0c;选择大熊猫国家公园内部及周边17个社区&#xff0c;通过问卷调查、半结构化访谈、单因素方差、逐步回归分析&#xff0c;比较统治、分治和…

Python -- 网络爬虫

Python – 网络爬虫 流程&#xff1a; 1. 连接链接获取页面内容&#xff08;html文件&#xff09;&#xff1b; 2. 过滤获取需要信息&#xff08;正则&#xff09; [可能重复步骤1&#xff0c;2] &#xff1b; 3. 存储文件到本地。一&#xff09;网络连接获取页面内容 # 网络…

红包雨html

1、分享一个红包雨html代码。 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>红包雨小游戏</ti…

稳定性分析案例

ref&#xff1a; 破获ARM64位CPU下linux crash要案之神技能&#xff1a;手动恢复函数调用栈 - 皮皮的技术志 - 博客园

CSP/信奥赛C++刷题训练:经典二分答案例题(3): 洛谷P2920:Time Management S

CSP/信奥赛C++刷题训练:经典二分答案例题(3) [USACO08NOV] Time Management S 题目描述 Ever the maturing businessman, Farmer John realizes that he must manage his time effectively. He has N jobs conveniently numbered 1…N (1 <= N <= 1,000) to accompl…

Spring Boot集成iText实现电子签章

文章目录 一 电子签章1.1 什么是电子签章1.2 签名流程1.3 技术选型 二 实战2.1 生成数字证书2.2 生成印章图片2.3 PDF 签名 一 电子签章 1.1 什么是电子签章 基于《中华人民共和国电子签名法》等相关法规和技术规范&#xff0c;具有法律效力的电子签章一定是需要使用 CA 数字…

Unbounded:一个无限生成式交互的角色生活模拟游戏

❤️ 如果你也关注大模型与 AI 的发展现状&#xff0c;且对大模型应用开发非常感兴趣&#xff0c;我会快速跟你分享最新的感兴趣的 AI 应用和热点信息&#xff0c;也会不定期分享自己的想法和开源实例&#xff0c;欢迎关注我哦&#xff01; &#x1f966; 微信公众号&#xff…

插槽 - 2024最新版前端秋招面试短期突击面试题【100道】

插槽 - 2024最新版前端秋招面试短期突击面试题【100道】 在前端开发中&#xff0c;插槽是一个非常重要的概念&#xff0c;尤其是在使用 Vue.js 时。本文将深入探讨插槽的使用&#xff0c;包括默认插槽、具名插槽和作用域插槽&#xff0c;帮助你在面试中更好地理解和回答相关问…

Vertx实现和spring的application.yml自动配置加载

前言 在用vertx写项目的时候&#xff0c;由于需要不同的环境加载不同的配置文件&#xff0c;这里就需要和spring架构的application.yml配置文件一样&#xff0c;可以根据环境变量加载不同的配置。 代码 引入vertx相关依赖 <dependency><groupId>io.vertx</gr…

ECharts饼图-饼图自定义样式,附视频讲解与代码下载

引言&#xff1a; 在数据可视化的世界里&#xff0c;ECharts凭借其丰富的图表类型和强大的配置能力&#xff0c;成为了众多开发者的首选。今天&#xff0c;我将带大家一起实现一个饼图图表&#xff0c;通过该图表我们可以直观地展示和分析数据。此外&#xff0c;我还将提供详…

猫头虎 分享:前端工具 NVM 的简介、安装、用法详解入门教程

&#x1f42f; 猫头虎 分享&#xff1a;前端工具 NVM 的简介、安装、用法详解入门教程 今天猫头虎带您深入了解 NVM&#xff01;最近&#xff0c;猫哥在项目中遇到一个前端小伙伴&#xff0c;询问如何在开发过程中高效地切换不同的 Node.js 版本。前端项目往往需要特定版本的 …

二分查找_在排序数组中查找元素的第一个和最后一个位置

1.朴素二分查找 .二分查找 二分查找思路&#xff1a; 1.left0,rightnums.size()-1&#xff08;最后一个元素下标&#xff09;&#xff0c;取中间元素下标 midleft(right-left)/2 &#xff08;防溢出&#xff09; 2.nums[mid]>target &#xff0c;说明mid右边的元素都大于ta…

Discuz 论坛开发一套传奇发布站与传奇开服表

Discuz 论坛开发一套传奇发布站与传奇开服表 随着互联网技术的飞速发展&#xff0c;网络游戏已成为人们休闲娱乐的重要方式之一。在众多网络游戏中&#xff0c;传奇系列以其独特的魅力吸引了大量忠实玩家。为了满足这些玩家的需求&#xff0c;并促进游戏信息的交流与分享&…

CSP-S2024游记

考前 前一天晚上提前回家了&#xff0c;晚上十一点上床睡觉&#xff0c;上午九点半自然醒了&#xff0c;在床上刷了半个小时手机&#xff0c;成功略过了早饭。 午饭前看了一会板子&#xff0c;tarjan、KMP之类的简单板子&#xff0c;但好像都没考到。 午饭吃的很简单&#x…