Transformers documentation
GPT-J
Model ini disumbangkan ke Hugging Face Transformers pada 2021-08-31.
GPT-J
Ikhtisar
Model GPT-J dirilis di repositori kingoflolz/mesh-transformer-jax oleh Ben Wang dan Aran Komatsuzaki. Ini adalah model bahasa kausal serupa GPT-2 yang dilatih pada dataset the Pile.
Model ini disumbangkan oleh Stella Biderman.
Tips penggunaan
- Untuk memuat GPT-J dalam float32, dibutuhkan setidaknya 2x ukuran model
RAM: 1x untuk bobot awal dan 1x lagi untuk memuat checkpoint. Jadi untuk GPT-J, dibutuhkan setidaknya 48GB
RAM hanya untuk memuat model. Untuk mengurangi penggunaan RAM, ada beberapa opsi. Argumen
dtypedapat digunakan untuk menginisialisasi model dalam presisi setengah pada perangkat CUDA saja. Ada juga cabang fp16 yang menyimpan bobot fp16, yang dapat digunakan untuk meminimalkan penggunaan RAM lebih lanjut:
from transformers import GPTJForCausalLM
import torch
model = GPTJForCausalLM.from_pretrained(
"EleutherAI/gpt-j-6B",
revision="float16",
device_map="auto",
)Model ini seharusnya muat di GPU 16GB untuk inferensi. Untuk pelatihan/fine-tuning, dibutuhkan RAM GPU yang jauh lebih besar. Optimizer Adam, misalnya, membuat empat salinan model: model, gradien, rata-rata gradien, dan rata-rata kuadrat gradien. Jadi, dibutuhkan memori GPU setidaknya 4x ukuran model, bahkan dengan presisi campuran karena pembaruan gradien dilakukan dalam fp32. Ini belum termasuk aktivasi dan batch data, yang akan membutuhkan RAM GPU tambahan. Oleh karena itu, sebaiknya jelajahi solusi seperti DeepSpeed untuk melatih/melakukan fine-tuning model. Opsi lain adalah menggunakan codebase asli untuk melatih/melakukan fine-tuning model di TPU dan kemudian mengonversi model ke format Transformers untuk inferensi. Instruksi untuk itu dapat ditemukan di sini
Meskipun matriks embedding memiliki ukuran 50400, hanya 50257 entri yang digunakan oleh tokenizer GPT-2. Token-token tambahan ini ditambahkan demi efisiensi pada TPU. Untuk menghindari ketidakcocokan antara ukuran matriks embedding dan ukuran vocab, tokenizer untuk GPT-J memuat 143 token tambahan
<|extratoken_1|>...<|extratoken_143|>, sehinggavocab_sizedari tokenizer juga menjadi 50400.
Contoh penggunaan
Metode generate() dapat digunakan untuk menghasilkan teks menggunakan model GPT-J.
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("EleutherAI/gpt-j-6B", device_map="auto")
tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-j-6B")
prompt = (
"In a shocking finding, scientists discovered a herd of unicorns living in a remote, "
"previously unexplored valley, in the Andes Mountains. Even more surprising to the "
"researchers was the fact that the unicorns spoke perfect English."
)
input_ids = tokenizer(prompt, return_tensors="pt").to(model.device).input_ids
gen_tokens = model.generate(
input_ids,
do_sample=True,
temperature=0.9,
max_length=100,
)
gen_text = tokenizer.batch_decode(gen_tokens)[0]…atau dalam presisi float16:
from transformers import AutoTokenizer, GPTJForCausalLM
model = GPTJForCausalLM.from_pretrained("EleutherAI/gpt-j-6B", device_map="auto")
tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-j-6B")
prompt = (
"In a shocking finding, scientists discovered a herd of unicorns living in a remote, "
"previously unexplored valley, in the Andes Mountains. Even more surprising to the "
"researchers was the fact that the unicorns spoke perfect English."
)
input_ids = tokenizer(prompt, return_tensors="pt").input_ids.to(model.device)
gen_tokens = model.generate(
input_ids,
do_sample=True,
temperature=0.9,
max_length=100,
)
gen_text = tokenizer.batch_decode(gen_tokens)[0]Sumber daya
Daftar sumber resmi Hugging Face dan komunitas (ditandai dengan 🌎) untuk membantu Anda memulai dengan GPT-J. Jika Anda tertarik untuk mengirimkan sumber agar disertakan di sini, silakan buka Pull Request dan kami akan meninjaunya! Sumber tersebut sebaiknya mendemonstrasikan sesuatu yang baru, bukan menduplikasi sumber yang sudah ada.
- Deskripsi GPT-J.
- Blog tentang cara Deploy GPT-J 6B untuk inferensi menggunakan Hugging Face Transformers dan Amazon SageMaker.
- Blog tentang cara mengakselerasi inferensi GPT-J dengan DeepSpeed-Inference pada GPU.
- Sebuah artikel blog yang memperkenalkan GPT-J-6B: 6B JAX-Based Transformer. 🌎
- Notebook untuk GPT-J-6B Inference Demo. 🌎
- Notebook lain yang mendemonstrasikan Inference dengan GPT-J-6B.
- Bab Modeling bahasa kausal dari Kursus 🤗 Hugging Face.
- GPTJForCausalLM didukung oleh notebook ini.
Sumber daya dokumentasi
- Panduan tugas klasifikasi teks
- Panduan tugas question answering
- Panduan tugas pemodelan bahasa kausal
GPTJConfig
kelas transformers.GPTJConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonevocab_size: int = 50400n_positions: int = 2048n_embd: int = 4096n_layer: int = 28n_head: int = 16rotary_dim: int = 64n_inner: int | None = Noneactivation_function: str = 'gelu_new'resid_pdrop: float | int = 0.0embd_pdrop: float | int = 0.0attn_pdrop: float | int = 0.0layer_norm_epsilon: float = 1e-05initializer_range: float = 0.02use_cache: bool = Truebos_token_id: int | None = 50256eos_token_id: int | list[int] | None = 50256pad_token_id: int | None = Nonetie_word_embeddings: bool = False )
Parameter
- vocab_size (
int, opsional, default50400) — Ukuran kosakata model. Menentukan jumlah token berbeda yang dapat direpresentasikan olehinput_ids. - n_positions (
int, opsional, default2048) — Panjang maksimum urutan yang mungkin digunakan dengan model ini. - n_embd (
int, opsional, default4096) — Dimensi dari embeddings dan hidden states. - n_layer (
int, opsional, default28) — Jumlah lapisan tersembunyi dalam decoder Transformer. - n_head (
int, opsional, default16) — Jumlah kepala perhatian untuk setiap lapisan perhatian dalam decoder Transformer. - rotary_dim (
int, opsional, defaultnya 64) — Jumlah dimensi dalam embedding yang diterapkan Rotary Position Embedding. - n_inner (
int, opsional) — Dimensi dari representasi MLP. - activation_function (
str, opsional, defaultnyagelu_new) — Fungsi aktivasi non-linear (fungsi atau string) di decoder. Misalnya,"gelu","relu","silu", dan sebagainya. - resid_pdrop (
Union[float, int], opsional, default0.0) — Probabilitas dropout untuk semua lapisan fully connected di embeddings, encoder, dan pooler. - embd_pdrop (
Union[float, int], opsional, default0.0) — Rasio dropout untuk embedding. - attn_pdrop (
Union[float, int], opsional, default0.0) — Rasio dropout untuk probabilitas perhatian. - layer_norm_epsilon (
float, opsional, defaultnya1e-05) — Epsilon yang digunakan oleh lapisan normalisasi lapisan. - initializer_range (
float, opsional, defaultnya0.02) — Standar deviasi dari truncated_normal_initializer untuk menginisialisasi semua matriks bobot. - use_cache (
bool, opsional, defaultnyaTrue) — Apakah model harus mengembalikan perhatian kunci/nilai terakhir (tidak digunakan oleh semua model). Hanya relevan jikaconfig.is_decoder=Trueatau ketika model adalah model generatif yang hanya decoder. - bos_token_id (
int, opsional, default50256) — ID token yang digunakan untuk penanda awal aliran (beginning-of-stream) dalam kosakata. - eos_token_id (
Union[int, list[int]], opsional, default50256) — ID token yang digunakan untuk end-of-stream dalam kosakata. - pad_token_id (
int, opsional) — ID token yang digunakan untuk padding dalam kosakata. - tie_word_embeddings (
bool, opsional, defaultFalse) — Apakah akan mengikat bobot embedding sesuai dengan pemetaantied_weights_keysmodel.
Ini adalah kelas konfigurasi untuk menyimpan konfigurasi dari GPTJModel. Kelas ini digunakan untuk membuat instans model Gptj berdasarkan argumen yang ditentukan, yang mendefinisikan arsitektur model. Membuat instans konfigurasi dengan nilai bawaan akan menghasilkan konfigurasi yang serupa dengan konfigurasi dari EleutherAI/gpt-j-6B
Objek konfigurasi mewarisi dari PreTrainedConfig dan dapat digunakan untuk mengontrol output model. Baca dokumentasi dari PreTrainedConfig untuk informasi lebih lanjut.
GPTJModel
kelas transformers.GPTJModel
< source >( config: GPTJConfig )
Parameter
- config (GPTJConfig) — Kelas konfigurasi model dengan semua parameter model. Inisialisasi dengan file konfigurasi tidak memuat bobot yang terkait dengan model, hanya konfigurasinya. Lihat metode from_pretrained() untuk memuat bobot model.
Model Gptj polos yang menghasilkan hidden-states mentah tanpa head spesifik di atasnya.
Model ini mewarisi dari PreTrainedModel. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka untuk semua model (seperti mengunduh atau menyimpan, mengubah ukuran embedding input, memangkas kepala, dll.)
Model ini juga merupakan subclass dari torch.nn.Module PyTorch. Gunakan sebagai PyTorch Module biasa dan merujuk ke dokumentasi PyTorch untuk semua hal yang berkaitan dengan penggunaan dan perilaku umum.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneattention_mask: typing.Optional[torch.Tensor] = Nonetoken_type_ids: typing.Optional[torch.LongTensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneuse_cache: bool | None = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → BaseModelOutputWithPast or tuple(torch.Tensor)
Parameter
- input_ids (
torch.LongTensordengan bentuk(batch_size, sequence_length), opsional) — Indeks token dari urutan input dalam kosakata. Padding akan diabaikan secara default.Indeks dapat diperoleh menggunakan AutoTokenizer. Lihat PreTrainedTokenizer.encode() dan PreTrainedTokenizer.call() untuk detailnya.
- past_key_values (
~cache_utils.Cache, opsional) — Hidden-states yang sudah dihitung sebelumnya (key dan values di blok self-attention dan di blok cross-attention) yang dapat digunakan untuk mempercepat decoding berurutan. Ini biasanya terdiri daripast_key_valuesyang dikembalikan oleh model pada tahap decoding sebelumnya, ketikause_cache=Trueatauconfig.use_cache=True.Hanya instance Cache yang diizinkan sebagai input, lihat panduan kv cache kami. Jika tidak ada
past_key_valuesyang diteruskan, DynamicCache akan diinisialisasi secara default.Model akan menghasilkan format cache yang sama dengan yang diberikan sebagai input.
Jika
past_key_valuesdigunakan, pengguna diharapkan hanya memasukkaninput_idsyang belum diproses (yang tidak memiliki state past key value yang diberikan ke model ini) dengan bentuk(batch_size, unprocessed_length)alih-alih semuainput_idsdengan bentuk(batch_size, sequence_length). - attention_mask (
torch.Tensordengan bentuk(batch_size, sequence_length), opsional) — Mask untuk menghindari eksekusi attention pada indeks token padding. Nilai mask dipilih dari[0, 1]:- 1 untuk token yang tidak dimasker,
- 0 untuk token yang dimasker.
- token_type_ids (
torch.LongTensordengan bentuk(batch_size, sequence_length), opsional) — Indeks token segmen untuk menunjukkan bagian pertama dan kedua dari input. Indeks dipilih dari[0, 1]:- 0 sesuai dengan token sentence A,
- 1 sesuai dengan token sentence B.
- position_ids (
torch.LongTensordengan bentuk(batch_size, sequence_length), opsional) — Indeks posisi token dari setiap urutan input dalam position embeddings. Dipilih dalam rentang[0, config.n_positions - 1]. - inputs_embeds (
torch.Tensordengan bentuk(batch_size, sequence_length, hidden_dim), opsional) — Secara opsional, alih-alih meneruskaninput_ids, Anda dapat memilih untuk langsung meneruskan representasi tertanam. Hal ini berguna jika Anda ingin memiliki kendali lebih atas cara mengonversi indeks input_ids menjadi vektor terkait, dibandingkan dengan matriks pencarian penanaman internal model. - use_cache (
bool, opsional) — Jika diset keTrue, state kunci-nilaipast_key_valuesakan dikembalikan dan dapat digunakan untuk mempercepat decoding (lihatpast_key_values). - output_attentions (
bool, opsional) — Apakah akan mengembalikan tensor attentions dari semua lapisan attention. Lihatattentionsdi bawah tensor yang dikembalikan untuk detail lebih lanjut. - output_hidden_states (
bool, opsional) — Apakah akan mengembalikan hidden states dari semua lapisan. Lihathidden_statesdi bawah tensor yang dikembalikan untuk detail lebih lanjut. - return_dict (
bool, opsional) — Apakah akan mengembalikan ModelOutput alih-alih tuple biasa.
Mengembalikan
BaseModelOutputWithPast atau tuple(torch.Tensor)
A BaseModelOutputWithPast atau tuple dari
torch.Tensor (jika return_dict=False dilewatkan atau ketika config.return_dict=False) yang terdiri dari berbagai
elemen tergantung pada konfigurasi (GPTJConfig) dan input.
Metode forward dari GPTJModel menimpa metode khusus __call__.
Meskipun resep untuk forward pass perlu didefinisikan di dalam fungsi ini, sebaiknya panggil instance
Modulesetelahnya alih-alih fungsi ini, karena yang pertama menangani langkah-langkah pra-pemrosesan dan pasca-pemrosesan, sedangkan yang kedua mengabaikannya secara diam-diam.
last_hidden_state (
torch.Tensordengan bentuk(batch_size, sequence_length, hidden_size)) — Urutan hidden-states pada keluaran lapisan terakhir model.Jika
past_key_valuesdigunakan, hanya hidden-state terakhir dari sekuens dengan bentuk(batch_size, 1, hidden_size)yang dioutput.past_key_values (
Cache, opsional, dikembalikan saatuse_cache=Truedilewatkan atau saatconfig.use_cache=True) — Ini adalah instance Cache. Untuk detail lebih lanjut, lihat panduan kv cache kami.Berisi hidden-states yang telah dihitung sebelumnya (key dan values di blok self-attention, dan secara opsional jika
config.is_encoder_decoder=Truedi blok cross-attention) yang dapat digunakan (lihat inputpast_key_values) untuk mempercepat decoding berurutan.hidden_states (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_hidden_states=Truedilewatkan atau saatconfig.output_hidden_states=True) — Tuple daritorch.Tensor(satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk(batch_size, sequence_length, hidden_size).Hidden-states model pada output setiap layer ditambah output embedding awal yang opsional.
attentions (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_attentions=Truedilewatkan atau saatconfig.output_attentions=True) — Tuple daritorch.Tensor(satu untuk setiap layer) dengan bentuk(batch_size, num_heads, sequence_length, sequence_length).Bobot perhatian setelah softmax perhatian, digunakan untuk menghitung rata-rata berbobot di kepala perhatian diri (self-attention).
GPTJForCausalLM
kelas transformers.GPTJForCausalLM
< source >( config: GPTJConfig )
Parameter
- config (GPTJConfig) — Kelas konfigurasi model dengan semua parameter model. Inisialisasi dengan file konfigurasi tidak memuat bobot yang terkait dengan model, hanya konfigurasinya. Lihat metode from_pretrained() untuk memuat bobot model.
Transformer Model GPT-J dengan kepala pemodelan bahasa di atasnya.
Model ini mewarisi dari PreTrainedModel. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka untuk semua model (seperti mengunduh atau menyimpan, mengubah ukuran embedding input, memangkas kepala, dll.)
Model ini juga merupakan subclass dari torch.nn.Module PyTorch. Gunakan sebagai PyTorch Module biasa dan merujuk ke dokumentasi PyTorch untuk semua hal yang berkaitan dengan penggunaan dan perilaku umum.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneattention_mask: typing.Optional[torch.Tensor] = Nonetoken_type_ids: typing.Optional[torch.LongTensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneuse_cache: bool | None = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = Nonelogits_to_keep: typing.Union[int, torch.Tensor] = 0**kwargs ) → CausalLMOutputWithPast or tuple(torch.Tensor)
Parameter
- input_ids (
torch.LongTensordengan bentuk(batch_size, sequence_length), opsional) — Indeks token dari urutan input dalam kosakata. Padding akan diabaikan secara default.Indeks dapat diperoleh menggunakan AutoTokenizer. Lihat PreTrainedTokenizer.encode() dan PreTrainedTokenizer.call() untuk detailnya.
- past_key_values (
~cache_utils.Cache, opsional) — Hidden-states yang sudah dihitung sebelumnya (key dan values di blok self-attention dan di blok cross-attention) yang dapat digunakan untuk mempercepat decoding berurutan. Ini biasanya terdiri daripast_key_valuesyang dikembalikan oleh model pada tahap decoding sebelumnya, ketikause_cache=Trueatauconfig.use_cache=True.Hanya instance Cache yang diizinkan sebagai input, lihat panduan kv cache kami. Jika tidak ada
past_key_valuesyang diteruskan, DynamicCache akan diinisialisasi secara default.Model akan menghasilkan format cache yang sama dengan yang diberikan sebagai input.
Jika
past_key_valuesdigunakan, pengguna diharapkan hanya memasukkaninput_idsyang belum diproses (yang tidak memiliki state past key value yang diberikan ke model ini) dengan bentuk(batch_size, unprocessed_length)alih-alih semuainput_idsdengan bentuk(batch_size, sequence_length). - attention_mask (
torch.Tensordengan bentuk(batch_size, sequence_length), opsional) — Mask untuk menghindari eksekusi attention pada indeks token padding. Nilai mask dipilih dari[0, 1]:- 1 untuk token yang tidak dimasker,
- 0 untuk token yang dimasker.
- token_type_ids (
torch.LongTensordengan bentuk(batch_size, sequence_length), opsional) — Indeks token segmen untuk menunjukkan bagian pertama dan kedua dari input. Indeks dipilih dari[0, 1]:- 0 sesuai dengan token sentence A,
- 1 sesuai dengan token sentence B.
- position_ids (
torch.LongTensordengan bentuk(batch_size, sequence_length), opsional) — Indeks posisi token dari setiap urutan input dalam position embeddings. Dipilih dalam rentang[0, config.n_positions - 1]. - inputs_embeds (
torch.Tensordengan bentuk(batch_size, sequence_length, hidden_dim), opsional) — Secara opsional, alih-alih meneruskaninput_ids, Anda dapat memilih untuk langsung meneruskan representasi tertanam. Hal ini berguna jika Anda ingin memiliki kendali lebih atas cara mengonversi indeks input_ids menjadi vektor terkait, dibandingkan dengan matriks pencarian penanaman internal model. - labels (
torch.LongTensordengan bentuk(batch_size, sequence_length), opsional) — Label untuk pemodelan bahasa. Perhatikan bahwa label digeser di dalam model, yaitu Anda dapat mengaturlabels = input_idsIndeks dipilih dalam[-100, 0, ..., config.vocab_size]Semua label yang diatur ke-100diabaikan (dipertahankan), loss hanya dihitung untuk label dalam[0, ..., config.vocab_size] - use_cache (
bool, opsional) — Jika diset keTrue, state kunci-nilaipast_key_valuesakan dikembalikan dan dapat digunakan untuk mempercepat decoding (lihatpast_key_values). - output_attentions (
bool, opsional) — Apakah akan mengembalikan tensor attentions dari semua lapisan attention. Lihatattentionsdi bawah tensor yang dikembalikan untuk detail lebih lanjut. - output_hidden_states (
bool, opsional) — Apakah akan mengembalikan hidden states dari semua lapisan. Lihathidden_statesdi bawah tensor yang dikembalikan untuk detail lebih lanjut. - return_dict (
bool, opsional) — Apakah akan mengembalikan ModelOutput alih-alih tuple biasa. - logits_to_keep (
Union[int, torch.Tensor], opsional, default0) — Jika berupaint, hitung logits untuklogits_to_keeptoken terakhir. Jika0, hitung logits untuk semuainput_ids(kasus khusus). Hanya logits token terakhir yang diperlukan untuk generasi, dan menghitungnya hanya untuk token tersebut dapat menghemat memori, yang menjadi cukup signifikan untuk urutan panjang atau ukuran kosakata besar. Jika berupatorch.Tensor, harus 1D yang sesuai dengan indeks yang akan dipertahankan pada dimensi panjang urutan. Ini berguna saat menggunakan format tensor terpadu (satu dimensi untuk batch dan panjang urutan).
Mengembalikan
CausalLMOutputWithPast atau tuple(torch.Tensor)
A CausalLMOutputWithPast atau tuple dari
torch.Tensor (jika return_dict=False dilewatkan atau ketika config.return_dict=False) yang terdiri dari berbagai
elemen tergantung pada konfigurasi (GPTJConfig) dan input.
Metode forward dari GPTJForCausalLM menimpa metode khusus __call__.
Meskipun resep untuk forward pass perlu didefinisikan di dalam fungsi ini, sebaiknya panggil instance
Modulesetelahnya alih-alih fungsi ini, karena yang pertama menangani langkah-langkah pra-pemrosesan dan pasca-pemrosesan, sedangkan yang kedua mengabaikannya secara diam-diam.
loss (
torch.Tensordengan bentuk(1,), opsional, dikembalikan saatlabelsdisediakan) — Loss pemodelan bahasa (untuk prediksi token berikutnya).logits (
torch.Tensordengan bentuk(batch_size, sequence_length, config.vocab_size)) — Skor prediksi dari kepala pemodelan bahasa (skor untuk setiap token kosakata sebelum SoftMax).past_key_values (
Cache, opsional, dikembalikan saatuse_cache=Truedilewatkan atau saatconfig.use_cache=True) — Ini adalah instance Cache. Untuk detail lebih lanjut, lihat panduan kv cache kami.Berisi hidden-states yang telah dihitung sebelumnya (key dan values di blok self-attention) yang dapat digunakan (lihat input
past_key_values) untuk mempercepat decoding berurutan.hidden_states (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_hidden_states=Truedilewatkan atau saatconfig.output_hidden_states=True) — Tuple daritorch.Tensor(satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk(batch_size, sequence_length, hidden_size).Hidden-states model pada output setiap layer ditambah output embedding awal yang opsional.
attentions (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_attentions=Truedilewatkan atau saatconfig.output_attentions=True) — Tuple daritorch.Tensor(satu untuk setiap layer) dengan bentuk(batch_size, num_heads, sequence_length, sequence_length).Bobot perhatian setelah softmax perhatian, digunakan untuk menghitung rata-rata berbobot di kepala perhatian diri (self-attention).
GPTJForSequenceClassification
kelas transformers.GPTJForSequenceClassification
< source >( config: GPTJConfig )
Parameter
- config (GPTJConfig) — Kelas konfigurasi model dengan semua parameter model. Inisialisasi dengan file konfigurasi tidak memuat bobot yang terkait dengan model, hanya konfigurasinya. Lihat metode from_pretrained() untuk memuat bobot model.
Model transformer GPT-J dengan kepala klasifikasi urutan di atasnya (lapisan linear).
GPTJForSequenceClassification menggunakan token terakhir untuk melakukan klasifikasi, seperti yang dilakukan oleh model kausal lainnya ( mis. GPT, GPT-2, GPT-Neo).
Karena melakukan klasifikasi pada token terakhir, ia perlu mengetahui posisi token terakhir. Jika pad_token_id didefinisikan dalam konfigurasi, ia menemukan token terakhir yang bukan token padding di setiap baris. Jika
tidak ada pad_token_id yang didefinisikan, ia hanya mengambil nilai terakhir di setiap baris batch. Karena tidak dapat menebak token
padding ketika inputs_embeds dilewatkan alih-alih input_ids, ia melakukan hal yang sama (mengambil nilai terakhir di
setiap baris batch).
Model ini mewarisi dari PreTrainedModel. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka untuk semua model (seperti mengunduh atau menyimpan, mengubah ukuran embedding input, memangkas kepala, dll.)
Model ini juga merupakan subclass dari torch.nn.Module PyTorch. Gunakan sebagai PyTorch Module biasa dan merujuk ke dokumentasi PyTorch untuk semua hal yang berkaitan dengan penggunaan dan perilaku umum.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneattention_mask: typing.Optional[torch.Tensor] = Nonetoken_type_ids: typing.Optional[torch.LongTensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneuse_cache: bool | None = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → SequenceClassifierOutputWithPast or tuple(torch.Tensor)
Parameter
- input_ids (
torch.LongTensordengan bentuk(batch_size, sequence_length), opsional) — Indeks token dari urutan input dalam kosakata. Padding akan diabaikan secara default.Indeks dapat diperoleh menggunakan AutoTokenizer. Lihat PreTrainedTokenizer.encode() dan PreTrainedTokenizer.call() untuk detailnya.
- past_key_values (
~cache_utils.Cache, opsional) — Hidden-states yang sudah dihitung sebelumnya (key dan values di blok self-attention dan di blok cross-attention) yang dapat digunakan untuk mempercepat decoding berurutan. Ini biasanya terdiri daripast_key_valuesyang dikembalikan oleh model pada tahap decoding sebelumnya, ketikause_cache=Trueatauconfig.use_cache=True.Hanya instance Cache yang diizinkan sebagai input, lihat panduan kv cache kami. Jika tidak ada
past_key_valuesyang diteruskan, DynamicCache akan diinisialisasi secara default.Model akan menghasilkan format cache yang sama dengan yang diberikan sebagai input.
Jika
past_key_valuesdigunakan, pengguna diharapkan hanya memasukkaninput_idsyang belum diproses (yang tidak memiliki state past key value yang diberikan ke model ini) dengan bentuk(batch_size, unprocessed_length)alih-alih semuainput_idsdengan bentuk(batch_size, sequence_length). - attention_mask (
torch.Tensordengan bentuk(batch_size, sequence_length), opsional) — Mask untuk menghindari eksekusi attention pada indeks token padding. Nilai mask dipilih dari[0, 1]:- 1 untuk token yang tidak dimasker,
- 0 untuk token yang dimasker.
- token_type_ids (
torch.LongTensordengan bentuk(batch_size, sequence_length), opsional) — Indeks token segmen untuk menunjukkan bagian pertama dan kedua dari input. Indeks dipilih dari[0, 1]:- 0 sesuai dengan token sentence A,
- 1 sesuai dengan token sentence B.
- position_ids (
torch.LongTensordengan bentuk(batch_size, sequence_length), opsional) — Indeks posisi token dari setiap urutan input dalam position embeddings. Dipilih dalam rentang[0, config.n_positions - 1]. - inputs_embeds (
torch.Tensordengan bentuk(batch_size, sequence_length, hidden_dim), opsional) — Secara opsional, alih-alih meneruskaninput_ids, Anda dapat memilih untuk langsung meneruskan representasi tertanam. Hal ini berguna jika Anda ingin memiliki kendali lebih atas cara mengonversi indeks input_ids menjadi vektor terkait, dibandingkan dengan matriks pencarian penanaman internal model. - labels (
torch.LongTensordengan bentuk(batch_size,), opsional) — Label untuk menghitung loss klasifikasi/regresi urutan. Indeks harus berada dalam[0, ..., config.num_labels - 1]. Jikaconfig.num_labels == 1, loss regresi dihitung (Mean-Square loss). Jikaconfig.num_labels > 1, loss klasifikasi dihitung (Cross-Entropy). - use_cache (
bool, opsional) — Jika diset keTrue, state kunci-nilaipast_key_valuesakan dikembalikan dan dapat digunakan untuk mempercepat decoding (lihatpast_key_values). - output_attentions (
bool, opsional) — Apakah akan mengembalikan tensor attentions dari semua lapisan attention. Lihatattentionsdi bawah tensor yang dikembalikan untuk detail lebih lanjut. - output_hidden_states (
bool, opsional) — Apakah akan mengembalikan hidden states dari semua lapisan. Lihathidden_statesdi bawah tensor yang dikembalikan untuk detail lebih lanjut. - return_dict (
bool, opsional) — Apakah akan mengembalikan ModelOutput alih-alih tuple biasa.
Mengembalikan
SequenceClassifierOutputWithPast atau tuple(torch.Tensor)
SequenceClassifierOutputWithPast atau tuple dari
torch.Tensor (jika return_dict=False diteruskan atau ketika config.return_dict=False) yang terdiri dari berbagai
elemen tergantung pada konfigurasi (GPTJConfig) dan input.
Metode forward dari GPTJForSequenceClassification menimpa metode khusus __call__.
Meskipun resep untuk forward pass perlu didefinisikan di dalam fungsi ini, sebaiknya panggil instance
Modulesetelahnya alih-alih fungsi ini, karena yang pertama menangani langkah-langkah pra-pemrosesan dan pasca-pemrosesan, sedangkan yang kedua mengabaikannya secara diam-diam.
loss (
torch.Tensordengan bentuk(1,), opsional, dikembalikan saatlabelsdisediakan) — Loss klasifikasi (atau regresi jika config.num_labels==1).logits (
torch.Tensordengan bentuk(batch_size, config.num_labels)) — Skor klasifikasi (atau regresi jika config.num_labels==1) (sebelum SoftMax).past_key_values (
Cache, opsional, dikembalikan saatuse_cache=Truedilewatkan atau saatconfig.use_cache=True) — Ini adalah instance Cache. Untuk detail lebih lanjut, lihat panduan kv cache kami.Berisi hidden-states yang telah dihitung sebelumnya (key dan values di blok self-attention) yang dapat digunakan (lihat input
past_key_values) untuk mempercepat decoding berurutan.hidden_states (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_hidden_states=Truedilewatkan atau saatconfig.output_hidden_states=True) — Tuple daritorch.Tensor(satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk(batch_size, sequence_length, hidden_size).Hidden-states model pada output setiap layer ditambah output embedding awal yang opsional.
attentions (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_attentions=Truedilewatkan atau saatconfig.output_attentions=True) — Tuple daritorch.Tensor(satu untuk setiap layer) dengan bentuk(batch_size, num_heads, sequence_length, sequence_length).Bobot perhatian setelah softmax perhatian, digunakan untuk menghitung rata-rata berbobot di kepala perhatian diri (self-attention).
Contoh klasifikasi label tunggal:
>>> import torch
>>> from transformers import AutoTokenizer, GPTJForSequenceClassification
>>> tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-j-6B")
>>> model = GPTJForSequenceClassification.from_pretrained("EleutherAI/gpt-j-6B")
>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> predicted_class_id = logits.argmax().item()
>>> model.config.id2label[predicted_class_id]
...
>>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
>>> num_labels = len(model.config.id2label)
>>> model = GPTJForSequenceClassification.from_pretrained("EleutherAI/gpt-j-6B", num_labels=num_labels)
>>> labels = torch.tensor([1])
>>> loss = model(**inputs, labels=labels).loss
>>> round(loss.item(), 2)
...Contoh klasifikasi multi-label:
>>> import torch
>>> from transformers import AutoTokenizer, GPTJForSequenceClassification
>>> tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-j-6B")
>>> model = GPTJForSequenceClassification.from_pretrained("EleutherAI/gpt-j-6B", problem_type="multi_label_classification")
>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> predicted_class_ids = torch.arange(0, logits.shape[-1])[torch.sigmoid(logits).squeeze(dim=0) > 0.5]
>>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
>>> num_labels = len(model.config.id2label)
>>> model = GPTJForSequenceClassification.from_pretrained(
... "EleutherAI/gpt-j-6B", num_labels=num_labels, problem_type="multi_label_classification"
... )
>>> labels = torch.sum(
... torch.nn.functional.one_hot(predicted_class_ids[None, :].clone(), num_classes=num_labels), dim=1
... ).to(torch.float)
>>> loss = model(**inputs, labels=labels).lossGPTJForQuestionAnswering
kelas transformers.GPTJForQuestionAnswering
< source >( config: GPTJConfig )
Parameter
- config (GPTJConfig) — Kelas konfigurasi model dengan semua parameter model. Inisialisasi dengan file konfigurasi tidak memuat bobot yang terkait dengan model, hanya konfigurasinya. Lihat metode from_pretrained() untuk memuat bobot model.
Gptj transformer dengan kepala klasifikasi span di atasnya untuk tugas tanya-jawab ekstraktif seperti
SQuAD (lapisan linear di atas keluaran hidden-states untuk menghitung span start logits dan span end logits).
Model ini mewarisi dari PreTrainedModel. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka untuk semua model (seperti mengunduh atau menyimpan, mengubah ukuran embedding input, memangkas kepala, dll.)
Model ini juga merupakan subclass dari torch.nn.Module PyTorch. Gunakan sebagai PyTorch Module biasa dan merujuk ke dokumentasi PyTorch untuk semua hal yang berkaitan dengan penggunaan dan perilaku umum.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Nonetoken_type_ids: typing.Optional[torch.LongTensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonestart_positions: typing.Optional[torch.LongTensor] = Noneend_positions: typing.Optional[torch.LongTensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → QuestionAnsweringModelOutput or tuple(torch.Tensor)
Parameter
- input_ids (
torch.LongTensordengan bentuk(batch_size, sequence_length), opsional) — Indeks token dari urutan input dalam kosakata. Padding akan diabaikan secara default.Indeks dapat diperoleh menggunakan AutoTokenizer. Lihat PreTrainedTokenizer.encode() dan PreTrainedTokenizer.call() untuk detailnya.
- attention_mask (
torch.Tensordengan bentuk(batch_size, sequence_length), opsional) — Mask untuk menghindari eksekusi attention pada indeks token padding. Nilai mask dipilih dari[0, 1]:- 1 untuk token yang tidak dimasker,
- 0 untuk token yang dimasker.
- token_type_ids (
torch.LongTensordengan bentuk(batch_size, sequence_length), opsional) — Indeks token segmen untuk menunjukkan bagian pertama dan kedua dari input. Indeks dipilih dari[0, 1]:- 0 sesuai dengan token sentence A,
- 1 sesuai dengan token sentence B.
- position_ids (
torch.LongTensordengan bentuk(batch_size, sequence_length), opsional) — Indeks posisi token dari setiap urutan input dalam position embeddings. Dipilih dalam rentang[0, config.n_positions - 1]. - inputs_embeds (
torch.Tensordengan bentuk(batch_size, sequence_length, hidden_dim), opsional) — Secara opsional, alih-alih meneruskaninput_ids, Anda dapat memilih untuk langsung meneruskan representasi tertanam. Hal ini berguna jika Anda ingin memiliki kendali lebih atas cara mengonversi indeks input_ids menjadi vektor terkait, dibandingkan dengan matriks pencarian penanaman internal model. - start_positions (
torch.LongTensordengan bentuk(batch_size,), opsional) — Label untuk posisi (indeks) awal span berlabel untuk menghitung kerugian klasifikasi token. Posisi dibatasi pada panjang sekuens (sequence_length). Posisi di luar sekuens tidak diperhitungkan dalam perhitungan kerugian. - end_positions (
torch.LongTensordengan bentuk(batch_size,), opsional) — Label untuk posisi (indeks) akhir dari span berlabel untuk menghitung kerugian klasifikasi token. Posisi dibatasi pada panjang sekuens (sequence_length). Posisi di luar sekuens tidak diperhitungkan dalam perhitungan kerugian. - output_attentions (
bool, opsional) — Apakah akan mengembalikan tensor attentions dari semua lapisan attention. Lihatattentionsdi bawah tensor yang dikembalikan untuk detail lebih lanjut. - output_hidden_states (
bool, opsional) — Apakah akan mengembalikan hidden states dari semua lapisan. Lihathidden_statesdi bawah tensor yang dikembalikan untuk detail lebih lanjut. - return_dict (
bool, opsional) — Apakah akan mengembalikan ModelOutput alih-alih tuple biasa.
Mengembalikan
QuestionAnsweringModelOutput atau tuple(torch.Tensor)
A QuestionAnsweringModelOutput atau tuple dari
torch.Tensor (jika return_dict=False dilewatkan atau ketika config.return_dict=False) yang terdiri dari berbagai
elemen tergantung pada konfigurasi (GPTJConfig) dan input.
Metode forward dari GPTJForQuestionAnswering menimpa metode khusus __call__.
Meskipun resep untuk forward pass perlu didefinisikan di dalam fungsi ini, sebaiknya panggil instance
Modulesetelahnya alih-alih fungsi ini, karena yang pertama menangani langkah-langkah pra-pemrosesan dan pasca-pemrosesan, sedangkan yang kedua mengabaikannya secara diam-diam.
loss (
torch.Tensordengan bentuk(1,), opsional, dikembalikan saatlabelsdisediakan) — Total loss ekstraksi span adalah jumlah dari Cross-Entropy untuk posisi awal dan akhir.start_logits (
torch.Tensordengan bentuk(batch_size, sequence_length)) — Skor awal span (sebelum SoftMax).end_logits (
torch.Tensordengan bentuk(batch_size, sequence_length)) — Skor akhir span (sebelum SoftMax).hidden_states (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_hidden_states=Truedilewatkan atau saatconfig.output_hidden_states=True) — Tuple daritorch.Tensor(satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk(batch_size, sequence_length, hidden_size).Hidden-states model pada output setiap layer ditambah output embedding awal yang opsional.
attentions (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_attentions=Truedilewatkan atau saatconfig.output_attentions=True) — Tuple daritorch.Tensor(satu untuk setiap layer) dengan bentuk(batch_size, num_heads, sequence_length, sequence_length).Bobot perhatian setelah softmax perhatian, digunakan untuk menghitung rata-rata berbobot di kepala perhatian diri (self-attention).
Contoh:
>>> from transformers import AutoTokenizer, GPTJForQuestionAnswering
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-j-6B")
>>> model = GPTJForQuestionAnswering.from_pretrained("EleutherAI/gpt-j-6B")
>>> question, text = "Who was Jim Henson?", "Jim Henson was a nice puppet"
>>> inputs = tokenizer(question, text, return_tensors="pt")
>>> with torch.no_grad():
... outputs = model(**inputs)
>>> answer_start_index = outputs.start_logits.argmax()
>>> answer_end_index = outputs.end_logits.argmax()
>>> predict_answer_tokens = inputs.input_ids[0, answer_start_index : answer_end_index + 1]
>>> tokenizer.decode(predict_answer_tokens, skip_special_tokens=True)
...
>>> # target is "nice puppet"
>>> target_start_index = torch.tensor([14])
>>> target_end_index = torch.tensor([15])
>>> outputs = model(**inputs, start_positions=target_start_index, end_positions=target_end_index)
>>> loss = outputs.loss
>>> round(loss.item(), 2)
...