Transformers 安装与基本使用

文章目录

  • Github
  • 文档
  • 推荐文章
  • 简介
  • 安装
  • 官方示例
  • 中文情感分析模型
    • 分词器 Tokenizer
    • 填充 Padding
    • 截断 Truncation
  • google-t5/t5-small
  • 使用脚本进行训练
    • Pytorch
  • 机器翻译
    • 数据集下载
    • 数据集格式转换

Github

  • https://github.com/huggingface/transformers

文档

  • https://huggingface.co/docs/transformers/index
  • https://github.com/huggingface/transformers/blob/main/i18n/README_zh-hans.md

推荐文章

  • http://jalammar.github.io/illustrated-transformer/

简介

Transformers是一种基于注意力机制(Attention Mechanism)的神经网络模型,广泛应用于自然语言处理(Natural Language Processing)任务中,如机器翻译、文本生成和文本分类等。

传统的序列模型(如循环神经网络)在处理长距离依赖时可能遇到困难,而Transformers通过引入注意力机制来解决这个问题。注意力机制使得模型能够在序列中对不同位置的信息进行加权关注,从而捕捉到全局的上下文信息。

在Transformers中,输入序列首先被分别编码为查询(Query)、键(Key)和值(Value)向量。通过计算查询与键的相似度,得到注意力分数,再将注意力分数与值相乘并加权求和,即可得到最终的上下文表示。这种自注意力机制允许模型在编码器和解码器中自由交换信息,从而更好地处理长距离依赖关系。

Transformer模型的核心组件是多层的自注意力机制和前馈神经网络。它的架构被广泛应用于许多重要的NLP任务,其中最著名的是BERT(Bidirectional Encoder Representations from Transformers),它在多项NLP任务上取得了突破性的性能。

除了NLP领域,Transformers模型也被应用于计算机视觉和其他领域,用于处理序列建模和生成任务。它已经成为深度学习中非常重要和有影响力的模型架构之一。

安装

pip install transformers
# PyTorch(推荐)
pip install 'transformers[torch]'
# TensorFlow 2.0
pip install 'transformers[tf-cpu]'
  • M1 / ARM 用户在安装 TensorFLow 2.0 之前,需要安装以下内容
brew install cmake
brew install pkg-config
  • 验证是否安装成功
python -c "from transformers import pipeline; print(pipeline('sentiment-analysis')('we love you'))"

在这里插入图片描述

注意: 以上验证操作需要“连网”,否则因无法下载文件而出现报错。

官方示例

from transformers import pipeline# 使用情绪分析流水线
classifier = pipeline('sentiment-analysis')
classifier('We are very happy to introduce pipeline to the transformers repository.')
  • 输出结果
[{'label': 'POSITIVE', 'score': 0.9996980428695679}]

在这里插入图片描述

中文情感分析模型

  • https://huggingface.co/IDEA-CCNL/Erlangshen-Roberta-110M-Sentiment

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

中文的RoBERTa-wwm-ext-base在数个情感分析任务微调后的版本

git clone https://huggingface.co/IDEA-CCNL/Erlangshen-Roberta-110M-Sentiment
from transformers import BertForSequenceClassification, BertTokenizer
import torch# 加载预训练模型和分词器
tokenizer = BertTokenizer.from_pretrained('Erlangshen-Roberta-110M-Sentiment')
model = BertForSequenceClassification.from_pretrained('Erlangshen-Roberta-110M-Sentiment')# 待分类的文本
text = '今天心情不好'# 对文本进行编码并转换为张量,然后输入模型中
input_ids = torch.tensor([tokenizer.encode(text)])
output = model(input_ids)# 对输出的logits进行softmax处理,得到分类概率
probabilities = torch.nn.functional.softmax(output.logits, dim=-1)# 打印输出分类概率
print(probabilities)
  • 输出
tensor([[0.9551, 0.0449]], grad_fn=<SoftmaxBackward0>)
from transformers import pipeline# 使用pipeline函数加载预训练的情感分析模型,并进行情感分析
classifier = pipeline("sentiment-analysis", model="Erlangshen-Roberta-110M-Sentiment")# 对输入文本进行情感分析
result = classifier("今天心情很好")# 打印输出结果
print(result)
  • 输出
[{'label': 'Positive', 'score': 0.9374911785125732}]
from transformers import AutoModelForSequenceClassification, AutoTokenizer, pipeline# 加载预训练模型和分词器
model_path = "Erlangshen-Roberta-110M-Sentiment"
model = AutoModelForSequenceClassification.from_pretrained(model_path)
tokenizer = AutoTokenizer.from_pretrained(model_path)# 创建情感分析的pipeline
classifier = pipeline("sentiment-analysis", model=model, tokenizer=tokenizer)# 对文本进行情感分析
result = classifier("今天心情很好")
print(result)
  • 输出
[{'label': 'Positive', 'score': 0.9374911785125732}]

分词器 Tokenizer

from transformers import AutoTokenizer# 加载预训练模型的分词器
tokenizer = AutoTokenizer.from_pretrained("Erlangshen-Roberta-110M-Sentiment")# 对文本进行编码
encoded_input = tokenizer("今天心情很好")
print(encoded_input)# 解码已编码的输入,还原原始文本
decoded_input = tokenizer.decode(encoded_input["input_ids"])
print(decoded_input)
  • 输出
{'input_ids': [101, 791, 1921, 2552, 2658, 2523, 1962, 102],
'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0],
'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1]}
[CLS] 今 天 心 情 很 好 [SEP]

填充 Padding

模型的输入需要具有统一的形状(shape)。

from transformers import AutoTokenizertokenizer = AutoTokenizer.from_pretrained("Erlangshen-Roberta-110M-Sentiment")batch_sentences = ["今天天气真好", "今天天气真好,适合出游"]
encoded_inputs = tokenizer(batch_sentences, padding=True)
print(encoded_inputs)
  • 输出
{'input_ids': [
[101, 791, 1921, 1921, 3698, 4696, 1962, 102, 0, 0, 0, 0, 0], 
[101, 791, 1921, 1921, 3698, 4696, 1962, 8024, 6844, 1394, 1139, 3952, 102]], 
'token_type_ids': [
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
], 
'attention_mask': [
[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
]}

截断 Truncation

句子模型无法处理,可以将句子进行截断。

from transformers import AutoTokenizertokenizer = AutoTokenizer.from_pretrained("Erlangshen-Roberta-110M-Sentiment")batch_sentences = ["今天天气真好", "今天天气真好,适合出游"]
# return_tensors pt(PyTorch模型) tf(TensorFlow模型)
encoded_inputs = tokenizer(batch_sentences, padding=True, truncation=True, return_tensors="pt")
print(encoded_inputs)
  • 输出
{'input_ids': tensor([[ 101,  791, 1921, 1921, 3698, 4696, 1962,  102,    0,    0,   0,    0,    0],[ 101,  791, 1921, 1921, 3698, 4696, 1962, 8024, 6844, 1394, 1139, 3952, 102]]), 'token_type_ids': tensor([[0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0],[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])
}

google-t5/t5-small

  • https://huggingface.co/google-t5/t5-small

在这里插入图片描述

Google的T5(Text-To-Text Transfer Transformer)是由Google Research开发的一种多功能的基于Transformer的模型。T5-small是T5模型的一个较小的变体,专为涉及自然语言理解和生成任务而设计。

  1. Transformer架构:与其它模型类似,T5-small采用了Transformer架构,该架构在各种自然语言处理(NLP)任务中表现出色。

  2. 多功能性:T5-small的设计理念是将所有的NLP任务都看作文本到文本的转换问题,使得模型可以通过简单地调整输入和输出来适应不同的任务。

  3. 预训练和微调:T5-small通常通过大规模的无监督预训练来学习通用的语言表示,然后通过有监督的微调来适应特定任务,如问答、摘要生成等。

  4. 应用广泛:由于其灵活性和性能,在各种NLP应用中都有广泛的应用,包括机器翻译、文本生成、情感分析等。

  • 下载 google-t5/t5-small 模型
# 模型大小 4.49G
git clone https://huggingface.co/google-t5/t5-small
  • 安装依赖库
pip install 'transformers[torch]'
pip install sentencepiece
  • 文本生成示例
from transformers import T5Tokenizer, T5ForConditionalGeneration# Step 1: 加载预训练的T5 tokenizer和模型
tokenizer = T5Tokenizer.from_pretrained("t5-small")
model = T5ForConditionalGeneration.from_pretrained("t5-small")while True:# Step 2: 接收用户输入input_text = input("请输入要生成摘要的文本 (输入 'exit' 结束): ")if input_text.lower() == 'exit':print("程序结束。")break# 使用tokenizer对输入文本进行编码input_ids = tokenizer(input_text, return_tensors="pt").input_ids# Step 3: 进行生成# 使用model.generate来生成文本output = model.generate(input_ids, max_length=50, num_beams=4, early_stopping=True)# Step 4: 解码输出output_text = tokenizer.decode(output[0], skip_special_tokens=True)# 打印输入和输出结果print("输入:", input_text)print("输出:", output_text)print("=" * 50)  # 分隔符,用来区分不同输入的输出结果

在这里插入图片描述

使用脚本进行训练

  • https://huggingface.co/docs/transformers/run_scripts

  • 从源代码安装 Transformers

git clone https://github.com/huggingface/transformers
cd transformers
pip install .
  • 将当前的 Transformers 克隆切换到特定版本
# 本地分支
git branch
# 远程分支
git branch -a
# 切换分支 v4.41.2,因为当前安装的版本是 v4.41.2
git checkout tags/v4.41.2
  • 安装依赖库
# 安装用于处理人类语言数据的工具集库
pip install nltk
# 安装用于计算ROUGE评估指标库
pip install rouge_score

Pytorch

示例脚本从 🤗 Datasets库下载并预处理数据集。然后,该脚本使用Trainer在支持摘要的架构上微调数据集。以下示例展示了如何在CNN/DailyMail数据集上微调T5-small。由于训练方式的原因,T5 模型需要额外的参数。此提示让 T5 知道这是一项摘要任务。

cd transformers/examples/pytorch/summarization
pip install -r requirements.txt
python run_summarization.py \--model_name_or_path google-t5/t5-small \--do_train \--do_eval \--dataset_name cnn_dailymail \--dataset_config "3.0.0" \--source_prefix "summarize: " \--output_dir /tmp/tst-summarization \--per_device_train_batch_size=4 \--per_device_eval_batch_size=4 \--overwrite_output_dir \--predict_with_generate

注意: 家用机上训练非常耗时,建议租用GPU服务器进行测试。

  • 数据缓存目录
# Linux/macOS
cd ~/.cache/huggingface
# Windows
C:\Users\{your_username}\.cache\huggingface
  • datasets
2.6G	cnn_dailymail
798M	downloads

机器翻译

数据集下载

  • https://huggingface.co/datasets/wmt/wmt16

在这里插入图片描述

数据集格式转换

pip install pandas
import pandas as pd
import jsonlines# 输入和输出文件路径
input_parquet_file = './input_file.parquet'
output_jsonl_file = './output_file.jsonl'# 加载 Parquet 文件
df = pd.read_parquet(input_parquet_file)# 将数据写入 JSONLines 文件
with jsonlines.open(output_jsonl_file, 'w') as writer:for index, row in df.iterrows():json_record = {"source_text": row['source_column'],  # 替换成实际的源语言列名"target_text": row['target_column']   # 替换成实际的目标语言列名}writer.write(json_record)
  • train.jsonl
{ "cs": "Následný postup na základě usnesení Parlamentu: viz zápis", "en": "Action taken on Parliament's resolutions: see Minutes" }
  • validation.jsonl
{ "en": "UN Chief Says There Is No Military Solution in Syria", "ro": "Șeful ONU declară că nu există soluții militare în Siria" }
cd examples/pytorch/translation
pip install -r requirements.txt
python run_translation.py \--model_name_or_path google-t5/t5-small \--do_train \--do_eval \--source_lang en \--target_lang ro \--source_prefix "translate English to Romanian: " \--dataset_name wmt16 \--dataset_config_name ro-en \--train_file ./train.jsonl \--validation_file ./validation.jsonl \--output_dir /tmp/tst-translation \--per_device_train_batch_size=4 \--per_device_eval_batch_size=4 \--overwrite_output_dir \--predict_with_generate

注意: 家用机上训练非常耗时,建议租用GPU服务器进行测试。

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

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

相关文章

【Sklearn-LR驯化】一文搞懂分类基石模型-逻辑回归使用总结

【Sklearn-驯化】一文搞懂分类基石模型-逻辑回归使用总结 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 免费获取相关内容文档关注&#xf…

Transformer教程之Encoder-Decoder架构

在当今的自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;Transformer已经成为不可或缺的模型。它以其高效的并行计算和卓越的性能在多个任务中占据了主导地位。在这篇文章中&#xff0c;我们将深入探讨Transformer的核心——Encoder-Decoder架构&#xff0c;帮助大家…

设计模式原则——接口隔离原则

设计模式原则 设计模式示例代码库地址&#xff1a; https://gitee.com/Jasonpupil/designPatterns 接口隔离原则 要求程序员尽量将臃肿庞大的接口拆分为更小的和更具体的接口&#xff0c;让接口中只包含客户感兴趣的方法接口隔离原则的目标是降低类或模块之间的耦合度&…

STM32将外部SDRAM空间作为系统堆(Heap)空间

概述 stm32可以外扩很大的sram&#xff0c;常见外部sram的初始化函数一般是c语言写的&#xff0c;默认写在main函数里面。stm32初始化首先进入汇编代码startup_stm32f429xx.s&#xff0c;在汇编代码中Reset_Handler&#xff08;复位中断服务程序&#xff09;里面先调用了Syste…

【Python机器学习】自动化特征选择——迭代特征选择

在单变量测试中&#xff0c;没有使用模型&#xff1b;在基于模型的选择中&#xff0c;使用单个模型来选择特征。而在迭代特征选择中&#xff0c;将会构造一系列模型&#xff0c;每个模型都使用不同数量的特征。有两种基本方法&#xff1a; 1、开始时没有特征&#xff0c;然后逐…

Django使用

一、安装Django 可以在创建好的虚拟环境中下载包 pip install Django3.2.20 -i https://pypi.tuna.tsinghua.edu.cn/simple 查看对应的下载好的内容 1、在Lib的site-packages第三方包里&#xff1a;这就是django框架源码 2、在scripts中有个 这是个工具&#xff0c;帮助创建d…

Java nio 的线程通信机制线程通信Pipe

Java的Pipe是一种新的线程通信机制&#xff0c;传统的线程通信可以是通过共享内存的方式&#xff0c;socket等方式&#xff0c;而Pipe是通过Java NIO 通信的方式实现共享内存&#xff0c;优点类似于go语言的管道 先上代码 public static void main(String[] args) throws IOEx…

Java网络编程(JavaWeb的基础)

Java网络编程&#xff08;JavaWeb的基础&#xff09; 文章目录 Java网络编程&#xff08;JavaWeb的基础&#xff09;前言一、网络编程概述1.1 软件架构&网络基础1.2 网络通信要素:IP/端口/通信协议1.3 传输层协议:tcp/udp 二、网络编程API2.1 InetAddress类2.2 Socket类&am…

DELL:利用大语言模型(LLM)生成评论与解释,革新虚假信息检测

ACL 2024 DELL: Generating Reactions and Explanations for LLM-Based Misinformation Detection https://arxiv.org/abs/2402.10426https://arxiv.org/abs/2402.10426 1.概述 大型语言模型(LLM)虽在诸多领域显示出色性能,但在直接应用于新闻真实性鉴别时,面临两大核心挑…

uboot基本使用网络命令和从服务器端下载linux内核启动

网络命令ip地址设置: setenv gmac_debug 0; setenv mdio_intf rgmii; setenv bootdelay 1; setenv ethaddr 00:xxxx:81:70; // mac地址 setenv ipaddr xxx; //开发板 IP 地址 setenv netmask 255.255.255.0; setenv gatewayip xxx.1; setenv serverip xxxx; //服…

潮玩手办盲盒前端项目模版的技术探索与应用案例

一、引言 在数字化时代&#xff0c;随着消费者对个性化和艺术化产品的需求日益增长&#xff0c;潮玩手办和盲盒市场逐渐崭露头角。为了满足这一市场需求&#xff0c;前端技术团队需要构建一个功能丰富、用户友好的在线平台。本文旨在探讨潮玩手办盲盒前端项目模版的技术实现&a…

图像处理Python库--图片裁剪、缩放、灰度图、圆角等

图像处理Python库 py-img-processor1. 安装2. 使用(Usage)2.1 运行配置2.2 图像处理处理函数图像处理参数为字符串图像处理参数为JSON 命令行提取图像主色调 py-img-processor Image editor using Python and Pillow. 依赖Pillow开发的Python库&#xff0c;用于图像编辑处理。…

第6章 复制

文章目录 前言1.配置1.1建立复制1.2断开复制1.3 安全性1.4 只读1.5 传输延迟 2. 拓扑2.1.一主一从结构2.2.一主多从结构2.3.树状主从结构 3.原理3.1复制过程 前言 复制功能&#xff0c;实现了相同数据的多个Redis副本。复制功能是高可用Redis的基础&#xff0c;满足故障恢复和…

Redis 高可用 sentinel

简介 Sentinel提供了一种高可用方案来抵抗节点故障&#xff0c;当故障发生时Redis集群可以自动进行主从切换&#xff0c;程序可以不用重启。 Redis Sentinel集群可以看成是一个Zookeeper集群&#xff0c;他是Redis集群高可用的心脏&#xff0c;一般由3-5个节点组成&#xff0…

【STM32】GPIO复用和映射

1.什么叫管脚复用 STM32F4有很多的内置外设&#xff0c;这些外设的外部引脚都是与GPIO复用的。也就是说&#xff0c;一个GPIO如果可以复用为内置外设的功能引脚&#xff0c;那么当这个GPIO作为内置外设使用的时候&#xff0c;就叫做复用。 STM32F4系列微控制器IO引脚通过一个…

鸿蒙开发HarmonyOS NEXT (二) 熟悉ArkUI

一、构造函数 构造一个商品类Item&#xff0c;然后利用foreach函数循环渲染 class Item {name: stringimage: ResourceStrprice: numberdiscount: numberconstructor(name: string, image: ResourceStr, price: number, discount: number 0) {this.name name;this.image ima…

MoneyPrinterPlus:AI自动短视频生成工具-微软云配置详解

MoneyPrinterPlus可以使用大模型自动生成短视频&#xff0c;我们可以借助Azure提供的语音服务来实现语音合成和语音识别的功能。 Azure的语音服务应该是我用过的效果最好的服务了&#xff0c;微软还得是微软。 很多小伙伴可能不知道应该如何配置&#xff0c;这里给大家提供一…

API-元素尺寸与位置

学习目标&#xff1a; 掌握元素尺寸与位置 学习内容&#xff1a; 元素尺寸与位置仿京东固定导航栏案例实现bilibili点击小滑块移动效果 元素尺寸与位置&#xff1a; 使用场景&#xff1a; 前面案例滚动多少距离&#xff0c;都是我们自己算的&#xff0c;最好是页面滚动到某个…

常用MQ消息中间件Kafka、ZeroMQ和RabbitMQ对比及RabbitMQ详解

1、概述 在现代的分布式系统和实时数据处理领域&#xff0c;消息中间件扮演着关键的角色&#xff0c;用于解决应用程序之间的通信和数据传递的挑战。在众多的消息中间件解决方案中&#xff0c;Kafka、ZeroMQ和RabbitMQ 是备受关注和广泛应用的代表性系统。它们各自具有独特的特…

企业数据治理必备工具:智能元数据管理平台

当下&#xff0c;企业拥有海量数据&#xff0c;但仅拥有数据并不能释放数据价值。我们还需要深入了解数据的各种属性、来源和关系等信息。这些信息被称为“元数据”&#xff0c;即用于描述数据的数据。 假设&#xff0c;把我们每个人的身份证、户口本都当做数据&#xff0c;那…