小白学大模型:Hugging Face Tokenizer

news2025/1/13 17:27:21

Tokenizer介绍

在自然语言处理(NLP)领域,Tokenizer(分词器)是准备输入模型的关键步骤之一。Hugging Face 提供了用于各种模型的分词器库,其中大多数分词器都以两种风格提供:一种是完整的 Python 实现,另一种是基于 Rust 库 🤗 Tokenizers 的“Fast”实现。这两种实现方式各有特点,其中“Fast”实现具有两大优势:

  1. 显著提升速度: 特别是在批处理分词时,使用“Fast”实现可以获得显著的速度提升。
  2. 额外的方法: 提供了额外的方法,用于在原始字符串(字符和单词)与标记空间之间进行映射。例如,可以获取包含给定字符的标记的索引,或获取与给定标记对应的字符范围。

PreTrainedTokenizer 和 PreTrainedTokenizerFast 实现了所有分词器主要方法的核心功能:

  1. 分词(Tokenizing): 将字符串分割成子词标记字符串,将标记字符串转换为标识符(ids)并反向转换,即进行编码/解码(即分词并转换为整数)。
  2. 向词汇表添加新标记: 以与底层结构(BPE、SentencePiece 等)无关的方式添加新标记。
  3. 管理特殊标记: 比如掩码、句首等,包括添加这些标记、将它们分配给分词器的属性以便轻松访问,并确保在分词过程中它们不会被拆分。

BatchEncoding 存储了 PreTrainedTokenizerBase 的编码方法(__call__encode_plusbatch_encode_plus)的输出,是一个继承自 Python 字典的类。当分词器是纯 Python 分词器时,该类的行为与标准 Python 字典完全相同,存储了这些方法计算得到的各种模型输入(input_idsattention_mask 等)。

当分词器是“Fast”分词器(即由 HuggingFace 的 tokenizers 库 支持)时,该类提供了几种高级的对齐方法,可用于在原始字符串(字符和单词)与标记空间之间进行映射。例如,可以获取包含给定字符的标记的索引,或获取与给定标记对应的字符范围。这为更复杂的分析和理解模型输入与原始文本之间关系提供了便利。

Tokenizer用途

将文本拆分成较小块是一项比看起来更加困难的任务,而且有多种方法可以实现。例如,让我们看看句子 "Don't you love 🤗 Transformers? We sure do."

一种简单的标记化方法是通过空格拆分,得到:

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

这是一个明智的第一步,但如果我们看一下标记 "Transformers?""do.",我们会注意到标点符号附在单词 "Transformer""do" 上,这是不太理想的。我们应该考虑标点符号,以便模型不必学习单词及其可能跟随的每个可能的标点符号的不同表示,这将导致模型需要学习的表示数量激增。考虑标点符号后,对我们的示例文本进行标记化会得到:

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

更好了。然而,标记化处理单词 "Don't" 的方式并不理想。"Don't" 代表 "do not",因此最好将其标记化为 ["Do", "n't"]。这就是事情开始变得复杂的地方,也是每个模型都有自己的分词器类型的原因之一。根据我们用于标记化文本的规则,相同文本的不同标记化输出会生成不同的结果。只有当输入与模型训练数据相同的规则进行标记化时,预训练模型才能正常运行。

spaCy 和 Moses 是两个受欢迎的基于规则的分词器。对我们的示例应用 spaCyMoses,会得到类似以下的结果:

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

可以看到,这里使用了空格和标点标记化,以及基于规则的标记化。空格和标点标记化以及基于规则的标记化都是词标记化的示例,它宽泛地定义为将句子拆分为单词。虽然这是将文本分块的最直观方法,但对于大规模文本语料库可能会带来问题。

这么大的词汇表强迫模型拥有一个巨大的嵌入矩阵作为输入和输出层,从而导致内存和时间复杂性增加。通常来说,transformer 模型很少具有超过 50,000 的词汇表大小,特别是如果它们只在单一语言上进行预训练。

尽管字符标记化非常简单且可以大大减少内存和时间复杂性,但这使得模型更难学习有意义的输入表示。

不同的分词方法

接下来详细介绍了几种子词(subword)分词算法,主要包括Byte-Pair Encoding (BPE),WordPiece,Unigram和SentencePiece。这些算法的共同目标是根据文本中的频率将词分解为有意义的子词,以便在建模中更好地处理语言。

  1. Byte-Pair Encoding (BPE):

    • BPE根据一个预分词器将训练数据拆分为单词。
    • 创建一个基础词汇,包括训练数据中的所有符号。
    • 学习合并规则,形成新的符号,直到达到所需的词汇大小。
    • 合并规则基于符号对的频率,选择最常见的符号对进行合并。
    • 通过合并规则,BPE创建一个包含合并后符号的词汇。
  2. WordPiece:

    • 与BPE相似,但不是选择最常见的符号对,而是选择最大化加入词汇后训练数据似然的符号对。
    • WordPiece初始化词汇包括训练数据中的每个字符,并逐渐学习一定数量的合并规则。
  3. Unigram:

    • Unigram使用大量符号初始化基础词汇,并逐渐修剪每个符号以获得较小的词汇。
    • 在每个训练步骤中,计算当前词汇和unigram语言模型给定训练数据的损失。
    • 移除影响整体损失最小的符号,重复此过程直到词汇达到所需大小。
    • Unigram保留基本字符,以便能够对任何单词进行分词。
  4. SentencePiece:

    • SentencePiece将输入视为原始输入流,将空格包括在要使用的字符集中。
    • 使用BPE或unigram算法构建适当的词汇。
    • SentencePiece用于处理不使用空格分隔单词的语言,如中文、日文和泰文。

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

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

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

相关文章

VRRP

文章目录 VRRP基本原理技术背景VRRP作用VRRP概述VRRP报文VRRP名词解释VRRP路由器VRRP组虚拟路由器虚拟IP地址、MAC地址Master、Backup路由器 VRRP状态机Master/ Backup 路由器Master路由器:Backup路由器: VRRP的工作过程 VRRP基础配置 VRRP基本原理 技术背景 为了解决单个路由…

力扣hot100:138. 随机链表的复制(技巧,数据结构)

LeetCode:138. 随机链表的复制 这是一个经典的数据结构题,当做数据结构来学习。 1、哈希映射 需要注意的是,指针也能够当做unordered_map的键值,指针实际上是一个地址值,在unordered_map中,使用指针的实…

快速C++中的入门智能指针

✨前言✨ 📘 博客主页:to Keep博客主页 🙆欢迎关注,👍点赞,📝留言评论 ⏳首发时间:2024年6月4日 📨 博主码云地址:博主码云地址 📕参考书籍&#…

【数据集划分】假如你有超百万条oracle数据库数据(成真版)

【数据集划分】假如你有接近百万条oracle数据库数据(成真版) 写在最前面小结 数据集划分原因注意事项 1. 留出法(Hold-out Method)原理算法复杂度代码示例Scikit-learn的train_test_split分布式计算框架(如Apache Spar…

JVM学习-Jprofiler

JProfiler 基本概述 特点 使用方便,界面操作友好对被分析的应用影响小(提供模板)CPU,Tread,Memory分析功能尤其强大支持对jdbc,noSql,jsp,servlet,socket进行分析支持多种模式(离线、在线)的分析支持监控本地、远程JVM跨平台,拥…

MongoDB~索引使用与优化

Study by: https://docs.mongoing.com/indexeshttps://www.cnblogs.com/Neeo/articles/14325130.html#%E5%85%B6%E4%BB%96%E7%B4%A2%E5%BC%95 作用 如果你把数据库类比为一本书,那书的具体内容是数据,书的目录就是索引,所以索引…

C++第三方库【httplib】断点续传

什么是断点续传 上图是我们平时在浏览器下载文件的场景,下载的本质是数据的传输。当出现网络异常,浏览器异常,或者文件源的服务器异常,下载都可能会终止。而当异常解除后,重新下载文件,我们希望从上一次下载…

用例篇03

正交表 因素:存在的条件 水平:因素的取值 最简单的正交表:L4(2) 应用 allpairs 来实现正交表。 步骤: 1.根据需求找出因素和水平 2.将因素和水平写入到excel表格中(表格不需要保存)(推荐用…

文本批量高效编辑器:一键在每行结尾添加分隔符,助力文本处理飞速提升!

在信息爆炸的时代,文本处理成为了一项不可或缺的技能。然而,面对大量的文本数据,如何高效地进行处理却成为了一项挑战。这时,一款高效、易用的文本批量编辑器就显得尤为重要。这个软件就是首助编辑高手 首先,打开首助…

fairseq框架使用记录

sh命令 cmd"fairseq-train data-bin/$data_dir--save-dir $save_dir--distributed-world-size $gpu_num -s $src_lang -t $tgt_lang--arch $arch--dropout $dropout--criterion $criterion --label-smoothing 0.1--task mmt_vqa--optimizer adam --adam-betas (0.9, 0.98…

高并发系统限流原理

短时间内巨大的访问流量,我们如何让系统在处理高并发的同时还能保证自身系统的稳定性?估计有人会说,增加机器就可以了,因为我的系统架构设计就是按照分布式思想进行架构设计的,所以可以只需要增加机器就可以解决问题了…

代码随想录算法训练营day41

题目:01背包理论基础、416. 分割等和子集 参考链接:代码随想录 动态规划:01背包理论基础 思路:01背包是所有背包问题的基础,第一次看到比较懵,完全不知道dp数据怎么设置。具体分析还是dp五部曲&#xff…

Vue3实战笔记(58)—从零开始掌握Vue3插槽机制,基础入门

文章目录 前言插槽基础入门总结 前言 不论是组件封装还是分析源码,实际开发中经常接触插槽,插槽是干什么用的呢?组件之间能够接收任意类型的 JavaScript 值作为 props,但组件要如何接收模板内容呢?在某些场景中&#…

openssl 常用命令demo

RSA Private Key的结构(ASN.1) RSAPrivateKey :: SEQUENCE { version Version, modulus INTEGER, -- n publicExponent INTEGER, -- e privateExponent INTEGER, -- d prime1 INTEGER, -- …

k8s学习--ConfigMap详细解释与应用

文章目录 一 什么是configmapConfigMap 的好处ConfigMap 的限制 二.创建ConfigMap的4种方式1.在命令行指定参数创建2.在命令行通过多个文件创建3.在命令行通过文件提供多个键值对创建4.YAML资源清单文件创建 三 configmap的两种使用方法1.通过环境变量的方式传递给pod2.通过vol…

vue3+typescript 使用Codemirror

安装 // npm npm install codemirror-editor-vue3 codemirror^5.65.12// ts版 还需安装: npm install types/codemirror全局注册 修改main.ts: import { createApp } from vueimport App from ./App.vueimport { InstallCodemirro } from "code…

文件编码概念

文件的读取 open()函数: 打开一个已存在的文件,或者创建一个新文件 open(name,mode,encoding) name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径) mode:设置打开文件的模式(访问模式)&am…

LabVIEW步进电机的串口控制方法与实现

本文介绍了在LabVIEW环境中通过串口控制步进电机的方法,涵盖了基本的串口通信原理、硬件连接步骤、LabVIEW编程实现以及注意事项。通过这些方法,用户可以实现对步进电机的精确控制,适用于各种自动化和运动控制应用场景。 步进电机与串口通信…

【Linux】信号(一)

信号我们将从信号产生,信号的保存,信号处理分别进行讲解~ 至少大思路是这样。开始之前还要进行一些基础知识的铺垫。 目录 从生活中提炼一些结论:信号概念的一些储备:信号产生:一、kill指令:二、键盘组合键…

[数据集][目标检测]轮胎检测数据集VOC+YOLO格式439张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):439 标注数量(xml文件个数):439 标注数量(txt文件个数):439 标注类别…