一起学Hugging Face Transformers(3) - Hugging Face 加载模型和Tokenizer

文章目录

  • 前言
  • 一、加载预训练模型和Tokenizer
    • 1. 安装Transformers库
    • 2. 加载预训练模型和Tokenizer
  • 二、使用AutoModel和AutoTokenizer
    • 1. 使用AutoModel和AutoTokenizer
    • 2. 原理
      • 1) 配置文件 (`config.json`)
      • 2) 使用AutoModel
      • 3) 使用AutoTokenizer
  • 三、不同模型的输入和输出格式
    • 1. BERT模型
      • 1) 输入格式
      • 2) 输出格式
    • 2. GPT-2模型
      • 1) 输入格式
      • 2) 输出格式
  • 四、使用本地路径加载模型和Tokenizer
    • 1. 保存模型和分词器
    • 2. 从本地路径加载模型和分词器
  • 总结


前言

Hugging Face提供了一个强大的Transformers库,方便用户加载和使用预训练的自然语言处理模型及其相应的Tokenizer。本文将介绍如何加载预训练模型和Tokenizer,使用AutoModel和AutoTokenizer,以及了解不同模型的输入和输出格式,并举两个具体的例子进行说明。

一、加载预训练模型和Tokenizer

Hugging Face的Transformers库中包含了多种预训练模型和Tokenizer,可以用于各种自然语言处理任务。加载预训练模型和Tokenizer非常简单,以下是基本步骤:

1. 安装Transformers库

首先,确保你已经安装了Transformers库。如果尚未安装,可以使用以下命令进行安装:

pip install transformers

2. 加载预训练模型和Tokenizer

使用Transformers库,你可以非常方便地加载预训练模型和对应的Tokenizer。例如,加载BERT模型和Tokenizer可以使用以下代码:

from transformers import BertModel, BertTokenizer# 加载预训练的BERT模型和Tokenizer
model_name = "bert-base-uncased"
model = BertModel.from_pretrained(model_name)
tokenizer = BertTokenizer.from_pretrained(model_name)

二、使用AutoModel和AutoTokenizer

为了更具通用性,Hugging Face提供了AutoModel和AutoTokenizer类。这些类可以自动根据模型名称加载合适的模型和Tokenizer,不需要指定具体的模型类。

1. 使用AutoModel和AutoTokenizer

使用AutoModel和AutoTokenizer可以使代码更加简洁和通用。例如:

from transformers import AutoModel, AutoTokenizer# 使用AutoModel和AutoTokenizer加载预训练模型和Tokenizer
model_name = "bert-base-uncased"
model = AutoModel.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

2. 原理

Hugging Face 的 AutoModelAutoTokenizer 是通过读取模型的配置文件来自动确定要加载的具体模型和分词器类型。这种设计使得代码更具通用性和灵活性,因为你不需要显式指定具体的模型或分词器类型,只需提供模型名称即可。以下是详细解释。

1) 配置文件 (config.json)

每个预训练模型都有一个配置文件 (config.json),其中包含了模型的架构和其他重要信息。这个文件可以在Hugging Face的模型库中找到。例如,BERT模型的配置文件可能包含以下内容:

{"architectures": ["BertModel"],"hidden_size": 768,"num_attention_heads": 12,"num_hidden_layers": 12,...
}

2) 使用AutoModel

当你使用AutoModel时,库会读取模型的配置文件,并根据文件中的信息加载相应的模型类。例如:

from transformers import AutoModelmodel_name = "bert-base-uncased"
model = AutoModel.from_pretrained(model_name)

在这个例子中,AutoModel会读取bert-base-uncased模型的配置文件,发现它的架构是BertModel,于是加载BertModel类。

3) 使用AutoTokenizer

AutoTokenizer的工作原理类似,它会读取分词器的配置文件,并根据文件中的信息加载相应的分词器类。例如:

from transformers import AutoTokenizertokenizer_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(tokenizer_name)

在这个例子中,AutoTokenizer会读取bert-base-uncased模型的配置文件,并加载相应的BertTokenizer类。

三、不同模型的输入和输出格式

不同的模型可能具有不同的输入和输出格式。下面通过两个具体的例子来说明。

1. BERT模型

BERT(Bidirectional Encoder Representations from Transformers)是一个广泛使用的预训练模型,适用于各种NLP任务。

1) 输入格式

BERT模型的输入通常是一个包含token IDs、attention mask和token type IDs的字典:

inputs = tokenizer("Hello, Hugging Face!", return_tensors="pt")
# inputs: {'input_ids': tensor([[ 101, 7592, 1010, 17662, 2128,  999,  102]]), 
#          'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1]])}

2) 输出格式

BERT模型的输出是一个包含隐藏状态的字典,隐藏状态是模型各层的输出:

outputs = model(**inputs)
# outputs: {'last_hidden_state': tensor(...), 'pooler_output': tensor(...)}

2. GPT-2模型

GPT-2(Generative Pre-trained Transformer 2)是另一个常用的预训练模型,主要用于生成任务。

1) 输入格式

GPT-2模型的输入也是token IDs和attention mask的字典,但不需要token type IDs:

inputs = tokenizer("Hello, Hugging Face!", return_tensors="pt")
# inputs: {'input_ids': tensor([[15496,    11, 40256, 12888,    33]]), 
#          'attention_mask': tensor([[1, 1, 1, 1, 1]])}

2) 输出格式

GPT-2模型的输出是一个包含logits的字典,logits是生成下一个token的概率分布:

outputs = model(**inputs)
# outputs: {'logits': tensor(...)}

通过以上示例,我们可以看到不同模型的输入和输出格式各不相同,了解这些差异有助于我们更好地应用这些模型进行各种NLP任务。

四、使用本地路径加载模型和Tokenizer

在Hugging Face 的 Transformers 库中,model_name 参数不仅可以接受预训练模型的名称,还可以接受本地模型的路径。如果你已经在本地保存了一个模型,可以通过提供模型文件所在的目录路径来加载模型和分词器。

1. 保存模型和分词器

假设你已经将模型和分词器保存到了本地,可以使用以下代码来保存它们:

from transformers import AutoModel, AutoTokenizermodel_name = "bert-base-uncased"# 加载预训练模型和分词器
model = AutoModel.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)# 保存模型和分词器到本地
model.save_pretrained("./my_local_model")
tokenizer.save_pretrained("./my_local_model")

2. 从本地路径加载模型和分词器

你可以通过提供保存模型和分词器的本地路径来加载它们。例如:

from transformers import AutoModel, AutoTokenizer# 使用本地路径加载模型和分词器
local_model_path = "./my_local_model"
model = AutoModel.from_pretrained(local_model_path)
tokenizer = AutoTokenizer.from_pretrained(local_model_path)# 测试分词
inputs = tokenizer("Hello, Hugging Face!", return_tensors="pt")
print(inputs)# 测试模型
outputs = model(**inputs)
print(outputs)

总结

本文介绍了如何使用Hugging Face的Transformers库加载预训练模型和Tokenizer,使用AutoModel和AutoTokenizer类,以及不同模型的输入和输出格式。通过掌握这些知识,可以更方便地应用预训练模型进行自然语言处理任务。

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

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

相关文章

Vue.js 的 provide 选项来向子组件提供数据

父组件 // Parent.vue <template><div><p>Parent Component</p><p>Count: {{ count }}</p><ChildComponent /></div> </template><script> import ChildComponent from ./ChildComponent.vue;export default {co…

这三款工具很好用,赶快试试

FileZilla FileZilla是一款免费开源的FTP软件&#xff0c;分为客户端版本和服务器版本&#xff0c;具备所有的FTP软件功能。它是一个快速、可信赖的FTP客户端以及服务器端开放源代码程序&#xff0c;具有多种特色和直觉的界面。FileZilla客户端版是一个方便高效的FTP客户端工具…

第一后裔The First Descendant开服时间、配置要求一览

第一后裔是一款采用虚幻5引擎打造的第三人称合作射击动作RPG&#xff0c;玩家将化身为一名继承者&#xff0c;通过各种任务和故事不断成长&#xff0c;为守护人类与对抗侵略者战斗。该作即将上线&#xff0c;为了不让玩家们错过这款精彩的游戏&#xff0c;本文整理了第一后裔上…

卫生间和厨房墙面基层起沙怎么办?

最近有几个工地遇到了一个共同问题&#xff0c;卫生间和厨房墙面起沙。      如果有正在装修的业主&#xff0c;可以看一下你家墙面是否也存在这样的问题。      最简单的检测方法&#xff0c;在工地上找一个坚硬的东西在墙上划&#xff0c;如果墙上的沙粒子一直哗哗的…

测评:【AI办公】版本更迭与AI加持下的最新ONLYOFFICE桌面编辑器8.1

你是否还在为没有一款合适的在线桌面编辑器而苦恼&#xff1f;你是否还在因为办公软件的选择过少而只能使用WPS或者office&#xff1f;随着办公需求的不断变化和发展&#xff0c;办公软件也在不断更新和改进。ONLYOFFICE 作为一款全功能办公软件&#xff0c;一直致力于为用户提…

2024年全国青少年信息素养大赛图形化编程复赛样题_6547网

第 1 题 问答题 【编程实现】 按空格键随机切换背景&#xff0c;让背景对应的角色造型显示在舞台上。 【具体要求】 对角色编程&#xff0c;当按下空格键时&#xff0c;背景随机切换&#xff1b; 角色切换成对应的造型显示在舞台上&#xff1b; 角色说“我是”和它的造…

帮助你简易起步一个BLOG(博客搭建)项目

Blog项目 后端项目结构1. 项目初始化2. 详细步骤3.postman测试 前端1. 项目初始化2. 详细步骤 本章节是为了帮助你起步一个完整的前后端分离项目。 前端技术栈&#xff1a; react、vite、mantine、tailwind CSS、zustand、rxjs、threejs 后端技术栈&#xff1a;nodemon、nodej…

计算机网络 5.2网卡

第二节 网卡 一、认识网卡 1.工作方式&#xff1a;中断请求。 2.应用场合&#xff1a;接入局域网。 3.功能&#xff1a; ①实现局域网中传输介质的物理连接和电气连接。 ②拥有一个全球唯一的网卡地址&#xff08;长度为48位的二进制数&#xff09;。 ③执行网络控制命令…

深入探索Batch脚本:实现延迟执行的高级技巧

在Windows操作系统中&#xff0c;批处理文件&#xff08;Batch文件&#xff09;是一种自动化脚本&#xff0c;允许用户执行一系列命令和操作。在某些情况下&#xff0c;我们可能需要在批处理文件中创建延迟执行的命令&#xff0c;即让某些操作在预定的时间后执行。本文将详细介…

C语言 什么是算术运算?什么是关系运算?什么是逻辑运算?如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?

算术运算&#xff1a;指的是基本的数学运算&#xff0c;包括加法&#xff08;&#xff09;、减法&#xff08;-&#xff09;、乘法&#xff08;*&#xff09;、除法&#xff08;/&#xff09;、取模&#xff08;%&#xff09;。 关系运算&#xff1a;用于比较两个值之间的大小…

Transformer教程之神经网络和深度学习基础

在当今的人工智能领域&#xff0c;Transformer已经成为了一个热门的词汇。它不仅在自然语言处理&#xff08;NLP&#xff09;领域取得了巨大的成功&#xff0c;还在计算机视觉等其他领域展现出了强大的潜力。然而&#xff0c;要真正理解Transformer&#xff0c;我们首先需要扎实…

gdb用法

创建文件 // main.cpp文件 // 稳态误差 void pid_test_wentaiwucha() {float p 1.5;int t 1; // t 1s;int target 5; // 5m/sfloat output 0;float radis 3; // 稳态误差std::cout << "output: " << std::endl;fo…

析构函数:C++中的清洁工

目录 前言 什么是析构函数&#xff1f; 析构函数的特点&#xff1a; 何时需要显式定义析构函数&#xff1f; 显式定义析构函数的必要性 编写析构函数的注意事项 结论 前言 在C编程中&#xff0c;析构函数是一个重要的概念&#xff0c;它负责在对象生命周期结束时释放资…

并发 多线程

目录 thread thread 类总览 构造函数 join joinable ​编辑 detach swap yield swap 成员函数的调用 namespace::this_thread 线程同步--锁 互斥锁mutex 递归锁recursive_mutex 定时锁 Lock 锁辅助类 lock_guard​编辑 unique_lock std::lock 解决死锁问题 消息…

浅谈逻辑控制器之随机顺序控制器

浅谈逻辑控制器之随机顺序控制器 随机顺序控制器&#xff08;Random Order Controller&#xff09;作为一个独特的逻辑控制器&#xff0c;为测试脚本的执行增添了一层随机性&#xff0c;特别适用于模拟用户行为中不确定的访问模式。 随机顺序控制器概述 随机顺序控制器&…

代码随想录算法训练营第三十六天|62.不同路径、 63. 不同路径 II、343.整数拆分(可跳过)、96.不同的二叉搜索树(可跳过)

62.不同路径 题目链接&#xff1a;62.不同路径 文档讲解&#xff1a;代码随想录 状态&#xff1a;还行 思路&#xff1a;当前状态的只有可能是从上面或者左边过来的&#xff0c;所以 dp[i][j] dp[i-1] dp[j-1] 题解&#xff1a; public int uniquePaths(int m, int n) {if (…

Docker 安装Nginx部署网站 防火墙端口 数据卷挂载

拉取镜像 docker pull nginx#不写版本号 表示最新版本查看是否拉取成功 docker images#成功 nginx latest 605c77e624dd 2 years ago 141MB mysql 8.0 3218b38490ce 2 years ago 516MB mysql latest 3218b38490ce 2 years ago 5…

rk3568 OpenHarmony4.0 如何去除锁屏

问题描述&#xff1a; OpenHarmony4.0开机或者息屏按电源键进入时需要上滑解锁屏幕&#xff0c;其实没有什么大的作用。 上滑解锁 那么如何去调这个锁屏效果呢&#xff0c;本给出一个方法。 以rk3568开发板OpenHarmony4.0为例&#xff0c;分三步&#xff1a; 1、删除源码中Sys…

竞争性谈判中,主要谈判什么内容?(电子化招采系统)

问&#xff1a;竞争性谈判中&#xff0c;主要谈判什么内容&#xff1f; 答&#xff1a;竞争性谈判是指采购人或代理机构通过与多家供应商&#xff08;不少于3家&#xff09;进行谈判&#xff0c;最后从中确定中标供应商的一种采购方式。在谈判的过程中&#xff0c;谈判的主要内…

virtualbox(7.0) ubuntu(22) 和win11共享文件夹

在虚拟机中安装增强功能。在virtualbox中配置 执行命令将用户加入vboxsf组 sudo adduser your_usrname vboxsf 重启ubuntu即可