huggingface笔记:gpt2
0 使用的tips
- GPT-2是一个具有绝对位置嵌入的模型,因此通常建议在输入的右侧而不是左侧填充
- GPT-2是通过因果语言建模(CLM)目标进行训练的,因此在预测序列中的下一个标记方面非常强大
- 利用这一特性,GPT-2可以生成语法连贯的文本
- GPT-2可以接受past_key_values(对于PyTorch)或past(对于TF)作为输入
- 这些是先前计算的键/值注意力对。‘
- 使用这个(past_key_values或past)值可以防止模型在文本生成过程中重新计算预计算的值
- 启用scale_attn_by_inverse_layer_idx和reorder_and_upcast_attn标志将应用Mistral的训练稳定性改进(仅适用于PyTorch)
1 基本实例
from transformers import AutoModelForCausalLM, AutoTokenizermodel = AutoModelForCausalLM.from_pretrained("gpt2")
tokenizer = AutoTokenizer.from_pretrained("gpt2")prompt = "GPT2 is a model developed by OpenAI."input_ids = tokenizer(prompt, return_tensors="pt").input_idsgen_tokens = model.generate(input_ids,do_sample=True,temperature=0.9,max_length=100,
)
gen_text = tokenizer.batch_decode(gen_tokens)[0]print(gen_text)
'''
GPT2 is a model developed by OpenAI. It helps to define the neural network of a person with Autism. The researchers have previously identified the basic network of neurons in the brain responsible for processing emotional information. They also found that the person with Autism has similar information processing abilities as other people with similar intelligence.The researchers say that it's important to look beyond the normal limitations of the human brain. "This type of neuroimaging has been really important," explains Michael A. Be
'''
2 GPT2Config
- 用于存储 GPT2Model配置的配置类。
- 根据指定的参数实例化一个 GPT-2 模型,定义模型架构
- 使用默认值实例化配置将产生类似于 GPT-2 openai-community/gpt2 架构的配置:
2.1 主要参数
vocab_size | (int, 可选,默认值为 50257) — GPT-2 模型的词汇表大小 |
n_positions | (int, 可选,默认值为 1024) — 该模型可能使用的最大序列长度。 |
n_embd | (int, 可选,默认值为 768) — 嵌入和隐藏状态的维度 |
n_layer | (int, 可选,默认值为 12) — Transformer 编码器中的隐藏层数量 |
n_head | (int, 可选,默认值为 12) — Transformer 编码器中每个注意力层的注意力头数量 |
n_inner | (int, 可选) — 内部前馈层的维度。设置为 None 将其设置为 4 * n_embd |
activation_function | (str, 可选,默认值为 "gelu_new") — 激活函数 可在以下列表中选择 ["relu", "silu", "gelu", "tanh", "gelu_new"] |
resid_pdrop | (float, 可选,默认值为 0.1) — 嵌入、编码器和池化器中所有全连接层的丢弃概率 |
embd_pdrop | (float, 可选,默认值为 0.1) — 嵌入的丢弃率 |
attn_pdrop | (float, 可选,默认值为 0.1) — 注意力的丢弃率 |
layer_norm_epsilon | (float, 可选,默认值为 1e-05) — 层归一化层中使用的epsilon值 |
initializer_range | (float, 可选,默认值为 0.02) — 初始化所有权重矩阵时截断正态初始化器的标准差 |
scale_attn_weights | (bool, 可选,默认值为 True) — 通过除以 sqrt(hidden_size) 来缩放注意力权重 |
bos_token_id | (int, 可选,默认值为 50256) — 词汇表中句子起始标记的 ID |
eos_token_id | (int, 可选,默认值为 50256) — 词汇表中句子结束标记的 ID |
scale_attn_by_inverse_layer_idx | (bool, 可选,默认值为 False) — 是否另外通过 1 / (layer_idx + 1) 缩放注意力权重 |
2.2 举例
from transformers import GPT2Config, GPT2Model# 初始化 GPT2 配置
configuration = GPT2Config()configuration
'''
GPT2Config {"activation_function": "gelu_new","attn_pdrop": 0.1,"bos_token_id": 50256,"embd_pdrop": 0.1,"eos_token_id": 50256,"initializer_range": 0.02,"layer_norm_epsilon": 1e-05,"model_type": "gpt2","n_embd": 768,"n_head": 12,"n_inner": null,"n_layer": 12,"n_positions": 1024,"reorder_and_upcast_attn": false,"resid_pdrop": 0.1,"scale_attn_by_inverse_layer_idx": false,"scale_attn_weights": true,"summary_activation": null,"summary_first_dropout": 0.1,"summary_proj_to_labels": true,"summary_type": "cls_index","summary_use_proj": true,"transformers_version": "4.41.2","use_cache": true,"vocab_size": 50257
}
'''
# 根据配置初始化模型(具有随机权重)
model = GPT2Model(configuration)
3 GPT2Tokenizer
注:GPT2分词器经过训练将空格视为标记的一部分,因此一个单词在句子的开头(没有空格)或其他地方将被编码为不同的方式
3.1 主要参数
vocab_file | 词汇文件的路径 |
merges_file | 合并文件的路径 |
unk_token | (str, 可选,默认值为 "") — 未知标记。不在词汇表中的标记无法转换为 ID,将被设置为此标记 |
bos_token | (str, 可选,默认值为 "") — 序列开始标记 |
eos_token | (str, 可选,默认值为 "") — 序列结束标记 |
pad_token | (str, 可选) — 用于填充的标记,例如在批处理不同长度的序列时 |
add_prefix_space | (bool, 可选,默认值为 False) — 是否在输入的开头添加一个空格。这允许将前导词视为任何其他词一样处理。 |
add_bos_token | (bool, 可选,默认值为 False) — 是否在输入的开头添加一个序列开始标记。这允许将前导词视为任何其他词一样处理 |
3.2 举例
from transformers import GPT2Tokenizertokenizer = GPT2Tokenizer.from_pretrained("openai-community/gpt2")tokenizer("Hello world"),tokenizer(" Hello world")
'''
({'input_ids': [15496, 995], 'attention_mask': [1, 1]},{'input_ids': [18435, 995], 'attention_mask': [1, 1]})
'''
4 GPT2TokenizerFast
4.1 参数、
vocab_file | 词汇文件的路径 |
merges_file | 合并文件的路径 |
unk_token | (str, 可选,默认值为 "") — 未知标记。不在词汇表中的标记无法转换为 ID,将被设置为此标记 |
bos_token | (str, 可选,默认值为 "") — 序列开始标记 |
eos_token | (str, 可选,默认值为 "") — 序列结束标记 |
add_prefix_space | (bool, 可选,默认值为 False) — 是否在输入的开头添加一个空格。这允许将前导词视为任何其他词一样处理。 |
4.2 举例
和GPT2Tokenizer类似
from transformers import GPT2TokenizerFasttokenizer = GPT2TokenizerFast.from_pretrained("openai-community/gpt2")tokenizer("Hello world"),tokenizer(" Hello world")
'''
({'input_ids': [15496, 995], 'attention_mask': [1, 1]},{'input_ids': [18435, 995], 'attention_mask': [1, 1]})
'''
4.3 和GPT2Tokenizer的区别
底层库
- GPT2TokenizerFast:基于 HuggingFace 的
tokenizers
库,这个库使用 Rust 实现了快速的分词算法,特别是字节对编码(Byte-Pair Encoding, BPE)。 - GPT2Tokenizer:基于 Python 实现,使用较慢的分词方法。
性能
- GPT2TokenizerFast:通常更快且更高效,特别是在处理大批量文本时。这是由于其使用了低级语言(Rust)的高效实现。
- GPT2Tokenizer:相对较慢,因为它是纯 Python 实现的,计算效率较低。
5 GPT2DoubleHeadsModelOutput
预测两个句子是否连续的模型输出的基类
6 GPT2Model
裸 GPT-2 模型,输出原始的隐藏状态,没有任何特定的头部
6.1 forward 方法
6.1.1 参数
input_ids | (torch.LongTensor,形状为 (batch_size, input_ids_length)) 输入序列标记在词汇表中的索引。 如果使用 |
past_key_values | Tuple[Tuple[torch.Tensor]],长度为 包含模型计算的预计算隐藏状态(注意力块中的键和值)。 可以用来加速顺序解码。输入的 |
attention_mask | torch.FloatTensor,形状为 (batch_size, sequence_length),可选 掩码,用于避免在填充标记索引上执行注意力。 掩码值选择为 [0, 1]:1 表示未被掩码的标记,0 表示被掩码的标记。 |
token_type_ids | (torch.LongTensor,形状为 (batch_size, input_ids_length),可选) — 段标记索引,用于指示输入的第一部分和第二部分。 索引选择为 [0, 1]:0 对应句子 A 标记,1 对应句子 B 标记。 |
position_ids | (torch.LongTensor,形状为 (batch_size, sequence_length),可选) 每个输入序列标记在位置嵌入中的位置索引。 选择范围为 [0, config.max_position_embeddings - 1] |
head_mask | (torch.FloatTensor,形状为 (num_heads,) 或 (num_layers, num_heads),可选) — 掩码,用于取消选择的自注意力模块头部。 掩码值选择为 [0, 1]:1 表示头部未被掩码,0 表示头部被掩码 |
inputs_embeds | (torch.FloatTensor,形状为 (batch_size, sequence_length, hidden_size),可选) 可以选择直接传递嵌入表示而不是 |
encoder_hidden_states | (torch.FloatTensor,形状为 (batch_size, sequence_length, hidden_size),可选) — 编码器隐藏状态。 |
encoder_attention_mask | (torch.FloatTensor,形状为 (batch_size, sequence_length),可选) — 编码器注意力掩码。 |
use_cache | (bool, 可选) — 如果设置为 True,则返回 past_key_values 键值状态,可用于加速解码 |
output_attentions | (bool, 可选) — 是否返回所有注意力层的注意力张量 |
output_hidden_states | (bool, 可选) — 是否返回所有层的隐藏状态 |
6.1.2 返回值
last_hidden_state | (torch.FloatTensor,形状为 (batch_size, sequence_length, hidden_size)) — 模型最后一层的隐藏状态序列。 如果使用 |
past_key_values | tuple(tuple(torch.FloatTensor)),可选,当传递 长度为 用来加速顺序解码 |
hidden_states | (tuple(torch.FloatTensor),可选,当传递 包含 torch.FloatTensor 的元组(如果模型具有嵌入层,则为嵌入输出的一个 + 每层输出的一个),形状为 (batch_size, sequence_length, hidden_size)。 模型在每层输出的隐藏状态加上可选的初始嵌入输出的隐藏状态。 |
attentions | (tuple(torch.FloatTensor),可选,当传递 包含 torch.FloatTensor 的元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。 注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。 |
cross_attentions | (tuple(torch.FloatTensor),可选,当传递 包含 torch.FloatTensor 的元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。 解码器交叉注意力层的注意力权重,在注意力 softmax 后,用于计算交叉注意力头中的加权平均值。 |
6.1.3 举例
from transformers import AutoTokenizer, GPT2Model
import torchtokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")
model = GPT2Model.from_pretrained("openai-community/gpt2")inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
outputs = model(**inputs)last_hidden_states = outputs.last_hidden_state
last_hidden_states
'''
tensor([[[-9.3295e-06, -1.4021e-01, -2.0845e-01, ..., -1.5329e-01,-6.7826e-02, -1.9630e-01],[ 4.1949e-01, 2.3525e-01, 3.4816e-01, ..., 4.5321e-02,1.5447e-01, 1.9546e-02],[-7.0056e-02, 2.6082e-01, -2.9146e-01, ..., 9.0979e-02,4.9659e-01, -4.1824e-01],[-1.9695e-01, -2.9247e-01, -1.4119e-01, ..., -8.9255e-02,-2.2392e-01, 1.2212e-01],[-6.4193e-01, -1.0236e-01, -4.2129e-01, ..., 6.8697e-02,-5.1117e-01, 5.0044e-01],[ 4.1290e-03, -3.1455e-02, -1.0823e+00, ..., -5.0159e-02,-3.0878e-02, 4.3480e-01]]], grad_fn=<ViewBackward0>)
'''
相关文章:
huggingface笔记:gpt2
0 使用的tips GPT-2是一个具有绝对位置嵌入的模型,因此通常建议在输入的右侧而不是左侧填充GPT-2是通过因果语言建模(CLM)目标进行训练的,因此在预测序列中的下一个标记方面非常强大 利用这一特性,GPT-2可以生成语法连…...
一次业务的批量数据任务的处理优化
文章目录 一次业务的批量数据任务的处理优化业务背景1.0版本 分批处理模式2.0版本 平衡任务队列模式3.0版本 优化调度平衡任务队列模式总结 一次业务的批量数据任务的处理优化 业务背景 一个重新生成所有客户的财务业务指标数据的批量数据处理任务。 1.0版本 分批处理模式 …...
新能源汽车充电站远程监控系统S275钡铼技术无线RTU
新能源汽车充电站的远程监控系统在现代城市基础设施中扮演着至关重要的角色,而钡铼技术的S275无线RTU作为一款先进的物联网数据监测采集控制短信报警终端,为充电站的安全运行和高效管理提供了强大的技术支持。 技术特点和功能 钡铼S275采用了基于UCOSI…...
海外视频媒体发布/发稿:如何在国外媒体以视频的形式宣发
1. 背景介绍 在如今数字化时代,每个国家都拥有着各自的视频媒体平台,而主流媒体也都纷纷加入了视频发布的行列。视频媒体的宣发形式主要包括油管Youtube等视频分享平台,以及图文配合的发布方式。通过在视频中夹带链接,媒体可以以…...
HTML 【实用教程】(2024最新版)
核心思想 —— 语义化 【面试题】如何理解 HTML 语义化 ?仅通过标签便能判断内容的类型,特别是区分标题、段落、图片和表格 增加代码可读性,让人更容易读懂对SEO更加友好,让搜索引擎更容易读懂 html 文件的基本结构 html 文件的文件后缀为 …...
How to Describe Figures in a Research Article
How to Describe Figures in a Research Article DateAuthorVersionNote2024.07.10Dog TaoV1.0Finish the document. 文章目录 How to Describe Figures in a Research ArticleGeneral GuidelinesDetailed DescriptionsCommon Describing Phrases Effective communication of …...
昇思MindSpore学习入门-CELL与参数一
Cell作为神经网络构造的基础单元,与神经网络层(Layer)的概念相对应,对Tensor计算操作的抽象封装,能够更准确清晰地对神经网络结构进行表示。除了基础的Tensor计算流程定义外,神经网络层还包含了参数管理、状态管理等功能。而参数(…...
【k8s中安装rabbitmq】k8s中安装rabbitmq并搭建镜像集群-hostpath版
文章目录 简介一.条件及环境说明二.需求说明三.实现原理及说明四.详细步骤4.1.规划节点标签4.2.创建configmap配置4.3.创建三个statefulset和service headless配置4.4.创建service配置 五.安装完后的配置六.安装说明 简介 k8s集群中搭建rabbitmq集群服务一般都会用到pvc&#x…...
(5) 深入探索Python-Pandas库的核心数据结构:Series详解
目录 前言1. Series 简介2. Series的特点3. Series的创建3.1 使用列表创建Series3.2 使用字典创建Series3.3 使用列表和自定义索引创建Series3.4 指定数据类型和名称 4. Series的索引/切片4.1 下标索引:基于整数位置的索引4.2 基于标签的索引4.3 切片4.4 使用.loc[]…...
JAVA之开发神器——IntelliJ IDEA的下载与安装
一、IDEA是什么? IEAD是JetBrains公司开发的专用于java开发的一款集成开发环境。由于其功能强大且符合人体工程学(就是更懂你)的优点,深受java开发人员的喜爱。目前在java开发工具中占比3/4。如果你要走java开发方向,那…...
通过Umijs从0到1搭建一个React项目
有一阵时间没写react了,今天通过umi搭建一个demo项目复习一下react;umi是一个可扩展的企业级前端应用框架,在react市场中还是比较火的一个框架。 Umi官方文档:Umi 介绍 (umijs.org) 一、构建项目。 1、安装包管理工具。 官方推…...
Redis 数据过期及淘汰策略
Redis 数据过期及淘汰策略 过期策略 定时过期 在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除。到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好&a…...
vue vite+three在线编辑模型导入导出
文章目录 序一、1.0.0版本1.新增2.编辑3.导出4.导入 总结 序 要实现一个类似于数字孪生的场景 可以在线、新增、删除模型 、以及编辑模型的颜色、长宽高 然后还要实现 编辑完后 保存为json数据 记录模型数据 既可以导入也可以导出 一、1.0.0版本 1.新增 先拿建议的立方体来…...
去水印小程序源码修复版-前端后端内置接口+第三方接口
去水印小程序源码,前端后端,内置接口第三方接口, 修复数据库账号密码错误问题,内置接口支持替换第三方接口, 文件挺全的,可以添加流量主代码,搭建需要准备一台服务器,备案域名和http…...
机器学习:预测评估8类指标
机器学习:8类预测评估指标 R方值、平均值绝对误差值MAE、均方误差MSE、均方误差根EMSE、中位数绝对误差MAD、平均绝对百分误差MAPE、可解释方差分EVS、均方根对数误差MLSE。 一、R方值 1、说明: R方值,也称为确定系数或拟合优度ÿ…...
【深度学习基础】MAC pycharm 专业版安装与激活
文章目录 一、pycharm专业版安装二、激活 一、pycharm专业版安装 PyCharm是一款专为Python开发者设计的集成开发环境(IDE),旨在帮助用户在使用Python语言开发时提高效率。以下是对PyCharm软件的详细介绍,包括其作用和主要功能&…...
排序相关算法--1.插入排序+冒泡排序回顾
1.基本分类 2.插入排序 特点:有实践意义(例如后期快排的优化),适应性强,一般不会到时间复杂度最坏的情况。 将第一个元素视为已经排好序的序列。取出下一个元素,在已经排好序的序列中从后往前比较…...
变阻器的故障排除方法有哪些?
变阻器,特别是滑动变阻器,作为电子电路中的常见元件,其故障排除方法主要依据具体的故障现象来确定。以下是一些常见的故障现象及其排除方法: 一、接触不良 现象:电阻器不起作用或电压不稳定。 排除方法: …...
软考《信息系统运行管理员》-3.1信息系统设施运维的管理体系
3.1信息系统设施运维的管理体系 1 信息系统设施运维的对象 基础环境 主要包括信息系统运行环境(机房、设备间、配线室、基站、云计算中心 等)中的空调系统、供配电系统、通信应急设备系统、防护设备系统(如消防系统、安全系统) 等,能维持系统安全正常运转…...
Nginx重定向
Nginx重定向 location 匹配 location匹配的就是后面的URL /WordPress 192.168.118.10/wordpress location匹配的分类和优先级 1.精确匹配 location/对字符串进行完全匹配,必须完全符合2.正则匹配 ^~ 前缀匹配,以什么为开头~ 区分大小写的匹配~* 不区分大小写!~: 区分大小…...
私有化地图离线部署方案之高程检索服务
私有化地图离线部署整体解决方案,除硬件之外,一般主要由基础地图服务、查询定位服务、路径规划服务和高程检索服务构成。 我们已经分享过基础地图服务、查询定位服务和路径规划服务,现在再为你分享高程检索服务的方法。 私有化高程检索服务…...
PostgreSQL 中如何实现数据的增量更新和全量更新的平衡?
文章目录 一、增量更新与全量更新的概念增量更新全量更新 二、考虑的因素1. 数据量2. 数据更改的频率和规模3. 数据一致性要求4. 系统性能和资源利用5. 业务逻辑和流程 三、解决方案(一)混合使用增量更新和全量更新(二)使用临时表…...
数据结构--二叉树相关习题5(判断二叉树是否是完全二叉树 )
1.判断二叉树是否是完全二叉树 辨别: 不能使用递归或者算节点个数和高度来判断。 满二叉树可以用高度和节点来判断,因为是完整的。 但是完全二叉树前面是满的,但是最后一层是从左到右连续这种 如果仍然用这种方法的话,如下图…...
Python 轻松生成多种条形码、二维码 (Code 128、EAN-13、QR code等)
条形码和二维码是现代信息交换和数据存储的重要工具,它们将信息以图形的形式编码,便于机器识别和数据处理,被广泛应用于物流、零售、医疗、教育等各领域。 本文将介绍如何使用Python快速生成各种常见的条形码如Code 128、EAN-13,…...
Python: 分块读取文本文件
在处理大文件时,逐行或分块读取文件是很常见的需求。下面是几种常见的方法,用于在 Python 中分块读取文本文件: 1、问题背景 如何分块读取一个较大的文本文件,并提取出特定的信息? 问题描述: fopen(blank.txt,r) quot…...
服务攻防——中间件Jboss
文章目录 一、Jboss简介二、Jboss渗透2.1 JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)2.2 JBoss JMXInvokerServlet 反序列化漏洞(CVE-2015-7501)2.3 JBossMQ JMS 反序列化漏洞(CVE-2017-7504)2.4 Adminis…...
宏碁F5-572G-59K3笔记本笔记本电脑拆机清灰教程(详解)
1. 前言 我的笔记本开机比较慢,没有固态,听说最近固态比较便宜,就想入手一个,于是拆笔记本看一下有没有可以安的装位置。(友情提示,在拆机之前记得洗手并擦干,以防静电损坏电源器件)…...
基于FPGA的LDPC编译码算法设计基础知识
基于FPGA的LDPC编译码算法设计基础知识 数字电路(数电)知识模拟电路(模电)知识1. 放大器1.1. 晶体管放大器1.2. 运算放大器1.3. 管子放大器(真空管放大器)微处理器/单片机知识其他相关知识 基于FPGA的算法设…...
国际网课平台Udemy上的亚马逊云科技AWS免费高分课程和创建、维护EC2动手实践
亚马逊云科技(AWS)是全球云行业最🔥火的云平台,在全球经济形势不好的大背景下,通过网课学习亚马逊云科技AWS基础备考亚马逊云科技AWS证书,对于找工作或者无背景转行做AWS帮助巨大。欢迎大家关注小李哥,及时了解世界最前…...
空中交通新动能!2024深圳eVTOL展动力电池展区核心内容抢先看!
空中交通新动能!2024深圳eVTOL展动力电池展区核心内容抢先看! 关键词:2024深圳eVTOL展 动力电池 高能量密度电池 高性能电池材料 作为2024深圳eVTOL展重要组成部分,2024深圳eVTOL动力电池展将于9月23-25日在深圳坪山燕子湖国际会…...
网站建设灬金手指科杰/百度网络营销
一、需求:效果图如下,各国家数据呈现流入中国效果(漫入) 二、前端如何实现 1. 实现方式:使用echarts,详细配置项可参见echarts官网 2. 实现分析: 地图实现可使用echarts的geo组件(ge…...
江门网站制作/2019网站seo
之前用过一些编辑器如SublimeText,IDE如phpstorm,IDEA等;这些工具给我的感觉就是,除了给予这些工具应有的功能外,给予开发者更友好,更舒服的界面。Eclipse很早就开始使用了,之前在使用时&#x…...
成都营销网站建设/如何做好网站站内优化
1.整型符号:int用处:用于计算和比较python3:全部都是整型python2:整型,长整型long123--十进制 转二进制方法:十进制数除2,取余数从下往上排;print(bin(十进制数))10101--二进制 转十进制方法&am…...
科技有限公司可以做网站建设吗/短视频营销案例
要实现的效果: 1、父节点选中,则以下的子节点全选中 2、父节点不选中。则以下的子节点全不选中 3、子节点仅仅要选中了一个,则父节点选中 4、子节点全不选中。则父亲节点不选中 <% page language"java" import"java.util.*…...
网站怎么不要钱自己做/大数据
MapReduce 1. MapReduce 思想 2.MapReduce的设计构思 3.MapReduce的编写流程 运行模式...
张家界简单的网站建设/百度服务中心人工客服
要运行java的项目需要先将项目打包成war包或者jar包,打包成war包需要将war包部署到tomcat服务器上才能运行。而打包成jar包可以直接使用java命令执行。 在linux系统中运行jar包主要有以下几种方式。 一、java -jar XXX.jar 这是最基本的jar包执行方式,…...