AI大模型探索之路-训练篇5:大语言模型预训练数据准备-词元化

系列文章目录🚩

AI大模型探索之路-训练篇1:大语言模型微调基础认知
AI大模型探索之路-训练篇2:大语言模型预训练基础认知
AI大模型探索之路-训练篇3:大语言模型全景解读
AI大模型探索之路-训练篇4:大语言模型训练数据集概览


文章目录

  • 系列文章目录🚩
  • 前言
  • 一、概述
  • 二、分词的粒度
  • 三、分词器的类型
  • 四、BPE/BBPE分词
  • 五、WordPiece分词
  • 六、Unigram 分词
  • 七、分词器的选择
  • 八、各大模型的分词效果
  • 九、SentencePiece分词器使用


前言

在自然语言处理领域,大语言模型预训练数据准备是一个重要的环节。其中,词元化(Tokenization)作为预训练前期的关键步骤,旨在将原始文本分割成模型可识别和建模的词元序列,为大语言模型提供输入数据。本文将对词元化技术进行详细介绍,包括分词的粒度、分词器的类型以及各大模型的分词效果等内容。

一、概述

分词(词元化):词元化(Tokenization)是数据预处理中的一个关键步骤,旨在将原始文本分割成模型可识别和建模的词元序列,作为大语言模型的输入数据;形成一个词汇表。
传统自然语言处理研究(如基于条件随机场的序列标注)主要使用基于词汇的分词方法,这种方法更符合人类的语言认知。然而,基于词汇的分词在某些语言(如中文分词)中可能对于相同的输入产生不同的分词结果,导致生成包含海量低频词的庞大词表,还可能存在未登录词(Out-of-vocabulary, OOV)等问题。因此,一些语言模型开始采用字符作为最小单位来分词。其中子词分词器(Subword Tokenizer)被广泛应用于基于 Transformer 的语言模型中,包括 BPE 分词、WordPiece 分词和 Unigram 分词三种常见方法。

二、分词的粒度

从分词的粒度区分,主要包括3种类型,Word 、Subword、Char
在这里插入图片描述

1)Word分词粒度以完整的单词为单位进行分词,能够很好地保留每个词的语义,适合上下文理解和语义分析。然而,它面临着长尾效应和稀有词问题,可能导致词汇表庞大并且出现OOV(Out-of-Vocabulary)问题。

OOV是“Out-Of-Vocabulary”的缩写,直译为“词汇表外的”,在自然语言处理中,表示的是那些在词汇表中没有的单词

2)Char分词粒度则是将文本拆分为字符级别,这样可以解决OOV问题,因为可以处理任何字符,但缺点是可能缺乏明确的语义信息,并且由于粒度过细,会增加后续处理的计算成本和时间。
3)Subword分词粒度介于Word和Char之间,旨在克服两者的缺点,同时保留语义信息并减少OOV问题的发生。Subword分词方法如BPE(Byte Pair Encoding)或WordPiece通过统计学方法切分单词为更小的有意义的单元,这使得它们在处理生僻词和缩写时更为有效。(目前使用比较广泛)

三、分词器的类型

针对Subword常用的分词器有3种:BPE 分词、WordPiece 分词和 Unigram 分词。
在这里插入图片描述

SentencePiece 是一个开源的分词器工具;是由谷歌开发的,旨在提供一种高效的方式来对文本进行分词,尤其适用于处理变长和不规则的文本数据。它通过训练特定领域的模型来代替预训练模型中的词表,从而更有效地处理词汇。常用的BPE、WordPiece、 Unigram分词器都支持。

四、BPE/BBPE分词

1)BPE:从字符级别开始,逐步合并最频繁连续出现的字符或字符组合,形成新的词汇单元。
2)BBPE:字节级别的 BPE(Byte-level BPE, B-BPE)是 BPE 算法的一种拓展。它将字节视为合并操作的基本符号,从而可以实现更细粒度的分割,且解决了未登录词问题。采用这种词元化方法的代表性语言模型包括 GPT-2 、BART 和 LLaMA 。
3)对于英文、拉美体系的语言来说使用BPE分词足以在可接受的词表大小下解决OOV的问题,但面对中文、日文等语言时,其稀有的字符可能会不必要的占用词汇表(词汇表要么巨大要么会OOV),因此考虑使用字节级别byte-level解决不同语言进行分词时OOV的问题。具体的,BBPE将一段文本的UTF-8编码(UTF-8保证任何语言都可以通用)中的一个字节256位不同的编码作为词表的初始化基础Subword。

例如,GPT-2 的词表大小为 50,257 ,包括 256 个字节的基本词元、一个特殊的文末词元以及通过 50,000 次合并学习到的词元。(相当于既有了BPE特性,又兼容了中文)
在这里插入图片描述

BBPE的优点:不会出现 OOV 的情况。不管是怎样的汉字,只要可以用字节表示,就都会存在于初始词表中。
BBPE的缺点:一个汉字由3个字节组成,一个汉字就会被切成多个token,但实际上这多个token没必要进行训练。

BPE词表构建整体流程如下:
在这里插入图片描述

五、WordPiece分词

1)WordPiece 分词和 BPE 分词的想法非常相似,都是通过迭代合并连续的词元,但是合并的选择标准略有不同WordPiece 分词算法并不选择最频繁的词对,而是使用下面的公式为每个词对计算分数
在这里插入图片描述

比如unable,BPE 只关心 token pair 的出现频率,即 freq_of_pair;WordPiece 还考虑了每个 token 的出现频率。即使 unable 出现频率很高,但如果 un 和 able 单个 token 的出现频率都很高,也不会合并它们。

2)WordPiece:就是将所有的「常用字」和「常用词」都存到词表中,当需要切词的时候就从词表里面查找即可。
WordPiece 的方式很有效,但当字词数目过于庞大时这个方式就有点难以实现了。对于一些多语言模型来讲,要想穷举所有语言中的常用词,这个量会非常大(穷举不全会造成 OOV)
在这里插入图片描述

六、Unigram 分词

Unigram分词器与BPE和WordPiece的不同在于它的构建过程。Unigram初始化时会创建一个非常大的词汇表,然后根据一定的标准逐步丢弃较不常用的词汇单元,直到满足限定的词汇表大小(比较适合处理生僻词)

七、分词器的选择

大语言模型通常使用 SentencePiece 代码库为预训练语料训练定制化的分词器(也可以自定义);
这一代码库支持字节级别的 BPE 、 Unigram 、WordPiece分词。为了训练出高效的分词器,通常主要关注以下几个因素。首先,分词器必须具备无损重构的特性,即其分词结果能够准确无误地还原为原始输入文本。其次,分词器应具有高压缩率,即在给定文本数据的情况下,经过分词处理后的词元数量应尽可能少,从而实现更为高效的文本编码和存储。具体来说,压缩比可以通过将原始文本的 UTF-8 字节数除以分词器生成的词元数(即每个词元的平均字节数)来计算:
在这里插入图片描述

例如,给定一段大小为 1MB(1,048,576 字节)的文本,如果它被分词为 200,000
个词元,其压缩率即为 1,048,576/200,000=5.24

八、各大模型的分词效果

分词效果:男儿何不带吴钩,收取关山五十州
在这里插入图片描述

1、LLaMA 词表是最小的,LLaMA 在中英文上的平均 token 数都是最多的,意味 LLaMA 对中英文分词都会比较碎,比较细粒度。
尤其在中文上平均 token 数高达1.45,这意味着 LLaMA 大概率会将中文字符切分为2个以上的 token。
2、Chinese LLaMA 扩展词表后,中文平均 token 数显著降低,会将一个汉字或两个汉字切分为一个 token,提高了中文编码效率。
3、ChatGLM-6B 是平衡中英文分词效果最好的 tokenizer。由于词表比较大,中文处理时间也有增加。
4、BLOOM 虽然是词表最大的,但由于是多语种的,在中英文上分词效率与 ChatGLM-6B 基本相当。
在这里插入图片描述

九、SentencePiece分词器使用

SentencePiece地址:https://github.com/google/sentencepiece
1)安装相关依赖

pip install sentencepiece

2)分词器使用

% spm_train --input=<input> --model_prefix=<model_name> --vocab_size=8000 --character_coverage=1.0 --model_type=<type>

参数说明:

--input:原始语料库文件,可以传递以逗号分隔的文件列表。
--model_prefix:输出的词表名称; 文件格式:<model_name>.model 、 <model_name>.vocab
--vocab_size:设置词表大小,例如 8000、16000 或 32000
--character_coverage:词表对语料库的覆盖率,默认:0.9995 对于具有丰富字符集的语言(如日语或中文)和其他具有小字符集的语言可以设置为1.0 (即对原料库的覆盖率为100%,包含语料库所有的单词)
--model_type:模型类型。unigram (default), bpe, char, or word

🔖更多专栏系列文章:🚩🚩🚩AIGC-AI大模型探索之路

文章若有瑕疵,恳请不吝赐教;若有所触动或助益,还望各位老铁多多关注并给予支持。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

法律知识学习考试系统 C#+uniapp+asp.net微信小程序

技术要求&#xff1a;后端C#&#xff0c;安卓app&#xff0c;mysql数据库 系统分为管理员、教师端和学生端: 管理员端实现管理员的注册登录以及教师和学生的注册、法律法规内容的发布与更新、法律法规页面的评论的添加与删除、内容查询、知识小测的内容发布与删除、问卷调查的发…

云计算和边缘计算究竟有什么不同

在数据时代&#xff0c;无论是人的活动还是机器的运作都会产生各种各样海量的数据。在对数据梳理和筛选过程中&#xff0c;计算机的运算处理必不可少。为了减少本地计算机算力成本等限制&#xff0c;越来越多的企业选择了云计算和边缘计算。今天&#xff0c;德迅云安全就带您来…

SpikingJelly笔记之梯度替代

文章目录 前言一、梯度替代二、网络结构三、MNIST分类1、单步模式2、多步模式 总结 前言 在SpikingJelly使用梯度替代训练SNN&#xff0c;构建单层全连接SNN实现MNIST分类任务。 一、梯度替代 1、梯度替代&#xff1a; 阶跃函数不可微&#xff0c;无法进行反向传播 g ( x ) …

miniTry:Python实现web搜索(全自动+程序操控)

声明&#xff1a;本问给出了全部代码--可以复现--亲测有效 :) [ 代码为图片--> 强制自己去敲一次 又不多] 1.打开网站&#xff1a; 2.利用id去定位到我们要进行输入的内容&#xff08;bing可以直接进行搜索&#xff0c;而csdn需要登录&#xff0c;所以我们用csdn做演示&…

HODL、FUD、FOMO 等其他比特币俚语是什么意思?

作者&#xff1a;Paxful Team 1、FOMO&#xff08;惧怕错失机会&#xff09; FOMO 是惧怕错失机会的缩写&#xff0c;可用于日常生活。它指的是当其他人都在谈论比特币时&#xff0c;产生的购买比特币的紧迫感。 2、Shill&#xff08;不断推广吹捧&#xff09; Shilling 是指…

linux支持vGPU方案

1&#xff0c;查询gpu型号&#xff1a;lspci | grep "NVIDIA\|VGA" PCI Devices 2&#xff0c;下载驱动 官方驱动 | NVIDIA 3&#xff0c;安装 sudo sh NVIDIA-Linux-x86_64-440.118.02.run -no-x-check -no-nouveau-check -no-opengl-files参数说明&#xff1a; …

自定义View-旋转变色圆角三角形的绘制

本文字数&#xff1a;3151字 预计阅读时间&#xff1a;20分钟 在现代设计中&#xff0c;动效图在APP的UI界面中所起到的作用无疑是显著的。相比于静态的界面&#xff0c;动效更符合人类的自然认知体系&#xff0c;它有效地降低了用户的认知负载&#xff0c;UI动效俨然已经成为了…

汽车新四化,会发生什么?

北京国际汽车展览会正如火如荼地进行中,作为国内外汽车行业瞩目的盛会&#xff0c;众多车企纷纷亮出了自家的“杀手锏”。 这场汽车的盛宴不仅集中展示了众多汽车品牌的最新技术和产品&#xff0c;更深刻体现了汽车新四化的发展趋势。汽车新四化&#xff0c;即电动化、网联化、…

DS进阶:AVL树和红黑树

一、AVL树 1.1 AVL树的概念 二叉搜索树&#xff08;BST&#xff09;虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率低下。因此&#xff0c;两位俄罗斯的数学家G.M.Adelson-…

使用Keil移植工程时修改单片机型号参数

系列文章目录 STM32单片机系列专栏 C语言术语和结构总结专栏 当使用Keil对STM32系列单片机开发时&#xff0c;如果使用的是库函数&#xff0c;那么不同型号单片机的工程项目文件是可以直接移植的。只需要按照下面的步骤修改对应的芯片&#xff0c;就可以直接将工程移植过去&a…

JVM垃圾收集器--分区收集器

G1收集器 属性 G1&#xff08;Garbage-First Garbage Collector&#xff09;在 JDK 1.7 时引入&#xff0c;在 JDK 9 时取代 CMS 成为了默认的垃圾收集器。G1 有五个属性&#xff1a;分代、增量、并行、标记整理、STW。 分代 G1收集器 将内部分为多个大小相等的区域&#x…

Java8 Stream常见用法

Stream流的常见用法&#xff1a; 1.利用stream流特性把数组转list集合 //定义一个数组Integer[] array {5,2,1,6,4,3};//通过stream特性把数组转list集合List<Integer> list Arrays.stream(array).collect(Collectors.toList());//打印结果System.out.println(list);…

全球数据爬取的解决方案-国外数据爬取

引言 随着经济的持续低迷和对外贸易的需求扩大&#xff0c;各个公司为了更好的了解海外客户情况&#xff0c;最简单直接的办法就是从全球收集公共的网络数据。 无论是海外电商用户的消费习惯还是训练自己的通用人工智能chatgpt&#xff0c;都是需要海量和多种类型数据的支持。…

【Linux】进程间通信(共享内存、消息队列、信号量)

一、System V —— 共享内存&#xff08;详解&#xff09; 共享内存区是最快的 IPC 形式。一旦这样的内存映射到共享它的进程的地址空间&#xff0c;这些进程间数据传递不再涉及到内核&#xff0c;换句话说&#xff0c;就是进程不再通过执行进入内核的系统调用来传递彼此的数…

[NSSCTF]prize_p5

前言 之前就学过反序列化的字符串逃逸 但是没怎么做题 补一下窟窿 题目 <?phperror_reporting(0);class catalogue{public $class;public $data;public function __construct(){$this->class "error";$this->data "hacker";}public functi…

HTTP网络协议的请求方法,具体详解(2024-04-26)

1、HTTP 即超文本传输协议&#xff0c;是一种实现客户端和服务器之间通信的响应协议&#xff0c;它是用作客户端和服务器之间的请求 根据 HTTP 标准&#xff0c;HTTP 请求可以使用多种请求方法。 2、方法分类 HTTP1.0 定义了三种请求方法&#xff1a; GET, POST 和 HEAD 方…

表情识别 | 卷积神经网络(CNN)人脸表情识别(Matlab)

表情识别 | 卷积神经网络(CNN)人脸表情识别&#xff08;Matlab&#xff09; 目录 表情识别 | 卷积神经网络(CNN)人脸表情识别&#xff08;Matlab&#xff09;预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab使用卷积神经网络(CNN)&#xff0c;进行人脸表情情绪识别…

论文解读:(CAVPT)Dual Modality Prompt Tuning for Vision-Language Pre-Trained Model

v1文章名字&#xff1a;Dual Modality Prompt Tuning for Vision-Language Pre-Trained Model v2文章名字&#xff1a;Class-Aware Visual Prompt Tuning for Vision-Language Pre-Trained Model 文章汇总 对该文的改进&#xff1a;论文解读&#xff1a;(VPT)Visual Prompt …

STM32H7 HSE时钟的使用方法介绍

目录 概述 1 STM32H750 HSE时钟介绍 2 使用STM32Cube创建Project 3 认识HSE时钟 3.1 HSE时钟的特性 3.2 HSE的典型应用电路 4 STM32Cube中配置时钟 4.1 时钟需求 4.2 配置参数 4.2.1 使能外围资源 4.2.2 使用STM32Cube注意项 4.2.3 配置参数 5 总结 概述 本文主要…

ESP-IDF编译系统详解(1)

接前一篇文章&#xff1a;VSCode ESP-IDF安装与配置全过程 本文内容主要参考&#xff1a; 《ESP32-C3物联网工程开发实战》 —— 乐鑫科技 编著 特此致谢&#xff01; 前文已经详述了ESP-IDF开发环境的搭建&#xff0c;包括ESP-IDF的下载与安装完整流程&#xff0c;以及VSCo…