HuggingFace 核心组件及应用实战

news/2024/11/14 12:40:02/文章来源:https://www.cnblogs.com/bingohuang/p/18543138

带着问题来学习

  1. 什么是Hugging Face?它的目标是什么?

  2. Hugging Face 中包含哪些知名的预训练模型?

  3. 如果我们要在 Hugging Face 中下载 BERT,那么

    1. 只有一种版本,还是有多种版本可以选择?

    2. 每一种版本的 BERT 中,只有一种格式还是有多种格式可以适应多种下游任务?

  4. Hugging Face 库中有哪些有用的组件?

文章最后会提供问题的参考答案~

一、Hugging Face 简介

官网:https://huggingface.co/

Hugging Face 是一个开源的 AI 社区网站,站内几乎囊括了所有常见的 AI 开源模型,号称:一网打尽,应有尽有,全部开源。

在 Hugging Face 中可以下载到众多开源的预训练大模型,模型本身包含相关信息和参数,可以拿来做微调和重新训练,非常方便。

二、Hugging Face 核心组件

Hugging Face 核心组件包括 Transformers、Dataset、Tokenizer,此外还有一些辅助工具,如 Accelerate,用于加速深度学习训练过程。

更多内容可以去 Hugging Face 官网上发掘,下面重点介绍下它的三个核心组件。

1、Hugging Face Transformers

Transformers 是 Hugging Face 的核心组件,主要用于自然语言处理,提供了预训练的语言模型和相关工具,使得研究者和工程师能够轻松的训练和使用海量的 NLP 模型。

常用的模型包括 BERT、GPT、XLNet、RoBERTa 等,并提供了模型的各种版本。

通过 Transformers 库,开发人员可以用这些预训练模型进行文本分类、命名实体识别、机器翻译、问答系统等 NLP 任务。

Transformers 库本身还提供方便的 API、实例代码、文档,让开发者学习和使用这些模型都变得非常简单,同时开发者也可以上传自己的预训练模型和 API。

# 简单的用例代码,完整代码见实战部分
# 首先通过 pip 下载相关库:pip install transformers# 导入 transformers 相关库
from transformers import AutoModelForSequenceClassification# 初始化分词器和模型
model_name = "bert-base-cased"
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)# 将编码后的张量输入模型进行预测
outputs = model(**inputs)# 获取预测结果和标签
predictions = outputs.logits.argmax(dim=-1)

2、Hugging Face Dataset

Dataset 是 Hugging Face 的公共数据集仓库,以下是常用的一些数据集(欢迎补充):

  1. SQuAD:Stanford大学发布的问答数据集

  2. IMBDB:电影评论数据集

  3. CoNLL-2003:NER命名实体识别数据集

  4. GLUE:公共基准测试集

Hugging Face Dataset 简化了数据集的下载、预处理过程,并具备数据集分割、采样和迭代器等功能。

# 简单的用例代码,完整代码见实战部分
# 首先通过 pip 下载相关库:pip install datasets# 导入数据集
from datasets import load_dataset# 下载数据集并打乱数据
dataset_name = "imdb"
dataset = load_dataset(dataset_name)

3、Hugging Face Tokenizer

Tokenizer 是 Hugging Face 的分词器,它的任务是将输入文本转换为一个个标记(tokens),它还能对文本序列进行清洗、截断和填充等预处理,以满足模型的输入要求。

# 简单的用例代码,完整代码见实战部分
# 首先通过 pip 下载相关库:pip install transformers# 导入分词器
from transformers import AutoTokenizer# 初始化分词器和模型
tokenizer = AutoTokenizer.from_pretrained(model_name)# 将文本编码为模型期望的张量格式
inputs = tokenizer(dataset["train"]["text"][:10], padding=True, truncation=True, return_tensors="pt")

三、Hugging Face 应用实战

该应用实战是通过 Hugging Face Transformers 完成一个很简单的文本分类任务(预测影评是正面还是负面),完整代码如下:

# 1. 导入必要的库
from transformers import AutoTokenizer, AutoModelForSequenceClassification
from datasets import load_dataset# 2. 定义数据集名称和任务类型:使用的是 imdb 影评数据集
dataset_name = "imdb"
task = "sentiment-analysis"# 3. 下载数据集并打乱数据
dataset = load_dataset(dataset_name)
dataset = dataset.shuffle()# 4. 初始化分词器和模型
model_name = "bert-base-cased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)# 5. 将文本编码为模型期望的张量格式
inputs = tokenizer(dataset["train"]["text"][:10], padding=True, truncation=True, return_tensors="pt")# 6. 将编码后的张量输入模型进行预测
outputs = model(**inputs)# 7. 获取预测结果和标签
predictions = outputs.logits.argmax(dim=-1)
labels = dataset["train"]["label"][:10]# 8. 打印预测结果和标签
for i, (prediction, label) in enumerate(zip(predictions, labels)):prediction_label = "正面评论" if prediction == 1 else "负面评论"true_label = "正面评论" if label == 1 else "负面评论"print(f"Example {i+1}: Prediction: {prediction_label}, True label: {true_label}")

注意:要运行代码,需要安装最新的 pytorch 、transformers 和 datasets。

将代码文件保存为:huggingface.py,运行后结果如下(第一次运行需要从Hugging Face上下载数据集和模型,需要一点时间):

C:\Users\Lenovo\anaconda3\envs\pytorch211\python.exe "huggingface.py"
Downloading readme: 100%|██████████| 7.81k/7.81k [00:00<?, ?B/s]
Downloading data: 100%|██████████| 21.0M/21.0M [00:27<00:00, 753kB/s]
Downloading data: 100%|██████████| 20.5M/20.5M [00:07<00:00, 2.88MB/s]
Downloading data: 100%|██████████| 42.0M/42.0M [00:08<00:00, 5.13MB/s]
Generating train split: 100%|██████████| 25000/25000 [00:00<00:00, 347815.24 examples/s]
Generating test split: 100%|██████████| 25000/25000 [00:00<00:00, 481791.57 examples/s]
Generating unsupervised split: 100%|██████████| 50000/50000 [00:00<00:00, 450755.18 examples/s]
C:\Users\Lenovo\anaconda3\envs\pytorch211\Lib\site-packages\huggingface_hub\file_download.py:149: UserWarning: `huggingface_hub` cache-system uses symlinks by default to efficiently store duplicated files but your machine does not support them in C:\Users\Lenovo\.cache\huggingface\hub\models--bert-base-cased. Caching files will still work but in a degraded version that might require more space on your disk. This warning can be disabled by setting the `HF_HUB_DISABLE_SYMLINKS_WARNING` environment variable. For more details, see https://huggingface.co/docs/huggingface_hub/how-to-cache#limitations.
To support symlinks on Windows, you either need to activate Developer Mode or to run Python as an administrator. In order to see activate developer mode, see this article: https://docs.microsoft.com/en-us/windows/apps/get-started/enable-your-device-for-developmentwarnings.warn(message)
Some weights of BertForSequenceClassification were not initialized from the model checkpoint at bert-base-cased and are newly initialized: ['classifier.bias', 'classifier.weight']
You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.
Example 1: Prediction: 正面评论, True label: 正面评论
Example 2: Prediction: 正面评论, True label: 正面评论
Example 3: Prediction: 正面评论, True label: 负面评论
Example 4: Prediction: 正面评论, True label: 正面评论
Example 5: Prediction: 正面评论, True label: 正面评论
Example 6: Prediction: 正面评论, True label: 正面评论
Example 7: Prediction: 正面评论, True label: 负面评论
Example 8: Prediction: 正面评论, True label: 负面评论
Example 9: Prediction: 正面评论, True label: 负面评论
Example 10: Prediction: 正面评论, True label: 负面评论Process finished with exit code 0

该实战主要演示如何使用 HuggingFace,预测结果并不是那么准确(准确率50%),因为模型本身还未做过电影评论相关的微调。

Hugging Face 也提醒我们,可能需要用一些下游任务重新训练这个模型(即微调),再用它来做预测和推理:You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference。

四、总结

Hugging Face 是当前最知名的 Transformer 工具库和AI 开源模型网站,它的目标是让人们更方便地使用和开发 AI 模型。

五、参考及附件

  1. 什么是Hugging Face?它的目标是什么?

    • Hugging Face Hugging Face 是一个 AI 社区网站,站内几乎囊括了所有的 AI 开源模型。Hugging Face 是当前最知名的 Transformer 工具库和AI 开源模型网站,它的目标是让人们更方便地使用和开发 AI 模型。
  2. Hugging Face 中包含哪些知名的预训练模型?

    • 如 BERT、GPT、XLNet、RoBERTa
  3. 如果我要在 Hugging Face 中下载 BERT,那么

    • 只有一种版本,还是有多种版本可以选择?

      • 多版本
    • 每一种版本的 BERT 中,只有一种格式还是有多种格式可以适应多种下游任务?

      • 多种格式
  4. Hugging Face 库中有哪些有用的组件?

    • 核心组件包括:Transformers、Dataset、Tokenizer,此外还有一些辅助工具,如Accelerate等

参考内容:黄佳老师的《ChatGPT和预训练模型课》

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

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

相关文章

AllPairs工具助力正交表测试用例设计

AllPairs工具助力正交表测试用例设计 正交表法是一种高效的测试方法,特别适用于软件测试中需要处理多个控件及其多种取值组合的情况。以下是对正交表法的详细解释: 一、正交表法概述 正交表法是一种利用正交表来设计测试用例的方法,旨在通过较少的测试次数达到较高的测试覆盖…

SAM4MLLM:结合多模态大型语言模型和SAM实现高精度引用表达分割 | ECCV24

来源:晓飞的算法工程笔记 公众号,转载请注明出处论文: SAM4MLLM: Enhance Multi-Modal Large Language Model for Referring Expression Segmentation论文地址:https://arxiv.org/abs/2409.10542 论文代码:https://github.com/AI-Application-and-Integration-Lab/SAM4MLLM…

信息时代的安全堡垒:500强企业数据安全传输案例解析

数据安全传输,这个是数据安全里一个比较细分的领域,但是包括的传输场景也是很多的,比如隔离网之间的跨网文件传输、企业内外部之间的文件安全外发、总分支之间的数据传输分发、信创环境下的高性能传输、机台等设备的数据采集传输、业务系统之间的自动化传输同步等等。 每家企…

Ubuntu 22.04 LTS 离线安装 Harbor v2.11 (附https认证,Trivy镜像扫描)

Harbor 介绍Harbor是一个开源的企业级Docker Registry服务,它提供了一个安全、可信赖的仓库来存储和管理Docker镜像。Harbor翻译为中文名称为"庇护;居住;"。可以理解为是Docker镜像的"居住环境"或者是镜像的"庇护所"。Harbor最初由VMware公司开…

reposync离线yum源

系统:open Euler 22.03-sp3-x86 reposync ;createrepo 1、配置好yum源 2、下载 下载指定repo到指定目录reposync --repoid EPOL -p /data/EPOL 3、制作镜像仓库cd EPOLcreaterepo .

叮咚!您有一份跨网域跨安全域文件传输方案待查收

跨网域跨安全域文件传输,在很多企业和机构里面,都会存在这样的场景的,比如企业内部会用网络隔离的方式,划分不同的安全域和网段,或者有些机构还有不同的分支机构,就会有不同地域的文件传输需求。 跨网域跨安全域传输的典型应用场景 跨网域跨安全域文件传输的典型应用场景…

rtthread源码completion.c no such file or dir

20241113 从gitee下载rtthread源码,bsp--->stm32--->stm32f407-atk-explorer直接编译报错,如下从百度网盘下载rtthread源码,bsp--->stm32--->stm32f407-atk-explorer编译正常,无错误如果,感到此时的自己很辛苦,那告诉自己:容易走的都是下坡路。坚持住,因为…

团队作业4——项目冲刺-3

团队作业4——项目冲刺-3信息项 内容课程名称 广工计院计科34班软工作业要求位置 作业要求作业目标 小飞棍团队对需求改进和系统设计进行讨论GitHub链接 GitHub一、团队简介队名:小飞棍队团队成员:姓名 学号罗振烘(组长) 3122004748庄崇立 3122004633李响 3121002802何昌洲…

宝塔如何修改网站名,如何在宝塔面板中修改网站名称

修改网站名称可以提升品牌识别度。以下是详细的步骤:登录宝塔面板:打开浏览器,输入宝塔面板的地址,例如 http://yourserverip:8888。 输入用户名和密码,点击“登录”。进入网站管理:登录后,点击左侧菜单栏中的“网站”。 在网站列表中找到需要修改名称的网站。修改网站名…

揭秘!Vue3.5响应式重构如何让内存占用减少56%

前言 Vue3.5版本又将响应式给重构了,重构后的响应式系统主要有两部分组成: 双向链表和 版本计数。我们在前两篇文章中我们已经讲过了 双向链表和 版本计数,这篇文章我们来讲讲为什么这次重构能够让内存占用减少56%。 欧阳年底也要毕业了,加入欧阳的面试交流群(分享内推信息…

11.14

[实验任务一]:计算机组装 使用建造者模式,完成下述任务:计算机组装工厂可以将CPU、内存、硬盘、主机等硬件设备组装在一起构成计算机,计算机的类型可以是笔记本,也可以是台式机。 实验要求:画出对应的类图;提交源代码;// Computer.java package builder;public class C…