深度学习——LLM大模型分词

news2024/9/30 12:11:39

1. 前言

自从chatgpt出现,大模型的发展就进入了快车道,各种各样的大模型卷上天,作为一个在大模型时代的科研人,即使你不向前,也会被时代裹挟着向前,所以还是自己走快一点比较好,免得被后浪拍死在沙滩上。对于我而言,写文章更多的是对知识的总结和回顾,当然如果我的文章能够对你的学习有所帮助我也是挺开心的。

这篇文章主要参考B站上的这位大神的视频以及Huggingface上的总结
B站视频LLM分词
Huggingface Tokenizers

另外大家也可以通过这个分词网站来玩一下分词:https://tiktokenizer.vercel.app
这里放上一张思维导图,方便大家理解整篇文章的脉络。
在这里插入图片描述

2. Token,Tokenization和Tokenizer的概念

首先,什么是Token?什么是Tokenization? 什么又是Tokenizer
Token:是文本数据的基本单元也即词元,通常表示一个词、子词或字符.
Tokenization:Tokenization中文翻译为分词,是将原始文本字符串分割成一系列Token的过程。这个过程可以有不同的粒度,比如单词级别分词(Word-based Tokenizer)、字符级别分词(Character-based Tokenizer)和子词级别分词(Subword-based Tokenizer)。
Tokenizer: 是将文本切分成多个tokens的工具或算法
另外再NLP中我们经常会遇到一个词OOV(Out Of Vocabulary),意思是有些单词在词典中查询不到,例如一些根据词根现造的词,或者拼写错误的词等

接下来,我们首先介绍两种比较容易理解的分词Word-based TokenizerCharacter-based Tokenizer

3. Word-based Tokenizer

Word-based Tokenization 是将将文本划分为一个个词(包括标点)

我们以这句话为例:"Don't you love 🤗 Transformers? We sure do."

一种最简单的方法是通过空格进行划分:

["Don't", "you", "love", "🤗", "Transformers?", "We", "sure", "do."]

在这种划分下,标点和单词是粘在一起的: ["Transformers?","do."],,如果把标点也作为一个词的话,可以进一步划分:

["Don", "'", "t", "you", "love", "🤗", "Transformers", "?", "We", "sure", "do", "."]

但是这里的Don't 应该被划分为Do,n't,引入规则之后事情就变得复杂起来了。

英文的划分有两个常用的基于规则的工具spaCyMoses,划分如下:

["Do", "n't", "you", "love", "🤗", "Transformers", "?", "We", "sure", "do", "."]

使用Word-base Tokenizer,
优点是:符合人的自然语言和直觉。
缺点是: ①相同意思的词被划分为不同的token,比如:dog和dogs ② 最终的词表会非常大

在这里插入图片描述
因此我们可以设置词表上限比如上限为10000,未知的词用Unkown表示
在这里插入图片描述
但是这样会损失大量的信息,模型性能大打折扣!

4. Character-based Tokenizer

Character-based Tokenizer 将文本划分为一个个字符(包括标点)。
我们以这个例子为例: Today is Sunday.

按照Character 划分,我们可以得到

["T","o","d","a","y","i","s","S","u","n","d","a","y"]

使用Character-based Tokenizer 划分的优点是
① 大大减少了词汇量,在256个ASCII码表示的范围内
② 可以表示任意字符,不会出现unkown的情况
缺点是
①字母包含的信息量低,一个字母"T” 无法知道它具体指代的是什么,但如果是"Today"语义就比较明确
②相对于Word-based Tokenizer ,会产生很长的token序列
③如果是中文,依然会有很大的词汇量

5. Subword-based Tokenizer

在了解了Word-based Tokenizer和Character-based Tokenizer之后,我知道它们各有优缺点,接下来要介绍的Subword-based Tokenizer 则是这两种方法的折中。
在这里插入图片描述

Subword-based Tokenizer有BPE/BBPE,Unigram,WordPiece和SentencePiece,这些分词算法在下列模型中有应用
在这里插入图片描述

5.1 BPE/BBPE

5.1.1 BPE

BPE分词最早在 Neural Machine Translation of Rare Words with Subword Units (Sennrich et al.2015)中提出.BPE分为两部分“词频统计”“词表合并”。词频统计依赖于一个预分词器(pre-tokenization)将训练数据分成单词。预分词器可以非常简单,按照空格进行分词。例如GPT2,RoBERTa等就是这样实现的,更高级的预分词器引入了基于规则的分词,例如XLM,FlauBERT 使用Moses, GPT 使用spaCyftfy来统计语料中每个单词的词频。

在预分词之后,创建一个包含不同单词和对应词频的集合,接下来根据这个集合创建包含所有字符的词表,再根据合并规则两两合并形成一个新字符,将频率最高的新字符加入词表,直到达到预先设置的数量,停止合并。

仅仅讲概念可能会比较抽象,我们这里举个例子:

假设在预分词(一般采用Word-based Tokenization)之后,得到如下的包含词频的集合:

("hug", 10), ("pug", 5), ("pun", 12), ("bun", 4), ("hugs", 5)

因此,基本词汇表是这样的:["b", "g", "h", "n", "p", "s", "u"] ,将所有单词按照词汇表里的字符切割得到如下形式:

("h" "u" "g", 10), ("p" "u" "g", 5), ("p" "u" "n", 12), ("b" "u" "n", 4), ("h" "u" "g" "s", 5)

接下来统计相邻的两个字符组成的字符对的出现的频率:

在这里插入图片描述
ug出现了20次,出现次数最高,因此把ug加入词汇表,并将出现在一起的u,g用ug替换,然后在此统计词频un出现的频率最高,将un加入到词表,并将出现在一起的u,n用un替换。
在这里插入图片描述
接着进行第三次
在这里插入图片描述
假设基本词汇有478个,经过了40000次合并就有40478个,然后我利用这个词表进行分词,对于不在词表中的设置为特殊词<unk>
在这里插入图片描述

5.1.2 BBPE

重点介绍一下BBPE ,因为GPT2,GPT3,GPT4和LLaMA用的就是它,BBPE即 Byte-level BPE

5.2 Unigram

5.3 WordPiece

5.4 SentencePiece

BPE、WordPiece、Unigram 的缺点:
①假设输入文本使用空格来分隔单词,但并非所有语言都使用空格来分隔单词(如中文、韩文、日文、阿拉伯语)
②可以使用特定语言的pre-tokenizer 分词,但不太通用
为解决这个问题,SentencePiece将输入视为输入字节流,包括空格 然后搭配BBPE和Unigram来使用

参考文献

简介NLP中的Tokenization(基于Word,Subword 和 Character)
https://zhuanlan.zhihu.com/p/620603105
https://blog.csdn.net/zhaohongfei_358/article/details/123379481
LLM大语言模型之Tokenization分词方法

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

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

相关文章

呆错图床系统,一款开源免费的图床系统

源码介绍 呆错图床系统是一款免费的PHP图床程序&#xff0c;核心功能是提供图片外链服务、图床API服务、图片CDN加速与破解防盗链。 下载地址&#xff1a; https://download.csdn.net/download/huayula/89693127

基于七牛云上传,下载文件

准备工作 1.创建一个七牛云账号 2.登录账号&#xff0c;进入个人中心&#xff0c;创建一组密钥&#xff08;ak和sk&#xff09; 3. 创建一个公有的存储空间&#xff08;桶&#xff09; 注&#xff1a;存储地区的选择基于你的用户的分布主要在哪里。 七牛云直接白送10GB给我们…

给鼠标一个好看的指针特效 鼠标光标如何修改形状?

许多爱美的小伙伴们都想着如何给自己的电脑打扮一下&#xff0c;用各种各样的途径来美化我们的电脑。今天我们给大家分享一下&#xff0c;如何美化鼠标效果&#xff0c;给鼠标指针修改成一个非常好看的形状~ 一起来看几组鼠标的效果&#xff0c;小编我给大家做了个录屏&#x…

LuaJit分析(十一)去除string.dump函数

Lua脚本中的string.dump函数用于生成字节码文件&#xff0c;根据对 luajit -b命令的分析可以得出&#xff0c;最终dump出字节码文件都是使用的string.dump函数。 因此即使我们的指令顺序被打乱&#xff0c;通过loadfile系统调用&#xff0c;再通过string.dump调用&#xff0c;…

缓存解决方案。Redis 和 Amazon ElastiCache 比较

欢迎来到雲闪世界。Redis 和 Amazon ElastiCache 等缓存解决方案是通过将频繁访问的数据存储在内存中来提高应用程序性能的热门选择。让我们从实施简单性、性能、成本和维护方面对它们进行比较。 实施简单 设置 Redis 需要在基础设施或云实例上安装和配置 Redis 服务器。它可…

回归预测|基于CNN-LSTM-Attention结合Adaboost集成数据预测Matlab程序 多特征输入单输出

回归预测|基于CNN-LSTM-Attention结合Adaboost集成数据预测Matlab程序 多特征输入单输出 文章目录 前言回归预测|基于CNN-LSTM-Attention结合Adaboost集成数据预测Matlab程序 多特征输入单输出 一、CNN-LSTM-Attention-Adaboost模型**详细流程&#xff1a;****基本原理&#xf…

Golang | Leetcode Golang题解之第381题O(1)时间插入、删除和获取随机元素-允许重复

题目&#xff1a; 题解&#xff1a; type RandomizedCollection struct {idx map[int]map[int]struct{}nums []int }/** Initialize your data structure here. */ func Constructor() RandomizedCollection {return RandomizedCollection{idx: map[int]map[int]struct{}{},}…

服务器数据恢复—LeftHand存储中raid5阵列多块磁盘离线的数据恢复案例

LeftHand存储支持RAID5、RAID6、RAID10磁盘阵列&#xff0c;同时还支持卷快照&#xff0c;卷动态扩容等。下面简单聊一下LeftHand存储的结构和一个LeftHand p4500存储中磁盘阵列数据恢复案例。 服务端&#xff1a; 客户端&#xff1a; LeftHand存储结构&#xff1a; Lefthand存…

打架目标检测数据集 9000张 打架数据集 带标注voc yolo

本项目的目标是开发一个能够自动检测公共场所中打架行为的系统。该系统利用先进的计算机视觉技术和深度学习方法&#xff0c;在实时视频流或静态图像中准确地识别出打架行为&#xff0c;这对于维护公共安全至关重要。 技术栈 YOLOv8: 作为主要的目标检测框架&#xff0c;因其在…

基于my Batis优化图书管理系统(二)

4. 图书列表 添加图书之后, 跳转到图书列表⻚⾯, 并没有显⽰刚才添加的图书信息, 接下来我们来实现图 书列表 4.1 需求分析 当查询到我们的图书数据很多的时候&#xff0c;一个页可能存放不了&#xff0c;所以我们进行分页处理数据&#xff0c;并且分页进行查询&#xff1b;如…

最新视频合成后调优技术ExVideo模型部署

ExVideo是一种新型的视频合成模型后调优技术&#xff0c;由华东师范大学和阿里巴巴的研究人员共同开发。 ExVideo提出了一种新的后调优策略&#xff0c;无需对整个模型进行大规模重训&#xff0c;仅通过对模型中时序相关组件的微调&#xff0c;就能够显著增强其生成更长视频片…

【大模型系列篇】大语言模型架构分类和对比

在预训练语言模型时代&#xff0c;自然语言处理领域广泛采用了预训练(Pre-training) 微调(SFT)的范式&#xff0c; 并诞生了以 BERT 为代表的编码器&#xff08;Encoder-only&#xff09;架构、以 GPT 为代表的解码器&#xff08;Decoder-only&#xff09;架构和以 T5 为代表的…

关于springboot对接chatglm3-6b大模型的尝试

之前我们通过阿里提供的cloud ai对接了通义千问。cloud ai对接通义千问 那么接下来我们尝试一些别的模型看一下&#xff0c;其实这个文章主要是表达一种对接方式&#xff0c;其他的都大同小异。都可以依此方法进行处理。 一、明确模型参数 本次我们对接的理论支持来自于阿里云…

模型 DFEAS营销法

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。需求触发&#xff0c;精准营销转化。 1 DFEAS营销法的应用 1.1 个性化健身应用的市场拓展策略 随着健康意识的增强&#xff0c;个性化健身应用市场迅速发展。一款名为“FitMyLife”的个性化健身应用…

FancyVideo

一、模型介绍 合成运动丰富且时间一致的视频仍然是人工智能领域的一项挑战&#xff0c;尤其是在处理较长的持续时间时。现有的文本到视频 (T2V) 模型通常采用空间交叉注意进行文本控制&#xff0c;等效地指导不同帧的生成而无需特定于帧的文本指导。因此&#xff0c;模型理解提…

经典算法之链表篇(二)

目录 一&#xff1a;重排链表&#xff08;LeetCode.143&#xff09; 二&#xff1a;删除链表的节点&#xff08;LCR 136. 删除链表的节点&#xff09; 三&#xff1a;K个一组反转链表&#xff08;LeetCode.25&#xff09; 有关经典算法链表的第一篇内容&#xff0c;可以查看我…

在线考试系统源码功能分析

在线考试系统源码的功能分析涵盖了多个关键方面&#xff0c;以确保系统能够满足教育机构和个人的需求。以下是一些常见的功能分析&#xff1a; 权限控制&#xff1a;系统通常支持多个角色&#xff0c;如教师、管理员和学生&#xff0c;并使用JWT等技术进行用户身份的合法性校验…

Leetcode JAVA刷刷站(101)对称二叉树

一、题目概述 二、思路方向 在Java中&#xff0c;要检查一个二叉树是否是轴对称的&#xff08;也称为镜像对称的&#xff09;&#xff0c;你可以通过递归地比较树的左子树和右子树是否镜像对称来实现。轴对称的二叉树意味着树的左子树和右子树关于根节点对称&#xff0c;即左子…

微信小程序:手机联调同一个网段无法找到本地接口

我们在开发微信小程序的时候&#xff0c;一般会启动本地服务器进行API连调&#xff0c;不过模拟器上面往往一些问题及细节发现不了&#xff0c;需要真机调试&#xff0c;结果调试的时候发现&#xff0c;不能访问到 localhost或者本机IP&#xff0c;也就访问不到本地接口&#x…

【HarmonyOS NEXT开发】鸿蒙开发环境准备,ArkTS基础语法入门

文章目录 鸿蒙开发环境准备&#xff0c;ArkTS基础语法入门大纲简介DevEco Studio简介运行环境要求 安装与配置开发工具下载Harmony OS 和 OpenHarmony 的区别Previewer汉化插件的配置 ArkTS基础快速入门1. 解释说明2. 变量与常量3. 变量命名规则4. 数组5. 函数定义函数调用函数…