# Reformer

## Ikhtisar

Model Reformer diusulkan dalam makalah [Reformer: The Efficient Transformer](https://huggingface.co/papers/2001.04451) oleh Nikita Kitaev, Łukasz Kaiser, dan Anselm Levskaya.

Abstrak dari makalah tersebut adalah sebagai berikut:

*Model Transformer 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 satu 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 reversibel alih-alih residual standar, yang memungkinkan penyimpanan aktivasi hanya sekali dalam proses pelatihan alih-alih N kali, di mana N adalah jumlah lapisan. Model yang dihasilkan, Reformer, berkinerja setara dengan model Transformer sambil jauh lebih hemat memori dan jauh lebih cepat pada urutan panjang.*

Model ini disumbangkan oleh [patrickvonplaten](https://huggingface.co/patrickvonplaten). Kode para penulis dapat ditemukan [di sini](https://github.com/google/trax/tree/master/trax/models/reformer).

## Tips penggunaan

- Reformer **tidak** berfungsi dengan *torch.nn.DataParallel* karena bug di PyTorch, lihat [issue #36035](https://github.com/pytorch/pytorch/issues/36035).
- Gunakan pengkodean posisi aksial (lihat di bawah untuk detail lebih lanjut). Ini adalah mekanisme untuk menghindari adanya matriks pengkodean posisi yang sangat besar (ketika panjang urutan sangat besar) dengan memfaktorkannya menjadi matriks-matriks yang lebih kecil.
- Ganti perhatian tradisional dengan perhatian LSH (local-sensitive hashing) (lihat di bawah untuk detail lebih lanjut). Ini adalah teknik untuk menghindari perhitungan produk penuh query-key di lapisan perhatian.
- 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 dalam [trax library](https://github.com/google/trax/blob/4d99ad4965bab1deba227539758d59f0df0fef48/trax/layers/research/position_encodings.py#L29) dari Google dan dikembangkan oleh para penulis makalah model ini. Pada model yang menangani urutan input yang sangat panjang, encoding id posisi konvensional menyimpan vektor embeddings berukuran $d$ yang merupakan `config.hidden_size` untuk setiap posisi $i, \ldots, n_s$, dengan $n_s$ sebagai `config.max_embedding_size`. Ini berarti bahwa memiliki panjang urutan $n_s = 2^{19} \approx 0.5M$ dan `config.hidden_size` sebesar $d = 2^{10} \approx 1000$ akan menghasilkan matriks encoding posisi:

$$X_{i,j}, \text{ dengan } i \in \left[1,\ldots, d\right] \text{ dan } j \in \left[1,\ldots, n_s\right]$$

yang saja memiliki lebih dari 500 juta parameter untuk disimpan. Enkoding posisi aksial memfaktorisasi $X_{i,j}$ menjadi dua matriks:

$$X^{1}_{i,j}, \text{ dengan } i \in \left[1,\ldots, d^1\right] \text{ dan } j \in \left[1,\ldots, n_s^1\right]$$

dan

$$X^{2}_{i,j}, \text{ dengan } i \in \left[1,\ldots, d^2\right] \text{ dan } j \in \left[1,\ldots, n_s^2\right]$$

dengan:

$$d = d^1 + d^2 \text{ dan } n_s = n_s^1 \times n_s^2 .$$

Oleh karena itu, hal berikut berlaku:

$$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 embedding posisi $x_j \in \mathbb{R}^{d}$ kini merupakan komposisi dari dua vektor embedding yang difaktorisasi: $x^1_{k, l} + x^2_{l, k}$, di mana dimensi $j$ dari `config.max_embedding_size` difaktorisasi menjadi $k \text{ dan } l$. Desain ini memastikan bahwa setiap vektor embedding posisi $x_j$ bersifat unik.

Menggunakan contoh di atas lagi, pengkodean posisi aksial dengan $d^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 $2^{18} + 2^{19} \approx 780 000$ parameter, yang berarti penggunaan memori berkurang 85%.

Dalam praktiknya, parameter `config.axial_pos_embds_dim` diatur ke tuple $(d^1, d^2)$ yang jumlahnya harus sama dengan `config.hidden_size` dan `config.axial_pos_shape` diatur ke tuple $(n_s^1, n_s^2)$ yang hasilnya harus sama dengan `config.max_embedding_size`, yang selama pelatihan harus sama dengan *panjang sekuens* 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 query juga diikat. Self attention LSH menggunakan mekanisme locality sensitive hashing yang diusulkan dalam [Practical and Optimal LSH for Angular Distance](https://huggingface.co/papers/1509.02897) untuk menetapkan setiap vektor embedding key query yang diikat ke salah satu dari `config.num_buckets` bucket yang mungkin. Premisnya adalah bahwa semakin "serupa" vektor embedding key query satu sama lain (dalam hal *cosine similarity*), semakin besar kemungkinan mereka ditetapkan ke bucket yang sama.

Akurasi mekanisme LSH dapat ditingkatkan dengan menaikkan `config.num_hashes` atau langsung argumen `num_hashes` dari fungsi forward, sehingga keluaran LSH self attention lebih baik dalam mengaproksimasi keluaran self attention penuh yang "normal". Bucket-bucket tersebut kemudian diurutkan dan dipecah menjadi chunk 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](https://huggingface.co/papers/2001.04451) atau [artikel blog](https://www.pragmatic.ml/reformer-deep-dive/) 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` 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 $\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 $n_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 chunk sehingga pada setiap chunk dengan panjang `config.local_chunk_length`, vektor embedding query hanya memperhatikan vektor embedding key di chunk-nya sendiri 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 $\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 $n_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 dari 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](/docs/transformers/main/id/model_doc/reformer#transformers.ReformerModelWithLMHead) harus digunakan sebagai berikut:

```python
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](../tasks/sequence_classification)
- [Panduan tugas question answering](../tasks/question_answering)
- [Panduan tugas pemodelan bahasa kausal](../tasks/language_modeling)
- [Panduan tugas pemodelan bahasa tersembunyi](../tasks/masked_language_modeling)

## ReformerConfig[[transformers.ReformerConfig]]

#### transformers.ReformerConfig[[transformers.ReformerConfig]]

```python
transformers.ReformerConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, attention_head_size: int = 64, attn_layers: list[str] | tuple[str, ...] = ('local', 'lsh', 'local', 'lsh', 'local', 'lsh'), axial_norm_std: float = 1.0, axial_pos_embds: bool = True, axial_pos_shape: list[int] | tuple[int, ...] = (64, 64), axial_pos_embds_dim: list[int] | tuple[int, ...] = (64, 192), chunk_size_lm_head: int = 0, eos_token_id: int | list[int] | None = 2, feed_forward_size: int = 512, hash_seed: int | None = None, hidden_act: str = 'relu', hidden_dropout_prob: float | int = 0.05, hidden_size: int = 256, initializer_range: float = 0.02, is_decoder: bool = False, layer_norm_eps: float = 1e-12, local_num_chunks_before: int = 1, local_num_chunks_after: int = 0, local_attention_probs_dropout_prob: float | int = 0.05, local_attn_chunk_length: int = 64, lsh_attn_chunk_length: int | None = 64, lsh_attention_probs_dropout_prob: float | None = 0.0, lsh_num_chunks_before: int | None = 1, lsh_num_chunks_after: int | None = 0, max_position_embeddings: int = 4096, num_attention_heads: int = 12, num_buckets: int | list[int] | None = None, num_hashes: int = 1, vocab_size: int = 320, tie_word_embeddings: bool = False, use_cache: bool = True, classifier_dropout: float | int | None = None, bos_token_id: int | None = None, pad_token_id: int | None = 0)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/reformer/configuration_reformer.py#L25)

**Parameter:**

attention_head_size (`int`, *opsional*, defaultnya 64) : Dimensi dari vektor kunci, kueri, dan nilai yang diproyeksikan

attn_layers (`list[str]`, *opsional*, defaultnya `["local", "lsh", "local", "lsh", "local", "lsh"]`) : Daftar tipe lapisan perhatian dalam urutan menaik. Dapat dipilih antara lapisan LSHSelfAttention (`"lsh"`) dan lapisan LocalSelfAttention (`"local"`). Untuk informasi lebih lanjut tentang lapisan LSHSelfAttention, lihat [LSH Self Attention](reformer#lsh-self-attention). Untuk informasi lebih lanjut tentang lapisan LocalSelfAttention, lihat [Local Self Attention](reformer#local-self-attention).

axial_norm_std (`float`, *opsional*, default 1.0) : Standar deviasi dari normal_initializer untuk menginisialisasi matriks bobot dari encoding posisi aksial.

axial_pos_embds (`bool`, *opsional*, defaultnya `True`) : Apakah akan menggunakan axial position embeddings atau tidak. Untuk informasi lebih lanjut tentang cara kerja axial position embeddings, lihat [Axial Position Encodings](reformer#axial-positional-encodings).

axial_pos_shape (`list[int]`, *opsional*, defaultnya `[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](reformer#axial-positional-encodings).

axial_pos_embds_dim (`list[int]`, *opsional*, defaultnya `[64, 192]`) : Dimensi embedding dari encoding posisi aksial. Jumlah dari dimensi embedding harus sama dengan ukuran tersembunyi. Untuk informasi lebih lanjut tentang cara kerja embedding posisi aksial, lihat [Axial Position Encodings](reformer#axial-positional-encodings).

chunk_size_lm_head (`int`, *opsional*, default 0) : Ukuran chunk dari lapisan head feed forward 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?](../glossary#feed-forward-chunking).

eos_token_id (`Union[int, list[int]]`, *opsional*, defaultnya `2`) : Token id yang digunakan untuk end-of-stream dalam kosakata.

feed_forward_size (`int`, *opsional*, defaultnya 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. Ini hanya harus diset 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*, defaultnya `0.05`) : Probabilitas dropout untuk semua lapisan fully connected di embeddings, encoder, dan pooler.

hidden_size (`int`, *opsional*, defaultnya `256`) : Dimensi dari representasi tersembunyi.

initializer_range (`float`, *opsional*, defaultnya `0.02`) : Deviasi standar dari truncated_normal_initializer untuk menginisialisasi semua matriks bobot.

is_decoder (`bool`, *opsional*, defaultnya `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*, defaultnya 64) : Panjang setiap chunk di lapisan perhatian lokal.

lsh_attn_chunk_length (`int`, *opsional*, default 64) : Panjang chunk yang memperhatikan dirinya sendiri dalam `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*, defaultnya `4096`) : Panjang urutan maksimum yang mungkin digunakan oleh model ini.

num_attention_heads (`int`, *opsional*, defaultnya `12`) : Jumlah kepala perhatian untuk setiap lapisan perhatian dalam decoder Transformer.

num_buckets (`int` atau `list[int]`, *opsional*) : Jumlah bucket, tempat vektor kueri kunci dapat "di-hash ke dalam" menggunakan skema locality sensitive hashing. Setiap vektor kunci kueri di-hash ke dalam hash di `1, ..., num_buckets`. Jumlah bucket juga dapat difaktorkan menjadi sebuah list untuk meningkatkan kompleksitas memori. Dalam kasus ini, setiap vektor kunci kueri di-hash ke dalam hash di `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-faktor) 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` menjadi, tetapi hashing juga menjadi lebih intensif dalam hal memori dan waktu.

vocab_size (`int`, *opsional*, defaultnya `320`) : Ukuran kosakata model. Menentukan jumlah token berbeda yang dapat direpresentasikan oleh `input_ids`.

tie_word_embeddings (`bool`, *opsional*, defaultnya `False`) : Apakah mengikat embedding bobot 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 dalam kosakata.

pad_token_id (`int`, *opsional*, defaultnya `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 sesuai dengan argumen yang ditentukan, yang mendefinisikan arsitektur model. Membuat instans konfigurasi dengan nilai bawaan akan menghasilkan konfigurasi yang serupa dengan konfigurasi dari [google/reformer-crime-and-punishment](https://huggingface.co/google/reformer-crime-and-punishment)

Objek konfigurasi mewarisi dari [PreTrainedConfig](/docs/transformers/main/id/main_classes/configuration#transformers.PreTrainedConfig) dan dapat digunakan untuk mengontrol keluaran model. Baca dokumentasi dari [PreTrainedConfig](/docs/transformers/main/id/main_classes/configuration#transformers.PreTrainedConfig) untuk informasi lebih lanjut.

Contoh:

```python
>>> 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[[transformers.ReformerTokenizer]]

#### transformers.ReformerTokenizer[[transformers.ReformerTokenizer]]

```python
transformers.ReformerTokenizer(vocab: str | dict[str, int] | None = None, merges: str | list[str] | None = None, eos_token: str = '</s>', unk_token: str = '<unk>', _spm_precompiled_charsmap: str | None = None, additional_special_tokens: list | None = None, **kwargs)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/reformer/tokenization_reformer.py#L31)

**Parameter:**

vocab_file (`str`) : file [SentencePiece](https://github.com/google/sentencepiece) (umumnya berekstensi *.spm*) yang berisi kosakata yang diperlukan untuk menginstansiasi tokenizer.

eos_token (`str`, *opsional*, defaultnya `"</s>"`) : Token akhir urutan. Saat membangun urutan menggunakan token khusus, ini bukan token yang digunakan untuk akhir urutan. Token yang digunakan adalah `sep_token`.

unk_token (`str`, *opsional*, defaultnya `"<unk>"`) : Token yang tidak diketahui. Token yang tidak ada dalam kosakata tidak dapat dikonversi menjadi ID dan akan diset sebagai token ini.

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](https://huggingface.co/docs/tokenizers/python/latest/components.html?highlight=bpe#models).

Tokenizer ini mewarisi dari [TokenizersBackend](/docs/transformers/main/id/main_classes/tokenizer#transformers.TokenizersBackend) yang berisi sebagian besar metode utama. Pengguna harus merujuk ke superclass ini untuk informasi lebih lanjut mengenai metode-metode tersebut.

#### save_vocabulary[[transformers.ReformerTokenizer.save_vocabulary]]

```python
save_vocabulary(save_directory: str, filename_prefix: str | None = None)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/tokenization_utils_tokenizers.py#L546)

## ReformerModel[[transformers.ReformerModel]]

#### transformers.ReformerModel[[transformers.ReformerModel]]

```python
transformers.ReformerModel(config: ReformerConfig)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/reformer/modeling_reformer.py#L1931)

**Parameter:**

config ([ReformerConfig](/docs/transformers/main/id/model_doc/reformer#transformers.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()](/docs/transformers/main/id/main_classes/model#transformers.PreTrainedModel.from_pretrained) untuk memuat bobot model.

Model Reformer polos yang menghasilkan hidden-states mentah tanpa head spesifik di atasnya.

Model ini mewarisi dari [PreTrainedModel](/docs/transformers/main/id/main_classes/model#transformers.PreTrainedModel). Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka ini untuk semua model (seperti mengunduh atau menyimpan, mengubah ukuran input embeddings, memangkas heads, dll.)

Model ini juga merupakan subclass dari [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#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[[transformers.ReformerModel.forward]]

```python
forward(input_ids: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.Tensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, num_hashes: int | None = None, past_buckets_states: transformers.models.reformer.modeling_reformer.ReformerDynamicCache | None = None, use_cache: bool | None = None, output_hidden_states: bool | None = None, output_attentions: bool | None = None, return_dict: bool | None = None, **kwargs)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/reformer/modeling_reformer.py#L1951)

**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](/docs/transformers/main/id/model_doc/auto#transformers.AutoTokenizer). Lihat [PreTrainedTokenizer.encode()](/docs/transformers/main/id/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) dan [PreTrainedTokenizer.__call__()](/docs/transformers/main/id/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) untuk detailnya. [Apa itu input ID?](../glossary#input-ids)

attention_mask (`torch.Tensor` dengan bentuk `(batch_size, sequence_length)`, *opsional*) : Mask untuk menghindari pelaksanaan attention pada indeks token padding. Nilai mask dipilih dalam `[0, 1]`:  - 1 untuk token yang **tidak di-mask**, - 0 untuk token yang **di-mask**.  [Apa itu attention masks?](../glossary#attention-mask)

position_ids (`torch.Tensor` dengan bentuk `(batch_size, sequence_length)`, *opsional*) : Indeks posisi token dari setiap urutan input dalam embedding posisi. Dipilih dalam rentang `[0, config.n_positions - 1]`.  [Apa itu position ID?](../glossary#position-ids)

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. Ini berguna jika Anda ingin lebih banyak kendali atas cara mengonversi indeks `input_ids` menjadi vektor terkait daripada matriks pencarian penanaman internal model.

num_hashes (`int`, *opsional*) : Jumlah putaran hashing yang harus dilakukan selama bucketing. Menetapkan argumen ini menimpa nilai default yang didefinisikan dalam `config.num_hashes`. Untuk informasi lebih lanjut, lihat `num_hashes` di [ReformerConfig](/docs/transformers/main/id/model_doc/reformer#transformers.ReformerConfig).

past_buckets_states (`ReformerDynamicCache`, *opsional*) : List of `tuple(torch.LongTensor, torch.Tensor` of length `config.n_layers`, dengan elemen pertama berupa *buckets* sebelumnya dengan bentuk `(batch_size, num_heads, num_hashes, sequence_length)`) dan elemen kedua berupa *hidden_states* sebelumnya dengan bentuk `(batch_size, sequence_length, hidden_size)`). Berisi hidden-states dan buckets yang telah dihitung sebelumnya (hanya relevan untuk LSH Self-Attention). Dapat digunakan untuk mempercepat decoding berurutan.

use_cache (`bool`, *opsional*) : Jika diatur 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 perhatian dari semua lapisan perhatian. Lihat `attentions` di bawah tensor yang dikembalikan untuk detail lebih lanjut.

return_dict (`bool`, *opsional*) : Apakah akan mengembalikan [ModelOutput](/docs/transformers/main/id/main_classes/output#transformers.utils.ModelOutput) alih-alih tuple biasa.

**Mengembalikan:** `ReformerModelOutput` atau `tuple(torch.Tensor)`

A `ReformerModelOutput` atau tuple dari `torch.Tensor` (jika `return_dict=False` dilewatkan atau ketika `config.return_dict=False`) yang terdiri dari berbagai elemen tergantung pada konfigurasi ([ReformerConfig](/docs/transformers/main/id/model_doc/reformer#transformers.ReformerConfig)) dan input.

Metode forward dari [ReformerModel](/docs/transformers/main/id/model_doc/reformer#transformers.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.Tensor` 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.Tensor)]`, *opsional*, dikembalikan ketika `use_cache=True` dilewatkan atau ketika `config.use_cache=True`) -- Daftar `tuple(torch.LongTensor, torch.Tensor` 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)`).

  Berisi bucket dan hidden-states yang telah dihitung sebelumnya, yang dapat digunakan (lihat input `past_buckets_states`) untuk mempercepat decoding berurutan.
- **hidden_states** (`tuple[torch.Tensor]`, *opsional*, dikembalikan ketika `output_hidden_states=True` dilewatkan atau ketika `config.output_hidden_states=True`) -- Tuple dari `torch.Tensor` (satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk `(batch_size, sequence_length, hidden_size)`.

  Hidden-states model pada output setiap layer ditambah output embedding awal yang opsional.
- **attentions** (`tuple[torch.Tensor]`, *opsional*, dikembalikan ketika `output_attentions=True` dilewatkan atau ketika `config.output_attentions=True`) -- Tuple dari `torch.Tensor` (satu untuk setiap layer) dengan bentuk `(batch_size, num_heads, sequence_length, sequence_length)`.

  Bobot perhatian setelah softmax perhatian, digunakan untuk menghitung rata-rata berbobot di kepala self-attention.

## ReformerModelWithLMHead[[transformers.ReformerModelWithLMHead]]

#### transformers.ReformerModelWithLMHead[[transformers.ReformerModelWithLMHead]]

```python
transformers.ReformerModelWithLMHead(config: ReformerConfig)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/reformer/modeling_reformer.py#L2150)

**Parameter:**

config ([ReformerConfig](/docs/transformers/main/id/model_doc/reformer#transformers.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()](/docs/transformers/main/id/main_classes/model#transformers.PreTrainedModel.from_pretrained) untuk memuat bobot model.

Model Reformer dengan kepala `language modeling` di atasnya.

Model ini mewarisi dari [PreTrainedModel](/docs/transformers/main/id/main_classes/model#transformers.PreTrainedModel). Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka ini untuk semua model (seperti mengunduh atau menyimpan, mengubah ukuran input embeddings, memangkas heads, dll.)

Model ini juga merupakan subclass dari [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#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[[transformers.ReformerModelWithLMHead.forward]]

```python
forward(input_ids: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, num_hashes: int | None = None, past_buckets_states: list[tuple[torch.Tensor]] | None = None, use_cache: bool | None = None, output_hidden_states: bool | None = None, output_attentions: bool | None = None, return_dict: bool | None = None, labels: typing.Optional[torch.Tensor] = None, logits_to_keep: typing.Union[int, torch.Tensor] = 0, **kwargs)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/reformer/modeling_reformer.py#L2176)

**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](/docs/transformers/main/id/model_doc/auto#transformers.AutoTokenizer). Lihat [PreTrainedTokenizer.encode()](/docs/transformers/main/id/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) dan [PreTrainedTokenizer.__call__()](/docs/transformers/main/id/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) untuk detailnya. [Apa itu input ID?](../glossary#input-ids)

position_ids (`torch.Tensor` dengan bentuk `(batch_size, sequence_length)`, *opsional*) : Indeks posisi token dari setiap urutan input dalam embedding posisi. Dipilih dalam rentang `[0, config.n_positions - 1]`.  [Apa itu position ID?](../glossary#position-ids)

attention_mask (`torch.Tensor` dengan bentuk `(batch_size, sequence_length)`, *opsional*) : Mask untuk menghindari pelaksanaan attention pada indeks token padding. Nilai mask dipilih dalam `[0, 1]`:  - 1 untuk token yang **tidak di-mask**, - 0 untuk token yang **di-mask**.  [Apa itu attention masks?](../glossary#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. Ini berguna jika Anda ingin lebih banyak kendali atas cara mengonversi indeks `input_ids` menjadi vektor terkait daripada matriks pencarian penanaman internal model.

num_hashes (`int`, *opsional*) : Jumlah putaran hashing yang harus dilakukan selama bucketing. Menetapkan argumen ini menimpa nilai default yang didefinisikan dalam `config.num_hashes`. Untuk informasi lebih lanjut, lihat `num_hashes` di [ReformerConfig](/docs/transformers/main/id/model_doc/reformer#transformers.ReformerConfig).

past_buckets_states (`list[tuple(torch.LongTensor, torch.Tensor)]`, *opsional*) : Daftar `tuple(torch.LongTensor, torch.Tensor` 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)`). Berisi hidden-states dan buckets yang telah dihitung sebelumnya (hanya relevan untuk LSH Self-Attention). Dapat digunakan untuk mempercepat decoding berurutan.

use_cache (`bool`, *opsional*) : Jika diatur 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 perhatian dari semua lapisan perhatian. Lihat `attentions` di bawah tensor yang dikembalikan untuk detail lebih lanjut.

return_dict (`bool`, *opsional*) : Apakah akan mengembalikan [ModelOutput](/docs/transformers/main/id/main_classes/output#transformers.utils.ModelOutput) alih-alih tuple biasa.

labels (`torch.LongTensor` dengan bentuk `(batch_size,)`, *opsional*) : Label untuk menghitung loss klasifikasi/regresi urutan. 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*, defaultnya `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](/docs/transformers/main/id/main_classes/output#transformers.modeling_outputs.CausalLMOutput) atau `tuple(torch.Tensor)`

A [CausalLMOutput](/docs/transformers/main/id/main_classes/output#transformers.modeling_outputs.CausalLMOutput) atau tuple dari `torch.Tensor` (jika `return_dict=False` dilewatkan atau ketika `config.return_dict=False`) yang terdiri dari berbagai elemen tergantung pada konfigurasi ([ReformerConfig](/docs/transformers/main/id/model_doc/reformer#transformers.ReformerConfig)) dan input.

Metode forward dari [ReformerModelWithLMHead](/docs/transformers/main/id/model_doc/reformer#transformers.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.Tensor` dengan bentuk `(1,)`, *opsional*, dikembalikan saat `labels` disediakan) -- Loss pemodelan bahasa (untuk prediksi token berikutnya).
- **logits** (`torch.Tensor` 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.Tensor)`, *opsional*, dikembalikan saat `output_hidden_states=True` dilewatkan atau saat `config.output_hidden_states=True`) -- Tuple dari `torch.Tensor` (satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk `(batch_size, sequence_length, hidden_size)`.

  Hidden-states model pada output setiap layer ditambah output embedding awal yang opsional.
- **attentions** (`tuple(torch.Tensor)`, *opsional*, dikembalikan ketika `output_attentions=True` dilewatkan atau ketika `config.output_attentions=True`) -- Tuple dari `torch.Tensor` (satu untuk setiap layer) dengan bentuk `(batch_size, num_heads, sequence_length, sequence_length)`.

  Bobot perhatian setelah softmax perhatian, digunakan untuk menghitung rata-rata berbobot di kepala self-attention.

Contoh:

```python
>>> 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[[transformers.ReformerForMaskedLM]]

#### transformers.ReformerForMaskedLM[[transformers.ReformerForMaskedLM]]

```python
transformers.ReformerForMaskedLM(config: ReformerConfig)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/reformer/modeling_reformer.py#L2287)

**Parameter:**

config ([ReformerConfig](/docs/transformers/main/id/model_doc/reformer#transformers.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()](/docs/transformers/main/id/main_classes/model#transformers.PreTrainedModel.from_pretrained) untuk memuat bobot model.

Model Reformer dengan kepala `language modeling` di atasnya."

Model ini mewarisi dari [PreTrainedModel](/docs/transformers/main/id/main_classes/model#transformers.PreTrainedModel). Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka ini untuk semua model (seperti mengunduh atau menyimpan, mengubah ukuran input embeddings, memangkas heads, dll.)

Model ini juga merupakan subclass dari [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#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[[transformers.ReformerForMaskedLM.forward]]

```python
forward(input_ids: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, num_hashes: int | None = None, labels: typing.Optional[torch.Tensor] = None, output_hidden_states: bool | None = None, output_attentions: bool | None = None, return_dict: bool | None = None, **kwargs)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/reformer/modeling_reformer.py#L2307)

**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](/docs/transformers/main/id/model_doc/auto#transformers.AutoTokenizer). Lihat [PreTrainedTokenizer.encode()](/docs/transformers/main/id/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) dan [PreTrainedTokenizer.__call__()](/docs/transformers/main/id/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) untuk detailnya. [Apa itu input ID?](../glossary#input-ids)

position_ids (`torch.Tensor` dengan bentuk `(batch_size, sequence_length)`, *opsional*) : Indeks posisi token dari setiap urutan input dalam embedding posisi. Dipilih dalam rentang `[0, config.n_positions - 1]`.  [Apa itu position ID?](../glossary#position-ids)

attention_mask (`torch.Tensor` dengan bentuk `(batch_size, sequence_length)`, *opsional*) : Mask untuk menghindari pelaksanaan attention pada indeks token padding. Nilai mask dipilih dalam `[0, 1]`:  - 1 untuk token yang **tidak di-mask**, - 0 untuk token yang **di-mask**.  [Apa itu attention masks?](../glossary#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. Ini berguna jika Anda ingin lebih banyak kendali atas cara mengonversi indeks `input_ids` menjadi vektor terkait daripada matriks pencarian penanaman internal model.

num_hashes (`int`, *opsional*) : Jumlah putaran hashing yang harus dilakukan selama bucketing. Menetapkan argumen ini menimpa nilai default yang didefinisikan dalam `config.num_hashes`. Untuk informasi lebih lanjut, lihat `num_hashes` di [ReformerConfig](/docs/transformers/main/id/model_doc/reformer#transformers.ReformerConfig).

labels (`torch.LongTensor` dengan bentuk `(batch_size, sequence_length)`, *opsional*) : Label untuk menghitung kerugian pemodelan bahasa tersembunyi (masked language modeling). Indeks harus berada dalam `[-100, 0, ..., config.vocab_size]` (lihat docstring `input_ids`) Token dengan indeks yang disetel ke `-100` diabaikan (disembunyikan), kerugian hanya dihitung untuk token dengan label    Contoh ini menggunakan checkpoint palsu karena kami tidak memiliki model terlatih yang tersedia untuk tugas pemodelan bahasa tersembunyi 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 perhatian dari semua lapisan perhatian. Lihat `attentions` di bawah tensor yang dikembalikan untuk detail lebih lanjut.

return_dict (`bool`, *opsional*) : Apakah akan mengembalikan [ModelOutput](/docs/transformers/main/id/main_classes/output#transformers.utils.ModelOutput) alih-alih tuple biasa.

**Mengembalikan:** [MaskedLMOutput](/docs/transformers/main/id/main_classes/output#transformers.modeling_outputs.MaskedLMOutput) atau `tuple(torch.Tensor)`

[MaskedLMOutput](/docs/transformers/main/id/main_classes/output#transformers.modeling_outputs.MaskedLMOutput) atau tuple dari `torch.Tensor` (jika `return_dict=False` diteruskan atau ketika `config.return_dict=False`) yang terdiri dari berbagai elemen tergantung pada konfigurasi ([ReformerConfig](/docs/transformers/main/id/model_doc/reformer#transformers.ReformerConfig)) dan input.

Metode forward dari [ReformerForMaskedLM](/docs/transformers/main/id/model_doc/reformer#transformers.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.Tensor` dengan bentuk `(1,)`, *opsional*, dikembalikan ketika `labels` diberikan) -- Masked language modeling (MLM) loss.
- **logits** (`torch.Tensor` 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.Tensor)`, *opsional*, dikembalikan saat `output_hidden_states=True` dilewatkan atau saat `config.output_hidden_states=True`) -- Tuple dari `torch.Tensor` (satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk `(batch_size, sequence_length, hidden_size)`.

  Hidden-states model pada output setiap layer ditambah output embedding awal yang opsional.
- **attentions** (`tuple(torch.Tensor)`, *opsional*, dikembalikan ketika `output_attentions=True` dilewatkan atau ketika `config.output_attentions=True`) -- Tuple dari `torch.Tensor` (satu untuk setiap layer) dengan bentuk `(batch_size, num_heads, sequence_length, sequence_length)`.

  Bobot perhatian setelah softmax perhatian, digunakan untuk menghitung rata-rata berbobot di kepala self-attention.

Contoh:

```python
>>> 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)
```

```python
>>> 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[[transformers.ReformerForSequenceClassification]]

#### transformers.ReformerForSequenceClassification[[transformers.ReformerForSequenceClassification]]

```python
transformers.ReformerForSequenceClassification(config: ReformerConfig)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/reformer/modeling_reformer.py#L2425)

**Parameter:**

config ([ReformerConfig](/docs/transformers/main/id/model_doc/reformer#transformers.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()](/docs/transformers/main/id/main_classes/model#transformers.PreTrainedModel.from_pretrained) untuk memuat bobot model.

Model transformer Reformer dengan kepala klasifikasi/regresi urutan di atasnya (lapisan linear di atas output yang dipooling), misalnya untuk tugas GLUE.

Model ini mewarisi dari [PreTrainedModel](/docs/transformers/main/id/main_classes/model#transformers.PreTrainedModel). Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka ini untuk semua model (seperti mengunduh atau menyimpan, mengubah ukuran input embeddings, memangkas heads, dll.)

Model ini juga merupakan subclass dari [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#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[[transformers.ReformerForSequenceClassification.forward]]

```python
forward(input_ids: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, num_hashes: int | None = None, labels: typing.Optional[torch.Tensor] = None, output_hidden_states: bool | None = None, output_attentions: bool | None = None, return_dict: bool | None = None, **kwargs)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/reformer/modeling_reformer.py#L2439)

**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](/docs/transformers/main/id/model_doc/auto#transformers.AutoTokenizer). Lihat [PreTrainedTokenizer.encode()](/docs/transformers/main/id/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) dan [PreTrainedTokenizer.__call__()](/docs/transformers/main/id/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) untuk detailnya. [Apa itu input ID?](../glossary#input-ids)

position_ids (`torch.Tensor` dengan bentuk `(batch_size, sequence_length)`, *opsional*) : Indeks posisi token dari setiap urutan input dalam embedding posisi. Dipilih dalam rentang `[0, config.n_positions - 1]`.  [Apa itu position ID?](../glossary#position-ids)

attention_mask (`torch.Tensor` dengan bentuk `(batch_size, sequence_length)`, *opsional*) : Mask untuk menghindari pelaksanaan attention pada indeks token padding. Nilai mask dipilih dalam `[0, 1]`:  - 1 untuk token yang **tidak di-mask**, - 0 untuk token yang **di-mask**.  [Apa itu attention masks?](../glossary#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. Ini berguna jika Anda ingin lebih banyak kendali atas cara mengonversi indeks `input_ids` menjadi vektor terkait daripada matriks pencarian penanaman internal model.

num_hashes (`int`, *opsional*) : Jumlah putaran hashing yang harus dilakukan selama bucketing. Menetapkan argumen ini menimpa nilai default yang didefinisikan dalam `config.num_hashes`. Untuk informasi lebih lanjut, lihat `num_hashes` di [ReformerConfig](/docs/transformers/main/id/model_doc/reformer#transformers.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 perhatian dari semua lapisan perhatian. Lihat `attentions` di bawah tensor yang dikembalikan untuk detail lebih lanjut.

return_dict (`bool`, *opsional*) : Apakah akan mengembalikan [ModelOutput](/docs/transformers/main/id/main_classes/output#transformers.utils.ModelOutput) alih-alih tuple biasa.

**Mengembalikan:** [SequenceClassifierOutput](/docs/transformers/main/id/main_classes/output#transformers.modeling_outputs.SequenceClassifierOutput) atau `tuple(torch.Tensor)`

A [SequenceClassifierOutput](/docs/transformers/main/id/main_classes/output#transformers.modeling_outputs.SequenceClassifierOutput) atau tuple dari `torch.Tensor` (jika `return_dict=False` dilewatkan atau ketika `config.return_dict=False`) yang terdiri dari berbagai elemen tergantung pada konfigurasi ([ReformerConfig](/docs/transformers/main/id/model_doc/reformer#transformers.ReformerConfig)) dan input.

Metode forward dari [ReformerForSequenceClassification](/docs/transformers/main/id/model_doc/reformer#transformers.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.Tensor` dengan bentuk `(1,)`, *opsional*, dikembalikan saat `labels` disediakan) -- Loss klasifikasi (atau regresi jika config.num_labels==1).
- **logits** (`torch.Tensor` dengan bentuk `(batch_size, config.num_labels)`) -- Skor klasifikasi (atau regresi jika config.num_labels==1) (sebelum SoftMax).
- **hidden_states** (`tuple(torch.Tensor)`, *opsional*, dikembalikan saat `output_hidden_states=True` dilewatkan atau saat `config.output_hidden_states=True`) -- Tuple dari `torch.Tensor` (satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk `(batch_size, sequence_length, hidden_size)`.

  Hidden-states model pada output setiap layer ditambah output embedding awal yang opsional.
- **attentions** (`tuple(torch.Tensor)`, *opsional*, dikembalikan ketika `output_attentions=True` dilewatkan atau ketika `config.output_attentions=True`) -- Tuple dari `torch.Tensor` (satu untuk setiap layer) dengan bentuk `(batch_size, num_heads, sequence_length, sequence_length)`.

  Bobot perhatian setelah softmax perhatian, digunakan untuk menghitung rata-rata berbobot di kepala self-attention.

Contoh klasifikasi label tunggal:

```python
>>> 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]
```

```python
>>> # 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[[transformers.ReformerForQuestionAnswering]]

#### transformers.ReformerForQuestionAnswering[[transformers.ReformerForQuestionAnswering]]

```python
transformers.ReformerForQuestionAnswering(config: ReformerConfig)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/reformer/modeling_reformer.py#L2572)

**Parameter:**

config ([ReformerConfig](/docs/transformers/main/id/model_doc/reformer#transformers.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()](/docs/transformers/main/id/main_classes/model#transformers.PreTrainedModel.from_pretrained) untuk memuat bobot model.

Transformator 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](/docs/transformers/main/id/main_classes/model#transformers.PreTrainedModel). Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka ini untuk semua model (seperti mengunduh atau menyimpan, mengubah ukuran input embeddings, memangkas heads, dll.)

Model ini juga merupakan subclass dari [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#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[[transformers.ReformerForQuestionAnswering.forward]]

```python
forward(input_ids: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, num_hashes: int | None = None, start_positions: typing.Optional[torch.Tensor] = None, end_positions: typing.Optional[torch.Tensor] = None, output_hidden_states: bool | None = None, output_attentions: bool | None = None, return_dict: bool | None = None, **kwargs)
```

[Sumber](https://github.com/huggingface/transformers/blob/main/src/transformers/models/reformer/modeling_reformer.py#L2584)

**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](/docs/transformers/main/id/model_doc/auto#transformers.AutoTokenizer). Lihat [PreTrainedTokenizer.encode()](/docs/transformers/main/id/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) dan [PreTrainedTokenizer.__call__()](/docs/transformers/main/id/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) untuk detailnya. [Apa itu input ID?](../glossary#input-ids)

position_ids (`torch.Tensor` dengan bentuk `(batch_size, sequence_length)`, *opsional*) : Indeks posisi token dari setiap urutan input dalam embedding posisi. Dipilih dalam rentang `[0, config.n_positions - 1]`.  [Apa itu position ID?](../glossary#position-ids)

attention_mask (`torch.Tensor` dengan bentuk `(batch_size, sequence_length)`, *opsional*) : Mask untuk menghindari pelaksanaan attention pada indeks token padding. Nilai mask dipilih dalam `[0, 1]`:  - 1 untuk token yang **tidak di-mask**, - 0 untuk token yang **di-mask**.  [Apa itu attention masks?](../glossary#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. Ini berguna jika Anda ingin lebih banyak kendali atas cara mengonversi indeks `input_ids` menjadi vektor terkait daripada matriks pencarian penanaman internal model.

num_hashes (`int`, *opsional*) : Jumlah putaran hashing yang harus dilakukan selama bucketing. Menetapkan argumen ini menimpa nilai default yang didefinisikan dalam `config.num_hashes`. Untuk informasi lebih lanjut, lihat `num_hashes` di [ReformerConfig](/docs/transformers/main/id/model_doc/reformer#transformers.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 di-clamp ke 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 perhatian dari semua lapisan perhatian. Lihat `attentions` di bawah tensor yang dikembalikan untuk detail lebih lanjut.

return_dict (`bool`, *opsional*) : Apakah akan mengembalikan [ModelOutput](/docs/transformers/main/id/main_classes/output#transformers.utils.ModelOutput) alih-alih tuple biasa.

**Mengembalikan:** [QuestionAnsweringModelOutput](/docs/transformers/main/id/main_classes/output#transformers.modeling_outputs.QuestionAnsweringModelOutput) atau `tuple(torch.Tensor)`

Sebuah [QuestionAnsweringModelOutput](/docs/transformers/main/id/main_classes/output#transformers.modeling_outputs.QuestionAnsweringModelOutput) atau tuple dari `torch.Tensor` (jika `return_dict=False` diteruskan atau ketika `config.return_dict=False`) yang terdiri dari berbagai elemen tergantung pada konfigurasi ([ReformerConfig](/docs/transformers/main/id/model_doc/reformer#transformers.ReformerConfig)) dan input.

Metode forward dari [ReformerForQuestionAnswering](/docs/transformers/main/id/model_doc/reformer#transformers.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.Tensor` dengan bentuk `(1,)`, *opsional*, dikembalikan saat `labels` disediakan) -- Total span extraction loss adalah jumlah dari Cross-Entropy untuk posisi awal dan akhir.
- **start_logits** (`torch.Tensor` dengan bentuk `(batch_size, sequence_length)`) -- Skor awal span (sebelum SoftMax).
- **end_logits** (`torch.Tensor` dengan bentuk `(batch_size, sequence_length)`) -- Skor akhir span (sebelum SoftMax).
- **hidden_states** (`tuple(torch.Tensor)`, *opsional*, dikembalikan saat `output_hidden_states=True` dilewatkan atau saat `config.output_hidden_states=True`) -- Tuple dari `torch.Tensor` (satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk `(batch_size, sequence_length, hidden_size)`.

  Hidden-states model pada output setiap layer ditambah output embedding awal yang opsional.
- **attentions** (`tuple(torch.Tensor)`, *opsional*, dikembalikan ketika `output_attentions=True` dilewatkan atau ketika `config.output_attentions=True`) -- Tuple dari `torch.Tensor` (satu untuk setiap layer) dengan bentuk `(batch_size, num_heads, sequence_length, sequence_length)`.

  Bobot perhatian setelah softmax perhatian, digunakan untuk menghitung rata-rata berbobot di kepala self-attention.

Contoh:

```python
>>> 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)
...
```

