Transformers documentation
Reformer
Model ini dipublikasikan di HF papers pada 2020-01-13 dan disumbangkan ke Hugging Face Transformers pada 2020-11-16.
Reformer
Ikhtisar
Model Reformer diusulkan dalam makalah Reformer: The Efficient Transformer oleh Nikita Kitaev, Łukasz Kaiser, dan Anselm Levskaya.
Abstrak dari makalah tersebut adalah sebagai berikut:
Model Transformer berskala besar secara rutin mencapai hasil state-of-the-art pada sejumlah tugas, tetapi melatih model-model ini dapat sangat mahal, terutama pada urutan panjang. Kami memperkenalkan dua teknik untuk meningkatkan efisiensi Transformers. Pertama, kami mengganti dot-product attention dengan attention yang menggunakan locality-sensitive hashing, mengubah kompleksitasnya dari O(L^2) menjadi O(Llog(L)), di mana L adalah panjang urutan. Selain itu, kami menggunakan lapisan residual yang dapat dibalik (reversible) alih-alih residual standar, yang memungkinkan penyimpanan aktivasi hanya sekali dalam proses pelatihan, bukan N kali, di mana N adalah jumlah lapisan. Model yang dihasilkan, yaitu Reformer, kinerjanya setara dengan model Transformer, tetapi jauh lebih hemat memori dan jauh lebih cepat pada urutan panjang.
Model ini disumbangkan oleh patrickvonplaten. Kode para penulis dapat ditemukan di sini.
Tips penggunaan
- Reformer tidak berfungsi dengan torch.nn.DataParallel karena bug di PyTorch, lihat issue #36035.
- Gunakan Axial position encoding (lihat di bawah untuk detail lebih lanjut). Ini adalah mekanisme untuk menghindari adanya matriks positional encoding yang sangat besar (ketika panjang sekuens sangat besar) dengan memfaktorkannya menjadi matriks-matriks yang lebih kecil.
- Ganti attention tradisional dengan attention LSH (local-sensitive hashing) (lihat di bawah untuk detail lebih lanjut). Ini adalah teknik untuk menghindari perhitungan produk penuh query-key di lapisan attention.
- Hindari menyimpan hasil perantara dari setiap lapisan dengan menggunakan lapisan transformer yang dapat dibalik untuk memperolehnya selama proses mundur (mengurangi residual dari input lapisan berikutnya akan mengembalikannya) atau dengan menghitung ulang untuk hasil di dalam lapisan tertentu (kurang efisien daripada menyimpannya tetapi menghemat memori).
- Hitung operasi feedforward secara per chunk, bukan pada seluruh batch.
Penkodean Posisi Aksial
Axial Positional Encodings pertama kali diimplementasikan di library trax oleh para penulis makalah model ini. Pada model yang menangani urutan input yang sangat panjang, encoding id posisi konvensional menyimpan vektor embedding berukuran yaitu config.hidden_size untuk setiap posisi $i, \ldots, n_s$, dengan yaitu config.max_embedding_size. Artinya, memiliki panjang urutan dan config.hidden_size sebesar akan menghasilkan matriks encoding posisi:
yang saja memiliki lebih dari 500 juta parameter untuk disimpan. Axial positional encodings memfaktorkan menjadi dua matriks:
dan
dengan:
Oleh karena itu, hal berikut berlaku:
Secara intuitif, ini berarti bahwa vektor posisi embedding kini merupakan komposisi dari dua vektor embedding yang difaktorkan: $x^1{k, l} + x^2{l, k}$, di mana dimensi config.max_embedding_size dari difaktorkan menjadi $k \text{ dan } l$. Desain ini memastikan bahwa setiap vektor posisi embedding unik.
Menggunakan contoh di atas lagi, axial position encoding dengan dapat mengurangi jumlah parameter secara drastis dari 500.000.000 menjadi parameter, yang berarti penggunaan memori berkurang 85%.
Dalam praktiknya, parameter config.axial_pos_embds_dim diset ke tuple yang jumlah totalnya harus sama dengan config.hidden_size dan config.axial_pos_shape diset ke tuple yang hasil perkaliannya harus sama dengan config.max_embedding_size, yang saat pelatihan harus sama dengan panjang urutan dari input_ids.
LSH Self Attention
Pada self attention Locality Sensitive Hashing (LSH), bobot proyeksi key dan query diikat (tied). Oleh karena itu, vektor embedding key dan query juga diikat. Self attention LSH menggunakan mekanisme locality sensitive hashing yang diusulkan dalam Practical and Optimal LSH for Angular Distance untuk menetapkan setiap vektor embedding key-query yang terikat ke salah satu dari config.num_buckets bucket yang mungkin. Premisnya adalah bahwa semakin “serupa” vektor embedding key-query (dalam hal cosine similarity) satu sama lain, semakin besar kemungkinan mereka ditetapkan ke bucket yang sama.
Akurasi mekanisme LSH dapat ditingkatkan dengan menaikkan config.num_hashes atau langsung menaikkan argumen num_hashes dari fungsi forward, sehingga keluaran dari LSH self attention lebih baik dalam mengaproksimasi keluaran dari “normal” full self attention. Bucket-bucket tersebut kemudian diurutkan dan dipecah menjadi chunk dari vektor embedding query key, masing-masing dengan panjang config.lsh_chunk_length. Untuk setiap chunk, vektor embedding query memperhatikan vektor key-nya (yang terikat pada dirinya sendiri) serta vektor embedding key dari config.lsh_num_chunks_before chunk tetangga sebelumnya dan config.lsh_num_chunks_after chunk tetangga berikutnya.
Untuk informasi lebih lanjut, lihat paper asli atau artikel blog yang bagus ini.
Perhatikan bahwa config.num_buckets juga dapat difaktorkan menjadi daftar $(n{\text{buckets}}^1,
n{\text{buckets}}^2)$. Dengan cara ini, alih-alih memetakan vektor embedding query key ke salah satu dari $(1,\ldots,
n{\text{buckets}})$, vektor tersebut dipetakan ke salah satu dari $(1-1,\ldots, n{\text{buckets}}^1-1, \ldots,
1-n{\text{buckets}}^2, \ldots, n{\text{buckets}}^1-n_{\text{buckets}}^2)$. Hal ini sangat penting untuk urutan yang sangat panjang guna menghemat memori.
Saat melatih model dari awal, disarankan untuk membiarkan config.num_buckets=None, sehingga nilai yang baik untuk num_buckets akan dihitung secara dinamis berdasarkan panjang sekuens. Nilai ini kemudian akan disimpan secara otomatis dalam config dan sebaiknya digunakan kembali untuk inferensi.
Dengan menggunakan LSH self attention, kompleksitas memori dan waktu dari operasi matmul query-key dapat dikurangi dari menjadi $\mathcal{O}(n_s \times \log(n_s))$, yang biasanya merupakan bottleneck memori dan waktu dalam model transformer, dengan sebagai panjang sekuens.
Perhatian Diri Lokal
Local self attention pada dasarnya adalah lapisan self attention “normal” dengan proyeksi key, query, dan value, tetapi dipecah menjadi beberapa chunk sehingga pada setiap chunk dengan panjang config.local_chunk_length, vektor embedding query hanya memperhatikan vektor embedding key di chunk tersebut serta vektor embedding key dari config.local_num_chunks_before chunk tetangga sebelumnya dan config.local_num_chunks_after chunk tetangga berikutnya.
Dengan menggunakan Local self attention, kompleksitas memori dan waktu dari operasi matmul query-key dapat dikurangi dari menjadi $\mathcal{O}(n_s \times \log(n_s))$, yang biasanya merupakan bottleneck memori dan waktu dalam model transformer, dengan sebagai panjang sekuens.
Pelatihan
Selama pelatihan, kita harus memastikan bahwa panjang urutan diatur ke nilai yang dapat dibagi oleh kelipatan persekutuan terkecil dari config.lsh_chunk_length dan config.local_chunk_length, serta bahwa parameter Axial Positional Encodings diatur dengan benar seperti yang dijelaskan di atas. Reformer sangat hemat memori sehingga model dapat dengan mudah dilatih pada urutan sepanjang 64000 token.
Untuk pelatihan, ReformerModelWithLMHead harus digunakan sebagai berikut:
input_ids = tokenizer.encode("This is a sentence from the training data", return_tensors="pt").to(model.device)
loss = model(input_ids, labels=input_ids)[0]Sumber daya
- Panduan tugas klasifikasi teks
- Panduan tugas question answering
- Panduan tugas pemodelan bahasa kausal
- Panduan tugas pemodelan bahasa tersembunyi
ReformerConfig
kelas transformers.ReformerConfig
< 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 = Noneattention_head_size: int = 64attn_layers: list[str] | tuple[str, ...] = ('local', 'lsh', 'local', 'lsh', 'local', 'lsh')axial_norm_std: float = 1.0axial_pos_embds: bool = Trueaxial_pos_shape: list[int] | tuple[int, ...] = (64, 64)axial_pos_embds_dim: list[int] | tuple[int, ...] = (64, 192)chunk_size_lm_head: int = 0eos_token_id: int | list[int] | None = 2feed_forward_size: int = 512hash_seed: int | None = Nonehidden_act: str = 'relu'hidden_dropout_prob: float | int = 0.05hidden_size: int = 256initializer_range: float = 0.02is_decoder: bool = Falselayer_norm_eps: float = 1e-12local_num_chunks_before: int = 1local_num_chunks_after: int = 0local_attention_probs_dropout_prob: float | int = 0.05local_attn_chunk_length: int = 64lsh_attn_chunk_length: int | None = 64lsh_attention_probs_dropout_prob: float | None = 0.0lsh_num_chunks_before: int | None = 1lsh_num_chunks_after: int | None = 0max_position_embeddings: int = 4096num_attention_heads: int = 12num_buckets: int | list[int] | None = Nonenum_hashes: int = 1vocab_size: int = 320tie_word_embeddings: bool = Falseuse_cache: bool = Trueclassifier_dropout: float | int | None = Nonebos_token_id: int | None = Nonepad_token_id: int | None = 0 )
Parameter
- attention_head_size (
int, opsional, default 64) — Dimensi dari vektor key, query, dan value yang diproyeksikan - attn_layers (
list[str], opsional, default["local", "lsh", "local", "lsh", "local", "lsh"]) — Daftar jenis lapisan attention dalam urutan menaik. Jenisnya dapat dipilih antara lapisan LSHSelfAttention ("lsh") dan lapisan LocalSelfAttention ("local"). Untuk informasi lebih lanjut tentang lapisan LSHSelfAttention, lihat LSH Self Attention. Untuk informasi lebih lanjut tentang lapisan LocalSelfAttention, lihat Local Self Attention. - axial_norm_std (
float, opsional, default 1.0) — Standar deviasi dari normal_initializer untuk menginisialisasi matriks bobot dari positional encodings axial. - axial_pos_embds (
bool, opsional, defaultTrue) — Apakah akan menggunakan axial position embeddings. Untuk informasi lebih lanjut tentang cara kerja axial position embeddings, lihat Axial Position Encodings. - axial_pos_shape (
list[int], opsional, default[64, 64]) — Dimensi posisi dari axial position encodings. Selama pelatihan, hasil kali dari dimensi posisi harus sama dengan panjang sekuens. Untuk informasi lebih lanjut tentang cara kerja axial position embeddings, lihat Axial Position Encodings. - axial_pos_embds_dim (
list[int], opsional, default[64, 192]) — Dimensi embedding dari axial position encodings. Jumlah dari dimensi embedding harus sama dengan hidden size. Untuk informasi lebih lanjut tentang cara kerja axial position embeddings, lihat Axial Position Encodings. - chunk_size_lm_head (
int, opsional, default 0) — Ukuran chunk dari lapisan feed forward head model bahasa akhir. Ukuran chunk 0 berarti lapisan feed forward tidak di-chunk. Ukuran chunk n berarti lapisan feed forward memproses n < sequence_length embeddings pada satu waktu. Untuk informasi lebih lanjut tentang feed forward chunking, lihat Bagaimana cara kerja Feed Forward Chunking?. - eos_token_id (
Union[int, list[int]], opsional, default2) — ID token yang digunakan untuk end-of-stream dalam kosakata. - feed_forward_size (
int, opsional, default 512) — Dimensi dari lapisan feed_forward dalam blok residual attention. - hash_seed (
int, opsional) — Seed yang dapat digunakan untuk membuat local sensitive hashing diLSHSelfAttentionmenjadi deterministik. Nilai ini seharusnya hanya diatur untuk keperluan pengujian. Untuk keperluan evaluasi dan pelatihan,hash_seedsebaiknya dibiarkan sebagaiNoneuntuk memastikan rotasi yang sepenuhnya acak dalam skema local sensitive hashing. - hidden_act (
str, opsional, defaultnyarelu) — Fungsi aktivasi non-linear (fungsi atau string) di decoder. Misalnya,"gelu","relu","silu", dan sebagainya. - hidden_dropout_prob (
Union[float, int], opsional, default0.05) — Probabilitas dropout untuk semua lapisan fully connected di embeddings, encoder, dan pooler. - hidden_size (
int, opsional, default256) — Dimensi dari representasi tersembunyi. - initializer_range (
float, opsional, defaultnya0.02) — Standar deviasi dari truncated_normal_initializer untuk menginisialisasi semua matriks bobot. - is_decoder (
bool, opsional, defaultFalse) — Apakah model digunakan sebagai decoder atau tidak. JikaFalse, model digunakan sebagai encoder. - layer_norm_eps (
float, opsional, defaultnya1e-12) — Epsilon yang digunakan oleh lapisan normalisasi lapisan. - local_num_chunks_before (
int, opsional, default 1) — Jumlah chunk tetangga sebelumnya yang diperhatikan oleh lapisanLocalSelfAttentionterhadap dirinya sendiri. - local_num_chunks_after (
int, opsional, default 0) — Jumlah chunk tetangga berikutnya yang diperhatikan oleh lapisanLocalSelfAttentionselain dirinya sendiri. - local_attention_probs_dropout_prob (
float, opsional, default 0.1) — Rasio dropout untuk probabilitas perhatian dalamLocalSelfAttention. - local_attn_chunk_length (
int, opsional, default 64) — Panjang setiap chunk pada lapisan local attention. - lsh_attn_chunk_length (
int, opsional, default 64) — Panjang chunk yang melakukan atensi terhadap dirinya sendiri diLSHSelfAttention. Chunking mengurangi kompleksitas memori dari panjang sekuens x panjang sekuens (self attention) menjadi panjang chunk x panjang chunk x panjang sekuens / panjang chunk (chunked self attention). - lsh_attention_probs_dropout_prob (
float, opsional, default 0.1) — Rasio dropout untuk probabilitas perhatian dalamLSHSelfAttention. - lsh_num_chunks_before (
int, opsional, default 1) — Jumlah chunk tetangga sebelumnya yang diperhatikan oleh lapisanLSHSelfAttentionterhadap dirinya sendiri. - lsh_num_chunks_after (
int, opsional, default 0) — Jumlah chunk tetangga berikutnya yang diperhatikan oleh lapisanLSHSelfAttentionterhadap dirinya sendiri. - max_position_embeddings (
int, opsional, default4096) — Panjang maksimum urutan yang mungkin digunakan dengan model ini. - num_attention_heads (
int, opsional, default12) — Jumlah attention head untuk setiap lapisan attention di decoder Transformer. - num_buckets (
intataulist[int], opsional) — Jumlah bucket, tempat vektor kunci kueri dapat "di-hash ke" menggunakan skema locality sensitive hashing. Setiap vektor kunci kueri di-hash menjadi hash dalam1, ..., num_buckets. Jumlah bucket juga dapat difaktorkan menjadi sebuah list untuk meningkatkan kompleksitas memori. Dalam kasus ini, setiap vektor kunci kueri di-hash menjadi hash dalam1-1, 1-2, ..., num_buckets[0]-1, ..., num_buckets[0]-num_buckets[1]jikanum_bucketsdifaktorkan menjadi dua faktor. Jumlah bucket (atau hasil kali faktor-faktornya) sebaiknya kurang lebih sama dengan panjang sekuens / lsh_chunk_length. Jikanum_bucketstidak diatur, nilai yang baik akan dihitung secara on the fly. - num_hashes (
int, opsional, default 1) — Jumlah putaran hashing (misalnya, jumlah rotasi acak) dalam skema Local Sensitive Hashing. Semakin tingginum_hashes, semakin akuratLSHSelfAttention, tetapi proses hashing juga menjadi semakin intensif dalam hal memori dan waktu. - vocab_size (
int, opsional, default320) — Ukuran kosakata model. Menentukan jumlah token berbeda yang dapat direpresentasikan olehinput_ids. - tie_word_embeddings (
bool, opsional, defaultFalse) — Apakah akan mengikat bobot embedding sesuai dengan pemetaantied_weights_keysmodel. - 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. - classifier_dropout (
Union[float, int], opsional) — Rasio dropout untuk klasifikator. - bos_token_id (
int, opsional) — ID token yang digunakan untuk awal aliran (beginning-of-stream) dalam kosakata. - pad_token_id (
int, opsional, default0) — ID token yang digunakan untuk padding dalam kosakata.
Ini adalah kelas konfigurasi untuk menyimpan konfigurasi dari ReformerModel. Kelas ini digunakan untuk membuat instans model Reformer berdasarkan argumen yang ditentukan, sehingga mendefinisikan arsitektur model. Membuat instans konfigurasi dengan nilai bawaan akan menghasilkan konfigurasi yang serupa dengan konfigurasi dari google/reformer-crime-and-punishment
Objek konfigurasi mewarisi dari PreTrainedConfig dan dapat digunakan untuk mengontrol output model. Baca dokumentasi dari PreTrainedConfig untuk informasi lebih lanjut.
Contoh:
>>> from transformers import ReformerConfig, ReformerModel
>>> # Initializing a Reformer configuration
>>> configuration = ReformerConfig()
>>> # Initializing a Reformer model (with random weights)
>>> model = ReformerModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configReformerTokenizer
kelas transformers.ReformerTokenizer
< source >( vocab: str | dict[str, int] | None = Nonemerges: str | list[str] | None = Noneeos_token: str = '</s>'unk_token: str = '<unk>'_spm_precompiled_charsmap: str | None = Noneadditional_special_tokens: list | None = None**kwargs )
Parameter
- vocab_file (
str) — file SentencePiece (umumnya berekstensi .spm) yang mengandung kosakata yang diperlukan untuk menginstansiasi tokenizer. - eos_token (
str, opsional, defaultnya"</s>") — Token akhir urutan.Saat membangun sebuah urutan menggunakan token khusus, token ini bukan yang digunakan untuk akhir urutan. Token yang digunakan adalah
sep_token. - unk_token (
str, opsional, default"<unk>") — Token yang tidak diketahui. Token yang tidak ada dalam kosakata tidak dapat dikonversi menjadi ID dan akan diset sebagai token ini sebagai gantinya. - pad_token (
str, opsional, defaultnya"<pad>") — Token yang digunakan untuk padding, misalnya saat membatching urutan dengan panjang yang berbeda. - additional_special_tokens (
list[str], opsional) — Token khusus tambahan yang digunakan oleh tokenizer. - vocab (
strataudict[str, int], opsional) — Kamus kosakata kustom. Jika tidak disediakan, kosakata dimuat darivocab_file. - merges (
strataulist[str], opsional) — Daftar merges kustom. Jika tidak disediakan, merges dimuat darivocab_file.
Konstruksi tokenizer Reformer (didukung oleh pustaka tokenizers dari HuggingFace). Berbasis pada BPE.
Tokenizer ini mewarisi dari TokenizersBackend yang berisi sebagian besar metode utama. Pengguna sebaiknya merujuk ke superclass ini untuk informasi lebih lanjut mengenai metode-metode tersebut.
ReformerModel
kelas transformers.ReformerModel
< source >( config: ReformerConfig )
Parameter
- config (ReformerConfig) — 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 Reformer 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.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonenum_hashes: int | None = Nonepast_buckets_states: transformers.models.reformer.modeling_reformer.ReformerDynamicCache | None = Noneuse_cache: bool | None = Noneoutput_hidden_states: bool | None = Noneoutput_attentions: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → ReformerModelOutput or tuple(torch.FloatTensor)
Parameter
- input_ids (
torch.LongTensordengan bentuk(batch_size, sequence_length)) — Indeks token dari urutan input dalam kosakata. Saat pelatihan, sequence_length dari input_ids harus merupakan kelipatan dari panjang chunk model yang relevan (lsh, local, atau keduanya). Saat evaluasi, indeks secara otomatis di-pad agar menjadi kelipatan dari panjang chunk.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.
- position_ids (
torch.Tensordengan 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_size), 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 indeksinput_idsmenjadi vektor terkait, dibandingkan dengan matriks pencarian penanaman internal model. - num_hashes (
int, opsional) — Jumlah putaran hashing yang harus dilakukan selama bucketing. Menetapkan argumen ini akan menimpa nilai default yang didefinisikan dalamconfig.num_hashes.Untuk informasi lebih lanjut, lihat
num_hashesdi ReformerConfig. - past_buckets_states (
ReformerDynamicCache, opsional) — Daftartuple(torch.LongTensor, torch.FloatTensordengan panjangconfig.n_layers, di mana elemen pertama adalah buckets berbentuk(batch_size, num_heads, num_hashes, sequence_length)) dan elemen kedua adalah hidden_states berbentuk(batch_size, sequence_length, hidden_size)).Mengandung hidden-states dan bucket yang telah dihitung sebelumnya (hanya relevan untuk LSH Self-Attention). Dapat digunakan untuk mempercepat decoding berurutan.
- use_cache (
bool, opsional) — Jika diset keTrue, state kunci-nilaipast_key_valuesakan dikembalikan dan dapat digunakan untuk mempercepat decoding (lihatpast_key_values). - output_hidden_states (
bool, opsional) — Apakah akan mengembalikan hidden states dari semua lapisan. Lihathidden_statesdi bawah tensor yang dikembalikan untuk detail lebih lanjut. - output_attentions (
bool, opsional) — Apakah akan mengembalikan tensor attentions dari semua lapisan attention. Lihatattentionsdi bawah tensor yang dikembalikan untuk detail lebih lanjut. - return_dict (
bool, opsional) — Apakah akan mengembalikan ModelOutput alih-alih tuple biasa.
Mengembalikan
ReformerModelOutput atau tuple(torch.FloatTensor)
ReformerModelOutput atau tuple dari
torch.FloatTensor (jika return_dict=False dilewatkan atau ketika config.return_dict=False) yang terdiri dari berbagai
elemen tergantung pada konfigurasi (ReformerConfig) dan input.
Metode forward dari ReformerModel 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.FloatTensordengan bentuk(batch_size, num_predict, hidden_size)) — Urutan hidden-states pada lapisan terakhir model.num_predictbersesuaian dengantarget_mapping.shape[1]. Jikatarget_mappingadalahNone, makanum_predictbersesuaian dengansequence_length.past_buckets_states (
list[tuple(torch.LongTensor, torch.FloatTensor)], opsional, dikembalikan ketikause_cache=Truedilewatkan atau ketikaconfig.use_cache=True) — Daftartuple(torch.LongTensor, torch.FloatTensordengan panjangconfig.n_layers, di mana elemen pertama adalah buckets sebelumnya dengan bentuk(batch_size, num_heads, num_hashes, sequence_length)) dan elemen kedua adalah hidden_states sebelumnya dengan bentuk(batch_size, sequence_length, hidden_size)).Mengandung bucket dan hidden-states yang sudah dihitung sebelumnya, yang dapat digunakan (lihat input
past_buckets_states) untuk mempercepat decoding berurutan.hidden_states (
tuple[torch.FloatTensor], opsional, dikembalikan saatoutput_hidden_states=Truedilewatkan atau saatconfig.output_hidden_states=True) — Tuple daritorch.FloatTensor(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.FloatTensor], opsional, dikembalikan saatoutput_attentions=Truedilewatkan atau saatconfig.output_attentions=True) — Tuple daritorch.FloatTensor(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).
ReformerModelWithLMHead
kelas transformers.ReformerModelWithLMHead
< source >( config: ReformerConfig )
Parameter
- config (ReformerConfig) — 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 Reformer dengan kepala language modeling 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.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonenum_hashes: int | None = Nonepast_buckets_states: list[tuple[torch.Tensor]] | None = Noneuse_cache: bool | None = Noneoutput_hidden_states: bool | None = Noneoutput_attentions: bool | None = Nonereturn_dict: bool | None = Nonelabels: typing.Optional[torch.Tensor] = Nonelogits_to_keep: typing.Union[int, torch.Tensor] = 0**kwargs ) → CausalLMOutput or tuple(torch.FloatTensor)
Parameter
- input_ids (
torch.LongTensordengan bentuk(batch_size, sequence_length)) — Indeks token dari urutan input dalam kosakata. Saat pelatihan, sequence_length dari input_ids harus merupakan kelipatan dari panjang chunk model yang relevan (lsh, local, atau keduanya). Saat evaluasi, indeks secara otomatis di-pad agar menjadi kelipatan dari panjang chunk.Indeks dapat diperoleh menggunakan AutoTokenizer. Lihat PreTrainedTokenizer.encode() dan PreTrainedTokenizer.call() untuk detailnya.
- position_ids (
torch.Tensordengan bentuk(batch_size, sequence_length), opsional) — Indeks posisi token dari setiap urutan input dalam position embeddings. Dipilih dalam rentang[0, config.n_positions - 1]. - 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.
- inputs_embeds (
torch.Tensordengan bentuk(batch_size, sequence_length, hidden_size), 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 indeksinput_idsmenjadi vektor terkait, dibandingkan dengan matriks pencarian penanaman internal model. - num_hashes (
int, opsional) — Jumlah putaran hashing yang harus dilakukan selama bucketing. Menetapkan argumen ini akan menimpa nilai default yang didefinisikan dalamconfig.num_hashes.Untuk informasi lebih lanjut, lihat
num_hashesdi ReformerConfig. - past_buckets_states (
list[tuple(torch.LongTensor, torch.FloatTensor)], opsional) — Daftartuple(torch.LongTensor, torch.FloatTensordengan panjangconfig.n_layers, di mana elemen pertama adalah buckets dengan bentuk(batch_size, num_heads, num_hashes, sequence_length)) dan elemen kedua adalah hidden_states dengan bentuk(batch_size, sequence_length, hidden_size)).Mengandung hidden-states dan bucket yang telah dihitung sebelumnya (hanya relevan untuk LSH Self-Attention). Dapat digunakan untuk mempercepat decoding berurutan.
- use_cache (
bool, opsional) — Jika diset keTrue, state kunci-nilaipast_key_valuesakan dikembalikan dan dapat digunakan untuk mempercepat decoding (lihatpast_key_values). - output_hidden_states (
bool, opsional) — Apakah akan mengembalikan hidden states dari semua lapisan. Lihathidden_statesdi bawah tensor yang dikembalikan untuk detail lebih lanjut. - output_attentions (
bool, opsional) — Apakah akan mengembalikan tensor attentions dari semua lapisan attention. Lihatattentionsdi bawah tensor yang dikembalikan untuk detail lebih lanjut. - return_dict (
bool, opsional) — Apakah akan mengembalikan ModelOutput alih-alih tuple biasa. - labels (
torch.LongTensordengan bentuk(batch_size,), opsional) — Label untuk menghitung loss klasifikasi/regresi sekuens. Indeks harus berada dalam[-100, 0, ..., config.vocab_size - 1]. Semua label yang disetel ke-100akan diabaikan (diberi mask), loss hanya dihitung untuk label dalam[0, ..., config.vocab_size] - 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
CausalLMOutput atau tuple(torch.FloatTensor)
Sebuah CausalLMOutput atau tuple dari
torch.FloatTensor (jika return_dict=False diteruskan atau ketika config.return_dict=False) yang terdiri dari berbagai
elemen tergantung pada konfigurasi (ReformerConfig) dan input.
Metode forward dari ReformerModelWithLMHead 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.FloatTensordengan bentuk(1,), opsional, dikembalikan saatlabelsdisediakan) — Loss pemodelan bahasa (untuk prediksi token berikutnya).logits (
torch.FloatTensordengan bentuk(batch_size, sequence_length, config.vocab_size)) — Skor prediksi dari kepala pemodelan bahasa (skor untuk setiap token kosakata sebelum SoftMax).hidden_states (
tuple(torch.FloatTensor), opsional, dikembalikan saatoutput_hidden_states=Truedilewatkan atau saatconfig.output_hidden_states=True) — Tuple daritorch.FloatTensor(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.FloatTensor), opsional, dikembalikan saatoutput_attentions=Truedilewatkan atau saatconfig.output_attentions=True) — Tuple daritorch.FloatTensor(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:
>>> import torch
>>> from transformers import AutoTokenizer, ReformerModelWithLMHead
>>> tokenizer = AutoTokenizer.from_pretrained("google/reformer-crime-and-punishment")
>>> model = ReformerModelWithLMHead.from_pretrained("google/reformer-crime-and-punishment")
>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
>>> outputs = model(**inputs, labels=inputs["input_ids"])
>>> loss = outputs.loss
>>> logits = outputs.logitsReformerForMaskedLM
kelas transformers.ReformerForMaskedLM
< source >( config: ReformerConfig )
Parameter
- config (ReformerConfig) — 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 Reformer dengan kepala language modeling 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.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonenum_hashes: int | None = Nonelabels: typing.Optional[torch.Tensor] = Noneoutput_hidden_states: bool | None = Noneoutput_attentions: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → MaskedLMOutput or tuple(torch.FloatTensor)
Parameter
- input_ids (
torch.LongTensordengan bentuk(batch_size, sequence_length)) — Indeks token dari urutan input dalam kosakata. Saat pelatihan, sequence_length dari input_ids harus merupakan kelipatan dari panjang chunk model yang relevan (lsh, local, atau keduanya). Saat evaluasi, indeks secara otomatis di-pad agar menjadi kelipatan dari panjang chunk.Indeks dapat diperoleh menggunakan AutoTokenizer. Lihat PreTrainedTokenizer.encode() dan PreTrainedTokenizer.call() untuk detailnya.
- position_ids (
torch.Tensordengan bentuk(batch_size, sequence_length), opsional) — Indeks posisi token dari setiap urutan input dalam position embeddings. Dipilih dalam rentang[0, config.n_positions - 1]. - 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.
- inputs_embeds (
torch.Tensordengan bentuk(batch_size, sequence_length, hidden_size), 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 indeksinput_idsmenjadi vektor terkait, dibandingkan dengan matriks pencarian penanaman internal model. - num_hashes (
int, opsional) — Jumlah putaran hashing yang harus dilakukan selama bucketing. Menetapkan argumen ini akan menimpa nilai default yang didefinisikan dalamconfig.num_hashes.Untuk informasi lebih lanjut, lihat
num_hashesdi ReformerConfig. - labels (
torch.LongTensordengan bentuk(batch_size, sequence_length), opsional) — Label untuk menghitung kerugian masked language modeling. Indeks harus berada dalam[-100, 0, ..., config.vocab_size](lihatinput_idsdocstring) Token dengan indeks yang diatur ke-100diabaikan (dimasker), kerugian hanya dihitung untuk token dengan labelContoh ini menggunakan checkpoint palsu karena tidak ada model pretrained yang tersedia untuk tugas masked language modeling dengan arsitektur Reformer.
- output_hidden_states (
bool, opsional) — Apakah akan mengembalikan hidden states dari semua lapisan. Lihathidden_statesdi bawah tensor yang dikembalikan untuk detail lebih lanjut. - output_attentions (
bool, opsional) — Apakah akan mengembalikan tensor attentions dari semua lapisan attention. Lihatattentionsdi bawah tensor yang dikembalikan untuk detail lebih lanjut. - return_dict (
bool, opsional) — Apakah akan mengembalikan ModelOutput alih-alih tuple biasa.
Mengembalikan
MaskedLMOutput atau tuple(torch.FloatTensor)
A MaskedLMOutput atau tuple dari
torch.FloatTensor (jika return_dict=False dilewatkan atau ketika config.return_dict=False) yang terdiri dari berbagai
elemen tergantung pada konfigurasi (ReformerConfig) dan input.
Metode forward dari ReformerForMaskedLM 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.FloatTensordengan bentuk(1,), opsional, dikembalikan ketikalabelsdisediakan) — Masked language modeling (MLM) loss.logits (
torch.FloatTensordengan bentuk(batch_size, sequence_length, config.vocab_size)) — Skor prediksi dari kepala pemodelan bahasa (skor untuk setiap token kosakata sebelum SoftMax).hidden_states (
tuple(torch.FloatTensor), opsional, dikembalikan saatoutput_hidden_states=Truedilewatkan atau saatconfig.output_hidden_states=True) — Tuple daritorch.FloatTensor(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.FloatTensor), opsional, dikembalikan saatoutput_attentions=Truedilewatkan atau saatconfig.output_attentions=True) — Tuple daritorch.FloatTensor(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:
>>> import torch
>>> from transformers import AutoTokenizer, ReformerForMaskedLM
>>> tokenizer = AutoTokenizer.from_pretrained("hf-internal-testing/tiny-random-reformer")
>>> model = ReformerForMaskedLM.from_pretrained("hf-internal-testing/tiny-random-reformer")
>>> # add mask_token
>>> tokenizer.add_special_tokens({"mask_token": "[MASK]"})
>>> inputs = tokenizer("The capital of France is [MASK].", return_tensors="pt")
>>> # resize model's embedding matrix
>>> model.resize_token_embeddings(new_num_tokens=model.config.vocab_size + 1)
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> # retrieve index of [MASK]
>>> mask_token_index = (inputs.input_ids == tokenizer.mask_token_id)[0].nonzero(as_tuple=True)[0]
>>> predicted_token_id = logits[0, mask_token_index].argmax(axis=-1)
>>> predicted_token = tokenizer.decode(predicted_token_id)>>> labels = tokenizer("The capital of France is Paris.", return_tensors="pt")["input_ids"]
>>> # mask labels of non-[MASK] tokens
>>> labels = torch.where(
... inputs.input_ids == tokenizer.mask_token_id, labels[:, : inputs["input_ids"].shape[-1]], -100
... )
>>> outputs = model(**inputs, labels=labels)
>>> loss = round(outputs.loss.item(), 2)ReformerForSequenceClassification
kelas transformers.ReformerForSequenceClassification
< source >( config: ReformerConfig )
Parameter
- config (ReformerConfig) — 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 Reformer transformer dengan kepala klasifikasi/regresi urutan di atasnya (lapisan linear di atas output yang dipooling), misalnya untuk tugas GLUE.
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.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonenum_hashes: int | None = Nonelabels: typing.Optional[torch.Tensor] = Noneoutput_hidden_states: bool | None = Noneoutput_attentions: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → SequenceClassifierOutput or tuple(torch.FloatTensor)
Parameter
- input_ids (
torch.LongTensordengan bentuk(batch_size, sequence_length)) — Indeks token dari urutan input dalam kosakata. Saat pelatihan, sequence_length dari input_ids harus merupakan kelipatan dari panjang chunk model yang relevan (lsh, local, atau keduanya). Saat evaluasi, indeks secara otomatis di-pad agar menjadi kelipatan dari panjang chunk.Indeks dapat diperoleh menggunakan AutoTokenizer. Lihat PreTrainedTokenizer.encode() dan PreTrainedTokenizer.call() untuk detailnya.
- position_ids (
torch.Tensordengan bentuk(batch_size, sequence_length), opsional) — Indeks posisi token dari setiap urutan input dalam position embeddings. Dipilih dalam rentang[0, config.n_positions - 1]. - 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.
- inputs_embeds (
torch.Tensordengan bentuk(batch_size, sequence_length, hidden_size), 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 indeksinput_idsmenjadi vektor terkait, dibandingkan dengan matriks pencarian penanaman internal model. - num_hashes (
int, opsional) — Jumlah putaran hashing yang harus dilakukan selama bucketing. Menetapkan argumen ini akan menimpa nilai default yang didefinisikan dalamconfig.num_hashes.Untuk informasi lebih lanjut, lihat
num_hashesdi ReformerConfig. - 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). - output_hidden_states (
bool, opsional) — Apakah akan mengembalikan hidden states dari semua lapisan. Lihathidden_statesdi bawah tensor yang dikembalikan untuk detail lebih lanjut. - output_attentions (
bool, opsional) — Apakah akan mengembalikan tensor attentions dari semua lapisan attention. Lihatattentionsdi bawah tensor yang dikembalikan untuk detail lebih lanjut. - return_dict (
bool, opsional) — Apakah akan mengembalikan ModelOutput alih-alih tuple biasa.
Mengembalikan
SequenceClassifierOutput atau tuple(torch.FloatTensor)
SequenceClassifierOutput atau tuple dari
torch.FloatTensor (jika return_dict=False diteruskan atau ketika config.return_dict=False) yang terdiri dari berbagai
elemen tergantung pada konfigurasi (ReformerConfig) dan input.
Metode forward dari ReformerForSequenceClassification 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.FloatTensordengan bentuk(1,), opsional, dikembalikan saatlabelsdisediakan) — Loss klasifikasi (atau regresi jika config.num_labels==1).logits (
torch.FloatTensordengan bentuk(batch_size, config.num_labels)) — Skor klasifikasi (atau regresi jika config.num_labels==1) (sebelum SoftMax).hidden_states (
tuple(torch.FloatTensor), opsional, dikembalikan saatoutput_hidden_states=Truedilewatkan atau saatconfig.output_hidden_states=True) — Tuple daritorch.FloatTensor(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.FloatTensor), opsional, dikembalikan saatoutput_attentions=Truedilewatkan atau saatconfig.output_attentions=True) — Tuple daritorch.FloatTensor(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, ReformerForSequenceClassification
>>> tokenizer = AutoTokenizer.from_pretrained("google/reformer-crime-and-punishment")
>>> model = ReformerForSequenceClassification.from_pretrained("google/reformer-crime-and-punishment")
>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> predicted_class_id = logits.argmax().item()
>>> label = 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 = ReformerForSequenceClassification.from_pretrained(
... "google/reformer-crime-and-punishment", num_labels=num_labels
... )
>>> labels = torch.tensor(1)
>>> loss = model(**inputs, labels=labels).lossReformerForQuestionAnswering
kelas transformers.ReformerForQuestionAnswering
< source >( config: ReformerConfig )
Parameter
- config (ReformerConfig) — 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 Reformer 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.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonenum_hashes: int | None = Nonestart_positions: typing.Optional[torch.Tensor] = Noneend_positions: typing.Optional[torch.Tensor] = Noneoutput_hidden_states: bool | None = Noneoutput_attentions: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → QuestionAnsweringModelOutput or tuple(torch.FloatTensor)
Parameter
- input_ids (
torch.LongTensordengan bentuk(batch_size, sequence_length)) — Indeks token dari urutan input dalam kosakata. Saat pelatihan, sequence_length dari input_ids harus merupakan kelipatan dari panjang chunk model yang relevan (lsh, local, atau keduanya). Saat evaluasi, indeks secara otomatis di-pad agar menjadi kelipatan dari panjang chunk.Indeks dapat diperoleh menggunakan AutoTokenizer. Lihat PreTrainedTokenizer.encode() dan PreTrainedTokenizer.call() untuk detailnya.
- position_ids (
torch.Tensordengan bentuk(batch_size, sequence_length), opsional) — Indeks posisi token dari setiap urutan input dalam position embeddings. Dipilih dalam rentang[0, config.n_positions - 1]. - 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.
- inputs_embeds (
torch.Tensordengan bentuk(batch_size, sequence_length, hidden_size), 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 indeksinput_idsmenjadi vektor terkait, dibandingkan dengan matriks pencarian penanaman internal model. - num_hashes (
int, opsional) — Jumlah putaran hashing yang harus dilakukan selama bucketing. Menetapkan argumen ini akan menimpa nilai default yang didefinisikan dalamconfig.num_hashes.Untuk informasi lebih lanjut, lihat
num_hashesdi ReformerConfig. - start_positions (
torch.Tensordengan 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.Tensordengan bentuk(batch_size,), opsional) — Label untuk posisi (indeks) akhir span berlabel untuk menghitung kerugian klasifikasi token. Posisi dibatasi pada panjang sekuens (sequence_length). Posisi di luar sekuens tidak diperhitungkan dalam perhitungan kerugian. - output_hidden_states (
bool, opsional) — Apakah akan mengembalikan hidden states dari semua lapisan. Lihathidden_statesdi bawah tensor yang dikembalikan untuk detail lebih lanjut. - output_attentions (
bool, opsional) — Apakah akan mengembalikan tensor attentions dari semua lapisan attention. Lihatattentionsdi 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.FloatTensor)
A QuestionAnsweringModelOutput atau tuple dari
torch.FloatTensor (jika return_dict=False diteruskan atau ketika config.return_dict=False) yang terdiri dari berbagai
elemen tergantung pada konfigurasi (ReformerConfig) dan input.
Metode forward dari ReformerForQuestionAnswering 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.FloatTensordengan bentuk(1,), opsional, dikembalikan saatlabelsdisediakan) — Total loss ekstraksi span adalah jumlah dari Cross-Entropy untuk posisi awal dan akhir.start_logits (
torch.FloatTensordengan bentuk(batch_size, sequence_length)) — Skor awal span (sebelum SoftMax).end_logits (
torch.FloatTensordengan bentuk(batch_size, sequence_length)) — Skor akhir span (sebelum SoftMax).hidden_states (
tuple(torch.FloatTensor), opsional, dikembalikan saatoutput_hidden_states=Truedilewatkan atau saatconfig.output_hidden_states=True) — Tuple daritorch.FloatTensor(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.FloatTensor), opsional, dikembalikan saatoutput_attentions=Truedilewatkan atau saatconfig.output_attentions=True) — Tuple daritorch.FloatTensor(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, ReformerForQuestionAnswering
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("google/reformer-crime-and-punishment")
>>> model = ReformerForQuestionAnswering.from_pretrained("google/reformer-crime-and-punishment")
>>> 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)
...