hugging face---transformers包
一、前言
不同于计算机视觉的百花齐放,不同网络适用不同情况,NLP则由Transformer一统天下。transformer是2017年提出的一种基于自注意力机制的神经网络架构,transformers库是hugging face社区创造的一个py库,通过该库可以实现统一的接口去下载调用社区中的模型,并进行微调等等操作。 (没梯子也可以手动下载)
二、流程

①分词
1、含义
神经网络只能处理数字,因此必须将文本转换为数值(如词表索引)。先利用分词器,将连续的文本拆分为离散的单元(Token),现在一般直接调用transformers库的分词器完成分词即可。
在自然语言处理(NLP)中,Token(标记/词元) 是文本处理的最小单位,可以理解为将一段文本“拆解”后的基本元素。它的具体含义取决于分词策略(Tokenization),以下是详细解释:
1. Token 的常见形式
- 单词:例如英文中按空格切分(
"hello","world")。- 子词(Subword):将长词或罕见词拆分为更小的片段(如
"unhappiness" → "un" + "##happiness")。- 字符:单个字母或汉字(如
"A","语")。- 标点/符号:例如
",","?"。- 特殊标记:模型预定义的符号(如
[CLS],[SEP],<pad>)。2. 为什么需要 Tokenization?
- 统一输入格式:将文本转换为模型可处理的数值(如
input_ids)。- 解决未登录词(OOV):通过子词拆分处理词典外的词汇(例如
"ChatGPT" → "Chat" + "G" + "PT")。- 跨语言兼容:适用于无空格语言(如中文、日文)或黏着语(如土耳其语)。
3. 不同分词策略的 Token 示例
(1) 英文文本
- 原始句子:
"Don't hesitate to try!"- 分词结果(不同策略):
- Word-based(按单词):
["Don't", "hesitate", "to", "try", "!"]- Subword(BERT 风格):
["Don", "'", "t", "hesitate", "to", "try", "!"]- Character-based(按字符):
["D", "o", "n", "'", "t", "h", "e", ...](2) 中文文本
- 原始句子:
"深度学习很有趣!"- 分词结果(不同策略):
- 按词语:
["深度", "学习", "很", "有趣", "!"]- 按子词(SentencePiece):
["深", "度", "学", "习", "很", "有", "趣", "!"]- 按字符:
["深", "度", "学", "习", "很", "有", "趣", "!"]4. Token 在模型中的使用
- 数值化映射:每个 Token 会被转换为词典中的索引(ID)。
例如:"hello" → 1234,"!" → 99。- 输入格式:文本最终转换为模型所需的
input_ids,例如:
"Hello world!" → [101, 1234, 2137, 999, 102](BERT 风格)。5. 不同模型的分词器对比
模型/分词器 分词策略 Token 示例 BERT WordPiece ["hello", "##world", "!"]GPT-3 Byte-Pair (BPE) ["hello", " world", "!"]T5 SentencePiece ["▁Hello", "▁world", "!"]中文BERT 按字切分 ["深", "度", "学", "习"]6. 关键点总结
- Token 是文本的原子单位:拆解文本的方式取决于任务需求和语言特性。
- 子词分词是主流:平衡词典大小与未登录词问题(如
"ChatGPT"拆为["Chat", "G", "PT"])。- Token 与模型强相关:BERT、GPT 等模型的分词器需配套使用。
如果你正在使用 Transformers 库,可以这样体验分词过程:
from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased") text = "Don't hesitate to try!" tokens = tokenizer.tokenize(text) # 输出:["don", "'", "t", "hesitate", "to", "try", "!"] input_ids = tokenizer.encode(text) # 输出:数值化的 Token ID 列分词后的Token往往会将每个Token映射到唯一一个ID,因为计算机只能处理数值,无法直接理解字符、词语或句子,可以理解为有一个超级大的字典,足以容纳所有字符,每个Token都可以对应唯一ID,训练模型是通过Token的ID进行的。(在对一个句子分词和映射时,可能会加入一些分词符,所以打印映射结果可能会比分词后的字符数多)
2、分词器(Tokenizer)

(1)AutoTokenizer
前面说过,不同的模型可能会使用不同的分词策略,所以如果使用不同的模型,就需要加载不同的分词器以使用不同的分词策略,transformers提供了AutoTokenizer,可以自动实现判断其分词策略,只需要提供给它对应的模型名即可。
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")# 将模型名传入即可自动判断分词策略
text = "Don't hesitate to try!"
tokens = tokenizer.tokenize(text) # 分词结果:["don", "'", "t", "hesitate", "to", "try", "!"]
input_ids = tokenizer.encode(text) # 数值化的 Token ID 列表
(2)分词器相关参数
tokenizer.tokenize():轻量级工具,仅用于分词调试。tokenizer():一站式解决方案,生成模型所需的完整输入。
根据需求选择合适的方法:若直接调用模型,永远优先使用tokenizer();若需中间结果(如分析分词策略),再用tokenizer.tokenize()。
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")# 将模型名传入即可自动判断分词策略
raw_inputs = ["Don't hesitate to try!","I love eat rice!"]
tokens = tokenizer(raw_inputs, padding=True, truncation=True, return_tensors='pt')
input_ids = tokenizer.encode(raw_inputs)
print(tokens)
print(input_ids)
# out
{'input_ids': tensor([[ 101, 2123, 1005, 1056, 16390, 2000, 3046, 999, 102],
[ 101, 1045, 2293, 4521, 5785, 999, 102, 0, 0]]), 'token_type_ids': tensor([[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0]]), 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 0, 0]])}
[101, 2123, 1005, 1056, 16390, 2000, 3046, 999, 102, 1045, 2293, 4521, 5785, 999, 102]
- padding:填充,以拥有最长Token的那句话为基准,为其他不够长的进行填充,以使处理后的TokenID列表长度一致。
- truncation:截断,将输入文本控制在模型能接受的最大长度内,如Transformer 的注意力机制:计算复杂度随输入长度呈平方级增长(O(n²)),模型预训练时固定了最大长度(如 BERT 为 512 Tokens)
- attention_mask:用于告诉模型在处理输入时应该“关注”哪些位置,忽略哪些位置。它的核心作用是解决文本长度不一致和填充(Padding)带来的问题,因为在padding时会对较短Token的句子做填充,填充部分是无效输入,如果没有
attention_mask,模型会误认为填充的0是有效输入,导致计算错误。 -
return_tensors(返回张量格式):指定返回数据的框架格式。常用值:"pt":返回 PyTorch 张量。"tf":返回 TensorFlow 张量。"np":返回 NumPy 数组。None:返回列表(默认)。
3、模型的缓存与加载
from transformers import AutoModel, AutoTokenizer# 下载模型和分词器到 cache_dir/bert
model = AutoModel.from_pretrained("bert-base-uncased", cache_dir="./bert")
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
AutoModel用于找到并缓存或加载对应模型,cache_dir可指定缓存路径,默认会放在C盘的.cache/huggingface目录下。
相关文章:
hugging face---transformers包
一、前言 不同于计算机视觉的百花齐放,不同网络适用不同情况,NLP则由Transformer一统天下。transformer是2017年提出的一种基于自注意力机制的神经网络架构,transformers库是hugging face社区创造的一个py库,通过该库可以实现统一…...
网络安全防护指南:筑牢网络安全防线(510)
一、网络安全的基本概念 (一)网络的定义 网络是指由计算机或者其他信息终端及相关设备组成的按照一定的规则和程序对信息收集、存储、传输、交换、处理的系统。在当今数字化时代,网络已经成为人们生活和工作中不可或缺的一部分。它连接了世…...
微信小程序实现拉卡拉支付
功能需求:拉卡拉支付(通过跳转拉卡拉平台进行支付),他人支付(通过链接进行平台跳转支付) 1.支付操作 //支付 const onCanStartPay async (obj) > {uni.showLoading({mask: true})// 支付接口获取需要传…...
git从本地其他设备上fetch分支
在 Git 中,如果你想从本地其他设备上获取分支,可以通过以下几种方式实现。不过,需要注意的是,Git 本身是分布式版本控制系统,通常我们是从远程仓库(如 GitHub、GitLab 等)拉取分支,而…...
【干货教程】Windows电脑本地部署运行DeepSeek R1大模型(基于Ollama和Chatbox)
文章目录 一、环境准备二、安装Ollama2.1 访问Ollama官方网站2.2 下载适用于Windows的安装包2.3 安装Ollama安装包2.4 指定Ollama安装目录2.5 指定Ollama的大模型的存储目录 三、选择DeepSeek R1模型四、下载并运行DeepSeek R1模型五、常见问题解答六、使用Chatbox进行交互6.1 …...
基于 SSM框架 的 “捷邻小程序” 系统的设计与实现
大家好,今天要和大家聊的是一款基于 SSM框架 的 “捷邻小程序” 系统的设计与实现。项目源码以及部署相关事宜请联系我,文末附上联系方式。 项目简介 基于 SSM框架 的 “捷邻小程序” 系统设计与实现的主要使用者分为 管理员 和 用户,没有授…...
基于Springboot医院预约挂号小程序系统【附源码】
基于Springboot医院预约挂号小程序系统 效果如下: 小程序主页面 帖子页面 医生账号页面 留言内容页面 管理员主页面 用户管理页面 我的挂号页面 医生管理页面 研究背景 随着信息技术的飞速发展和互联网医疗的兴起,传统的医疗服务模式正面临着深刻的变…...
基于AVue的二次封装:快速构建后台管理系统的CRUD方案
基于AVue的二次封装:快速构建后台管理系统的CRUD方案 在开发后台管理系统时,表格是常见的组件之一。然而,使用原生的Element Plus实现CRUD(增删改查)功能往往需要编写大量重复代码,过程繁琐。即使借助类似…...
【含开题报告+文档+PPT+源码】基于springboot加vue 前后端分离的校园新闻审核发布管理系统
开题报告 本研究旨在设计并实现一套基于SpringBoot后端框架结合Vue前端技术的校园新闻发布系统,该系统面向学生用户群体提供了全面的功能服务。学生用户通过身份验证登录后,能够便捷高效地获取校园内的各类新闻资讯,实时了解校内动态。系统不…...
Qt 是一个跨平台的 C++ 应用程序框架
Qt 是一个跨平台的 C++ 应用程序框架,广泛用于开发图形用户界面(GUI)应用程序,也可以用于开发非 GUI 程序,如命令行工具和控制台应用程序。Qt 提供了丰富的类库和工具,支持多种操作系统,包括 Windows、macOS、Linux 等。 主要特点: 跨平台:Qt 支持多种操作系统,开发…...
2025年SCI一区智能优化算法:真菌生长优化算法(Fungal Growth Optimizer,FGO),提供MATLAB代码
一. 真菌生长优化算法(FGO) 真菌生长优化算法(Fungal Growth Optimizer,FGO)是一种新型的自然启发式元启发式算法,其灵感来源于自然界中真菌的生长行为。该算法通过模拟真菌的菌丝尖端生长、分支和孢子萌发…...
解决Spring Boot中Druid连接池“discard long time none received connection“警告
在使用Spring Boot结合Druid连接池时,开发者可能会遇到"discard long time none received connection"的警告信息。虽然这通常不会影响应用程序的正常运行,但这些警告信息可能会让人感到困扰。本文将探讨这个问题的原因,并提供几种…...
stm32常见的存储器应用
常用 STM32 存储器芯片介绍和应用 STM32 微控制器通常与多种存储器芯片一起工作,以下是几种常见的存储器类型及其应用: 1. 闪存(Flash Memory) STM32 内部的 闪存 是一种非易失性存储器,广泛用于存储程序代码和常驻…...
如何使用3D高斯分布进行环境建模
使用3D高斯分布来实现建模,主要是通过高斯分布的概率特性来描述空间中每个点的几何位置和不确定性。具体来说,3D高斯分布被用来表示点云数据中的每一个点或体素(voxel)的空间分布和不确定性,而不是单纯地存储每个点的坐…...
三级分类bug解决
文章目录 前端后端 前端 <!DOCTYPE html> <html xmlns:th"http://www.thymeleaf.org" lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0&q…...
AxiosError: Network Error
不知怎么的,项目还在开发阶段,之前还好好的,玩儿了两天再一打开发现页面无法显示数据了,报错如下: 我以为是后端出问题了,但是后端控制台无报错,又用postman测试了一下,可以获取到数…...
CDefFolderMenu_MergeMenu函数分析之添加了分割线和属性菜单项两项
CDefFolderMenu_MergeMenu函数分析之添加了分割线和属性菜单项两项 第一部分: void CDefFolderMenu_MergeMenu(HINSTANCE hinst, UINT idMainMerge, UINT idPopupMerge, QCMINFO *pqcm) { UINT idMax pqcm->idCmdFirst; if (idMainMerge) { HME…...
mysql的源码包安装
安装方式一:(编译好的直接安装) 1.添加一块10G的硬盘,给root逻辑卷扩容 (下面安装方式二有,一模一样的装就行,我就不写了,再写的话篇幅就太长了) 2.下载编译好的源码包…...
win11系统无法打开软件_组策略无法打开_gpedit.msc不生效_为了对电脑进行保护,已经阻止此应用---Windows工作笔记057
碰到这个问题挺麻烦的,要用的软件打不开了. 其实解决方法就是去组策略中修改一个策略就可以了,但是: 先来说: 而且,使用cmd输入的gpedit.msc也打不开了. 这个怎么解决? @echo off pushd "%~dp0"dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPo…...
【JAVA】io流之缓冲流
①BufferedInputStream、BufferedOutputStream(适合读写非普通文本文件) ②BufferedReader、BufferedWriter(适合读写普通文本文件。) 缓冲流的读写速度快,原理是:在内存中准备了一个缓存。读的时候从缓存中…...
Deepin/UOS软件包维护者入门:如何手动更新一个deepin-wine应用的版本(从9.3.2到9.4.8实战)
Deepin/UOS软件包维护实战:从9.3.2到9.4.8的版本升级全解析 当你在Deepin应用商店发现某个wine应用的版本落后于官方发布时,作为社区贡献者或软件包维护者,你有能力推动这个生态向前一步。本文将带你深入deb包内部结构,完成一次合…...
别再只写#ifdef __cplusplus了!聊聊这个宏在C++11/17/20下的实战用法与坑
深入实战:__cplusplus宏在跨版本C项目中的高阶用法与避坑指南 如果你在跨版本C项目中遇到过这样的场景:明明代码在本地编译通过,却在CI服务器上莫名其妙报错;或者精心编写的头文件在C11和C17下表现不一致——那么这篇文章正是为你…...
HsMod插件终极指南:55项功能详解与快速上手教程
HsMod插件终极指南:55项功能详解与快速上手教程 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod是一款基于BepInEx框架开发的《炉石传说》增强插件,为玩家提供…...
文档解析准确率从81.6%→99.2%:Dify v0.8.5+自定义Chunker调优全流程,仅限内部技术团队验证的7个关键参数
第一章:文档解析准确率从81.6%→99.2%:Dify v0.8.5自定义Chunker调优全流程,仅限内部技术团队验证的7个关键参数 在 Dify v0.8.5 版本中,原生文档解析器对多格式混合文档(含 PDF 表格嵌套、Markdown 代码块与中文段落混…...
Android 10设备WebView内核升级实战:从76到97,手把手教你替换APK与修改配置
Android 10设备WebView内核升级全流程解析:从架构选型到验证测试 在移动应用开发领域,WebView作为系统级组件的重要性不言而喻。它不仅是混合应用的基础运行环境,更直接影响着网页渲染性能、JavaScript执行效率以及新特性支持程度。对于Andr…...
手把手排查SSV6155/6255 WiFi模块不识别问题:从硬件检查到驱动加载
SSV6x5x WiFi模块深度排障指南:从硬件信号到驱动加载全流程解析 当你的开发板上的SSV6155或SSV6255 WiFi模块突然"消失"时,那种感觉就像在迷宫里失去了指南针。作为嵌入式开发者,我们需要的不是泛泛而谈的理论,而是一套…...
明日方舟自动化助手MAA:从入门到精通的完整游戏辅助指南
明日方舟自动化助手MAA:从入门到精通的完整游戏辅助指南 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: https://g…...
手把手教你用STM32标准库的SPI DMA,给1.3寸ST7789屏做一次“性能手术”
手把手教你用STM32标准库的SPI DMA,给1.3寸ST7789屏做一次“性能手术” 当你的嵌入式系统需要实时显示动态波形或流畅动画时,1.3寸ST7789屏幕的刷新率可能成为瓶颈。传统SPI驱动方式就像让CPU亲自搬运每一块砖头,而DMA技术则是请来一支专业的…...
Hermes-Agent 安装全流程(Windows WSL2 + Ubuntu + macOS)一键部署+源码编译+避坑指南
🤵♂️ 个人主页:小李同学_LSH的主页 ✍🏻 作者简介:LLM学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞Ǵ…...
快速免费解决B站视频无法播放问题:m4s-converter终极指南
快速免费解决B站视频无法播放问题:m4s-converter终极指南 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经在B站缓存了珍贵…...
