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.pswp.cn/diannao/41804.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/41804.shtml
英文地址,請注明出處:http://en.pswp.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…