Transformers documentation

Reformer

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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 dd yaitu config.hidden_size untuk setiap posisi $i, \ldots, n_s$, dengan nsn_s yaitu config.max_embedding_size. Artinya, memiliki panjang urutan ns=219≈0.5Mn_s = 2^{19} \approx 0.5M dan config.hidden_size sebesar d=210≈1000d = 2^{10} \approx 1000 akan menghasilkan matriks encoding posisi: Xi,j, with i∈[1,…,d] and j∈[1,…,ns]X_{i,j}, \text{ with } i \in \left[1,\ldots, d\right] \text{ and } j \in \left[1,\ldots, n_s\right]

yang saja memiliki lebih dari 500 juta parameter untuk disimpan. Axial positional encodings memfaktorkan Xi,jX_{i,j} menjadi dua matriks: Xi,j1, with i∈[1,…,d1] and j∈[1,…,ns1]X^{1}_{i,j}, \text{ with } i \in \left[1,\ldots, d^1\right] \text{ and } j \in \left[1,\ldots, n_s^1\right]

dan Xi,j2, with i∈[1,…,d2] and j∈[1,…,ns2]X^{2}_{i,j}, \text{ with } i \in \left[1,\ldots, d^2\right] \text{ and } j \in \left[1,\ldots, n_s^2\right]

dengan: d=d1+d2 and ns=ns1×ns2.d = d^1 + d^2 \text{ and } n_s = n_s^1 \times n_s^2 .

Oleh karena itu, hal berikut berlaku: Xi,j={Xi,k1,if  i<d1 with k=jmod  ns1Xi−d1,l2,if i≥d1 with l=⌊jns1⌋X_{i,j} = \begin{cases} X^{1}_{i, k}, & \text{if }\ i < d^1 \text{ with } k = j \mod n_s^1 \\ X^{2}_{i - d^1, l}, & \text{if } i \ge d^1 \text{ with } l = \lfloor\frac{j}{n_s^1}\rfloor \end{cases}

Secara intuitif, ini berarti bahwa vektor posisi embedding xj∈Rdx_j \in \mathbb{R}^{d} 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 jj difaktorkan menjadi $k \text{ dan } l$. Desain ini memastikan bahwa setiap vektor posisi embedding xjx_j unik.

Menggunakan contoh di atas lagi, axial position encoding dengan d1=29,d2=29,ns1=29,ns2=210d^1 = 2^9, d^2 = 2^9, n_s^1 = 2^9, n_s^2 = 2^{10} dapat mengurangi jumlah parameter secara drastis dari 500.000.000 menjadi 218+219≈7800002^{18} + 2^{19} \approx 780 000 parameter, yang berarti penggunaan memori berkurang 85%.

Dalam praktiknya, parameter config.axial_pos_embds_dim diset ke tuple (d1,d2)(d^1, d^2) yang jumlah totalnya harus sama dengan config.hidden_size dan config.axial_pos_shape diset ke tuple (ns1,ns2)(n_s^1, n_s^2) 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 O(ns×ns)\mathcal{O}(n_s \times n_s) menjadi $\mathcal{O}(n_s \times \log(n_s))$, yang biasanya merupakan bottleneck memori dan waktu dalam model transformer, dengan nsn_s 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 O(ns×ns)\mathcal{O}(n_s \times n_s) menjadi $\mathcal{O}(n_s \times \log(n_s))$, yang biasanya merupakan bottleneck memori dan waktu dalam model transformer, dengan nsn_s 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

ReformerConfig

kelas transformers.ReformerConfig

< >

( 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, default True) — 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, default 2) — 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 di LSHSelfAttention menjadi deterministik. Nilai ini seharusnya hanya diatur untuk keperluan pengujian. Untuk keperluan evaluasi dan pelatihan, hash_seed sebaiknya dibiarkan sebagai None untuk memastikan rotasi yang sepenuhnya acak dalam skema local sensitive hashing.
  • hidden_act (str, opsional, defaultnya relu) — Fungsi aktivasi non-linear (fungsi atau string) di decoder. Misalnya, "gelu", "relu", "silu", dan sebagainya.
  • hidden_dropout_prob (Union[float, int], opsional, default 0.05) — Probabilitas dropout untuk semua lapisan fully connected di embeddings, encoder, dan pooler.
  • hidden_size (int, opsional, default 256) — Dimensi dari representasi tersembunyi.
  • initializer_range (float, opsional, defaultnya 0.02) — Standar deviasi dari truncated_normal_initializer untuk menginisialisasi semua matriks bobot.
  • is_decoder (bool, opsional, default False) — Apakah model digunakan sebagai decoder atau tidak. Jika False, model digunakan sebagai encoder.
  • layer_norm_eps (float, opsional, defaultnya 1e-12) — Epsilon yang digunakan oleh lapisan normalisasi lapisan.
  • local_num_chunks_before (int, opsional, default 1) — Jumlah chunk tetangga sebelumnya yang diperhatikan oleh lapisan LocalSelfAttention terhadap dirinya sendiri.
  • local_num_chunks_after (int, opsional, default 0) — Jumlah chunk tetangga berikutnya yang diperhatikan oleh lapisan LocalSelfAttention selain dirinya sendiri.
  • local_attention_probs_dropout_prob (float, opsional, default 0.1) — Rasio dropout untuk probabilitas perhatian dalam LocalSelfAttention.
  • 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 di LSHSelfAttention. 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 dalam LSHSelfAttention.
  • lsh_num_chunks_before (int, opsional, default 1) — Jumlah chunk tetangga sebelumnya yang diperhatikan oleh lapisan LSHSelfAttention terhadap dirinya sendiri.
  • lsh_num_chunks_after (int, opsional, default 0) — Jumlah chunk tetangga berikutnya yang diperhatikan oleh lapisan LSHSelfAttention terhadap dirinya sendiri.
  • max_position_embeddings (int, opsional, default 4096) — Panjang maksimum urutan yang mungkin digunakan dengan model ini.
  • num_attention_heads (int, opsional, default 12) — Jumlah attention head untuk setiap lapisan attention di decoder Transformer.
  • num_buckets (int atau list[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 dalam 1, ..., 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 dalam 1-1, 1-2, ..., num_buckets[0]-1, ..., num_buckets[0]-num_buckets[1] jika num_buckets difaktorkan menjadi dua faktor. Jumlah bucket (atau hasil kali faktor-faktornya) sebaiknya kurang lebih sama dengan panjang sekuens / lsh_chunk_length. Jika num_buckets tidak 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 tinggi num_hashes, semakin akurat LSHSelfAttention, tetapi proses hashing juga menjadi semakin intensif dalam hal memori dan waktu.
  • vocab_size (int, opsional, default 320) — Ukuran kosakata model. Menentukan jumlah token berbeda yang dapat direpresentasikan oleh input_ids.
  • tie_word_embeddings (bool, opsional, default False) — Apakah akan mengikat bobot embedding sesuai dengan pemetaan tied_weights_keys model.
  • use_cache (bool, opsional, defaultnya True) — Apakah model harus mengembalikan perhatian kunci/nilai terakhir (tidak digunakan oleh semua model). Hanya relevan jika config.is_decoder=True atau 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, default 0) — 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.config

ReformerTokenizer

kelas transformers.ReformerTokenizer

< >

( 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 (str atau dict[str, int], opsional) — Kamus kosakata kustom. Jika tidak disediakan, kosakata dimuat dari vocab_file.
  • merges (str atau list[str], opsional) — Daftar merges kustom. Jika tidak disediakan, merges dimuat dari vocab_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.

save_vocabulary

< >

( save_directory: strfilename_prefix: str | None = None )

ReformerModel

kelas transformers.ReformerModel

< >

( 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

< >

( 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.LongTensor dengan 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.

    Apa itu input ID?

  • attention_mask (torch.Tensor dengan 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.

    Apa itu attention mask?

  • position_ids (torch.Tensor dengan bentuk (batch_size, sequence_length), opsional) — Indeks posisi token dari setiap urutan input dalam position embeddings. Dipilih dalam rentang [0, config.n_positions - 1].

    Apa itu ID posisi?

  • inputs_embeds (torch.Tensor dengan bentuk (batch_size, sequence_length, hidden_size), opsional) — Secara opsional, alih-alih meneruskan input_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.
  • num_hashes (int, opsional) — Jumlah putaran hashing yang harus dilakukan selama bucketing. Menetapkan argumen ini akan menimpa nilai default yang didefinisikan dalam config.num_hashes.

    Untuk informasi lebih lanjut, lihat num_hashes di ReformerConfig.

  • past_buckets_states (ReformerDynamicCache, opsional) — Daftar tuple(torch.LongTensor, torch.FloatTensor dengan panjang config.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 ke True, state kunci-nilai past_key_values akan dikembalikan dan dapat digunakan untuk mempercepat decoding (lihat past_key_values).
  • output_hidden_states (bool, opsional) — Apakah akan mengembalikan hidden states dari semua lapisan. Lihat hidden_states di bawah tensor yang dikembalikan untuk detail lebih lanjut.
  • output_attentions (bool, opsional) — Apakah akan mengembalikan tensor attentions dari semua lapisan attention. Lihat attentions di 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 Module setelahnya 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.FloatTensor dengan bentuk (batch_size, num_predict, hidden_size)) — Urutan hidden-states pada lapisan terakhir model.

    num_predict bersesuaian dengan target_mapping.shape[1]. Jika target_mapping adalah None, maka num_predict bersesuaian dengan sequence_length.

  • past_buckets_states (list[tuple(torch.LongTensor, torch.FloatTensor)], opsional, dikembalikan ketika use_cache=True dilewatkan atau ketika config.use_cache=True) — Daftar tuple(torch.LongTensor, torch.FloatTensor dengan panjang config.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 saat output_hidden_states=True dilewatkan atau saat config.output_hidden_states=True) — Tuple dari torch.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 saat output_attentions=True dilewatkan atau saat config.output_attentions=True) — Tuple dari torch.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

< >

( 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

< >

( 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.LongTensor dengan 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.

    Apa itu input ID?

  • position_ids (torch.Tensor dengan bentuk (batch_size, sequence_length), opsional) — Indeks posisi token dari setiap urutan input dalam position embeddings. Dipilih dalam rentang [0, config.n_positions - 1].

    Apa itu ID posisi?

  • attention_mask (torch.Tensor dengan 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.

    Apa itu attention mask?

  • inputs_embeds (torch.Tensor dengan bentuk (batch_size, sequence_length, hidden_size), opsional) — Secara opsional, alih-alih meneruskan input_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.
  • num_hashes (int, opsional) — Jumlah putaran hashing yang harus dilakukan selama bucketing. Menetapkan argumen ini akan menimpa nilai default yang didefinisikan dalam config.num_hashes.

    Untuk informasi lebih lanjut, lihat num_hashes di ReformerConfig.

  • past_buckets_states (list[tuple(torch.LongTensor, torch.FloatTensor)], opsional) — Daftar tuple(torch.LongTensor, torch.FloatTensor dengan panjang config.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 ke True, state kunci-nilai past_key_values akan dikembalikan dan dapat digunakan untuk mempercepat decoding (lihat past_key_values).
  • output_hidden_states (bool, opsional) — Apakah akan mengembalikan hidden states dari semua lapisan. Lihat hidden_states di bawah tensor yang dikembalikan untuk detail lebih lanjut.
  • output_attentions (bool, opsional) — Apakah akan mengembalikan tensor attentions dari semua lapisan attention. Lihat attentions di bawah tensor yang dikembalikan untuk detail lebih lanjut.
  • return_dict (bool, opsional) — Apakah akan mengembalikan ModelOutput alih-alih tuple biasa.
  • labels (torch.LongTensor dengan 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 -100 akan diabaikan (diberi mask), loss hanya dihitung untuk label dalam [0, ..., config.vocab_size]
  • logits_to_keep (Union[int, torch.Tensor], opsional, default 0) — Jika berupa int, hitung logits untuk logits_to_keep token terakhir. Jika 0, hitung logits untuk semua input_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 berupa torch.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 Module setelahnya alih-alih fungsi ini, karena yang pertama menangani langkah-langkah pra-pemrosesan dan pasca-pemrosesan, sedangkan yang kedua mengabaikannya secara diam-diam.

  • loss (torch.FloatTensor dengan bentuk (1,), opsional, dikembalikan saat labels disediakan) — Loss pemodelan bahasa (untuk prediksi token berikutnya).

  • logits (torch.FloatTensor dengan 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 saat output_hidden_states=True dilewatkan atau saat config.output_hidden_states=True) — Tuple dari torch.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 saat output_attentions=True dilewatkan atau saat config.output_attentions=True) — Tuple dari torch.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.logits

ReformerForMaskedLM

kelas transformers.ReformerForMaskedLM

< >

( 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

< >

( 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.LongTensor dengan 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.

    Apa itu input ID?

  • position_ids (torch.Tensor dengan bentuk (batch_size, sequence_length), opsional) — Indeks posisi token dari setiap urutan input dalam position embeddings. Dipilih dalam rentang [0, config.n_positions - 1].

    Apa itu ID posisi?

  • attention_mask (torch.Tensor dengan 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.

    Apa itu attention mask?

  • inputs_embeds (torch.Tensor dengan bentuk (batch_size, sequence_length, hidden_size), opsional) — Secara opsional, alih-alih meneruskan input_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.
  • num_hashes (int, opsional) — Jumlah putaran hashing yang harus dilakukan selama bucketing. Menetapkan argumen ini akan menimpa nilai default yang didefinisikan dalam config.num_hashes.

    Untuk informasi lebih lanjut, lihat num_hashes di ReformerConfig.

  • labels (torch.LongTensor dengan bentuk (batch_size, sequence_length), opsional) — Label untuk menghitung kerugian masked language modeling. Indeks harus berada dalam [-100, 0, ..., config.vocab_size] (lihat input_ids docstring) Token dengan indeks yang diatur ke -100 diabaikan (dimasker), kerugian hanya dihitung untuk token dengan label

    Contoh 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. Lihat hidden_states di bawah tensor yang dikembalikan untuk detail lebih lanjut.
  • output_attentions (bool, opsional) — Apakah akan mengembalikan tensor attentions dari semua lapisan attention. Lihat attentions di 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 Module setelahnya alih-alih fungsi ini, karena yang pertama menangani langkah-langkah pra-pemrosesan dan pasca-pemrosesan, sedangkan yang kedua mengabaikannya secara diam-diam.

  • loss (torch.FloatTensor dengan bentuk (1,), opsional, dikembalikan ketika labels disediakan) — Masked language modeling (MLM) loss.

  • logits (torch.FloatTensor dengan 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 saat output_hidden_states=True dilewatkan atau saat config.output_hidden_states=True) — Tuple dari torch.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 saat output_attentions=True dilewatkan atau saat config.output_attentions=True) — Tuple dari torch.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

< >

( 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

< >

( 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.LongTensor dengan 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.

    Apa itu input ID?

  • position_ids (torch.Tensor dengan bentuk (batch_size, sequence_length), opsional) — Indeks posisi token dari setiap urutan input dalam position embeddings. Dipilih dalam rentang [0, config.n_positions - 1].

    Apa itu ID posisi?

  • attention_mask (torch.Tensor dengan 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.

    Apa itu attention mask?

  • inputs_embeds (torch.Tensor dengan bentuk (batch_size, sequence_length, hidden_size), opsional) — Secara opsional, alih-alih meneruskan input_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.
  • num_hashes (int, opsional) — Jumlah putaran hashing yang harus dilakukan selama bucketing. Menetapkan argumen ini akan menimpa nilai default yang didefinisikan dalam config.num_hashes.

    Untuk informasi lebih lanjut, lihat num_hashes di ReformerConfig.

  • labels (torch.LongTensor dengan bentuk (batch_size,), opsional) — Label untuk menghitung loss klasifikasi/regresi urutan. Indeks harus berada dalam [0, ..., config.num_labels - 1]. Jika config.num_labels == 1, loss regresi dihitung (Mean-Square loss). Jika config.num_labels > 1, loss klasifikasi dihitung (Cross-Entropy).
  • output_hidden_states (bool, opsional) — Apakah akan mengembalikan hidden states dari semua lapisan. Lihat hidden_states di bawah tensor yang dikembalikan untuk detail lebih lanjut.
  • output_attentions (bool, opsional) — Apakah akan mengembalikan tensor attentions dari semua lapisan attention. Lihat attentions di 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 Module setelahnya alih-alih fungsi ini, karena yang pertama menangani langkah-langkah pra-pemrosesan dan pasca-pemrosesan, sedangkan yang kedua mengabaikannya secara diam-diam.

  • loss (torch.FloatTensor dengan bentuk (1,), opsional, dikembalikan saat labels disediakan) — Loss klasifikasi (atau regresi jika config.num_labels==1).

  • logits (torch.FloatTensor dengan bentuk (batch_size, config.num_labels)) — Skor klasifikasi (atau regresi jika config.num_labels==1) (sebelum SoftMax).

  • hidden_states (tuple(torch.FloatTensor), opsional, dikembalikan saat output_hidden_states=True dilewatkan atau saat config.output_hidden_states=True) — Tuple dari torch.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 saat output_attentions=True dilewatkan atau saat config.output_attentions=True) — Tuple dari torch.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).loss

ReformerForQuestionAnswering

kelas transformers.ReformerForQuestionAnswering

< >

( 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

< >

( 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.LongTensor dengan 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.

    Apa itu input ID?

  • position_ids (torch.Tensor dengan bentuk (batch_size, sequence_length), opsional) — Indeks posisi token dari setiap urutan input dalam position embeddings. Dipilih dalam rentang [0, config.n_positions - 1].

    Apa itu ID posisi?

  • attention_mask (torch.Tensor dengan 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.

    Apa itu attention mask?

  • inputs_embeds (torch.Tensor dengan bentuk (batch_size, sequence_length, hidden_size), opsional) — Secara opsional, alih-alih meneruskan input_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.
  • num_hashes (int, opsional) — Jumlah putaran hashing yang harus dilakukan selama bucketing. Menetapkan argumen ini akan menimpa nilai default yang didefinisikan dalam config.num_hashes.

    Untuk informasi lebih lanjut, lihat num_hashes di ReformerConfig.

  • start_positions (torch.Tensor dengan 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.Tensor dengan 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. Lihat hidden_states di bawah tensor yang dikembalikan untuk detail lebih lanjut.
  • output_attentions (bool, opsional) — Apakah akan mengembalikan tensor attentions dari semua lapisan attention. Lihat attentions di 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 Module setelahnya alih-alih fungsi ini, karena yang pertama menangani langkah-langkah pra-pemrosesan dan pasca-pemrosesan, sedangkan yang kedua mengabaikannya secara diam-diam.

  • loss (torch.FloatTensor dengan bentuk (1,), opsional, dikembalikan saat labels disediakan) — Total loss ekstraksi span adalah jumlah dari Cross-Entropy untuk posisi awal dan akhir.

  • start_logits (torch.FloatTensor dengan bentuk (batch_size, sequence_length)) — Skor awal span (sebelum SoftMax).

  • end_logits (torch.FloatTensor dengan bentuk (batch_size, sequence_length)) — Skor akhir span (sebelum SoftMax).

  • hidden_states (tuple(torch.FloatTensor), opsional, dikembalikan saat output_hidden_states=True dilewatkan atau saat config.output_hidden_states=True) — Tuple dari torch.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 saat output_attentions=True dilewatkan atau saat config.output_attentions=True) — Tuple dari torch.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)
...
Update on GitHub