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

Bu model 2020-01-13 tarihinde HF papers'ta yayımlandı ve 2020-11-16 tarihinde Hugging Face Transformers'a katkıda bulunuldu.

Reformer

Genel Bakış

Reformer modeli, Nikita Kitaev, Łukasz Kaiser ve Anselm Levskaya tarafından yazılan Reformer: The Efficient Transformer makalesinde önerilmiştir.

Makalenin özeti aşağıdaki gibidir:

Büyük Transformer modelleri, çeşitli görevlerde rutin olarak en iyi sonuçları elde eder; ancak bu modellerin eğitimi, özellikle uzun diziler üzerinde, son derece maliyetli olabilir. Transformer'ların verimliliğini artırmak için iki teknik sunuyoruz. Bunlardan ilkinde, nokta çarpımı dikkatini, yerel duyarlı özetleme (locality-sensitive hashing) kullanan bir dikkat mekanizmasıyla değiştiriyoruz; bu sayede karmaşıklığı O(L^2)'den O(Llog(L))'ye düşürüyoruz (burada L, dizinin uzunluğudur). Ayrıca, standart artıkları (residuals) yerine geri dönüşümlü artımlı katmanlar (reversible residual layers) kullanarak, eğitim sürecinde aktivasyonların N katman sayısı kadar yerine yalnızca bir kez saklanmasını sağlıyoruz. Sonuç olarak ortaya çıkan Reformer modeli, Transformer modelleriyle benzer performans gösterirken, bellek açısından çok daha verimli ve uzun diziler üzerinde çok daha hızlıdır.

Bu model patrickvonplaten tarafından katkıda bulunmuştur. Yazarların kodu burada bulunabilir.

Kullanım ipuçları

  • Reformer, PyTorch'taki bir hata nedeniyle torch.nn.DataParallel ile çalışmaz; bkz. issue #36035.
  • Axial position encoding kullanın (daha fazla ayrıntı için aşağıya bakın). Bu, dizin uzunluğu çok büyük olduğunda devasa bir konumsal kodlama matrisine sahip olmaktan kaçınmak için onu daha küçük matrislere çarpanlarına ayıran bir mekanizmadır.
  • Geleneksel dikkat mekanizmasını LSH (yerel duyarlı özetleme) dikkati ile değiştirin (daha fazla ayrıntı için aşağıya bakın). Bu, dikkat katmanlarında tam sorgu-anahtar çarpımını hesaplamaktan kaçınmayı amaçlayan bir tekniktir.
  • Ara katman sonuçlarını saklamaktan kaçınmak için, geriye yayılım sırasında bu sonuçları elde etmek üzere tersinir dönüştürücü katmanları kullanın (bir sonraki katmanın girdisinden artıkları çıkarmak bu sonuçları geri verir) veya belirli bir katmanın içindeki sonuçlar için bunları yeniden hesaplayın (saklamaktan daha az verimli olsa da bellek tasarrufu sağlar).
  • Feedforward işlemlerini tüm batch üzerinde değil, parçalar halinde (chunks) hesaplayın.

Aksiyel Konumsal Kodlamalar

Axial Positional Encodings ilk olarak Google'ın trax kütüphanesinde bu modelin makalesinin yazarları tarafından geliştirilmiştir. Çok uzun girdi dizilerini işleyen modellerde, geleneksel konum kimliği kodlamaları, boyutu dd olan config.hidden_size her $i, \ldots, n_s$ konumu için nsn_s olan config.max_embedding_size. Bu, bir dizi uzunluğunun ns=219≈0.5Mn_s = 2^{19} \approx 0.5M ve config.hidden_size değeri d=210≈1000d = 2^{10} \approx 1000 sonucunda bir konum kodlama matrisi elde edilmesine yol açar: 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]

tek başına 500M'den fazla parametrenin saklanmasını gerektirir. Aksiyel konumsal kodlamalar Xi,jX_{i,j} iki matrise ayrıştırılır: 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]

ve 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]

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

Dolayısıyla aşağıdaki geçerlidir: 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}

Bu sezgisel olarak, bir konum gömme vektörü xj∈Rdx_j \in \mathbb{R}^{d} artık iki faktörize edilmiş gömme vektörünün bileşimidir: $x^1{k, l} + x^2{l, k}$, burada config.max_embedding_size boyutu jj $k \text{ ve } l$ olarak faktörize edilir. Bu tasarım, her konum gömme vektörünün xjx_j benzersiz olmasını sağlar.

Yukarıdaki örneği tekrar kullanarak, eksenel konum kodlaması ile 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} parametre sayısı 500 000 000'den 218+219≈7800002^{18} + 2^{19} \approx 780 000 parametreye kadar büyük ölçüde azaltılabilir; bu da %85 daha az bellek kullanımı anlamına gelir.

Uygulamada config.axial_pos_embds_dim parametresi bir demete ayarlanır (d1,d2)(d^1, d^2) ve toplamı şu değerle eşit olmalıdır: config.hidden_size ve config.axial_pos_shape bir demete ayarlanır (ns1,ns2)(n_s^1, n_s^2) ve çarpımı şu değerle eşit olmalıdır: config.max_embedding_size, eğitim sırasında bu değer dizinin uzunluğuna eşit olmalıdır input_ids.

LSH Kendi Dikkati

Locality sensitive hashing (LSH) self attention'da anahtar ve sorgu projeksiyon ağırlıkları bağlıdır (tied). Bu nedenle, anahtar sorgu gömme vektörleri de bağlıdır. LSH self attention, Practical and Optimal LSH for Angular Distance makalesinde önerilen locality sensitive hashing mekanizmasını kullanarak, bağlı anahtar sorgu gömme vektörlerinin her birini config.num_buckets olası kovuk (bucket)tan birine atar. Temel varsayım, birbirine daha “benzer” olan anahtar sorgu gömme vektörlerinin (cosine similarity açısından) aynı kovuğa atanma olasılığının daha yüksek olmasıdır.

LSH mekanizmasının doğruluğu, LSH öz-dikkatinin çıktısının “normal” tam öz-dikkat çıktısını daha iyi yakıtlaması için config.num_hashes değerini artırarak veya forward fonksiyonunun num_hashes argümanını doğrudan artırarak iyileştirilebilir. Ardından kovalar sıralanır ve her biri config.lsh_chunk_length uzunluğunda sorgu-anahtar gömme vektörü parçalarına bölünür. Her parça için, sorgu gömme vektörleri kendi anahtar vektörlerine (kendileriyle eşlenmiş olanlara) ve config.lsh_num_chunks_before önceki komşu parçaların ile config.lsh_num_chunks_after sonraki komşu parçaların anahtar gömme vektörlerine dikkat eder.

Daha fazla bilgi için orijinal makaleye veya bu harika blog yazısına bakın.

config.num_buckets'ün $(n{\text{buckets}}^1, n{\text{buckets}}^2)$ şeklinde bir listeye ayrıştırılabileceğini de unutmayın. Bu sayede sorgu anahtar gömme vektörleri $(1,\ldots, n{\text{buckets}})$ değerlerinden birine atanmak yerine $(1-1,\ldots, n{\text{buckets}}^1-1, \ldots, 1-n{\text{buckets}}^2, \ldots, n{\text{buckets}}^1-n_{\text{buckets}}^2)$ değerlerinden birine atanır. Bu, çok uzun dizilerde bellek tasarrufu sağlamak için hayati önem taşır.

Bir modeli sıfırdan eğitirken, config.num_buckets=None bırakılması önerilir; böylece num_buckets için iyi bir değer, dizi uzunluğuna bağlı olarak anlık olarak hesaplanır. Bu değer daha sonra otomatik olarak yapılandırmaya kaydedilir ve çıkarım için yeniden kullanılmalıdır.

LSH self attention kullanılarak, sorgu-anahtar matris çarpımı işleminin bellek ve zaman karmaşıklığı O(ns×ns)\mathcal{O}(n_s \times n_s) düzeyinden, genellikle bir transformer modelinde bellek ve zaman darboğazını oluşturan nsn_s dizinin uzunluğu olarak tanımlanan

Yerel Kendi Dikkati

Yerel öz-dikkat, temel olarak anahtar, sorgu ve değer projeksiyonlarına sahip “normal” bir öz-dikkat katmanıdır; ancak config.local_chunk_length uzunluğundaki her parçada, sorgu gömme vektörleri yalnızca kendi parçasındaki anahtar gömme vektörlerine, config.local_num_chunks_before önceki komşu parçalardaki anahtar gömme vektörlerine ve config.local_num_chunks_after sonraki komşu parçalardaki anahtar gömme vektörlerine dikkat eder.

Yerel self attention kullanılarak, sorgu-anahtar matris çarpım işleminin bellek ve zaman karmaşıklığı O(ns×ns)\mathcal{O}(n_s \times n_s) şeklinde nsn_s olur; burada

Eğitim

Eğitim sırasında, dizi uzunluğunun config.lsh_chunk_length ve config.local_chunk_length değerlerinin en küçük ortak katına bölünebilecek bir değere ayarlandığından ve Yukarıda açıklandığı gibi Axial Positional Encodings parametrelerinin doğru şekilde ayarlandığından emin olmalıyız. Reformer çok bellek verimlidir, bu nedenle model 64000 token'a kadar uzunlukta diziler üzerinde kolayca eğitilebilir.

Eğitim için ReformerModelWithLMHead aşağıdaki gibi kullanılmalıdır:

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]

Kaynaklar

ReformerConfig

sınıf 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 )

Parametreler

  • attention_head_size (int, isteğe bağlı, varsayılan 64) — Projeksiyonlanmış anahtar, sorgu ve değer vektörlerinin boyutu
  • attn_layers (list[str], isteğe bağlı, varsayılan ["local", "lsh", "local", "lsh", "local", "lsh"]) — Artan sırada dikkat katmanı türlerinin listesi. Bir LSHSelfAttention katmanı ("lsh") ile bir LocalSelfAttention katmanı ("local") arasında seçim yapılabilir. LSHSelfAttention katmanı hakkında daha fazla bilgi için LSH Self Attention bölümüne bakın. LocalSelfAttention katmanı hakkında daha fazla bilgi için Local Self Attention bölümüne bakın.
  • axial_norm_std (float, isteğe bağlı, varsayılan 1.0) — Aksiyel konumsal kodlamaların ağırlık matrislerini başlatmak için normal_initializer'in standart sapması.
  • axial_pos_embds (bool, isteğe bağlı, varsayılan True) — Aksiyel konum gömme kullanılıp kullanılmayacağı. Aksiyel konum kodlamalarının nasıl çalıştığına dair daha fazla bilgi için Aksiyel Konum Kodlamaları bölümüne bakın.
  • axial_pos_shape (list[int], isteğe bağlı, varsayılan [64, 64]) — Aksiyel konum kodlamalarının konum boyutları. Eğitim sırasında, konum boyutlarının çarpımı dizinin uzunluğuna eşit olmalıdır. Aksiyel konum gömme işlemlerinin nasıl çalıştığına dair daha fazla bilgi için Axial Position Encodings bölümüne bakın.
  • axial_pos_embds_dim (list[int], isteğe bağlı, varsayılan [64, 192]) — Aksiyel konum kodlamalarının gömme boyutları. Gömme boyutlarının toplamı, gizli boyuta eşit olmalıdır. Aksiyel konum gömmelerinin nasıl çalıştığına dair daha fazla bilgi için Aksiyel Konum Kodlamaları bölümüne bakın.
  • chunk_size_lm_head (int, isteğe bağlı, varsayılan 0) — Son dil modeli ileri beslemeli (feed forward) baş katmanının parça boyutu. Parça boyutunun 0 olması, ileri beslemeli katmanın parçalanmadığı anlamına gelir. Parça boyutunun n olması, ileri beslemeli katmanın her seferinde n < sequence_length gömme (embedding) işlediği anlamına gelir. İleri beslemeli parçalama hakkında daha fazla bilgi için İleri Beslemeli Parçalama Nasıl Çalışır? bölümüne bakın.
  • eos_token_id (Union[int, list[int]], isteğe bağlı, varsayılan 2) — Sözlükte akış sonu için kullanılan token kimliği.
  • feed_forward_size (int, isteğe bağlı, varsayılan 512) — Artık dikkat bloğundaki feed_forward katmanının boyutluluğu.
  • hash_seed (int, isteğe bağlı) — LSHSelfAttention içindeki yerel hassas özlendirmeyi (local sensitive hashing) deterministik hale getirmek için kullanılabilecek tohum. Bu değer yalnızca test amaçlı olarak ayarlanmalıdır. Değerlendirme ve eğitim amaçları için, yerel hassas özlendirme şemasında tamamen rastgele dönmelerden emin olmak adına hash_seed değeri None olarak bırakılmalıdır.
  • hidden_act (str, isteğe bağlı, varsayılan relu) — Çözücüdeki doğrusal olmayan aktivasyon fonksiyonu (fonksiyon veya dize). Örneğin, "gelu", "relu", "silu" vb.
  • hidden_dropout_prob (Union[float, int], isteğe bağlı, varsayılan 0.05) — Gömme, kodlayıcı ve havuzlayıcıdaki tüm tam bağlı katmanlar için dropout olasılığı.
  • hidden_size (int, isteğe bağlı, varsayılan 256) — Gizli temsillerin boyutu.
  • initializer_range (float, isteğe bağlı, varsayılan 0.02) — Tüm ağırlık matrislerini başlatmak için kullanılan truncated_normal_initializer'ın standart sapması.
  • is_decoder (bool, isteğe bağlı, varsayılan False) — Modelin bir decoder olarak kullanılıp kullanılmadığı. False ise model bir encoder olarak kullanılır.
  • layer_norm_eps (float, isteğe bağlı, varsayılan 1e-12) — Katman normalizasyon katmanları tarafından kullanılan epsilon.
  • local_num_chunks_before (int, isteğe bağlı, varsayılan 1) — LocalSelfAttention katmanında kendisine dikkat etmesi için dikkate alınan önceki komşu parçaların sayısı.
  • local_num_chunks_after (int, isteğe bağlı, varsayılan 0) — LocalSelfAttention katmanında, kendisine ek olarak dikkat edilecek ardışık komşu parçaların sayısı.
  • local_attention_probs_dropout_prob (float, isteğe bağlı, varsayılan 0.1) — LocalSelfAttention içindeki dikkat olasılıkları için dropout oranı.
  • local_attn_chunk_length (int, isteğe bağlı, varsayılan 64) — Yerel dikkat katmanlarında her parçanın uzunluğu.
  • lsh_attn_chunk_length (int, isteğe bağlı, varsayılan 64) — LSHSelfAttention içinde kendisine dikkat eden parçanın uzunluğu. Parçalama, bellek karmaşıklığını dizi uzunluğu x dizi uzunluğu (kendi kendine dikkat) değerinden, parça uzunluğu x parça uzunluğu x dizi uzunluğu / parça uzunluğu (parçalı kendi kendine dikkat) değerine düşürür.
  • lsh_attention_probs_dropout_prob (float, isteğe bağlı, varsayılan 0.1) — LSHSelfAttention içindeki dikkat olasılıkları için dropout oranı.
  • lsh_num_chunks_before (int, isteğe bağlı, varsayılan 1) — LSHSelfAttention katmanında kendisine dikkat etmesi için dikkate alınan önceki komşu parçaların sayısı.
  • lsh_num_chunks_after (int, isteğe bağlı, varsayılan 0) — LSHSelfAttention katmanında kendisine dikkat etmesi gereken ardışık komşu parçaların sayısı.
  • max_position_embeddings (int, isteğe bağlı, varsayılan 4096) — Bu modelin kullanılabileceği en uzun dizi uzunluğu.
  • num_attention_heads (int, isteğe bağlı, varsayılan 12) — Transformer decoder'ındaki her dikkat katmanı için dikkat başı sayısı.
  • num_buckets (int veya list[int], isteğe bağlı) — Bölme sayısı, anahtar sorgu vektörlerinin yerel duyarlı örnekleme (locality sensitive hashing) şeması kullanılarak “hash’lenebileceği” bölme sayısıdır. Her sorgu anahtar vektörü, 1, ..., num_buckets aralığında bir hash’e hash’lenir. Bellek karmaşıklığını iyileştirmek için bölme sayısı, bir liste olarak çarpanlarına ayrılabilir. Bu durumda, her sorgu anahtar vektörü, num_buckets iki çarpana ayrıldığında 1-1, 1-2, ..., num_buckets[0]-1, ..., num_buckets[0]-num_buckets[1] aralığında bir hash’e hash’lenir. Bölme sayısı (veya çarpanların çarpımı), yaklaşık olarak dizi uzunluğu / lsh_chunk_length değerine eşit olmalıdır. num_buckets ayarlanmadıysa, uygun bir değer çalışma anında hesaplanır.
  • num_hashes (int, isteğe bağlı, varsayılan 1) — Local Sensitive Hashing şemasında hashleme turlarının sayısı (ör. rastgele rotasyonların sayısı). num_hashes değeri ne kadar yüksek olursa LSHSelfAttention o kadar doğru hale gelir, ancak hashleme işlemi de o kadar fazla bellek ve zaman gerektirir.
  • vocab_size (int, isteğe bağlı, varsayılan 320) — Modelin sözlük boyutu. input_ids ile temsil edilebilecek farklı token sayısını belirler.
  • tie_word_embeddings (bool, isteğe bağlı, varsayılan False) — Modelin tied_weights_keys eşlemesine göre ağırlık gömme bağlamalarının yapılıp yapılmayacağı.
  • use_cache (bool, isteğe bağlı, varsayılan True) — Modelin son anahtar/değer dikkatlerini (tüm modellerde kullanılmaz) döndürüp döndürmeyeceği. Yalnızca config.is_decoder=True olduğunda veya model yalnızca çözücü tabanlı üretken bir model olduğunda geçerlidir.
  • classifier_dropout (Union[float, int], isteğe bağlı) — Sınıflandırıcı için dropout oranı.
  • bos_token_id (int, isteğe bağlı) — Sözlükte akış başlangıcı için kullanılan token kimliği.
  • pad_token_id (int, isteğe bağlı, varsayılan 0) — Sözlükte dolgu için kullanılan token kimliği.

Bu, bir ReformerModel yapılandırmasını depolamak için kullanılan yapılandırma sınıfıdır. Belirtilen argümanlara göre bir Reformer modelini örneklemek ve model mimarisini tanımlamak için kullanılır. Varsayılan değerlerle bir yapılandırma örneklendiğinde, google/reformer-crime-and-punishment ile benzer bir yapılandırma elde edilir.

Yapılandırma nesneleri PreTrainedConfig sınıfından devralır ve model çıktılarını kontrol etmek için kullanılabilir. Daha fazla bilgi için PreTrainedConfig belgesini okuyun.

Örnekler:

>>> 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

sınıf 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 )

Parametreler

  • vocab_file (str) — Bir tokenizer örneği oluşturmak için gerekli sözlüğü içeren SentencePiece dosyası (genellikle .spm uzantısına sahiptir).
  • eos_token (str, isteğe bağlı, varsayılan olarak "</s>") — Dizi sonu belirteci. Özel belirteçler kullanılarak bir dizi oluşturulduğunda, dizi sonu için kullanılan belirteç bu değildir. Kullanılan belirteç sep_token'dir.

    Özel jetonlar kullanılarak bir dizi oluşturulduğunda, dizinin sonu için kullanılan jeton bu değildir. Kullanılan jeton sep_token'dir.

  • unk_token (str, isteğe bağlı, varsayılan "<unk>") — Bilinmeyen token. Sözlükte yer almayan bir token, bir kimliğe dönüştürülemez ve bunun yerine bu token olarak ayarlanır.
  • pad_token (str, isteğe bağlı, varsayılan "<pad>") — Doldurma için kullanılan jeton, örneğin farklı uzunluklardaki dizileri toplu işleme (batching) sırasında.
  • additional_special_tokens (list[str], isteğe bağlı) — Tokenizör tarafından kullanılan ek özel tokenlar.
  • vocab (str veya dict[str, int], isteğe bağlı) — Özel sözlük. Sağlanmazsa, sözlük vocab_file içinden yüklenir.
  • merges (str veya list[str], isteğe bağlı) — Özel birleştirmeler listesi. Sağlanmazsa, birleştirmeler vocab_file içinden yüklenir.

Bir Reformer tokenizer'ı oluşturun (HuggingFace'in tokenizers kütüphanesi tarafından desteklenir). BPE tabanlıdır.

Bu tokenizer, ana yöntemlerin çoğunu içeren TokenizersBackend sınıfından devralır. Kullanıcıların bu yöntemlerle ilgili daha fazla bilgi için bu üst sınıfa başvurması gerekir.

save_vocabulary

< >

( save_directory: strfilename_prefix: str | None = None )

ReformerModel

sınıf transformers.ReformerModel

< >

( config: ReformerConfig )

Parametreler

  • config (ReformerConfig) — Modelin tüm parametrelerini içeren model yapılandırma sınıfı. Bir yapılandırma dosyasıyla başlatmak, modelle ilişkili ağırlıkları yüklemez, yalnızca yapılandırmayı yükler. Model ağırlıklarını yüklemek için from_pretrained() yöntemine bakın.

Üzerinde herhangi bir özel başlık olmadan ham gizli durumları (hidden-states) üreten çıplak Reformer Modeli.

Bu model PreTrainedModel sınıfından devralır. Kütüphanenin tüm modelleri için uyguladığı genel yöntemler (indirme veya kaydetme, giriş gömme boyutlarını yeniden boyutlandırma, başları budama vb.) için üst sınıf belgelendirmesine bakın.

Bu model aynı zamanda bir PyTorch torch.nn.Module alt sınıfıdır. Bunu standart bir PyTorch Module olarak kullanın ve genel kullanım ve davranışla ilgili tüm konular için PyTorch dokümantasyonuna başvurun.

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.Tensor)

Parametreler

  • input_ids (torch.LongTensor şeklinde (batch_size, sequence_length)) — Sözlükteki girdi dizisi belirteçlerinin (token) indeksleri. Eğitim sırasında input_ids dizisinin sequence_length değeri, ilgili modelin parça uzunluklarının (lsh, local veya her ikisi) katı olmak zorundadır. Değerlendirme sırasında indeksler, parça uzunluğunun katı olacak şekilde otomatik olarak dolgu (padding) ile tamamlanır.

    Dizinler AutoTokenizer kullanılarak elde edilebilir. Ayrıntılar için PreTrainedTokenizer.encode() ve PreTrainedTokenizer.call() konularına bakın.

    Girdi kimlikleri nelerdir?

  • attention_mask (torch.Tensor şeklinde (batch_size, sequence_length), isteğe bağlı) — Doldurma (padding) token indekslerinde dikkat (attention) işlemi yapmaktan kaçınmak için kullanılan maske. Seçilen maske değerleri [0, 1]:
    • 1, maskelenmemiş jetonlar için,
    • maskelenmiş jetonlar için 0.

    Dikkat maskeleri nedir?

  • position_ids (torch.Tensor şeklinde (batch_size, sequence_length), isteğe bağlı) — Girdi dizilerindeki her token'ın konum gömme (position embedding) içindeki konum indeksleri. Seçim aralığı [0, config.n_positions - 1].

    Pozisyon kimlikleri nedir?

  • inputs_embeds (torch.Tensor, şekli (batch_size, sequence_length, hidden_size), isteğe bağlı) — İsteğe bağlı olarak, input_ids yerine gömülü bir temsil doğrudan geçmeyi tercih edebilirsiniz. Bu, input_ids dizinlerini ilgili vektörlere dönüştürme biçimi üzerinde modelin dahili gömme arama matrisinden daha fazla kontrol sahibi olmak istiyorsanız faydalıdır.
  • num_hashes (int, isteğe bağlı) — Sepetleme sırasında gerçekleştirilmesi gereken hashleme turu sayısı. Bu argümanı ayarlamak, config.num_hashes.

    Daha fazla bilgi için ReformerConfig içindeki num_hashes parametresine bakın.

  • past_buckets_states (ReformerDynamicCache, isteğe bağlı) — şu türden bir liste tuple(torch.LongTensor, torch.Tensor uzunluğunda config.n_layers, ilk öğesi önceki buckets şeklinde (batch_size, num_heads, num_hashes, sequence_length)) ikinci öğesi ise önceki hidden_states şeklinde. Ön hesaplanmış gizli durumları ve sepetleri (yalnızca LSH Self-Attention için geçerli) içerir. Sıralı çözümlemeyi hızlandırmak için kullanılabilir. (batch_size, sequence_length, hidden_size)).

    Önceden hesaplanmış gizli durumları ve sepetleri içerir (yalnızca LSH Self-Attention için geçerlidir). Ardışık çözümlemeyi hızlandırmak için kullanılabilir.

  • use_cache (bool, isteğe bağlı) — True olarak ayarlanırsa, past_key_values anahtar değer durumları döndürülür ve çözümlemeyi hızlandırmak için kullanılabilir (bkz. past_key_values).
  • output_hidden_states (bool, isteğe bağlı) — Tüm katmanların gizli durumlarının (hidden states) döndürülüp döndürülmeyeceğini belirtir. Daha fazla ayrıntı için döndürülen tensörler altındaki hidden_states bölümüne bakın.
  • output_attentions (bool, isteğe bağlı) — Tüm dikkat katmanlarının dikkat tensörlerinin döndürülüp döndürülmeyeceğini belirtir. Daha fazla ayrıntı için döndürülen tensörler altındaki attentions bölümüne bakın.
  • return_dict (bool, isteğe bağlı) — Düz bir tuple yerine ModelOutput döndürülecek mi?

Dönüş değeri

ReformerModelOutput veya tuple(torch.Tensor)

ReformerModelOutput veya bir torch.Tensor demeti (eğer return_dict=False geçirildiyse veya config.return_dict=False ise), yapılandırma (ReformerConfig) ve girdilere bağlı olarak çeşitli öğelerden oluşur.

ReformerModel forward metodu, __call__ özel metodunu geçersiz kılar.

İleri geçiş tarifi bu fonksiyon içinde tanımlanmalı olsa da, sonrasında bunun yerine Module örneğini çağırmak gerekir; çünkü önceki, ön ve son işleme adımlarını çalıştırmaktan sorumluyken ikincisi bunları sessizce yok sayar.

  • last_hidden_state (torch.Tensor, şekli (batch_size, num_predict, hidden_size)) — Modelin son katmanındaki gizli durumlar dizisi.

    num_predict, target_mapping.shape[1] ile eşleşir. target_mapping None ise, num_predict sequence_length ile eşleşir.

  • past_buckets_states (list[tuple(torch.LongTensor, torch.Tensor)], opsiyonel, use_cache=True geçirildiğinde veya config.use_cache=True olduğunda döndürülür) — config.n_layers uzunluğunda, ilk öğesi (batch_size, num_heads, num_hashes, sequence_length) biçiminde önceki buckets olan ve ikinci öğesi (batch_size, sequence_length, hidden_size) biçiminde önceki hidden_states olan tuple(torch.LongTensor, torch.Tensor listesi.

    Sıralı çözümlemeyi hızlandırmak için kullanılabilecek önceden hesaplanmış variller ve gizli durumları içerir (bkz. past_buckets_states girdisi).

  • hidden_states (tuple[torch.Tensor], isteğe bağlı, output_hidden_states=True geçirildiğinde veya config.output_hidden_states=True olduğunda döndürülür) — torch.Tensor (gömme katmanı varsa gömme katmanının çıktısı için bir tane + her katmanın çıktısı için bir tane) içeren, (batch_size, sequence_length, hidden_size) biçiminde bir demet.

    Her katmanın çıktısında modelin gizli durumları ve isteğe bağlı başlangıç gömme çıktıları.

  • attentions (tuple[torch.Tensor], isteğe bağlı, output_attentions=True geçirildiğinde veya config.output_attentions=True olduğunda döndürülür) — torch.Tensor (katman başına bir tane) içeren bir tuple, şekli (batch_size, num_heads, sequence_length, sequence_length).

    Dikkat softmax'ı sonrası dikkat ağırlıkları, öz-dikkat başlıklarında ağırlıklı ortalamanın hesaplanmasında kullanılır.

ReformerModelWithLMHead

sınıf transformers.ReformerModelWithLMHead

< >

( config: ReformerConfig )

Parametreler

  • config (ReformerConfig) — Modelin tüm parametrelerini içeren model yapılandırma sınıfı. Bir yapılandırma dosyasıyla başlatmak, modelle ilişkili ağırlıkları yüklemez, yalnızca yapılandırmayı yükler. Model ağırlıklarını yüklemek için from_pretrained() yöntemine bakın.

Üzerinde language modeling başlığı bulunan Reformer Model.

Bu model PreTrainedModel sınıfından devralır. Kütüphanenin tüm modelleri için uyguladığı genel yöntemler (indirme veya kaydetme, giriş gömme boyutlarını yeniden boyutlandırma, başları budama vb.) için üst sınıf belgelendirmesine bakın.

Bu model aynı zamanda bir PyTorch torch.nn.Module alt sınıfıdır. Bunu standart bir PyTorch Module olarak kullanın ve genel kullanım ve davranışla ilgili tüm konular için PyTorch dokümantasyonuna başvurun.

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.Tensor)

Parametreler

  • input_ids (torch.LongTensor şeklinde (batch_size, sequence_length)) — Sözlükteki girdi dizisi belirteçlerinin (token) indeksleri. Eğitim sırasında input_ids dizisinin sequence_length değeri, ilgili modelin parça uzunluklarının (lsh, local veya her ikisi) katı olmak zorundadır. Değerlendirme sırasında indeksler, parça uzunluğunun katı olacak şekilde otomatik olarak dolgu (padding) ile tamamlanır.

    Dizinler AutoTokenizer kullanılarak elde edilebilir. Ayrıntılar için PreTrainedTokenizer.encode() ve PreTrainedTokenizer.call() konularına bakın.

    Girdi kimlikleri nelerdir?

  • position_ids (torch.Tensor şeklinde (batch_size, sequence_length), isteğe bağlı) — Girdi dizilerindeki her token'ın konum gömme (position embedding) içindeki konum indeksleri. Seçim aralığı [0, config.n_positions - 1].

    Pozisyon kimlikleri nedir?

  • attention_mask (torch.Tensor şeklinde (batch_size, sequence_length), isteğe bağlı) — Doldurma (padding) token indekslerinde dikkat (attention) işlemi yapmaktan kaçınmak için kullanılan maske. Seçilen maske değerleri [0, 1]:
    • 1, maskelenmemiş jetonlar için,
    • maskelenmiş jetonlar için 0.

    Dikkat maskeleri nedir?

  • inputs_embeds (torch.Tensor, şekli (batch_size, sequence_length, hidden_size), isteğe bağlı) — İsteğe bağlı olarak, input_ids yerine gömülü bir temsil doğrudan geçmeyi tercih edebilirsiniz. Bu, input_ids dizinlerini ilgili vektörlere dönüştürme biçimi üzerinde modelin dahili gömme arama matrisinden daha fazla kontrol sahibi olmak istiyorsanız faydalıdır.
  • num_hashes (int, isteğe bağlı) — Sepetleme sırasında gerçekleştirilmesi gereken hashleme turu sayısı. Bu argümanı ayarlamak, config.num_hashes.

    Daha fazla bilgi için ReformerConfig içindeki num_hashes parametresine bakın.

  • past_buckets_states (list[tuple(torch.LongTensor, torch.Tensor)], isteğe bağlı) — şu uzunlukta bir tuple(torch.LongTensor, torch.Tensor uzunluğunda config.n_layers, ilk öğe önceki buckets şeklinde (batch_size, num_heads, num_hashes, sequence_length)) ikinci öğe ise önceki hidden_states şeklinde. Ön hesaplanmış hidden-states ve buckets içerir (yalnızca LSH Self-Attention için geçerlidir). Sıralı çözümlemeyi hızlandırmak için kullanılabilir. (batch_size, sequence_length, hidden_size)).

    Önceden hesaplanmış gizli durumları ve sepetleri içerir (yalnızca LSH Self-Attention için geçerlidir). Ardışık çözümlemeyi hızlandırmak için kullanılabilir.

  • use_cache (bool, isteğe bağlı) — True olarak ayarlanırsa, past_key_values anahtar değer durumları döndürülür ve çözümlemeyi hızlandırmak için kullanılabilir (bkz. past_key_values).
  • output_hidden_states (bool, isteğe bağlı) — Tüm katmanların gizli durumlarının (hidden states) döndürülüp döndürülmeyeceğini belirtir. Daha fazla ayrıntı için döndürülen tensörler altındaki hidden_states bölümüne bakın.
  • output_attentions (bool, isteğe bağlı) — Tüm dikkat katmanlarının dikkat tensörlerinin döndürülüp döndürülmeyeceğini belirtir. Daha fazla ayrıntı için döndürülen tensörler altındaki attentions bölümüne bakın.
  • return_dict (bool, isteğe bağlı) — Düz bir tuple yerine ModelOutput döndürülecek mi?
  • labels (torch.LongTensor, şekli (batch_size,), isteğe bağlı) — Sınıflandırma/geri dönüş kaybını hesaplamak için etiketler. Endeksler [-100, 0, ..., config.vocab_size - 1] aralığında olmalıdır. -100 olarak ayarlanan tüm etiketler yok sayılır (maskelenir); kayıp yalnızca [0, ..., config.vocab_size] aralığındaki etiketler için hesaplanır.
  • logits_to_keep (Union[int, torch.Tensor], isteğe bağlı, varsayılan 0) — int ise, son logits_to_keep token için logits hesaplanır. 0 ise, tüm input_ids için logits hesaplanır (özel durum). Üretim için yalnızca son token logits'leri gereklidir ve bunların yalnızca o token için hesaplanması bellek tasarrufu sağlar; bu, uzun diziler veya büyük sözlük boyutu için oldukça önemli hale gelir. torch.Tensor ise, dizi uzunluğu boyutundaki korunacak indekslere karşılık gelen 1B olmalıdır. Bu, paketlenmiş tensor biçimini (batch ve dizi uzunluğu için tek boyut) kullanırken faydalıdır.

Dönüş değeri

CausalLMOutput veya tuple(torch.Tensor)

Bir CausalLMOutput veya bir torch.Tensor demeti (return_dict=False geçirildiğinde veya config.return_dict=False olduğunda), yapılandırmaya (ReformerConfig) ve girdilere bağlı olarak çeşitli öğelerden oluşur.

ReformerModelWithLMHead forward metodu, __call__ özel metodunu geçersiz kılar.

İleri geçiş tarifi bu fonksiyon içinde tanımlanmalı olsa da, sonrasında bunun yerine Module örneğini çağırmak gerekir; çünkü önceki, ön ve son işleme adımlarını çalıştırmaktan sorumluyken ikincisi bunları sessizce yok sayar.

  • loss (torch.Tensor, şekli (1,), isteğe bağlı, labels sağlandığında döndürülür) — Dil modelleme kaybı (sonraki token tahmini için).

  • logits (torch.Tensor, şekli (batch_size, sequence_length, config.vocab_size)) — Dil modelleme başlığının tahmin puanları (SoftMax öncesi her sözlük jetonu için puanlar).

  • hidden_states (tuple(torch.Tensor), isteğe bağlı, output_hidden_states=True geçirildiğinde veya config.output_hidden_states=True olduğunda döndürülür) — torch.Tensor (modelin bir gömme katmanı varsa gömme katmanının çıktısı için bir tane + her katmanın çıktısı için birer tane) içeren, (batch_size, sequence_length, hidden_size) biçiminde bir demet.

    Her katmanın çıktısında modelin gizli durumları ve isteğe bağlı başlangıç gömme çıktıları.

  • attentions (tuple(torch.Tensor), isteğe bağlı, output_attentions=True geçirildiğinde veya config.output_attentions=True olduğunda döndürülür) — torch.Tensor (katman başına bir tane) içeren bir tuple, şekli (batch_size, num_heads, sequence_length, sequence_length).

    Dikkat softmax'ı sonrası dikkat ağırlıkları, öz-dikkat başlıklarında ağırlıklı ortalamanın hesaplanmasında kullanılır.

Örnek:

>>> 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

sınıf transformers.ReformerForMaskedLM

< >

( config: ReformerConfig )

Parametreler

  • config (ReformerConfig) — Modelin tüm parametrelerini içeren model yapılandırma sınıfı. Bir yapılandırma dosyasıyla başlatmak, modelle ilişkili ağırlıkları yüklemez, yalnızca yapılandırmayı yükler. Model ağırlıklarını yüklemek için from_pretrained() yöntemine bakın.

Üstünde language modeling başlığı bulunan Reformer Modeli.”

Bu model PreTrainedModel sınıfından devralır. Kütüphanenin tüm modelleri için uyguladığı genel yöntemler (indirme veya kaydetme, giriş gömme boyutlarını yeniden boyutlandırma, başları budama vb.) için üst sınıf belgelendirmesine bakın.

Bu model aynı zamanda bir PyTorch torch.nn.Module alt sınıfıdır. Bunu standart bir PyTorch Module olarak kullanın ve genel kullanım ve davranışla ilgili tüm konular için PyTorch dokümantasyonuna başvurun.

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.Tensor)

Parametreler

  • input_ids (torch.LongTensor şeklinde (batch_size, sequence_length)) — Sözlükteki girdi dizisi belirteçlerinin (token) indeksleri. Eğitim sırasında input_ids dizisinin sequence_length değeri, ilgili modelin parça uzunluklarının (lsh, local veya her ikisi) katı olmak zorundadır. Değerlendirme sırasında indeksler, parça uzunluğunun katı olacak şekilde otomatik olarak dolgu (padding) ile tamamlanır.

    Dizinler AutoTokenizer kullanılarak elde edilebilir. Ayrıntılar için PreTrainedTokenizer.encode() ve PreTrainedTokenizer.call() konularına bakın.

    Girdi kimlikleri nelerdir?

  • position_ids (torch.Tensor şeklinde (batch_size, sequence_length), isteğe bağlı) — Girdi dizilerindeki her token'ın konum gömme (position embedding) içindeki konum indeksleri. Seçim aralığı [0, config.n_positions - 1].

    Pozisyon kimlikleri nedir?

  • attention_mask (torch.Tensor şeklinde (batch_size, sequence_length), isteğe bağlı) — Doldurma (padding) token indekslerinde dikkat (attention) işlemi yapmaktan kaçınmak için kullanılan maske. Seçilen maske değerleri [0, 1]:
    • 1, maskelenmemiş jetonlar için,
    • maskelenmiş jetonlar için 0.

    Dikkat maskeleri nedir?

  • inputs_embeds (torch.Tensor, şekli (batch_size, sequence_length, hidden_size), isteğe bağlı) — İsteğe bağlı olarak, input_ids yerine gömülü bir temsil doğrudan geçmeyi tercih edebilirsiniz. Bu, input_ids dizinlerini ilgili vektörlere dönüştürme biçimi üzerinde modelin dahili gömme arama matrisinden daha fazla kontrol sahibi olmak istiyorsanız faydalıdır.
  • num_hashes (int, isteğe bağlı) — Sepetleme sırasında gerçekleştirilmesi gereken hashleme turu sayısı. Bu argümanı ayarlamak, config.num_hashes.

    Daha fazla bilgi için ReformerConfig içindeki num_hashes parametresine bakın.

  • labels (torch.LongTensor şeklinde (batch_size, sequence_length), isteğe bağlı) — Maskeli dil modelleme kaybını hesaplamak için etiketler. Endeksler [-100, 0, ..., config.vocab_size] (bkz. input_ids belge dizgesinde) Endeksleri -100 olarak ayarlanan jetonlar yok sayılır (maskelenir), kayıp yalnızca etiketli jetonlar için hesaplanır

    Bu örnek, Reformer mimarisiyle maskeli dil modelleme görevi için mevcut önceden eğitilmiş bir model bulunmadığından sahte bir kontrol noktası kullanır.

  • output_hidden_states (bool, isteğe bağlı) — Tüm katmanların gizli durumlarının (hidden states) döndürülüp döndürülmeyeceğini belirtir. Daha fazla ayrıntı için döndürülen tensörler altındaki hidden_states bölümüne bakın.
  • output_attentions (bool, isteğe bağlı) — Tüm dikkat katmanlarının dikkat tensörlerinin döndürülüp döndürülmeyeceğini belirtir. Daha fazla ayrıntı için döndürülen tensörler altındaki attentions bölümüne bakın.
  • return_dict (bool, isteğe bağlı) — Düz bir tuple yerine ModelOutput döndürülecek mi?

Dönüş değeri

MaskedLMOutput veya tuple(torch.Tensor)

Bir MaskedLMOutput veya torch.Tensor demeti (eğer return_dict=False geçirildiyse veya config.return_dict=False ise), yapılandırmaya (ReformerConfig) ve girdilere bağlı olarak çeşitli öğelerden oluşur.

ReformerForMaskedLM forward metodu, __call__ özel metodunu geçersiz kılar.

İleri geçiş tarifi bu fonksiyon içinde tanımlanmalı olsa da, sonrasında bunun yerine Module örneğini çağırmak gerekir; çünkü önceki, ön ve son işleme adımlarını çalıştırmaktan sorumluyken ikincisi bunları sessizce yok sayar.

  • loss (torch.Tensor, şekli (1,), isteğe bağlı, labels sağlandığında döndürülür) — Maskeli dil modelleme (MLM) kaybı.

  • logits (torch.Tensor, şekli (batch_size, sequence_length, config.vocab_size)) — Dil modelleme başlığının tahmin puanları (SoftMax öncesi her sözlük jetonu için puanlar).

  • hidden_states (tuple(torch.Tensor), isteğe bağlı, output_hidden_states=True geçirildiğinde veya config.output_hidden_states=True olduğunda döndürülür) — torch.Tensor (modelin bir gömme katmanı varsa gömme katmanının çıktısı için bir tane + her katmanın çıktısı için birer tane) içeren, (batch_size, sequence_length, hidden_size) biçiminde bir demet.

    Her katmanın çıktısında modelin gizli durumları ve isteğe bağlı başlangıç gömme çıktıları.

  • attentions (tuple(torch.Tensor), isteğe bağlı, output_attentions=True geçirildiğinde veya config.output_attentions=True olduğunda döndürülür) — torch.Tensor (katman başına bir tane) içeren bir tuple, şekli (batch_size, num_heads, sequence_length, sequence_length).

    Dikkat softmax'ı sonrası dikkat ağırlıkları, öz-dikkat başlıklarında ağırlıklı ortalamanın hesaplanmasında kullanılır.

Örnek:

>>> 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

sınıf transformers.ReformerForSequenceClassification

< >

( config: ReformerConfig )

Parametreler

  • config (ReformerConfig) — Modelin tüm parametrelerini içeren model yapılandırma sınıfı. Bir yapılandırma dosyasıyla başlatmak, modelle ilişkili ağırlıkları yüklemez, yalnızca yapılandırmayı yükler. Model ağırlıklarını yüklemek için from_pretrained() yöntemine bakın.

Reformer Model, üstünde bir dizi sınıflandırma/geri dönüşüm başlığı (toplanmış çıktının üzerinde doğrusal bir katman) bulunan bir transformer örneğin GLUE görevleri için.

Bu model PreTrainedModel sınıfından devralır. Kütüphanenin tüm modelleri için uyguladığı genel yöntemler (indirme veya kaydetme, giriş gömme boyutlarını yeniden boyutlandırma, başları budama vb.) için üst sınıf belgelendirmesine bakın.

Bu model aynı zamanda bir PyTorch torch.nn.Module alt sınıfıdır. Bunu standart bir PyTorch Module olarak kullanın ve genel kullanım ve davranışla ilgili tüm konular için PyTorch dokümantasyonuna başvurun.

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.Tensor)

Parametreler

  • input_ids (torch.LongTensor şeklinde (batch_size, sequence_length)) — Sözlükteki girdi dizisi belirteçlerinin (token) indeksleri. Eğitim sırasında input_ids dizisinin sequence_length değeri, ilgili modelin parça uzunluklarının (lsh, local veya her ikisi) katı olmak zorundadır. Değerlendirme sırasında indeksler, parça uzunluğunun katı olacak şekilde otomatik olarak dolgu (padding) ile tamamlanır.

    Dizinler AutoTokenizer kullanılarak elde edilebilir. Ayrıntılar için PreTrainedTokenizer.encode() ve PreTrainedTokenizer.call() konularına bakın.

    Girdi kimlikleri nelerdir?

  • position_ids (torch.Tensor şeklinde (batch_size, sequence_length), isteğe bağlı) — Girdi dizilerindeki her token'ın konum gömme (position embedding) içindeki konum indeksleri. Seçim aralığı [0, config.n_positions - 1].

    Pozisyon kimlikleri nedir?

  • attention_mask (torch.Tensor şeklinde (batch_size, sequence_length), isteğe bağlı) — Doldurma (padding) token indekslerinde dikkat (attention) işlemi yapmaktan kaçınmak için kullanılan maske. Seçilen maske değerleri [0, 1]:
    • 1, maskelenmemiş jetonlar için,
    • maskelenmiş jetonlar için 0.

    Dikkat maskeleri nedir?

  • inputs_embeds (torch.Tensor, şekli (batch_size, sequence_length, hidden_size), isteğe bağlı) — İsteğe bağlı olarak, input_ids yerine gömülü bir temsil doğrudan geçmeyi tercih edebilirsiniz. Bu, input_ids dizinlerini ilgili vektörlere dönüştürme biçimi üzerinde modelin dahili gömme arama matrisinden daha fazla kontrol sahibi olmak istiyorsanız faydalıdır.
  • num_hashes (int, isteğe bağlı) — Sepetleme sırasında gerçekleştirilmesi gereken hashleme turu sayısı. Bu argümanı ayarlamak, config.num_hashes.

    Daha fazla bilgi için ReformerConfig içindeki num_hashes parametresine bakın.

  • labels (torch.LongTensor, şekli (batch_size,), isteğe bağlı) — Sınıflandırma/geri dönüş kaybını hesaplamak için etiketler. Endeksler [0, ..., config.num_labels - 1] aralığında olmalıdır. config.num_labels == 1 ise bir geri dönüş kaybı (Ortalama Kare kaybı) hesaplanır, config.num_labels > 1 ise bir sınıflandırma kaybı (Çapraz Entropi) hesaplanır.
  • output_hidden_states (bool, isteğe bağlı) — Tüm katmanların gizli durumlarının (hidden states) döndürülüp döndürülmeyeceğini belirtir. Daha fazla ayrıntı için döndürülen tensörler altındaki hidden_states bölümüne bakın.
  • output_attentions (bool, isteğe bağlı) — Tüm dikkat katmanlarının dikkat tensörlerinin döndürülüp döndürülmeyeceğini belirtir. Daha fazla ayrıntı için döndürülen tensörler altındaki attentions bölümüne bakın.
  • return_dict (bool, isteğe bağlı) — Düz bir tuple yerine ModelOutput döndürülecek mi?

Dönüş değeri

SequenceClassifierOutput veya tuple(torch.Tensor)

Bir SequenceClassifierOutput veya torch.Tensor demeti (return_dict=False geçirildiğinde veya config.return_dict=False olduğunda), yapılandırmaya (ReformerConfig) ve girdilere bağlı olarak çeşitli öğelerden oluşur.

ReformerForSequenceClassification forward metodu, __call__ özel metodunu geçersiz kılar.

İleri geçiş tarifi bu fonksiyon içinde tanımlanmalı olsa da, sonrasında bunun yerine Module örneğini çağırmak gerekir; çünkü önceki, ön ve son işleme adımlarını çalıştırmaktan sorumluyken ikincisi bunları sessizce yok sayar.

  • loss (torch.Tensor, şekli (1,), isteğe bağlı, labels sağlandığında döndürülür) — Sınıflandırma (config.num_labels==1 ise regresyon) kaybı.

  • logits (torch.Tensor, şekli (batch_size, config.num_labels)) — Sınıflandırma (veya config.num_labels==1 ise regresyon) puanları (SoftMax öncesi).

  • hidden_states (tuple(torch.Tensor), isteğe bağlı, output_hidden_states=True geçirildiğinde veya config.output_hidden_states=True olduğunda döndürülür) — torch.Tensor (modelin bir gömme katmanı varsa gömme katmanının çıktısı için bir tane + her katmanın çıktısı için birer tane) içeren, (batch_size, sequence_length, hidden_size) biçiminde bir demet.

    Her katmanın çıktısında modelin gizli durumları ve isteğe bağlı başlangıç gömme çıktıları.

  • attentions (tuple(torch.Tensor), isteğe bağlı, output_attentions=True geçirildiğinde veya config.output_attentions=True olduğunda döndürülür) — torch.Tensor (katman başına bir tane) içeren bir tuple, şekli (batch_size, num_heads, sequence_length, sequence_length).

    Dikkat softmax'ı sonrası dikkat ağırlıkları, öz-dikkat başlıklarında ağırlıklı ortalamanın hesaplanmasında kullanılır.

Tek etiketli sınıflandırma örneği:

>>> 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

sınıf transformers.ReformerForQuestionAnswering

< >

( config: ReformerConfig )

Parametreler

  • config (ReformerConfig) — Modelin tüm parametrelerini içeren model yapılandırma sınıfı. Bir yapılandırma dosyasıyla başlatmak, modelle ilişkili ağırlıkları yüklemez, yalnızca yapılandırmayı yükler. Model ağırlıklarını yüklemek için from_pretrained() yöntemine bakın.

SQuAD gibi çıkarımsal soru-cevap görevleri için üstünde bir span sınıflandırma kafası bulunan Reformer transformer (gizli durum çıktısının üzerine, span start logits ve span end logits hesaplamak için eklenen doğrusal bir katman).

Bu model PreTrainedModel sınıfından devralır. Kütüphanenin tüm modelleri için uyguladığı genel yöntemler (indirme veya kaydetme, giriş gömme boyutlarını yeniden boyutlandırma, başları budama vb.) için üst sınıf belgelendirmesine bakın.

Bu model aynı zamanda bir PyTorch torch.nn.Module alt sınıfıdır. Bunu standart bir PyTorch Module olarak kullanın ve genel kullanım ve davranışla ilgili tüm konular için PyTorch dokümantasyonuna başvurun.

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.Tensor)

Parametreler

  • input_ids (torch.LongTensor şeklinde (batch_size, sequence_length)) — Sözlükteki girdi dizisi belirteçlerinin (token) indeksleri. Eğitim sırasında input_ids dizisinin sequence_length değeri, ilgili modelin parça uzunluklarının (lsh, local veya her ikisi) katı olmak zorundadır. Değerlendirme sırasında indeksler, parça uzunluğunun katı olacak şekilde otomatik olarak dolgu (padding) ile tamamlanır.

    Dizinler AutoTokenizer kullanılarak elde edilebilir. Ayrıntılar için PreTrainedTokenizer.encode() ve PreTrainedTokenizer.call() konularına bakın.

    Girdi kimlikleri nelerdir?

  • position_ids (torch.Tensor şeklinde (batch_size, sequence_length), isteğe bağlı) — Girdi dizilerindeki her token'ın konum gömme (position embedding) içindeki konum indeksleri. Seçim aralığı [0, config.n_positions - 1].

    Pozisyon kimlikleri nedir?

  • attention_mask (torch.Tensor şeklinde (batch_size, sequence_length), isteğe bağlı) — Doldurma (padding) token indekslerinde dikkat (attention) işlemi yapmaktan kaçınmak için kullanılan maske. Seçilen maske değerleri [0, 1]:
    • 1, maskelenmemiş jetonlar için,
    • maskelenmiş jetonlar için 0.

    Dikkat maskeleri nedir?

  • inputs_embeds (torch.Tensor, şekli (batch_size, sequence_length, hidden_size), isteğe bağlı) — İsteğe bağlı olarak, input_ids yerine gömülü bir temsil doğrudan geçmeyi tercih edebilirsiniz. Bu, input_ids dizinlerini ilgili vektörlere dönüştürme biçimi üzerinde modelin dahili gömme arama matrisinden daha fazla kontrol sahibi olmak istiyorsanız faydalıdır.
  • num_hashes (int, isteğe bağlı) — Sepetleme sırasında gerçekleştirilmesi gereken hashleme turu sayısı. Bu argümanı ayarlamak, config.num_hashes.

    Daha fazla bilgi için ReformerConfig içindeki num_hashes parametresine bakın.

  • start_positions (torch.Tensor, şekli (batch_size,), isteğe bağlı) — Token sınıflandırma kaybını hesaplamak için etiketli aralığın başlangıç konumunun (indeksinin) etiketleri. Konumlar, dizinin uzunluğuna (sequence_length) göre sınırlandırılır. Dizi dışındaki konumlar, kayıp hesabında dikkate alınmaz.
  • end_positions (torch.Tensor, şekli (batch_size,), isteğe bağlı) — Token sınıflandırma kaybını hesaplamak için etiketli aralığın sonundaki konumun (indeksin) etiketleri. Konumlar, dizinin uzunluğuna (sequence_length) göre sınırlandırılır. Dizi dışındaki konumlar, kayıp hesabında dikkate alınmaz.
  • output_hidden_states (bool, isteğe bağlı) — Tüm katmanların gizli durumlarının (hidden states) döndürülüp döndürülmeyeceğini belirtir. Daha fazla ayrıntı için döndürülen tensörler altındaki hidden_states bölümüne bakın.
  • output_attentions (bool, isteğe bağlı) — Tüm dikkat katmanlarının dikkat tensörlerinin döndürülüp döndürülmeyeceğini belirtir. Daha fazla ayrıntı için döndürülen tensörler altındaki attentions bölümüne bakın.
  • return_dict (bool, isteğe bağlı) — Düz bir tuple yerine ModelOutput döndürülecek mi?

Dönüş değeri

QuestionAnsweringModelOutput veya tuple(torch.Tensor)

A QuestionAnsweringModelOutput veya bir torch.Tensor demeti (eğer return_dict=False geçirildiyse veya config.return_dict=False ise), yapılandırmaya (ReformerConfig) ve girdilere bağlı olarak çeşitli öğelerden oluşur.

ReformerForQuestionAnswering forward metodu, __call__ özel metodunu geçersiz kılar.

İleri geçiş tarifi bu fonksiyon içinde tanımlanmalı olsa da, sonrasında bunun yerine Module örneğini çağırmak gerekir; çünkü önceki, ön ve son işleme adımlarını çalıştırmaktan sorumluyken ikincisi bunları sessizce yok sayar.

  • loss (torch.Tensor, şekli (1,), isteğe bağlı, labels sağlandığında döndürülür) — Toplam span çıkarım kaybı, başlangıç ve bitiş konumları için Çapraz Entropinin (Cross-Entropy) toplamıdır.

  • start_logits (torch.Tensor, şekli (batch_size, sequence_length)) — Span başlangıç puanları (SoftMax öncesi).

  • end_logits (torch.Tensor, şekli (batch_size, sequence_length)) — Span sonu puanları (SoftMax öncesi).

  • hidden_states (tuple(torch.Tensor), isteğe bağlı, output_hidden_states=True geçirildiğinde veya config.output_hidden_states=True olduğunda döndürülür) — torch.Tensor (modelin bir gömme katmanı varsa gömme katmanının çıktısı için bir tane + her katmanın çıktısı için birer tane) içeren, (batch_size, sequence_length, hidden_size) biçiminde bir demet.

    Her katmanın çıktısında modelin gizli durumları ve isteğe bağlı başlangıç gömme çıktıları.

  • attentions (tuple(torch.Tensor), isteğe bağlı, output_attentions=True geçirildiğinde veya config.output_attentions=True olduğunda döndürülür) — torch.Tensor (katman başına bir tane) içeren bir tuple, şekli (batch_size, num_heads, sequence_length, sequence_length).

    Dikkat softmax'ı sonrası dikkat ağırlıkları, öz-dikkat başlıklarında ağırlıklı ortalamanın hesaplanmasında kullanılır.

Örnek:

>>> 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