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,则只有未计算 pastinput_ids 需要传递为 input_ids

past_key_values

Tuple[Tuple[torch.Tensor]],长度为 config.n_layers

包含模型计算的预计算隐藏状态(注意力块中的键和值)。

可以用来加速顺序解码。输入的 input_ids 不应包含已传递 pastinput_ids

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),可选)

可以选择直接传递嵌入表示而不是 input_ids

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,则仅输出形状为 (batch_size, 1, hidden_size) 的序列的最后一个隐藏状态。

past_key_values

tuple(tuple(torch.FloatTensor)),可选,当传递 use_cache=True 时返回或 config.use_cache=True 时返回)

长度为 config.n_layers 的元组,每个元组包含形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的 2 个张量

用来加速顺序解码

hidden_states

(tuple(torch.FloatTensor),可选,当传递 output_hidden_states=True 时返回或 config.output_hidden_states=True 时返回) 

包含 torch.FloatTensor 的元组(如果模型具有嵌入层,则为嵌入输出的一个 + 每层输出的一个),形状为 (batch_size, sequence_length, hidden_size)。

模型在每层输出的隐藏状态加上可选的初始嵌入输出的隐藏状态。

attentions

(tuple(torch.FloatTensor),可选,当传递 output_attentions=True 时返回或 config.output_attentions=True 时返回)

包含 torch.FloatTensor 的元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

cross_attentions

(tuple(torch.FloatTensor),可选,当传递 output_attentions=Trueconfig.add_cross_attention=True 时返回或 config.output_attentions=True 时返回)

包含 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>)
'''

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

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

相关文章

人工智能时代打工人摸鱼秘籍(1)- 为啥说大模型像人?

人工智能以势不可挡的方式席卷全球。 所有公司&#xff0c;都在削尖脑袋想&#xff0c;如何在在产品、营销、运营、服务和管理上加持大人工智能的能力。 公司在卷生卷死的时候&#xff0c;有一批人已经偷偷在用大模型提&#xff08;摸&#xff09;效&#xff08;鱼&#xff09;…

昇思25天学习打卡营第1天|初识MindSpore

# 打卡 day1 目录 # 打卡 day1 初识MindSpore 昇思 MindSpore 是什么&#xff1f; 昇思 MindSpore 优势|特点 昇思 MindSpore 不足 官方生态学习地址 初识MindSpore 昇思 MindSpore 是什么&#xff1f; 昇思MindSpore 是全场景深度学习架构&#xff0c;为开发者提供了全…

KDP数据分析实战:从0到1完成数据实时采集处理到可视化

智领云自主研发的开源轻量级Kubernetes数据平台&#xff0c;即Kubernetes Data Platform (简称KDP)&#xff0c;能够为用户提供在Kubernetes上的一站式云原生数据集成与开发平台。在最新的v1.1.0版本中&#xff0c;用户可借助 KDP 平台上开箱即用的 Airflow、AirByte、Flink、K…

LLMs之gptpdf:gptpdf的简介、安装和使用方法、案例应用之详细攻略

LLMs之gptpdf&#xff1a;gptpdf的简介、安装和使用方法、案例应用之详细攻略 目录 gptpdf的简介 1、处理流程 第一步&#xff0c;使用 PyMuPDF 库&#xff0c;对 PDF 进行解析出所有非文本区域&#xff0c;并做好标记&#xff0c;比如: 第二步&#xff0c;使用视觉大模型&…

RUST 编程语言 绘制随机颜色图片 画圆形 画矩形 画直线

什么是Rust Rust是一种系统编程语言&#xff0c;旨在提供高性能和安全性。它是由Mozilla和其开发社区创建的开源语言&#xff0c;设计目标是在C的应用场景中提供一种现代、可靠和高效的选择。Rust的目标是成为一种通用编程语言&#xff0c;能够处理各种计算任务&#xff0c;包…

基于若依的文件上传、下载

基于若依实现文件上传、下载 文章目录 基于若依实现文件上传、下载1、前端实现-文件上传1.1 通用上传分析1.2 修改实现上传接口 2、后端实现-文件上传3、后端实现-文件下载4、前端实现-文件下载 官网其实也写了&#xff0c;但是我是自己改造封装了一下&#xff0c;再次迈向全栈…

3.js - 模板渲染 - 简单

3.js 真tm枯燥啊&#xff0c;狗都不学 效果图 源码 // ts-nocheck// 引入three.js import * as THREE from three// 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls// 导入lil.gui import { GUI } from three/examples/jsm/libs/li…

elementui中日期/时间的禁用处理,使用传值的方式

项目中,经常会用到 在一个学年或者一个学期或者某一个时间段需要做的某件事情,则我们需要在创建这个事件的时候,需要设置一定的时间周期,那这个时间周期就需要给一定的限制处理,避免用户的误操作,优化用户体验 如下:需求为,在选择学年后,学期的设置需要在学年中,且结束时间大…

使用京东云主机搭建幻兽帕鲁游戏联机服务器全流程,0基础教程

使用京东云服务器搭建幻兽帕鲁Palworld游戏联机服务器教程&#xff0c;非常简单&#xff0c;京东云推出幻兽帕鲁镜像系统&#xff0c;镜像直接选择幻兽帕鲁镜像即可一键自动部署&#xff0c;不需要手动操作&#xff0c;真正的新手0基础部署幻兽帕鲁&#xff0c;阿腾云整理基于京…

【LabVIEW学习篇 - 2】:LabVIEW的编程特点

文章目录 LabVIEW的编程特点图形编程天然并行运行基于数据流运行 LabVIEW的编程特点 图形编程 LabVIEW使用图形化的图形化编程语言&#xff08;G语言&#xff09;&#xff0c;用户通过在程序框图中拖放和连接各种节点&#xff08;Nodes&#xff09;来编写程序。每个节点代表一…

图像增强 目标检测 仿射变换 图像处理 扭曲图像

1.背景 在目标检测中&#xff0c;需要进行图像增强。这里的代码模拟了旋转、扭曲图像的功能&#xff0c;并且在扭曲的时候&#xff0c;能够同时把标注的结果也进行扭曲。 这里忽略了读取xml的过程&#xff0c;假设图像IMG存在对应的标注框&#xff0c;且坐标为左上、右下两个…

vue学习笔记(购物车小案例)

用一个简单的购物车demo来回顾一下其中需要注意的细节。 先看一下最终效果 功能&#xff1a; &#xff08;1&#xff09;全选按钮和下面的商品项的选中状态同步&#xff0c;当下面的商品全部选中时&#xff0c;全选勾选&#xff0c;反之&#xff0c;则不勾选。 &#xff08…

SpringBoot新手快速入门系列教程四:创建第一个SringBoot的API

首先我们用IDEA新建一个项目&#xff0c;请将这些关键位置按照我的设置设置一下 接下来我将要带着你一步一步创建一个Get请求和Post请求&#xff0c;通过客户端请求的参数&#xff0c;以json格式返回该参数{“message”:"Hello"} 1,先在IDE左上角把这里改为文件模式…

华为云OBS 通过S3客户端访问

华为云好像没有对S3协议的支持说明其实底层是支持S3协议的。 使用S3的时候我们会需要endpoint&#xff0c;桶名字&#xff0c;region&#xff0c;AWS_ACCESS_KEY,AWS_SECRET_KEY 其中endpoint 就是图片中的&#xff0c;桶名字也很容易找到&#xff0c;region 就是你的endpoint…

【开源项目】LocalSend 局域网文件传输工具

【开源项目】LocalSend 局域网文件传输工具 一个免费、开源、跨平台的局域网传输工具 LocalSend 简介 LocalSend 是一个免费的开源跨平台的应用程序&#xff0c;允许用户在不需要互联网连接的情况下&#xff0c;通过本地网络安全地与附近设备共享文件和消息。 项目地址&…

liunx文件系统,日志分析

文章目录 1.inode与block1.1 inode与block概述1.2 inode的内容1.3 文件存储1.4 inode的大小1.5 inode的特殊作用 2.硬链接与软链接2.1链接文件分类 3.恢复误删除的文件3.1 案例:恢复EXT类型的文件3.2 案例:恢复XFS类型的文件3.2.1 xfsdump使用限制 4.分析日志文件4.1日志文件4.…

docker部署redis/mongodb/

一、redis 创建/root/redis/conf/redis.conf 全部执行命令如下 docker run -it -d --name redis -p 6379:6379 --net mynet --ip 172.18.0.9 -m 400m -v /root/redis/conf:/usr/local/etc/redis -e TXAsia/Shangehai redis redis-server /usr/local/etc/redis/redis.conf 部署…

Java 基础--File - IO流(2)

I/O流 定义 数据从硬盘流向内存为输入流&#xff0c;数据从内存流向硬盘为输出流。输入也叫读取数据&#xff0c;输出也叫写出数据。 IO分类 1.按照数据的流向分为&#xff1a;输入流和输出流 ①输入流&#xff1a;把数据从其他设备上读取到内存中的流 ②输出流&#xff1…

python小练习04

三国演义词频统计与词云图绘制 import jieba import wordcloud def analysis():txt open("三国演义.txt",r,encodingutf-8).read()words jieba.lcut(txt)#精确模式counts {}for word in words:if len(word) 1:continueelif word "诸葛亮" or word &q…

软件系统架构的一些常见专业术语

分层架构是逻辑上的&#xff0c;在物理部署上&#xff0c;三层结构可以部署在同一个物理机器上&#xff0c;但是随着网站业务的发展&#xff0c;必然需要对已经分层的模块分离部署&#xff0c;即三层结构分别部署在不同的服务器上&#xff0c;使网站拥有更多的计算资源以应对越…