Transformers库总体介绍

news2024/10/7 6:37:24

 Transformers库是什么

Transformers 库是一个在自然语言处理(NLP)领域广泛使用的强大库,提供了一套全面的工具和预训练模型,用于执行各种 NLP 任务。以下是 transformers 库提供的主要功能:

1.预训练模型: 该库包含多种预训练模型,如 BERT、GPT(生成式预训练变换器)、RoBERTa、T5 等。这些模型在大型数据集上进行了预训练,可以进行特定下游任务的微调。
2.分词(Tokenization): 该库提供了高效的分词工具,允许将原始文本转换为适用于预训练模型输入的数字表示。分词是为 NLP 任务准备文本数据的关键步骤。
3.模型架构: 您可以轻松加载预训练模型并使用其架构进行各种任务。该库支持编码器和解码器架构,适用于分类、翻译、摘要等任务。
4.模型训练和微调: 虽然库提供了许多任务的预训练模型,但也允许用户在自己的数据集上对这些模型进行微调。这在需要特定任务或领域的情况下非常有用。
5.优化器和学习率调度器: 该库包含常见的优化器(如AdamW)以及学习率调度器,有助于训练和微调过程。
6.Pipeline API: transformers 库提供了一个便捷的 pipeline API,允许您使用几行代码执行各种 NLP 任务。任务包括文本生成、命名实体识别、情感分析、翻译、摘要等。
7.模型仓库: 该库维护了一个模型仓库,您可以在其中找到不同任务和语言的各种预训练模型。这使得轻松访问和使用适合特定需求的模型变得简单。
8.与Hugging Face Datasets的集成: 该库与 Hugging Face Datasets 库集成,提供各种不同 NLP 任务的数据集。这使得加载和预处理用于训练和评估的数据集变得容易。

Tranformers API

在编码过程中,使用比较多的是调用Transformers API,下面列举了transformers库提供的常用API

最常用的API:
pipeline: 一个用于执行各种NLP任务的简单API,例如文本生成、命名实体识别、情感分析等。
AutoModel 和 AutoTokenizer: 自动加载适合任务和模型的预训练模型和分词器。
BertModel 和 BertTokenizer: 加载和使用BERT模型和分词器。
其他API:
Trainer 和 TrainingArguments: 用于训练和微调模型的API。
pipeline 中特定任务的参数,如generator、ner、text-classification等。
AutoConfig: 自动加载适合模型的配置。
AutoFeatureExtractor: 自动加载适合模型的特征提取器。
AutoModelForSequenceClassification 和 AutoModelForTokenClassification: 自动加载适合任务的预训练模型。

下面是调用pipeline接口完成一个简单的情感分类任务,pipeline中输入任务名称“sentiment-analysis”,因为没有指定具体的模型名称,这里会下载默认的模型。

from transformers import pipeline

sentiment_analysis = pipeline("sentiment-analysis")
sentiment_result = sentiment_analysis("I love using transformers library!")
print("\nSentiment Analysis Result:")
print(sentiment_result[0]['label'])

下图是执行py脚本文件的过程,可以看到,下载了一个配置文件config.json,下载了模型,默认模型是"distilbert-base-uncased-finetuned-sst-2-english",还下载了tokenizer_config.json,以及一个分词器tokenizer使用的映射表vocab.txt.

 下载完后,执行任务,分析的结果是“输入的句子是一个POSITIVE的情感结果”。在上面代码中,如果要指定特定的模型来完成sentiment-analysis任务,增加model_name参数即可,即pipeline("sentiment-analysis",model_name="xxx")即可。在NLP任务中,为什么需要Tokenizer呢?什么是Tokenizer呢?

Tokenizer

在处理自然语言时,tokenizer 的作用是将文本分割成单词、子词或其他基本单元,这有助于将文本转换为计算机能够理解的形式。主要的原因包括:

文本表示: 计算机无法直接理解自然语言,因此需要将文本转换为数字表示。Tokenizer 将文本分割成离散的单元,例如单词或子词,然后为每个单元分配一个唯一的标识符或向量。这样,整个文本就可以被表示为一个数字序列,便于计算机处理。
模型输入: 许多自然语言处理(NLP)模型,尤其是深度学习模型,通常接受固定长度的输入。Tokenizer 可以确保输入文本被切分成适当的长度,使其适应模型的输入要求。
处理不规则性: 自然语言中存在许多不规则性,如大小写、标点符号、缩写词等。Tokenizer 可以处理这些不规则性,将文本标准化为模型能够处理的形式。
词汇表管理: Tokenizer 通常与一个词汇表(vocabulary)一起使用,该词汇表包含了在训练数据中出现的所有单词或子词。这有助于限制模型的输入空间,并提高模型的泛化能力。
降低计算复杂度: Tokenizer 可以降低计算复杂度,尤其是当处理大量文本数据时。通过将文本标记化为较小的单元,模型可以更高效地处理数据。
特定任务处理: 在某些 NLP 任务中,特定的 Tokenization 策略可能是为了更好地捕捉任务相关的信息,例如在情感分析中可能会保留表情符号。

Tokenizer 通常与一个词汇表(vocabulary)一起使用,以确保在文本处理过程中,每个单词或子词都能被映射到一个唯一的标识符或向量。上面下载的vocab.txt就是词汇表。

除了Tokenizer的信息外,还下载了config.json文件,config的内容如下图所示,可以看到都是一些神经网络相关参数。

部分参数作用说明如下所示:

activation (激活函数): "gelu" 表示使用 GELU(Gaussian Error Linear Unit)作为激活函数。GELU 是一种用于神经网络的非线性激活函数。
architectures (模型架构): 包含模型所使用的架构列表。在这个例子中,使用了 DistilBERT 的序列分类版本,即 "DistilBertForSequenceClassification"。
attention_dropout (注意力机制的 dropout): 0.1 表示注意力机制的 dropout 概率为 0.1。这是为了在训练时随机关闭一部分注意力头,以防止过拟合。
dim (模型的隐藏层维度): 768 表示模型的隐藏层维度为 768。
dropout (全连接层的 dropout): 0.1 表示全连接层的 dropout 概率为 0.1。这是为了在训练时随机关闭一些神经元,以防止过拟合。

除了Pipeline API,在加载和使用预训练大模型的常用接口还有AutoModel 和 AutoTokenizer 。

AutoModel && AutoTokenizer

from transformers import AutoModel, AutoTokenizer

# 指定模型名称
model_name = "bert-base-uncased"

# 使用 AutoTokenizer 加载适用于任务的分词器
tokenizer = AutoTokenizer.from_pretrained(model_name)

# 使用 AutoModel 加载适用于任务的预训练模型
model = AutoModel.from_pretrained(model_name)

# 输入文本
input_text = "I love using transformers library!"

# 使用分词器对文本进行分词,并为模型准备输入
input_ids = tokenizer(input_text, return_tensors="pt")["input_ids"]

# 使用模型进行推理
outputs = model(input_ids)

# 打印模型输出
print("Model Output:")
print(outputs.last_hidden_state)

上面的代码中,调用的是bert模型,执行上面的代码,结果如下图所示,可以看到,仍然是下载了模型相关的配置文件和模型本身的权重信息,这些文件在huggingface上都能查看到。执行的结果是输出了一段文本的张量信息。

除了加载bert这种小的模型外,也可以使用相同的方法加载预训练大模型。下面是Chatglm模型官网给出的下载启动大模型的代码,可以看到,也是通过transformers库的AutoTokenizer和AutoModel即可快速完成模型的部署和使用。

当然,除了上面介绍的常用的两类API,transformers库还提供训练数据下载,微调等能力,更多信息可查看官网。

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

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

相关文章

【开源】基于JAVA的社区买菜系统

项目编号: S 011 ,文末获取源码。 \color{red}{项目编号:S011,文末获取源码。} 项目编号:S011,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.1.1 数据中心模块2.1…

# 学习 Prolog 和 离散逻辑的16个等价公式:一趟有趣的逻辑之旅

Prolog 的语法很奇怪,需要一些时间来适应,所以我花了点时间,想用Prolot来表示和验证离散逻辑的16组等价公式。 1. 双重否定律 (Double Negation Law) A ⇔A 首先,我们来看看双重否定律。在 Prolog 中,我们可以这样验证它: fun1(A,Z):-membe…

【经验分享】Ubuntu如何设置swap交换

我的Linux小鸡内存只有512兆,经常爆内存,导致很多应用没有办法一直正常运行,可以通过设置swap来缓解一下,虽然和内存的速度无法媲美,但是能一定程度缓解一下问题 文章目录 1. 创建一个交换文件2. 设置正确的权限3. 设置…

程序员护城河 | 卓越的技术能力很重要,软实力同样不可或缺

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师…

新手教师如何迅速成长

对于许多新手教师来说,迈出教学的第一步可能会感到非常困难。不过,通过一些关键的策略和技巧,还是可以快速提升教学能力的,我将为大家提供一些实用的建议,帮助各位在教育领域迅速成长。 深入了解学科知识 作为一名老师…

【离散数学】——刷题题库(范式)

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

python连接hive报错:TypeError: can‘t concat str to bytes

目录 一、完整报错 二、解决 三、 其他报错 一、完整报错 Traceback (most recent call last): File "D:/Gitlab/my_world/hive2csv.py", line 18, in <module> conn hive.Connection(hosthost, portport, usernameusername, passwordpassword, data…

腾讯云5年服务器2核4G和4核8G配置租用价格表

腾讯云百科整理五年云服务器优惠活动 txybk.com/go/txy 配置可选2核4G和4核8G&#xff0c;公网带宽可选1M、3M或5M&#xff0c;系统盘为50G高性能云硬盘&#xff0c;标准型S5实例CPU采用主频2.5GHz的Intel Xeon Cascade Lake或者Intel Xeon Cooper Lake处理器&#xff0c;睿频3…

什么是单片机?聊聊它的历史

前言 1946年2月15日&#xff0c;第一台电子数字计算机 ENIAC问世&#xff0c;这标志着计算机时代的到来。 ENIAC 是电子管计算机&#xff0c;时钟频率虽然仅有 100 kHz&#xff0c;但能在1s 的时间内完成 5000 次加法运算。与现代的计算机相比&#xff0c;ENIAC有许多不足&am…

人工智能对我们的生活影响有多大

随着科技的飞速发展&#xff0c;人工智能已经渗透到我们生活的方方面面&#xff0c;并且越来越受到人们的关注。从智能语音助手到自动驾驶汽车&#xff0c;从智能家居系统到医疗诊断&#xff0c;人工智能技术正在改变着我们的生活方式。那么&#xff0c;人工智能对我们的生活影…

Golang基础-面向过程篇

文章目录 基本语法变量常量函数import导包匿名导包 指针defer静态数组动态数组(slice)定义方式slice追加元素slice截取 map定义方式map使用方式 基本语法 go语言输出hello world的语法如下 package mainimport ("fmt""time" )func main() {fmt.Println(&…

Pytorch完整的模型训练套路

Pytorch完整的模型训练套路 文章目录 Pytorch完整的模型训练套路以CIFAR10为例实践 数据集加载步骤 使用适当的库加载数据集&#xff0c;例如torchvision、TensorFlow的tf.data等。 将数据集分为训练集和测试集&#xff0c;并进行必要的预处理&#xff0c;如归一化、数据增强等…

PP-PicoDet算法训练行人检测模型

PP-PicoDet算法训练行人检测模型 1&#xff0c;效果图2&#xff0c;PP-PicoDet介绍3&#xff0c;使用飞浆框架训练模型1&#xff0c;准备好图片和对应的标注文件2&#xff0c;划分训练集和验证集3&#xff0c;vi label_list.txt4&#xff0c;目录结构5&#xff0c;修改配置文件…

Ubuntu文件系统损坏:The root filesystem on /dev/sda5 requires a manual fsck

前言 Ubuntu在启动过程中&#xff0c;经常会遇到一些开故障&#xff0c;导致设备无法正常开机&#xff0c;例如文件系统损坏等。 故障描述 Ubuntu系统启动过程中&#xff0c;出现以下文件系统损坏错误&#xff1a; 产生原因 该故障是由磁盘检测不能通过导致&#xff0c;可能是因…

WPS或Excel查找A列中有B列没有的值

就这一行代码&#xff1a; 在C列输入&#xff1a; IF(COUNTIF(B:B,A1)>0,"该行A列中值B列有","该行A列中值B列没有")

达梦数据库安装--注册服务类型错误

最近在学习达梦数据库&#xff0c;安装过程中遇到一点问题&#xff0c;做一下记录。 达梦数据库使用命令行的方式安装&#xff0c;最后一步为了用户管理及控制&#xff0c;需要把数据库服务注册为系统服务&#xff0c;在注册时出现以下错误&#xff1a; 在这我其实犯了一个自以…

Camtasia2024免费版mac电脑录屏软件

作为一个互联网人&#xff0c;没少在录屏软件这个坑里摸爬滚打。培训、学习、游戏、影视解说……都得用它。这时候没个拿得出手的私藏软件&#xff0c;还怎么混&#xff1f;说实话&#xff0c;录屏软件这两年也用了不少&#xff0c;基本功能是有但总觉得缺点什么&#xff0c;直…

CRM系统的客户细分有什么作用?

我们常常说&#xff0c;企业想要开展有针对性的营销活动&#xff0c;就需要进行客户细分。通过特定条件&#xff0c;将客户分为几类&#xff0c;从而对不同类型的客户提供不同的产品和服务。下面我们就针对这里来详细说说&#xff0c;CRM中客户细分是什么&#xff1f;如何细分客…

小程序开发平台源码系统 各行各业都可使用 功能强大 附带完整的搭建教程

当前&#xff0c;数字化转型已经成为各行各业的重要趋势&#xff0c;而小程序作为数字化转型的重要工具之一&#xff0c;具有广泛的应用前景。因此&#xff0c;我们开发了这个源码系统&#xff0c;以帮助各行各业快速开发出符合需求的小程序。 以下是部分代码示例&#xff1a;…