当前位置: 首页 > news >正文

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 示例
BERTWordPiece["hello", "##world", "!"]
GPT-3Byte-Pair (BPE)["hello", " world", "!"]
T5SentencePiece["▁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包

一、前言 不同于计算机视觉的百花齐放&#xff0c;不同网络适用不同情况&#xff0c;NLP则由Transformer一统天下。transformer是2017年提出的一种基于自注意力机制的神经网络架构&#xff0c;transformers库是hugging face社区创造的一个py库&#xff0c;通过该库可以实现统一…...

网络安全防护指南:筑牢网络安全防线(510)

一、网络安全的基本概念 &#xff08;一&#xff09;网络的定义 网络是指由计算机或者其他信息终端及相关设备组成的按照一定的规则和程序对信息收集、存储、传输、交换、处理的系统。在当今数字化时代&#xff0c;网络已经成为人们生活和工作中不可或缺的一部分。它连接了世…...

微信小程序实现拉卡拉支付

功能需求&#xff1a;拉卡拉支付&#xff08;通过跳转拉卡拉平台进行支付&#xff09;&#xff0c;他人支付&#xff08;通过链接进行平台跳转支付&#xff09; 1.支付操作 //支付 const onCanStartPay async (obj) > {uni.showLoading({mask: true})// 支付接口获取需要传…...

git从本地其他设备上fetch分支

在 Git 中&#xff0c;如果你想从本地其他设备上获取分支&#xff0c;可以通过以下几种方式实现。不过&#xff0c;需要注意的是&#xff0c;Git 本身是分布式版本控制系统&#xff0c;通常我们是从远程仓库&#xff08;如 GitHub、GitLab 等&#xff09;拉取分支&#xff0c;而…...

【干货教程】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框架 的 “捷邻小程序” 系统的设计与实现

大家好&#xff0c;今天要和大家聊的是一款基于 SSM框架 的 “捷邻小程序” 系统的设计与实现。项目源码以及部署相关事宜请联系我&#xff0c;文末附上联系方式。 项目简介 基于 SSM框架 的 “捷邻小程序” 系统设计与实现的主要使用者分为 管理员 和 用户&#xff0c;没有授…...

基于Springboot医院预约挂号小程序系统【附源码】

基于Springboot医院预约挂号小程序系统 效果如下&#xff1a; 小程序主页面 帖子页面 医生账号页面 留言内容页面 管理员主页面 用户管理页面 我的挂号页面 医生管理页面 研究背景 随着信息技术的飞速发展和互联网医疗的兴起&#xff0c;传统的医疗服务模式正面临着深刻的变…...

基于AVue的二次封装:快速构建后台管理系统的CRUD方案

基于AVue的二次封装&#xff1a;快速构建后台管理系统的CRUD方案 在开发后台管理系统时&#xff0c;表格是常见的组件之一。然而&#xff0c;使用原生的Element Plus实现CRUD&#xff08;增删改查&#xff09;功能往往需要编写大量重复代码&#xff0c;过程繁琐。即使借助类似…...

【含开题报告+文档+PPT+源码】基于springboot加vue 前后端分离的校园新闻审核发布管理系统

开题报告 本研究旨在设计并实现一套基于SpringBoot后端框架结合Vue前端技术的校园新闻发布系统&#xff0c;该系统面向学生用户群体提供了全面的功能服务。学生用户通过身份验证登录后&#xff0c;能够便捷高效地获取校园内的各类新闻资讯&#xff0c;实时了解校内动态。系统不…...

Qt 是一个跨平台的 C++ 应用程序框架

Qt 是一个跨平台的 C++ 应用程序框架,广泛用于开发图形用户界面(GUI)应用程序,也可以用于开发非 GUI 程序,如命令行工具和控制台应用程序。Qt 提供了丰富的类库和工具,支持多种操作系统,包括 Windows、macOS、Linux 等。 主要特点: 跨平台:Qt 支持多种操作系统,开发…...

2025年SCI一区智能优化算法:真菌生长优化算法(Fungal Growth Optimizer,FGO),提供MATLAB代码

一. 真菌生长优化算法&#xff08;FGO&#xff09; 真菌生长优化算法&#xff08;Fungal Growth Optimizer&#xff0c;FGO&#xff09;是一种新型的自然启发式元启发式算法&#xff0c;其灵感来源于自然界中真菌的生长行为。该算法通过模拟真菌的菌丝尖端生长、分支和孢子萌发…...

解决Spring Boot中Druid连接池“discard long time none received connection“警告

在使用Spring Boot结合Druid连接池时&#xff0c;开发者可能会遇到"discard long time none received connection"的警告信息。虽然这通常不会影响应用程序的正常运行&#xff0c;但这些警告信息可能会让人感到困扰。本文将探讨这个问题的原因&#xff0c;并提供几种…...

stm32常见的存储器应用

常用 STM32 存储器芯片介绍和应用 STM32 微控制器通常与多种存储器芯片一起工作&#xff0c;以下是几种常见的存储器类型及其应用&#xff1a; 1. 闪存&#xff08;Flash Memory&#xff09; STM32 内部的 闪存 是一种非易失性存储器&#xff0c;广泛用于存储程序代码和常驻…...

如何使用3D高斯分布进行环境建模

使用3D高斯分布来实现建模&#xff0c;主要是通过高斯分布的概率特性来描述空间中每个点的几何位置和不确定性。具体来说&#xff0c;3D高斯分布被用来表示点云数据中的每一个点或体素&#xff08;voxel&#xff09;的空间分布和不确定性&#xff0c;而不是单纯地存储每个点的坐…...

三级分类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

不知怎么的&#xff0c;项目还在开发阶段&#xff0c;之前还好好的&#xff0c;玩儿了两天再一打开发现页面无法显示数据了&#xff0c;报错如下&#xff1a; 我以为是后端出问题了&#xff0c;但是后端控制台无报错&#xff0c;又用postman测试了一下&#xff0c;可以获取到数…...

CDefFolderMenu_MergeMenu函数分析之添加了分割线和属性菜单项两项

CDefFolderMenu_MergeMenu函数分析之添加了分割线和属性菜单项两项 第一部分&#xff1a; void CDefFolderMenu_MergeMenu(HINSTANCE hinst, UINT idMainMerge, UINT idPopupMerge, QCMINFO *pqcm) { UINT idMax pqcm->idCmdFirst; if (idMainMerge) { HME…...

mysql的源码包安装

安装方式一&#xff1a;&#xff08;编译好的直接安装&#xff09; 1.添加一块10G的硬盘&#xff0c;给root逻辑卷扩容 &#xff08;下面安装方式二有&#xff0c;一模一样的装就行&#xff0c;我就不写了&#xff0c;再写的话篇幅就太长了&#xff09; 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&#xff08;适合读写非普通文本文件&#xff09; ②BufferedReader、BufferedWriter&#xff08;适合读写普通文本文件。&#xff09; 缓冲流的读写速度快&#xff0c;原理是&#xff1a;在内存中准备了一个缓存。读的时候从缓存中…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...