Attention: İhtiyacın Olan Tek Şey, Adamım!

Rabia Eda Yılmaz
12 min readJan 13, 2023

--

Dünyalıların söylediğine inandığım gibi, attention ihtiyacın olan tek şey, adamım!

[Pilot, crackling sound] Attention, please!

Attention is All You Need [1] makalesinde, attention mekanizmasına dayanan Transformer mimarisi önerilmiştir. Bu mimari, paralelize işlem yapmayı sağlamanın yanında state-of-the-art (teknolojideki güncel ve en son gelişme) kalitesine ulaşabilmektedir.

Bu blog yazımda, şu sırayı izleyecek şekilde, transformer hakkındaki notlarımı paylaşacağım:

  1. Sequence Transduction Models
  2. Makale İncelemesi
  3. Özet
  4. Çeşitli Transformer Mimarileri
  5. PyTorch İmplementasyonu

[Pilot, again, crackling sound] Attention! Please, fasten your seatbelts!

1. Sequence Transduction Models 🤖

Transduce kelime olarak, iki anlama sahiptir.

  1. Enerji veya mesaj gibi bir şeyi başka bir forma dönüştürmek (duyu organının fiziksel enerjiyi sinirsel enerjiye dönüştürmesi gibi)
  2. Genetik materyalin transdüksiyon (materyalin bir hücreden diğerine virüs ile aktarılması) geçirmesi [2]

Ayrıca, elektronikte de 1. anlama benzer şekilde kullanılmaktadır. Transducer denilen fiziksel girdiyi dijital sinyale dönüştüren elektronik cihazlara örnek olarak, hoparlörler, mikrofonlar, termometreler ve LED’ler verilebilir. [3]

Sequence transduction ise girdi dizilerin, çıktı dizilere dönüştürülmesine denir ve konuşma tanımlama (girdi sesi metne çevirme), metinden konuşmaya (girdi metni sese çevirme), makine çevirisi (kaynak dilden hedef dile kelime dizileri sentezleme, Google Translate gibi), proteinlerin ikincil yapısının tahmini (verilen amino asit dizilerinin 3D yapısını tahmin) vb. buna örnektir. [4]

Transformer mimarisi, tamamen attention mekanizmasına dayanan ilk sequence transduction modeldir.

2. Makale İncelemesi 📎

2.1. Model Mimarisi

Birçok rekabetçi neural sequence transduction model, encoder-decoder yapısını kullanır.

Transformer Mimarisi — Sol Yarı Encoder (Jack) ve Sağ Yarı Decoder (Rose)
Sol Encoder (Jack) ve Sağ Decoder (Rose)

2.1.1. Encoder - Jack

Encoder yapısı, art arda dizili N=6 eş katmandan oluşur. Her katman, 2 alt-katmana sahiptir: 1) multi-head self-attention mekanizması ve 2) position-wise fully connected feed-forward network. Bu iki alt-katmanın etrafında residual bağlantılar [5] ve onu takip eden layer normalization mevcuttur. Yani, x bir önceki çıktı ve alt-katman(x) ise o katmandaki fonksiyon olmak üzere, her bir alt-katmanın çıktısı LayerNorm(x + alt-katman(x)) olur. Residual bağlantıları daha kolay uygulanabilir hale getirmek için modeldeki bütün alt-katmanlar, embedding katmanları da dahil, çıktı olarak d=512 boyutuna sahiptir. Her katmanda:

  • Multi-Headed Self-Attention (her tokenin dizideki diğer tokenlerle ifade edilişi) + LN + RC
  • Feed-Forward Neural Network (öğrenilmiş, her tokene lineer olmayan dönüşümler uygulayan çok katmanlı nöral ağ) + LN + RC [12]

*LN: Layer Normalization

*RC: Residual Connection

2.1.2. Decoder - Rose

Decoder yapısı, aynı şekilde art arda dizili N=6 eş katmandan oluşur. Encoder yapısındaki, iki alt-katmana ek olarak, burada encoder çıktısı üzerinde multi-head attention uygulayan 3. bir alt-katman daha vardır. Encoder’a benzer bir şekilde, her alt-katman etrafında sonrasında layer normalization olan residual bağlantılar bulunmaktadır. Ek olarak, self-attention alt-katmanı, posizyonların sonraki pozisyonlara karışmasını engellemek için modifiye edilmiştir. Yani çıktı embedding’ler, output embeddings, bir pozisyon kaydırılıyor. Bu maskeleme, pozisyon i’deki tahmin çıktıları sadece pozisyon i öncesi bilinen çıktılara bağlı olduğundan emin olmayı sağlar. Her katmanda:

  • Masked Multi-Head Attention (girdi dizisinde ileri bakmayı önler)
  • Multi-Head Encoder-Decoder Attention (normal self-attention’a çok benzemekle birlikte, encoder’daki çıktıların da girdi olarak kulanılmasını izin vermesiyle ayrılır)
  • Feed-Forward Neural Network (öğrenilmiş, her tokene lineer olmayan dönüşümler uygulayan çok katmanlı nöral ağ) [12]

2.1.3. Attention

Query, key, value ve output hepsi vektör olmak üzere, kısaca, attention fonksiyonu, bir query’yi ve bir set key-value çiftini, çıktıya (output) map’ler. Çıktı, her bir value değerine ağırlık atanarak, value değerlerinin ağırlıklandırılılmış toplamı ile saplanır. Her bir value değerine atanan ağırlık, query ve ona karşılık gelen key kullanılarak uyumluluk fonksiyonu (compability function) ile hesaplanır.

Ölçeklendirilmiş Dot-Product Attention (sol) ve attention katmanları parallel çalışan Multi-Head Attention (sağ)

2.1.4. Scaled Dot-Product Attention

query ve key değerlerinin boyutu dk ve values boyutu dv notasyonları ile gösterilir. query’nin bütün key değerleri ile dot-product’ı bulunup, kök dk’ye bölünmesinin ardından softmax fonksiyonun uygulanmasıyla value üzerindeki ağırlıklar bulunur. Pratikte, bu işlem eş zamanlı olarak Q matrisi, bir set paketlenmiş query, üzerinde uygulanır. key ve value değerleri de sırasıyla, K ve V matrislerine paketlenir.

Q, K ve V Paketleri ile Output Matrisi Formülü

En çok kullanılan iki attention fonksiyonu, additive (toplamalı) attention ve dot-product (çarpmalı) attention’dır. Burada kullanılan attention fonksiyonu kök dk’ye bölmenin dışında dot-product olanla aynıdır.

Compability function (her bir value değerine atanan ağırlığı hesaplıyordu), tek katmanlı feed-forward network kullanan additive attention ile hesaplanır.

Additive ve dot-product attention fonksyionları teoride karmaşıklık bakımından benzer olmalarına rağmen, pratikte fazlaca optimize edilmiş matris çarpma kodu sayesinde dot-product olan daha hızlı ve daha az memory harcar.

Küçük dk değerleri için, büyük dk değerlerine ölçeklendirmeden, iki mekanizma benzer şekilde çalışmasına rağmen additive olan dot-product olandan daha iyi performans sergilemektedir. Çok büyük dk değerleri için, dot product çok hızlı artacağı için softmax’te kaybolan gradient’lerin önüne geçmek için (vanishing gradient) dot-product sonucu kök dk ile scale edilmiştir.

2.1.5. Multi-Head Attention

dmodel boyutlu key, value ve query ile bir attention fonksiyonu uygulamak yerine, sırasıyla dk, dk, ve dv boyutlarına h kere öğrenilmiş ve farklı linear projection uygulayarak hesaplamanın daha yararlı olduğu bulunmuştur.

Sonrasında ise her bir project edilmiş query, key ve value üzerine paralel olarak attention fonksiyonu uygulanmasıyla elde edilen dv boyutlu çıktı değerleri elde edilir. Birleştirilen (concat) çıktı değerlerine, tekrardan linear projection uygulanır ve bu şekilde son değerler elde edilir.

Projection’lar dmodel*dk, dmodel*dk, dmodel*dv ve (h*dv)*dmodel boyutlarına sahip sırasıyla Q, K, V ve O parametre matrisleridir. Parametre matris gösterimleri W üzeri Q/K/V/O ile ifade edilir.

Farklı pozisyonlardaki, farklı alt-uzay gösterimlerini ortaklaşa bilgiyi oluşturmak için kulanan multi-head attention head (bunu tek attention ile hesaplayıp, ortalamasını almak bu faydayı sağlamaz)

h=8 tane paralel attention katmanı veya kafası (head) seçilmiştir. Her bir head için dk = dv = dmodel/h = 64 kullanılmıştır. Her bir head’deki boyut indirgemesi nedeniyle, toplam işlem maliyeti (computational cost) tek head’li bir attention maliyetine benzerdir.

2.1.6. Modelde Attention Kullanımı

Transformer (modelimiz), üç farklı şekilde multi-head attention’ı kullanır:

  • Encoder-decoder attention katmanlarında, query değerleri önceki decoder’dan gelir ve key ile value değerleri hafızadaki encoder’ın çıktısından gelir. (Yani Jack’ten Rose’a geliyor) Bu sayede, decoder’daki her bir pozisyon girdi dizisindeki (input sequence) bütün pozisyonlarla etkileşime geçmiş oluyor.
  • Encoder, self-attention katmanlarını içerir. Bütün key, value ve query değerleri aynı yerden yani bir önceki encoder katmanından gelir. Bu sayede, encoder’daki her bir pozisyon, bir önceki katmandaki encoder ile etkileşir.
  • Öncekine benzer şekilde, decoder’daki self-attention katmanları decoder’daki her bir pozisyonun decoder’daki tüm pozisyonlarla etkileşimini sağlar. Auto-regressive* özelliğini korumak için decoder’dan sola doğru olan bilgi akışını önlemek şarttır. Bu, ölçeklendirilmiş (scaled) dot-product attention içinde, softmax’teki bütün değerleri maskeleyerek (eksi sonsuza ayarlanıp) implemente edilerek sağlanır. Böylelikle, istenmeyen bağlantılar oluşmaz. (Çünkü sarılan Jack, Rose kollarını açıyor)

*Auto-regressive, bir modelin çıktı değerinin önceki çıktı değerlerine lineer bir şekilde bağlı olmasına denir.

2.1.7. Position-wise Feed-Forward Networks

Attention alt-katmanları haricinde, encoder ve decoder’daki her bir katman, her bir pozisyona ayrı ayrı ve eş olarak uygulanan fully connected feed-forward network içerir. Bu işlem, iki lineer dönüşüm (linear transformation) ile bir ReLU aktivasyon fonksiyonu içerir.

Feed-Forward Network (FFN)

Lineer dönüşümler, farklı pozisyonlarda da aynıdır ama katmandan katmana farklı parametrelere sahiptirler. Bunu sağlamanın bir diğer yolu ise, kernel size=1 olan iki convolution işlemi uygulamaktır. Girdi ve çıktının boyutları, dmodel=512 ve iç katmanların boyutu ise dff=2048'dir.

2.1.8. Embeddings and Softmax

Diğer sequence transduction modelleri gibi, bu modelde de input (girdi) token’larını output (çıktı) token’larına çevirmek için, ikisi de dmodel boyutlu vektörler olmak üzere, learned (öğrenilmiş) embedding’ler kullanılmıştır. Ayrıca, öğrenilmiş lineer dönüşümler ve decoder’daki output token’larını tahmin edilmiş sonraki token olasılıklarına dönüştürmek için softmax fonksiyonu da yer almıştır. Modelde, iki embedding katmanı ve softmax öncesi lineer dönüşümler arasında aynı ağırlık matrisi uygulanmıştır. Embedding katmanlarında, bu ağırlıklar kök dmodel ile çarpılmıştır.

2.1.9. Positional Encoding

Transformer modelinde, convolution veya recurrence olmadığı ve dizideki sıralama ile ilgili bilgiden yararlanabilmek için token’ların bağıl veya asıl konumları hakkında bazı bilgiler eklenmelidir.

Tablo 1. Farklı Katmanlar ve Performansları

Bu amaçla, positional encodings yapısı encoder ve decoder yapılarının input embeddings, alt, kısmına yerleştirilir. Positional embeddings, diğer embeddings gibi dmodel boyutuna sahiptir ve bu şekilde toplanabilirler. Öğrenilmiş ve sabit olmak üzere, kullanmak için çok fazla positional encodings seçeneği vardır.

Bu modelde ise, farklı frekanstaki sinüs ve kosinüs fonksiyonları kullanılmıştır.

p: pozisyon ve i: boyut

Bu şekilde, her bir boyuttaki positional encoding bir sinüse denk gelecektir. Dalga boyları ise, 2π’den 10000*2π’ye geometrik bir dizi* şeklindedir. Bu fonksiyonun seçilme nedeni, her bir k kadar kaydırma için pos+k’deki positional encoding, PE(pos+k), PE(pos)’ın lineer bir fonksiyonu halinde ifade edilebileceğinden, modelin bağıl pozisyonları kolayca öğrenmesini sağlayacağını düşünmeleridir.

Ayrıca,öğrenilmiş positional encoding’ler ile yapılan deneye göre, iki türlüsü de neredeyse aynı sonuçlar üretmiştir. Yine de, sinüslü olan versiyonu seçilmiştir, çünkü eğitimde, training, karşılaşılmayan daha uzun dizileri de tahmin edebileceği olasılığı mevcuttur.

*Geometric Progression=Geometric Sequence=Geometrik Dizi: Her bir sayı ve önceki sayı arasında sabit bir oranla oluşturulan dizi. (e.g. 3,6,12,24…)

2.1.10. Neden Self-Attention?

Makalede belirtildiği üzere, optimizesi hedeflenen üç amaç var: i) katman başına toplam hesaplama karışıklığı/maliyeti, ii) paralelleştirilebilecek hesaplama miktarı ve iii) nöral ağdaki uzun mesafe bağımlılıkları arasındaki yol uzunluğu.

Uzun mesafe bağımlılıklarını öğrenmek, sequence transduction görevlerindeki anahtar konulardan biridir. (Bu sayede, bilgi daha uzun süre boyunca hatırlanır ve kaybolmaz.) Uzun mesafe bağımlılıklarını öğrenmedeki anahtar faktörlerden biri, ağdaki ileri ve geri yönde sinyalleri taşıyan yolların uzunluğudur. Girdi ve çıktı arasındaki daha kısa yol kombinasyonları, uzun yol bağımlılıklarını öğrenmeyi kolaylaştırır [6].

Tablo 1'de görüldüğü üzere, attention katmanlarının hesaplama karışıklığı daha hızlı ve avantajlı. (Biraz yukarıda, scroll-up, please!)

2.1.11. Eğitim

Bu makaledeki deneyde model, 4.5 milyon cümle çifti içeren standart WMT 2014 English-German veri seti üzerinde eğitilmiştir. Cümleler, kaynak-hedef kelime haznesi 32 bin token olan byte-pair encoding yöntemi ile encode edilmiş. İngilizce-Fransızca için ise, 36 milyon cümle içeren daha büyük WMT 2014 English-French veri seti kullanılmıştır ve 32 bin kelimelik parçaya bölünmüş kelime-parça kelime haznesinden oluşur. Neredeyse cümle uzunluğunda olan cümle çiftleri, birlikte batch’lenmiş, gruplandırılmıştır. Her eğitim batch’i, yaklaşık olarak 25 bin kaynak tokeni ve 25 bin hedef tokeni içeren bir dizi cümle çifti içermektedir.

Model, bir makinede ve 8 tane NVIDIA P100 GPU’da eğitilmiştir. Ayrıca, warm-up adımları kullanılarak, Adam optimizer tercih edilmiştir.

Regularization için ise, iki teknik kullanılmıştır: residual dropout (ekmek kırıntılarını atmak) ve label smoothing (tahmin etiketi manikürü 💅, evet, yazarken güldüm).

Residual dropout işleminde, her alt-katmanda girdiye eklenip, normalize edilmeden önce, çıktısına dropout uygulanır. Ayrıca, embedding toplamları ile encoder ve decoder’daki positinal encoding’lere de dropout uygulanır.

Label smoothing işleminde ise, modelin tahmin yaparken fazla emin olmasını engellenirken doğruluk ve BLEU skorunu artırması sağlanır.

2.1.12. Sonuçlar

Tablo 2. Sonuçlar: Transformer daha iyi BLEU skoruna ship

*BLEU (BiLingual Evaluation Understudy) Score: Doğal dil modellerinde oluşturulan metinlerin kalite performansını ölçmek için kullanılan bir metriktir. Mottosu: “Makine çevirisi ne kadar profesyonel bir insan çevirisine yakınsarsa, o kadar iyidir.” [7] BLEU skorunun tek bir tanımı olmamakla birlikte, çeşitli versiyonları vardır. w bir ağırlık vektörü olmak üzere, şu şekilde ifade edilebilir:

BLEU Skoru [8]

Diğer bir deyişle, BLEU skoru, modified n-gram precision’ların brevity penalty ile çarpılmasıyla elde edilen, ağırlıklı geometrik ortalaması (weighted geometric mean) olarak ifade edilebilir [9].

Brevity penalty, üretilen çevirilerde en yakın hedefe göre fazla kısa olanları cezalandırır.

Brevity Penalty [8]
Precision [8]
İlki, eşleşen seçili hedef çevirideki i-gram sayısı; İkincisi, hedef çevirideki i-gram sayısı; Sonuncusu, seçili çevirideki toplam i-gram sayısı [8]
Korpusta Üzerindeki BLEU Sonucuna Göre Yorumlanması [10]

Bu skoru, sadece dil modellerine değil de, gerçek insanlara da uygulayabilseydik ne olurdu cidden merak ediyorum 🙃

3. Özet 📝

Transformer mimarisi, iki önemli bileşenden oluşur: feed-forward networks ve self-attention.

Basitçe Transformer Mimarisi [11]

Self-attention n tane tokeni girdi olarak alan ve n tane tokeni işleyerek, transform, çıktı olarak döndürür [12]. Her girdi token için, i) seçili tokeni diğer tüm tokenlerle karşılaştırır, ii) bu çiftlerden her biri için bir attention skoru hesaplanır, iii) seçili tokenin değeri, tüm tokenlerin ağırlıklı (ağırlıklar attention skorlarından geliyor) ortalaması olarak değiştirilir. Bu şekilde, tokenler arasında en önemli olanı, en çok attention/dikkat verilmesi gereken saptanmış olur [12]. Multi-headed self-attention ise, n sayıda self-attention’ı paralel olarak kullanıp, her birinden çıkan çıktıyı birleştirir (concat) veya çıktıların ortalamasını alır [12].

Feed-Forward Network, self-attention mekanizmasının çıktısını, bir sonraki katmanda veya son çıktı katmanında kullanılmak üzere yeni bir gösterime çevirmekten sorumludur. Lineer olmayan bir aktivasyon fonksiyonuyla biten, iki lineer dönüşüm (bunlar matris çarpımı) içerir. Amacı kullanışlı feature’ları çıkarıp, bu sayedegirdi ve çıktı arasındaki daha karmaşık bağlantıları daha iyi şekilde öğrenmektir.

4. Çeşitli Transformer Mimarileri 🏛️

Bazı Transformer Mimarilerinin Kronolojik Sırası [13]

Çeşitli transformer modelleri arasındaki temel farklar model mimarileri, pre-training görevleri ve eğitim veri setleridir. Transformer mimarileri, genel olarak, üçe ayrılabilir: sadece encoder (yalnız Jack), sadece decoder (yalnız Rose) ve encoder-decoder (JackRose).

  • BERT, RoBERTa, ALBERT ve ELECTRA sadece encoder mimarilerine örnek olarak verilebilir. İsminden anlaşılacağı üzere, transformer yapısının sadece encoder kısmına ev sahipliği yaparlar. Her bir aşamada, attention katmanları ilk cümledeki bütün kelimelere ulaşabilirler. Bu modeller çift-yönlü, bi-directional, attention olarak karakterize edilirler ve genelde auto-encoding model olarak anılırlar. Pre-train, ön-eğitim, aşamaları genellikle verilen cümleyi bir şekilde bozma (mesela rastgele kelimeleri maskeleyerek) ile ilgilidir ve sonrasında ilk cümleyi bulma veya tekrardan yapılandırma görevi vardır. Bu modellerin en iyi oldukları görevler, dil anlama üzerinedir: cümle sınıflandırma, named entity recognition (kelime sınıflandırma), seçici soru cevaplama (extractive question answering)[14].
  • GPT, GPT2, CTRL ve Transformer XL sadece decoder mimarilerindendir, yani sadece decoder kısmına sahiptirler. Her bir aşamada, attention katmanları sadece kendisinden önceki kelimelere ulaşabilmektedir. Bu modeller genelde, auto-regressive olarak çağrılmaktadır. Pre-train işlemi ise, cümledeki sonraki kelimeyi tahmin etmeye dayalıdır. Bu modellerin en uygun olduğu görev metin sentezlemektir [15].
  • GPT3, BART, Marian, XLNet ve T5 sequence-to-sequence modellerdendir ve hem encoder hem decoder’a sahiptirler. Her bir aşamada, encoder’daki attention katmanları ilk cümledeki tüm kelimelere ulaşırken; decoder’daki attention katmanları sadece girdideki kelimeden önceki kelimelere ulaşabilmektedir. Pre-train işlemi, biraz daha karmaşık olmakla birlikte encoder veya decoder modellerdeki gibi yapılabilir. Mesela, T5 pre-train edilirken metinden rastgele birden fazla kelime (span of text, HTML tag’lerini hatırlayabilirsiniz, <span> ve <div> arasındaki fark gibi) tek bir özel maske ile değiştirilmiştir ve görev bu maskelenen kelime grubunu tahmin etmeye evrilmiştir. Sequence-to-sequence modeller, verilen girdiye göre yeni cümleler üretmek (özetleme, çeviri yapma, sentezleyici soru cevaplama, generative question answering) [16].
ChatGPT’nin, GPT3, Cevabı
Özet Tablo [17]

5. PyTorch İmplementasyonu 👩‍💻

Artık elleri kirletme vakti. Eklediğim linklerde, harika implementasyonlara erişebilirsiniz.

5.1. Scaled Dot-Product Attention and Multi-Head Attention

Bu repository’de çeşitli attention mekanizmalarının, scaled dot-product ve multi-head dahil, implemente edilmiş halleri mevcuttur.

5.2. Transformer

Bu repository’de, transformer mimarisinin implementasyonu mevcuttur.

Kaynakça

[1] Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., … & Polosukhin, I. (2017). Attention is all you need. Advances in neural information processing systems, 30.

[2] transduce. (n.d.). In The Merriam-Webster.com Dictionary. https://www.merriam-webster.com/dictionary/transduce

[3] Transducer — Definition, Parts, Types, Efficiency, Applications. (n.d.). BYJUS. https://byjus.com/physics/transducer/#:~:text=A%20transducer%20is%20an%20electronic%20device%20that%20converts%20energy%20from

[4] Sequence Transduction with Recurrent Neural Networks ! Alex Graves Representation Learning Workshop ICML 2012. (n.d.). Retrieved January 13, 2023, from https://www.cs.toronto.edu/~graves/seq_trans_slides.pdf

‌[5] He, K., Zhang, X., Ren, S., & Sun, J. (2016). Deep residual learning for image recognition. In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 770–778).

[6] Sepp Hochreiter, Yoshua Bengio, Paolo Frasconi, and Jürgen Schmidhuber. Gradient flow in recurrent nets: the difficulty of learning long-term dependencies, 2001.

[7] Papineni, K., Roukos, S., Ward, T., & Zhu, W. J. (2001). BLEU. Proceedings of the 40th Annual Meeting on Association for Computational Linguistics — ACL ’02.

[8] Monkey, C. (2021, February 11). Bleu Score. Neurotic Networking. https://necromuralist.github.io/Neurotic-Networking/posts/nlp/bleu-score/

[9] BLEU. (2023, January 7). Wikipedia. https://en.wikipedia.org/wiki/BLEU#Basic_setup

[10] Evaluating models | AutoML Translation Documentation. (n.d.). Google Cloud. https://cloud.google.com/translate/automl/docs/evaluate

[11] Alammar, J. (2018, June 27). The Illustrated Transformer. Jalammar.github.io. https://jalammar.github.io/illustrated-transformer/

[12] Wolfe, C. R. (n.d.). Vision Transformers. Cameronrwolfe.substack.com. Retrieved January 13, 2023, from https://cameronrwolfe.substack.com/p/vision-transformers

[13] How do Transformers work? — Hugging Face Course. (n.d.). Huggingface.co. https://huggingface.co/course/chapter1/4

[14] Transformer models — Hugging Face Course. (n.d.). Huggingface.co. https://huggingface.co/course/chapter1/5?fw=pt

[15] Decoder models — Hugging Face Course. (n.d.). Huggingface.co. Retrieved January 13, 2023, from https://huggingface.co/course/chapter1/6?fw=pt

[16] Sequence-to-sequence models[sequence-to-sequence-models] — Hugging Face Course. (n.d.). Huggingface.co. Retrieved January 13, 2023, from https://huggingface.co/course/chapter1/7?fw=pt

[17] Summary — Hugging Face Course. (n.d.). Huggingface.co. Retrieved January 13, 2023, from https://huggingface.co/course/chapter1/9?fw=pt

--

--