Transformers库总体介绍

 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 pipelinesentiment_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.mzph.cn/news/154024.shtml

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

相关文章

利用多核的Rust快速Merkle tree

1. 引言 利用多核的Rust快速Merkle tree,开源代码见: https://github.com/anoushk1234/fast-merkle-tree(Rust) 其具有如下属性: 可调整为任意高度构建root复杂度为O(n)提供了插入和获取叶子节点的方法获取某叶子节…

比Postman强在哪里

Postman的受众对象主要是广大开发人员,调测使用,它并不能完全满足专业测试人员需求,而自动化测试平台可以 1,Postman,Jmter是单机版软件,类似打游戏你和电脑PK,而很多时候是要联网和其他人团队作…

一文带你了解MySQL数据库基础

✏️✏️✏️今天给各位带来的是关于数据库基础方面的知识。 清风的CDSN博客 😛😛😛希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流! 动动你们发财的小手,点点…

S7-1200PLC 作为MODBUSTCP服务器通信(多客户端访问)

S7-1200PLC作为MODBUSTCP服务器端通信编程应用,详细内容请查看下面文章链接: ModbusTcp通信(S7-1200PLC作为服务器端)-CSDN博客文章浏览阅读239次。S7-200Smart plc作为ModbusTcp服务器端的通信S7-200SMART PLC ModbusTCP通信(ModbusTcp服务器)_s7-200 modbustcp-CSDN博客文…

无需API实现MySQL与巨量引擎的对接

通过数环通,您可以使用不到几分钟的时间即可实现MySQL与巨量引擎的对接与集成,从而高效实现工作流程自动化,降本增效! 1.产品介绍 巨量引擎是字节跳动旗下的营销服务品牌,它整合了字节跳动旗下的产品及海量内容&#…

WPF TextBox实现placeholder

WPF里TextBox没有placeholder,需要自己实现,本篇博客介绍WPF TextBox实现placeholder,效果如下: 实现技巧是在 TextBox 控件的 Style 中使用触发器(Triggers)来显示和隐藏placeholder文本。xmal代码如下&am…

Activiti,Apache camel,Netflex conductor对比,业务选型

Activiti,Apache camel,Netflex conductor对比,业务选型 1.activiti是审批流,主要应用于人->系统交互,典型应用场景:请假,离职等审批 详情可见【精选】activti实际使用_activiti通过事件监听器实现的优势_记录点滴…

SpringBoot-集成Kafka详解

SpringBoot集成Kafka 1、构建项目 1.1、引入依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.5.RELEASE</version> </parent> <dependenci…

【JavaEE】Spring核心与设计思想(控制反转式程序演示、IoC、DI)

一、什么是Spring&#xff1f; 通常所说的 Spring 指的是 Spring Framework&#xff08;Spring 框架&#xff09;&#xff0c;它是⼀个开源框架&#xff0c;有着活跃⽽庞⼤的社区&#xff0c;这就是它之所以能⻓久不衰的原因。Spring ⽀持⼴泛的应⽤场景&#xff0c;它可以让 …

陶瓷行业废污水处理使用MES系统的作用

陶瓷行业属于高能耗、高污染行业&#xff0c;生产过程中消耗大量矿产资源和能源&#xff0c;产生的废气、废水、废渣、粉尘等对环境造成严重污染。在近年来&#xff0c;全社会环保意识增强&#xff0c;政府出台了一系列政策、措施加大节能、减排力度&#xff0c;整治行业污染。…

C进阶---动态内存管理

目录 一、为什么存在动态内存分配 1.1静动态内存分配区别&#xff1a; 1.2静态分配的优缺点 1.3动态分配优缺点 二、动态内存函数的介绍 2.1malloc和free 2.2calloc 2.3realloc 三、常见的动态内存错误 3.1对NULL指针的解引用操作 3.2 对动态开辟空间的越界…

「分享学习」SpringCloudAlibaba高并发仿斗鱼直播平台实战完结

[分享学习]SpringCloudAlibaba高并发仿斗鱼直播平台实战完结 第一段&#xff1a;简介 Spring Cloud Alibaba是基于Spring Cloud和阿里巴巴开源技术的微效劳框架&#xff0c;普遍应用于大范围高并发的互联网应用系统。本文将引见如何运用Spring Cloud Alibaba构建一个高并发的仿…

DolphinDB 基于 Glibc 升级的性能优化实战案例

在高并发查询、查询需要涉及很多个分区的情况下&#xff0c;低版本的 glibc&#xff08;低于2.23&#xff09;会严重影响查询性能。需要升级 glibc 解决该问题优化性能。我们撰写了本文&#xff0c;通过 patchelf 工具修改可执行文件和动态库的 rpath&#xff0c;达到无需升级系…

【机器学习】032_多种神经网络层类型

一、密集层 每一层神经元都是上一层神经元的函数&#xff0c;每层每个神经元都从前一层获得所有激活的输入。 整个神经网络前一层与后一层连接在一起&#xff0c;构造的网络密集。 二、卷积层 假设有一张大小为axb像素的图片&#xff0c;上面标着一些手写数字&#xff0c…

【Vue】响应式与数据劫持

目录 前言 响应式 Vue的响应式是如何实现的 数据劫持 Vue中的data属性都具有响应式 Vue后期添加的属性如何使其具有响应式 数组的响应式处理 如何使用数组下标去修改可以具有响应式呢 前言 什么是响应式&#xff1f;数据劫持是什么&#xff1f;Vue响应式是如何实现的&a…

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

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

【Dynamic-datasource】Springboot多数据源整合

引入依赖&#xff1a; <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.5.0</version> </dependency> 整体pom文件&#xff1a; <?xml versi…

激发创新,助力研究:CogVLM,强大且开源的视觉语言模型亮相

项目设计集合&#xff08;人工智能方向&#xff09;&#xff1a;助力新人快速实战掌握技能、自主完成项目设计升级&#xff0c;提升自身的硬实力&#xff08;不仅限NLP、知识图谱、计算机视觉等领域&#xff09;&#xff1a;汇总有意义的项目设计集合&#xff0c;助力新人快速实…

4.3 Windows驱动开发:监控进程与线程对象操作

在内核中&#xff0c;可以使用ObRegisterCallbacks这个内核回调函数来实现监控进程和线程对象操作。通过注册一个OB_CALLBACK_REGISTRATION回调结构体&#xff0c;可以指定所需的回调函数和回调的监控类型。这个回调结构体包含了回调函数和监控的对象类型&#xff0c;还有一个A…