LLM 为什么需要 tokenizer?

news2024/12/23 16:52:05

文章目录

  • 1. LLM 预训练目的
    • 1.1 什么是语言模型
  • 2. Tokenizer一般处理流程(了解)
  • 3. 进行 Tokenizer 的原因
    • 3.1 one-hot 的问题
    • 3.2 词嵌入


1. LLM 预训练目的

我们必须知道一个预训练目的:LLM 的预训练是为了建立语言模型。

1.1 什么是语言模型

预训练的语言模型通常是建立预测模型的,即预测下一个词的概率。

通常采用了基于自监督学习的方式进行预训练,其中最常见的方法之一是使用自回归模型。自回归模型的训练目标是根据输入的文本序列预测下一个词或字符。

给定一个文本序列 X = { x 1 , x 2 , . . . , x n } X = \{x_1, x_2, ..., x_n\} X={x1,x2,...,xn},自回归模型的目标是最大化条件概率:
P ( x t + 1 ∣ x 1 , x 2 , . . . , x t ) P(x_{t+1} | x_1, x_2, ..., x_t) P(xt+1x1,x2,...,xt)

其中 x t x_t xt 是输入序列中的第 t t t 个词或字符,而 x t + 1 x_{t+1} xt+1 是下一个要预测的词或字符。

在预训练阶段,通常使用了一种称为最大似然估计的方法,即通过最大化给定文本序列的条件概率来训练模型参数。因此,自回归模型的预训练目标可以表示为最大化以下似然函数:
max ⁡ θ ∑ t = 1 n − 1 log ⁡ P ( x t + 1 ∣ x 1 , x 2 , . . . , x t ; θ ) \max_{\theta} \sum_{t=1}^{n-1} \log P(x_{t+1} | x_1, x_2, ..., x_t; \theta) θmaxt=1n1logP(xt+1x1,x2,...,xt;θ)

其中 θ \theta θ 是模型参数, log ⁡ P ( x t + 1 ∣ x 1 , x 2 , . . . , x t ; θ ) \log P(x_{t+1} | x_1, x_2, ..., x_t; \theta) logP(xt+1x1,x2,...,xt;θ) 是给定模型参数 θ \theta θ 的条件概率的对数。

理解上面的内容非常重要!!

2. Tokenizer一般处理流程(了解)

LLM 的 Tokenizer 负责将原始文本转化为模型能够理解和处理的离散符号序列。以下是LLM Tokenizer 一般流程:

  1. 数据准备
    从已清洗的预训练数据集中选取适当样本,确保其语言丰富、多样且无明显噪声。

  2. 文本规范化
    (1)将文本转换为统一的字符集(如Unicode)。
    (2)转换为小写(如果适用)。
    (3)去除无关字符,如多余空白、制表符、换行符等。
    (4)进行拼写校正(可选,取决于是否期望模型在训练时学习拼写变体)。
    (5)对特定语言进行特定的规范化处理,如德语的连字符合并、汉语的简繁体转换等。

  3. Tokenization
    (1)词汇级Tokenization(适用于某些模型):如果使用基于词汇表的Tokenization,直接按照预定义的词汇表将文本切分为单词或短语。
    (2)Subword-level Tokenization(更常见于现代LLMs):使用如 WordPiece、Byte-Pair Encoding (BPE) 或 SentencePiece 等算法将文本分割成更细粒度的子词或子词序列。这些算法通过统计学方法自动生成词汇表,其中包含常见单词和代表罕见或未知词汇的子词组合,从而解决 OOV(Out-of-Vocabulary)问题。

  4. Token ID映射
    (1)为每个生成的 token 分配一个唯一的整数ID。
    (2)根据所选 Tokenization 方法构建词汇表(或子词表),其中每个 token 对应一个ID。
    (3)将 Tokenized 文本序列转换为相应的整数序列(token IDs),作为模型输入。

  5. 特殊Token处理
    (1)添加特殊tokens,如开始符号 [CLS]、结束符号 [SEP](对于Transformer架构模型),以及可能的 padding token [PAD] 和未知词 token [UNK]
    (2)开始和结束符号用于标识输入序列的边界,有助于模型理解上下文。
    (3)未知词token用于表示词汇表中未出现但在实际应用中遇到的词汇。
    (4)Padding token用于填充序列至固定长度,以便批量训练。

  6. 序列长度调整
    (1)根据模型的输入限制,对Token ID序列进行截断或填充,以保证所有输入序列具有相同的长度。
    (2)选择合适的截断策略,如按长度截断、按比例截断或基于重要性评分的动态截断。

  7. 数据存储
    将Tokenized并映射为ID的文本数据存储为二进制文件(如 .tfrecord.bin.hdf5),便于高效读取和训练。

那么我们需要进一步深入了解为什么需要 Tokenizer!

3. 进行 Tokenizer 的原因

3.1 one-hot 的问题

首先我们根据上面内容知道 LLM 预训练的目的是为了得到语言模型,即预测下一个词的概率。那么假设有一个文本:

开始和结束符号用于标识输入序列的边界,有助于模型理解上下文

我们假设采用的 seq_length = 5,即可以建立如下预测模型: 开始和结束 -> 符始和结束符 -> 号

首先,计算机无法直接理解字符,我们需要将上面的字符转为计算机可以理解的数字,那么用什么方法呢?一种可行的方法是 one-hot,假设我们有一个字典包含 10 个字,那么 假设表示为 [1,0,0,0,0,0,0,0,0,0] 假设表示为 [0,1,0,0,0,0,0,0,0,0],直到把所有字表示出来。

这么做有没有什么问题呢?
(1)维度爆炸。当字典字数非常多时,one-hot 编码会导致特征空间的维度急剧增加。高维度数据不仅会占用大量的存储资源,而且可能导致计算复杂度增加,特别是在涉及到矩阵运算的模型(如线性回归、逻辑回归、支持向量机等)中,这可能会引发内存溢出问题,降低训练和预测的速度。
(2)稀疏性问题。one-hot 编码后的向量通常非常稀疏,即大部分元素为0。这种高度稀疏的表示方式可能不利于模型的学习,因为模型需要处理大量无信息的零值,降低了算法的效率。此外,某些算法(如基于梯度的优化方法)在处理稀疏数据时可能表现不佳。
(3)表达意义有限。目前 LLM 采用的模型一般都是 Transformer 模型,一个字是可以联系上下文,例如 使 这个字和 的关系比较紧密,可能达到 0.9,和其他字的关系可能只有 0.3。如果对于 one-hot 表示,那么无法表示上下文的这种关系。

3.2 词嵌入

那么我们如何将 one-hot 转为词嵌入矩阵呢?假设有一个 one-hot:
[ 0 0 1 0 0 0 0 1 0 1 0 0 ] \begin{bmatrix} 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 1 & 0 & 0 \\ \end{bmatrix} 000001100010
我们看下面这张图的变换:
在这里插入图片描述
我们矩阵相乘一个权重系数,最后得到的结果就是词嵌入矩阵,这里的权重系数在 pytorch 中就是常见的:

embedding = torch.nn.Embedding(num_idx, out_dim)
embedding.weight

那么我们在训练中就可以反向传播不断对这个权重系数进行优化!词嵌入至少具备以下几个优点:
(1)更低的维度
词嵌入通常将每个词映射到一个低维实数向量(如100维、300维甚至更高),远低于 one-hot 编码所需的维度(等于词汇表大小)。较低的维度不仅节省了存储空间,减少了计算资源消耗,还减轻了因维度增加导致的“维度灾难”,有利于模型的训练和泛化。

(2) 捕捉词义与语义关系
词嵌入在训练过程中(如通过 Word2Vec、GloVe 或 BERT 等模型)学习到的向量不仅编码了词的个体特征,还能捕捉到词与词之间的语义关系。相似或相关的词在向量空间中的距离会很近,如“猫”和“狗”的嵌入向量可能比它们与“桌子”的嵌入向量更接近。这种关系性的表示使得模型能够理解词汇间的语义相似性、类比关系、上下位关系等,这对于自然语言处理任务至关重要。

(3)解决稀疏性问题
与 one-hot 编码产生的极度稀疏向量不同,词嵌入向量通常是稠密的实数值向量。这种稠密表示保留了词汇的有用信息,避免了处理大量零值带来的效率损失,有利于模型学习和优化。同时,稠密向量在进行距离计算、相似度度量、聚类分析等操作时更为高效且更具解释性。

(4)平滑的连续空间
词嵌入向量位于一个连续的向量空间中,这使得模型可以对词汇的含义进行平滑插值和运算。例如,可以通过简单的算术操作(如加减法)来探索词汇间的语义关系(如“国王 - 男人 + 女人 = 女王”),这是 one-hot 编码无法做到的。连续空间也为迁移学习、词义消歧、词汇扩展等任务提供了便利。

(5)适用于深度学习模型
词嵌入是深度学习模型(如神经网络、循环神经网络、Transformer 等)处理自然语言文本的首选表示方式。它们可以直接作为输入层的输入,或者进一步通过嵌入层进行微调。词嵌入的低维、连续且富含语义信息的特性非常适合深度学习模型的层次化、非线性学习机制,能够有效提取和利用词汇的深层次语义特征。

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

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

相关文章

月入8k,21岁计算机专业男孩转行网优,天赋可以让人发光,努力也能!

今天的主人公是一位仅21岁的年轻小帅哥,大学学的是计算机专业,毕业后的工作是卖苦力,工作一段时间后毅然决然的选择了转行后台网优,让我们一起来看看这位21岁男孩转行背后的故事... 卖苦力,是没有前途的 今天的主人公…

(一)JVM实战——jvm的组成部分详解

前言 本节内容是关于java虚拟机JVM组成部分的介绍,通过其组成架构图了解JVM的主要组成部分。 正文 ClassFile:字节码文件 - javac:javac前端编译器将源代码编译成符合jvm规范的.class文件,即字节码文件 - class文件的结构组成&a…

Springboot的日常操作技巧

文章目录 1、自定义横幅2、容器刷新后触发方法自定义3、容器启动后触发方法自定义**CommandLineRunner**ApplicationRunner 不定时增加 参考文章 1、自定义横幅 简单就一点你需要把banner.text放到classpath 路径下 ,默认它会找叫做banner的文件,各种格式…

[GXYCTF2019]BabyUpload-BUUTF

题&#xff1a; 步骤&#xff08;先上传木马&#xff0c;在上传.htaccess&#xff09; 准备工作 他过滤了<? ,ph等 准备&#xff1a;一句话木马&#xff0c;.htaccess文件 .htaccess SetHandler application/x-httpd-php //解析为php文件 muma1.jpg<script languag…

刚买的云服务器(阿里云) 玩玩Linux指令 rm -rf /*

rm -rf /* 在Linux中&#xff0c;rm代表的是删除&#xff0c;选项-rf代表的是没有提示信息的递归删除文件夹&#xff0c;/‘代表的是Linux中的根目录。’ * 代表的是所有文件夹&#xff0c;所以该指令的功能就是删除根目录下的所有文件&#xff0c;一会儿肯定服务器崩溃&#x…

使用pytorch构建GAN模型的评估

本文为此系列的第六篇对GAN的评估&#xff0c;上一篇为Controllable GAN。文中使用训练好的分类模型的部分网络提取特征将真实分布与生成分布进行对比来评估模型的好坏&#xff0c;若有不懂的无监督知识点可以看本系列第一篇。 原理 1.评估模型的指标 一般来说&#xff0c;我们…

多级嵌套对象数组:根据最里层id找出它所属的每层父级,适用于树形数据格式

文章目录 需求分析 需求 已知一个树形格式数据如下&#xff1a; // 示例数据 const data [{"id": "1","parentId": null,"children": [{"id": "1.1","parentId": "1","children"…

粒子群算法与优化储能策略python实践

粒子群优化算法&#xff08;Particle Swarm Optimization&#xff0c;简称PSO&#xff09;, 是1995年J. Kennedy博士和R. C. Eberhart博士一起提出的&#xff0c;它是源于对鸟群捕食行为的研究。粒子群优化算法的基本核心是利用群体中的个体对信息的共享从而使得整个群体的运动…

Wireshark数据包分析入门

Wireshark数据包分析 1. 网络协议基础1.1. 应传网数物&#xff08;应表会传网数物&#xff09; 2. 三次握手2.1. 第一次握手2.2. 第二次握手2.3. 第三次握手2.4. 三次握手后流量特征 3. 第一层---物理层&#xff08;以太网&#xff09;4. 第二层---数据链路层&#xff08;PPP L…

139GB,台北倾斜摄影OSGB数据V0.1版

本月初发布了谷歌倾斜摄影数据OSGB转换工具V0.2版(更新&#xff01;谷歌倾斜摄影转换生成OSGB瓦片V0.2版),并免费分享了基于V0.2版转换工具生产的澳门地区OSGB数据(首发&#xff01;澳门地区OSGB数据V0.2版免费分享),V0.2版本在生产速度、显示效率和OSGB数据轻量化方面进行了优…

软考:高级系统架构师案例必备概念

根据2013年-2023年真题整理 必背案例概念 软件架构风格 软件架构风格是指描述特定软件系统组织方式的惯用模式。 组织方式描述了系统的组成构件和这些构件的组织方式。 惯用模式则反映众多系统共有的结构和语义。 架构风险 架构风险是指架构设计中潜在的、存在问题的架构…

零碳家庭 “光”的力量

有行业专家乐观预测&#xff0c;在供给充足、基础设施建设与时俱进的情况下&#xff0c;2025年&#xff0c;我国新能源汽车市场的占有率将会达到50%&#xff0c;2030年更有望突破90%的大关。为了方便新能源汽车的出行&#xff0c;在家中安装一个智能充电桩是越来越多驾驶者的选…

计算机网络---第十一天

生成树协议 stp作用&#xff1a; 作用&#xff1a;stp用于解决二层环路问题。 BPDU&#xff1a; 含义&#xff1a;桥协议数据单元&#xff0c;用于传递stp协议相关报文 分类&#xff1a;配置bpdu---用于传递stp的配置信息 tcn bpdu---用于通告拓扑变更信息 包含信息&…

基于SpringBoot的智慧物业管理设计与实现论文

摘  要 随着我国发展和城市开发&#xff0c;物业管理已形成规模&#xff0c;其效益也越来越明显。在经济效益对地方政府而言&#xff0c;主要体现为&#xff1a;减少了大量的财政补贴&#xff0c;对住宅区开发企业而言&#xff0c;能提高物业市场竞争力&#xff0c;使开发企…

系统思考—啤酒游戏

最近有不少的合作伙伴来询问我啤酒游戏这个来自于MIT&#xff08;麻省理工学院&#xff09;经典的沙盘&#xff0c;上周刚刚结束Midea旗下的一家公司市场运营部《啤酒游戏沙盘-应对动态性复杂的系统思考智慧》的课程。 参与这次沙盘体验的团队成员深刻体会到了全局思考的重要性…

dtc、fdtdump、fdtget、fdtput、convert-dtsv0

目录标题 1. dtc&#xff08;Device Tree Compiler&#xff09;2. fdtdump3. fdtget4. fdtput5. convert-dtsv0 dtc、fdtdump、fdtget、fdtput、convert-dtsv0这些工具都与Linux设备树&#xff08;Device Tree&#xff09;的处理有关。 设备树是一种数据结构&#xff0c;用于描…

JavaSE学习文档(上)

JavaSE学习文档 第一章 Java概述1.2 计算机编程语言1.3 Java语言版本概述1.4 Java语言分类1.5 JDK,JRE,JVM的关系1.6 JDK安装1.7 DOS命令1.8 Java程序执行过程1.9 编写HelloWorld1.10 常见错误1.11 编写程序时要注意的点 第二章 Java基础语法2.1 Java中的注释文档注释 2.2 关键…

免杀技术之白加黑的攻击防御

一、介绍 1. 什么是白加黑 通俗的讲白加黑中的白就是指被杀软列入到可信任列表中的文件。比如说微软自带的系统文件或者一些有有效证书签名的文件,什么是微软文件&#xff0c;或者什么是有效签名文件在后面我们会提到他的辨别方法。黑就是指我们自己的文件&#xff0c;没有有…

【办公类-26-01】20240422 UIBOT网络教研(自动登录并退出多个账号,半自动半人工)

作品展示&#xff1a; 背景需求&#xff1a; 每学期有多次网络教研 因为我有历任搭档的进修编号和登录密码&#xff0c; 所以每次学习时&#xff0c;我会把历任搭档的任务也批量完成。 但是每次登录都要从EXCEL里复制一位老师的“进修编号”“密码”&#xff0c;还要点击多次…

53.基于微信小程序与SpringBoot的戏曲文化系统设计与实现(项目 + 论文)

项目介绍 本站采用SpringBoot Vue框架&#xff0c;MYSQL数据库设计开发&#xff0c;充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c;功能齐全的特点&#xff0c;使得基于SpringBoot Vue技术的戏曲文化系统设计与实现管理工作系统化、规范化。 技术选型 后端:…