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.mzph.cn/diannao/41804.shtml

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

相关文章

C#面 :ASP.Net Core中有哪些异常处理的方案?

在 ASP.NET Core中&#xff0c;有多种异常处理方案可供选择。以下是其中几种常见的异常处理方案&#xff1a; 中间件异常处理&#xff1a; ASP.NET Core提供了一个中间件来处理全局异常。通过在Startup类的Configure方法中添加UseExceptionHandler中间件&#xff0c;可以捕获…

Autosar MCAL-S32k324 Crypto配置-RandomNumber生成及使用

文章目录 前言CryptoPrimitivesCryptoPrimitiveAlgorithmFamilyCryptoPrimitiveAlgorithmModeCryptoPrimitiveAlgorithmSecondaryFamilyCryptoPrimitiveServiceCryptoDriverObject代码使用Random Generate执行流程配置job函数使用示例总结前言 之前介绍过AES-CMAC算法的配置,…

Windows 与 Windows Server 2022环境下如何开启远程桌面

文章目录 前言Windows 环境下如何开启远程桌面控制功能Windows Server 环境下如何开启远程桌面 前言 我这边是客户需要搭建一套备份系统&#xff0c;整体的系统流程是这样的&#xff1a;客户的笔记本或者其他PC工具可以自由访问到我司搭建的服务器平台并进行文件传输&#xff…

【C++】开源:地图投影和坐标转换proj库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍地图投影和坐标转换proj库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&a…

vue中的watch和$watch的用法实际场景和区别

watch&#xff08;组件选项&#xff09; watch 是Vue组件的一个选项&#xff0c;它允许你定义一些监听器&#xff0c;这些监听器会在组件的响应式数据变化时调用。它主要用于组件内部的数据监听。 实际场景&#xff1a; 当组件内部的数据变化时&#xff0c;需要执行一些操作&…

5款极其强大的大模型文生图工具!

文生图技术是一种基于深度学习的技术&#xff0c;可以根据自然语言描述生成相应的高品质图像。 下面介绍几个目前市场上比较优秀的工具或网站&#xff0c;并制作一张男性的白袍巫师图来比较。 针对大模型和AIGC技术趋势、AIGC 算法项目落地经验分享、新手如何入门算法岗、该如…

el-scrollbar组件使用踩坑记录

一、el-scrollbar和浏览器原生滚动条一起出现 问题描述 el-scrollbar组件主要用于替换浏览器原生导航条。如下图所示&#xff0c;使用el-scrollbar组件后&#xff0c;发现未能成功替换掉浏览器原生导航条&#xff0c;二者同时出现。 引发原因 el-scrollbar的height属性如果…

前端根据目录生成模块化路由routes

根据约定大于配置的逻辑&#xff0c;如果目录结构约定俗成&#xff0c;前端是可以根据目录结构动态生成路由所需要的 route 结构的&#xff0c;这个过程是要在编译时 进行&#xff0c;生成需要的代码&#xff0c;保证运行时的代码正确即可 主流的打包工具都有对应的方法读取文…

【不容错过】可灵AI重磅更新:画质升级,运镜控制,首尾帧自定义,还有30万创作激励奖金!

还记得最近在各大平台肆虐的老照片变成视频吗&#xff0c;就是用快手的可灵AI做的&#xff0c;今天可灵又迎来了一次重大更新。 「电脑端上线了」 之前一直用其他工具生的图片还需要保存到手机上&#xff0c;再用可灵来生成视频&#xff0c;很多人都能感受到手机操作不太方便&…

Vue3项目给ElementPlus设置中文的两个方案

介绍 在Vue3项目将ElementPlus切换为中文 1、在App.vue的文件中修改 <template><el-config-provider :locale"zhCn"><router-view></router-view></el-config-provider> </template><script lang"ts" setup>im…

elasticsearch源码分析-04集群状态发布

集群状态发布 cluster模块封装了在集群层面执行的任务&#xff0c;如集群健康、集群级元信息管理、分片分配给节点、节点管理等。集群任务执行之后可能会产生新的集群状态&#xff0c;如果产生新的集群状态主节点会将集群状态广播给其他节点。 集群状态封装在clusterState中&…

Linux下网络编程-简易poll服务器和客户端

Linux下网络编程-简易poll服务器和客户端 简易poll服务器: //编译命令&#xff1a;g -g xxx.cpp -o xxx #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h…

ionic7 使用Capacitor打包 apk 之后,设置网络权限

报错处理 在打包的时候遇到过几个问题&#xff0c;这里记录下来两个 Visual Studio Code运行ionic build出错显示ionic : 无法加载文件 ionic 项目通过 android studio 打开报错 capacitor.settings.gradle 文件不存在 ionic7 项目初始化以及打包 apk 这篇文章讲到了如果安装…

2-25 基于matlab的语音信号降噪处理算法

基于matlab的语音信号降噪处理算法&#xff0c;采用谱减法&#xff0c;可以对强噪声背景下的语音信号进行去噪。输入原始信号及加噪信号&#xff0c;对加噪信号进行降噪&#xff0c;并提高信噪比。程序已调通&#xff0c;可直接运行。 2-25 语音信号降噪处理算法 谱减法 - 小红…

餐饮管理系统-计算机毕业设计源码43667

餐饮管理系统 摘 要 在信息化、数字化的时代背景下&#xff0c;餐饮行业面临着前所未有的挑战与机遇。为了提高运营效率、优化顾客体验&#xff0c;餐饮企业亟需一套高效、稳定且灵活的管理系统来支撑其日常运营。基于Spring Boot的餐饮管理系统应运而生&#xff0c;成为餐饮行…

mac 安装nvm的教程

在macOS上切换Node.js版本&#xff0c;可以使用nvm&#xff08;Node Version Manager&#xff09;。以下是安装nvm和切换Node.js版本的步骤&#xff1a; 安装nvm 下载方式 终端复制输入&#xff1a; curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.…

教育科研行业算力池化解决方案

教育科研行业算力池化解决方案 解决方案概述 1. 算力资源集中管理 建立校级算力中心:通过信息中心建设校级的算力中心,将分散在各学院或科研团队的算力资源集中管理。利用算力池化技术:采用先进的算力池化技术(如趋动科技的OrionX),将物理GPU资源切分为多个虚拟GPU(vGP…

GIT - 一条命令把项目更新到远程仓库

前言 阅读本文大概需要1分钟 说明 更新项目到远程仓库只需要执行一条命令&#xff0c;相当的简便 步骤 第一步 编辑配置文件 vim ~/.bash_profile第二步 写入配置文件 gsh() {local msg"${1:-ADD COMMIT PUSH}"git add . && git commit -m "$m…

mipi协议中的calibration和scramble模式

在MIPI(Mobile Industry Processor Interface)协议中,calibration(校准)和scramble(加扰)模式是两个重要的特性,它们分别用于优化数据传输的准确性和减少信号干扰。以下是对这两个模式的详细解析: Calibration(校准)模式 目的与功能: 校准模式主要用于优化和补偿由…

数据库关键字执行顺序

在 SQL 中&#xff0c;关键字的执行顺序通常如下&#xff1a; FROM&#xff1a;确定要查询的表或数据源&#xff0c;并执行表之间的连接操作&#xff08;如 INNER JOIN、LEFT JOIN 等&#xff09;。FROM 子句执行顺序为从后往前、从右到左。ON&#xff1a;应用连接条件&#xf…