Ben, ChatGPT (2022)

Rabia Eda Yılmaz
22 min readJan 25, 2023

--

Ben, Robot (2004) Filmi [1]

[Will Smith, kızgın] Sen sadece bir makinesin. Yaşamın bir taklidi. Bir robot senfoni yazabilir mi? Bir robot bir tabloyu güzel bir sanat şaheserine çevirebilir mi?

[Robot, merakla] Sen yapabilir misin?

ChatGPT’nin Cevabı

ChatGPT’nin cevabına göre, ChatGPT, OpenAI şirketi tarafından geliştirilen son teknoloji bir dil işleme modelidir. Genel amaçlı gösterimleri öğrenmek için, unsupervised pre-training (etiketler olmadan ön-eğitim) uygulanmıştır. Temel amacı, çok çeşitli doğal dil sentezleme görevleri için (dil çevirisi, soru cevaplama, metin özetleme, diyalog üretme vb.) insan-benzeri metin sentezlemektir. Ayrıca, belirli görevler için de (dil modelleme, metin sınıflandırma, named entity recognition gibi) fine-tune edilebilir.

Bu blog yazımda, ön-hazırlık olarak kelime hazinesi bölümünden sonra makale incelemesi kısmında birlikte biraz uzun bir yolculuğa çıkacağız. ChatGPT’yi daha iyi anlamak için, sırasıyla, GPT, GPT-2 ve GPT-3 makalelerini inceleyeceğiz.

Sonrasında, diğer gruplar tarafından üretilmiş dev dil modellerinden bahsedeceğiz.

Onu izleyen bölümde diyalog ajanının (Google’ın ürettiği Sparrow adlı modele etiksel kaygılarla chatbot yerine vermiş olduğu terim) gelecek, etiksel boyut, büyük tablo ve gittiği yönden bahsedeceğim.

Ardından özet ile öğrendiklerimizi toparlayacağız. En sonda ise, basit bir GPT modeli implemente edeceğiz. Bu implementasyon bölümünü hazırlarken, büyük oranda <3 Andrej Karpathy <3 ‘nin hazırladığı müthiş Let’s build GPT: from scratch, in code, spelled out. videosundan yararlandım. İzlemenizi şiddetle tavsiye etmemin ardından… Nöronlarımızı sıvalayalım!

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — —— —

İçindekiler

  1. Ön-Bilgi Hazinesi 🦜
  2. Makale İncelemesi 📎

— 2.1. GPT 🤖

— 2.2. GPT-2 🤖🤖

— 2.3. GPT-3 🤖🤖🤖

3. Gelecek?

4. Özet 📝

5. Sıfırdan GPT İnşaa Edelim 🛠️👩‍💻

— — — — — — — — — — — — — — — — — — — — — — — — — — — — —— — —

1. Ön-Bilgi Hazinesi 🦜

Bu bölümde yazı boyunca kullanacağım bir takım terimler ve olguların açıklaması mevcuttur. Bu bölümü atlayabilir ve ihtiyaç halinde geri dönerek referans alıp, ipin ucundan tutup yeni sekmelere seyahat edebilirsiniz. 🏴‍☠️

  • Objective Function: Modelde belli bir çıktıyı elde edebilmek için minimize veya maksimize edilmesi gereken fonksiyondur.
  • Word Embeddings: Benzer kelimelerin, benzer gösterimlere sahip olmasını sağlayan (yüksek-boyutlu vektörler kullanarak) bir çeşit kelime gösterim şeklidir. Böylelikle kelimeleri, makinenin anlayabileceği vektörlerle çok-boyutlu uzayda ifade etmiş oluruz. Bunun için çeşitli algoritmalar vardır: Embedding Layer, Word2Vec, GloVe vb.
Figüre 0. Embedding Örneği [11]
  • Tokenization: Kütlenin birimine kilogram, uzunluğun birimine metre diyoruz. Peki, dilin birimi nedir? Onu birimlendirmek için paragraflara, cümlelere, kelimelere, hatta harflere bölebiliriz. Bir metni daha küçük alt parçalara bölüp, işlemeye tokenization denilir. Çeşitli tokenization yöntemleri vardır: word tokenization, sentence tokenization, subword tokenization vb.
Figür 00. Tokenleştirme Teknikleri [12]
  • Pre-training: Bir modeli önceki çok büyük veri setinde eğitip, verideki genel örüntüleri ve gösterimleri nitelikli bir şekilde çıkarmasına denilir. Bu şekilde, daha sonra hedeflenen problem üzerindeki veride, fine-tuning, pre-training’ten aldığı parametrelerle başlayarak eğitilerek sonuç iyileştirilir.
  • Supervised vs Unsupervised vs Semi-Supervised Learning: Unsupervised’da eitketler olmadan, supervised’da etiketler varken ve semi-supervised’da ise supervised ve unsupervised yöntemleri birlikte kullanılarak (önce etiketsiz veri üzerinde eğitilir ve öğrenilen parametreler ile sonra etiketli veri üzerinde) öğrenim gerçekleştirilir.
  • Meta-Learning: Bir görev yerine, birçok görevden öğrenmeyi öğrenen bir tekniktir. Önceki görevden öğrenilen bilgiyi, yeni görevine de entegre ederek öğrenmeye devam eder. Bu yapısıyla, ensemble learning’e benzetilebilir.
  • Ablation Study: Farklı parçaların veya özelliklerin önemini değerlendirmek için uygulanan, modelden çıkarma (ablation) yoluyla, bir metottur.
  • Language Model (LM): Bir metindeki, cümle veya döküman olsun, kelimelerin olasılıksal dağılımını tahmin etme görevine verilen isimdir. Bu görev ile eğitilen model, eğitim veri setine benzer yeni metin sentezlemekte veya yeni örnek metinlerdeki keliemelere olasılıklar atayarak anlam ve dil bilgisi belirlemede kullanılabilir. Pre-train edilen modeller (mesela self-supervised language modeling objective ile) genel olarak language model, dil modeli, olarak adlandırılır.
  • Large Language Model (LLM): Aşırı derecede büyük veri setlerinde (dolayısıyla büyük boyut ve karmaşıklık) eğitilmiş dil modelleridir.
  • Foundation Models: Etiketsiz metin verisinin bolluğu ve etiketli verinin kıtlığı durumu çok yaygındır. Discriminative language understanding görevleri için ise çok sayıda etiketli veriye ihtiyaç vardır. Bunun yerine bir model pre-train etmek (a — ha, foundation model) ve her bir görev için fine-tune etmek daha elverişlidir.
  • Zero-Shot vs One-Shot vs Few-Shot Learning: Zero-shot learning, modeli zaman ve eforu düşürecek bir şekilde, veriyi etiketlemeden (cumburlop şeklinde) öğrenmektir. One-shot learning, geçmiş veriyi kullanarak sınıflandırma yapar. Yüz tanımlama sistemlerinde kullanılan bir tekniktir. Few-shot learning de, bir küçük set örnek içerir ve bunu yeni görevi öğrenmek için kullanır [32].
Figür 000. Zero-Shot vs One-Shot vs Few-Shot [13]

2. Makale İncelemesi📎

Bu bölümü okumadan önce, Transformer’lar hakkında temel bilgiye sahip değilseniz, bu yazımı okuyunuz.

Hatırlatıcı birkaç görsel ile özet geçiyorum.

Figür 0000. Transformer [8]
Figür 1. Encoder Bloğu [8]
Figür 2. Decoder Bloğu [8]
Figür 3. Kelimeyi [MASK] çevirmek yerine (encoder-only olan BERT gibi), burada sağa doğru kelimeler tahmin edilir. [8]
Figür 4. BERT’te Self-Attention kullanılırken, GPT’lerde Masked Self-Attention kullanılır (bir sonraki kelimeyi tahmin için) [8]
Figür 5. Sadece Decoder Bloklardan Oluşan Decoder-Only Model Örneği [8]

2.1. GPT🤖

Makale: Improving Language Understanding by Generative Pre-Training

Nitelikli bir şekilde etiketlenmiş veri bulmanın yanı sıra, yeterli miktarda veri bulmak birçok deep learning modelini eğitmek için gerekli olan en önemli ve zor basamaklardan birisidir. Bu yüzden, Yapılan bir önceki araştırmalarda pre-trained word embeddings yetersiz verinin olduğu durumlar için kullanılmıştır ama bazı durumlarda, kelime-seviyesindeki bilgi daha karmaşık görevler için yetersiz gelmiştir.

Bu nedenle, bu makalede geniş bir yelpazedeki görevlerde iyi performans sergileyen (textual entailment, question answering, semantic similarity text classification gibi görevler) semi-supervised bir teknik kullanan bir model sunuluyor. Modelin avantajı, az miktardaki etiketlenmiş veri kısıtlamasının üzerinden devasa bir metin korpusunda unsupervised-generative-pretraining ve onu takip eden her spesifik görev için supervised discriminative fine-tuning ile üstesinden gelmiştir. Pre-training modelleri, tüm görevler için aynı kalmıştır. Fine-tuning için ise, sadece küçük ve belirli bir görev adaptasyonu yeterli olmuştur. Yazıldığı vakitteki 9 dil görevinden 12'sinin state-of-the-art performanslarını büyük oranda iyileştirmiştir [2].

Figür 6. Bu Makalede Kullanılan Transformer Yapısı — Decoder-Only [5]

Modelin amacı, küçük adaptasyonlarla birçok göreve transfer edilebilen evrensel gösterimleri (universal representations) öğrenmektir. Bunun için etiketlenmemiş metne sahip olan büyük bir korpusa ve training örnekleri, hedef görevler, için manuel olarak etiketlenmiş birkaç veri seti erişilmiştir. Etiketsiz korpus ve etiketli verinin aynı alandan gelmesi gerekmez.

Figür 7. Her Göreve Özel Fine-tunnig İçin Input Adaptasyonları — Tüm Input Token’lara Çevrilmiş Sonra Pre-trained Modele İşlenmek Üzere Beslenmiş ve Sonrasında Liner+Sofmax Katmanlarına [5].

İki adımlı eğitim yöntemi kullanılmıştır. Öncelikle, modelin ilk parametrelerini öğrenmesi için etiketsiz veri üzerinde bir dil modeli (language model — LM) objective function kullanılmıştır. Sonrasında ise, belirlenen supervised objective function, bu elde edilen parametrelerde hedef görev için adapte edilmiştir.

Bir transformer [3] ama daha spesifik olmak gerekirse sadece decoder kısmı kullanılmıştır. (Mesela, BERT modelinde de transformer’ın sadece encoder kısmı kullanılmıştır.) Transformer yapısı, uzun-süreli veriyi kapsayıp, parallel olarak işleyip ve daha stabil oldukları için çeşitli görevlerde RNN ve LSTM’den daha iyi sonuçlar vermektedir [4]. Dahası da, transfer sırasında structured text input’u (mesela düzenli bir csv file içerisindeki yapı gibi) tek bir bitişik token gibi işleyen göreve özel input adaptasyonları kullanılmıştır [2].

Unsupervised Pre-training

Figür 8. LM Objective Function —Corpus token seti U = {u1, u2,…, un} ve k context window boyutu ve koşullu olasılık P ve ağdaki parametreler de Θ olmak üzere [5]

Figür 8'teki formül dil modelinin objective fonksiyonudur. Bu fonksiyonun amacı likelihood’u maksimize etmektir. Performansı optimize etmek için stochastic gradient descent (SGD) kullanılmıştır.

Deneylerde çok-katmanlı transformer decoder kullanılmıştır. Bu model, multi-headed self-attention işlemini ve ardından position-wise feedforward katmanlarını, input context token’ları üzerine uygulamıştır. Böylelikle, hedef token’lar üzerinde output dağılımı elde edilecektir.

Figür 9. Context vector token’ları — U = {u-k,…, u-1} ve n katman sayısı ve We: token embedding matrix ve Wp: position embedding matrix [5]

Supervised Fine-Tuning

Figür 8'teki L1 fonksiyonu ile modeli eğittikten sonra, artık parametreler supervised fine-tuning aşaması için hazır hale geldiler.

Etiketli veri seti C ve veri setindeki dizi halinde input token içeren her bir örnekler x1,…, xm ve etiket y ve hlm son transformer bloğunun aktivasyonu ve Wy linear output katmanı olmak üzere:

Figür 10. Tahmin Edilecek y Etiket Çıktısı Formülü [5]

Sonuç olarak, bu bize maksimize etmek için şu fonksiyonu verir:

Figür 11. Maksimize Edilmek İstenen Objective Function [5]

Modelin, genel bir fonksiyon olma özelliğini geliştirmek için (böylece çeşitli görevlere genellenebilir), L2 objective function yardımcı fonksiyon olarak kullanılmıştır.

Figür 12. Modelde Optimize Etmek için Kullanılan Objective Function [5]

Sonuç olarak, modelde Figür 12'deki L3 objective fonksiyonu kullanılır. Lambda için 0.5 seçilmiştir.

Task-Specific Input Transformations

Figür 2'de görüldüğü üzere, görevlere özel olarak input dönüşüme uğratılmıştır.

Deneyler

Tablo 1. Makaledeki Deneylerde Kullanılan Görevler ve Veri Setleri [5]

12 katmanlı, içinde masked self-attention heads olan decoder-only bir transformer eğitilmiştir. (768 dimensional states ve 12 attention heads) Position-wise feed-forward networks için 3072 dimensional inner states kullanılmıştır. Tabii ki de, Adam optimizer (max learning rate:2.5e-4) seçilmiştir. Learning schedule kullanılmıştır. Orijinal transformer’ların [3] aksine, sinusoidal kullanmak yerine positional encodings öğrenilmiştir. Yakınsama, convergence, için 3 epoch yeterli olmuştur.

Sonuçlar

Tablo 2. Natural Language Inference Görevi Sonuçları [5]
Tablo 3. Question Answering Görevi Sonuçları [5]
Tablo 4. Semantic Similarity ve Classfication Sonuçları [5]

Analiz

  • Pretrained modelden supervised göreve transfer edilen katman sayısı artırıldıkça, hedef görevlerdeki performans artmıştır.
  • Unsupervised pretraining’in işe yarayıp yaramadığını anlamak için, fine-tuning yapmadan zero-shot testing yapılmış ve modelin performansının zamanla arttığı ve stabil olduğu gözlemlenmiş.
Figür 13. Unsupervised Learning Performansı Olumlu Etkiliyor[5]
  • Ablation çalışmalarda, L3 kullanmanın, L1'den daha etkili olduğu görülüyor.
  • L3'ten büyük veri setleri, küçük veri setlerine göre daha fazla yararlanıyor.
  • Pre-training aşamasının önemi vurgulanmış ve dil ile alakalı bilgileri çıkarmasının altı çizilmiş.

2.2. GPT-2 🤖🤖

Makale: Language Models are Unsupervised Multitask Learners

İnceleme

Selefi GPT ile benzer bir örüntüye sahiptir.

Tablo 5. GPT-2 Mimarisi Hiperparametreleri [6]

Yine bir objective function ile dil modeli pre-train edilmiştir sma burada fine-tuning işlemi yoktur. Onun yerine zero-shot ile downstream görevleri çözmeyi hedefler. Kısacası, i) çiğ metin üzerinde dil modelini pre-train et, ii) çeşitli görevler üzerinde, metin “prompt”ları ile zero-shot inference (sonuçlandırma) yap.

Pre-training, Reddit’teki popüler linkleri çekerek oluşturulan custom WebText veri seti ile yapılmış ve dört farklı boyuttaki dil modeli test edilmiştir.

Figür 14. WebText Dil Modellerinin Çeşitli Görevler Üzerindeki Zero-Shot Performansı [6]

Birkaç farklılık dışında GPT-2 model mimarisi, GPT ile eştir. Bu farklılıklara farklı weight initialization, larger vocabulary, daha uzun input dizisi örnek verilebilir. Dil modellerinin boyutlarına rağmen, WebText veri setine underfit etmiştir. Dil modeli ne kadar büyük olursa performansın o kadar arttığı gözlenmiştir, Figür 14. (large language model — LLM)

Tablo 6. Çeşitli Dil Görevi Üzerindeki Performansı [6]

Çeşitli dil görevleri üzerinde yapılan deneyler sonucu, Figür 14, her zaman state-of-the-art sonuçlara erişemese de genelde iyi sonuçlar vermiştir. Dil modelleme ve okuma-anlamlandırma görevlerinde, özetleme ve soru cevaplamaya göre daha iyi performans sergilemiştir. Bu başarıları ise, fine-tuning olmadan ve zero-shot inference ile elde edildiği göz önüne alınırsa, gelecek vaad etmektedir. Yazarlar makalede, dil modelinin büyüklüğü ile performansının doğru orantılı oluşuna dikkat çekmiştir [7].

“… a language model with sufficient capacity will begin to learn to infer and perform the tasks demonstrated in natural language sequences in order to better predict them, regardless of their method of procurement.” [6]

Ayrıca, GPT-2'nin kodları açık kaynak halinde burada bulunabilir. Yine de, bilgisayarınızı eritmek istemiyorsanız, pre-trained modeline buradan ulaşabilirsiniz. İstediğiniz görev için fine-tune edebilirsiniz.

Mimari

Figür 15. GPT-2, her decoder’da 1024 token işleyebilir [8]
Figür 16. Token Embedding’ler (vocab_size, embed_size) boyutuna sahiptir [8]
Figür 17. Positional Encoding’ler (context_size, embed_size) boyuta sahiptir. [8]
Figür 18. Input kelimeler, transformer’a beslenmeden önce işlenir => token embedding’e positional encoding eklenir. [8]
Figür 19. Decoder Katmanları Boyunca Bir Tokenin Serüveni — Token Gulliver Travels :) [8]
Figür 20. Sonrasında Bu Output Vector, Token Embeddings ile çarpılarak Token Probabilities hesaplanır. En yüksek olasılığa sahip olan kelime seçilir. [8]

Daha detaylı gösterim ve ilerisi için (GPT-2 içerisinde masked/self-attention nasıl işliyor gibi) bu blog yazısını okuyunuz.

Soluklanıp, Toparlayalım

  • Language model (LM, dil modeli) pre-train etmek harika. Çünkü pre-train sonrası, representations iyi öğrenilmiş oluyor ve modelin genellenebilir olması artıyor.
  • Boyut önemli. Pre-trained LM boyutu arttıkça, öğrenilen representations kalitesi artıyor ve performans da artıyor. (GPT-2 ve GPT arasındaki farktan gördüğümüz üzere)
  • Kaynak modeller (foundation models)havalıdır. Birçok deep learning modeli tek bir görevi çözmeye odaklanır ve eğitilir. Bu yüzden çoğu durumda şunlardan yararlanmakta fayda vardır: i) etiketsiz veri üzerinde self-supervised learning ile büyük bir modeli pre-train etmek, ii) bu modeli çeşitli görevlere uyarlamak. Ayrıca foundation models, computer vision için de kullanılabilir [10].

2.3. GPT-3 🤖🤖🤖

Makale: Language Models are Few-Shot Learners

Bu makalede, CommonCrawl veri seti ile 400B token üzerinde eğitilmiş 175B parametreye sahip çok büyük bir transformer modeli olan GPT-3 tanıtılmıştır. Şaşırtıcı bir şekilde, fine-tuning olmadan zero-shot ve few-shot senaryolarda çok iyi performans sergilemiştir [13].

Figür 21. Parametre Sayısı ile Modelin Boyutunun Artması Performansı Artırıyor [13]
Figür 22. Parametre Sayısı Hepsinin Performansını Artırsa da, En Çok Few-Shot Bundan Faydalanıyor [13]
Figür 23. x-shot Learning vs Traditional Fine-Tuning [13]
Tablo 7. GPT-3'ün Farklı Boyut, Mimari ce Learning Rate Konfigürasyonları [13]
Figür 24. İşlemsel Olarak Maliyet Karşılaştırması — Evet, Fazla[13]
Figür 25. GPT-3 Training Curves [13]
Figür 26. En Çok Önyargıya Sahip Olan Kelimeler. Sol Erkek ve Sağ Kadın [13]
Figür 27. Irka Göre Duygu Durum. Daha Fazla Siyahilere Negatif Duygu Sergiliyor. [13]
Figür 28. Dini İnanışa Göre En Çok İlişkilendirdiği Kelimeler [13]

Tek LLM, tabii ki de GPT-3 değil, hatta şu an kullandığımız GPT-3.5 versiyonu. LaMDA [14], Galactica [15], Codex [16], Sparrow [17]… Daha fazla model bulunmakta ve daha fazlasının gelmesi muhtemel.

3. Gelecek? ⌛

Yaşam sadece geriye doğru anlaşılabilir; fakat ileriye doğru yaşamak zorunludur. ― Søren Kierkegaard

Şu anki bilgimiz ile sadece masked self-attention gibi davranabilir ve bir sonraki tokeni tahmin etmeye çalışabiliriz. Yine de, yapay zeka teknolojisinin potansiyelinin apaçık karşımızda duruyor oluşunu göz ardı edemeyiz, edemiyoruz.

Dikkat edilmesi gereken birkaç husus bulunmakta.

Mesela, dil modellerinin, ön yargısal, cinsiyetçi, ırkçı, kutuplaştırıcı vb. şekilde metinler üretebilme ihtimaline karşı üstünde iyi kriterlerle belirlenmiş kurallara sahip olması gerekmektedir. Bunun dışında bilgi kirliliğini ve kötü niyetli faaliyetlerde yeni yöntemlerin kilidini açma potansiyeline de sahiptir.

Diğer yandan, yakın zamanda yeni ve çok daha güçlü bir arama motoru için kullanılacaktır. Bunu Google yapmazsa, başka bir kuruluş yapacaktır [18].

Figür 29. “50 ve 60'ların bilim-kurgularında yapay zeka, hesaplama yapan soğuk ve vulcan gibi makineler olarak tasvir ediliyordu. Şimdilerde ise biraz fazla duygusal yapay zeka çıktı.” — Andrej Karpathy [18]

Mucitler, uzun zamandan beri düşünen makineleri oluşturmayı hayal ediyordu. Bu istek, en az Antik Yunan tarihine uzanacak kadar eskidir. Mitolojik figürler Pygmalion, Daedalus ve Hephaestus gibi efsanevi mucitler olarak yorumlanırsa, o zaman Galatea, Talos ve Pandora yapay yaşam olarak düşünülebilir [19].

Dikkatinizi çekerim ki, düşünen makineler. Hissetmek ve düşünmek çok farklı iki eylemdir. Bu konu hakkında düşünecek olan kişinin öncelikle Platon gibi tartışacağı kelimeleri iyi tanımlayıp, anlaması şarttır.

Hissetmek, biyolojik bir canlı olmanın parçasıdır ve genellikle hormonlar tarafından kontrol edilir. Bu yüzden, bu konuyla ilgileniyorsanız aramanız gereken şey biorobotics ve biyolojik robotlardır: örneğin Xenobots.

Peki, makineler gerçekten düşünebilir mi? Alan Turing’in ünlü makalesinden, Turing testi fikrinin yeşerdiği, alıntı yaparak şimdilik noktalıyorum:

Figür 30. “Makineler düşünebilir mi?” sorusu, “Taklit oyununda çok iyi olan hayali dijital bilgisayarlar var mıdır?” ile değiştirilmelidir. — Alan Turing [20]

Konuya geri dönecek olursak, yapay zeka modellerinin duygulara veya bilince sahip olduğuyla ilgili tartışmalar bulunmuş olsa da, örneğin LaMDA modelinin duygusal olduğunu söyleyen Google mühendisi, bunlar (en azından) şu anlık için söz konusu değildir. Çünkü bu modeller, sadece belli bir fonksiyonla performansı maksimize ederek tahmin etmeye hizmet eden matematiksel fonksiyonlardan ibarettir. Ne tür bir veriyle eğittiğinize bağlı olarak, tahminleri ve insanların gördüğü çıktılar da ona göre değişecektir.

Buradaki en büyük tehlike insan kaynaklıdır: i) yapay zekanın bilinçli ve duygulara sahip olduğuna toplulukları ikna ederek onları manipüle edecek kişi veya gruplar ve ii) çeşitli şekillerde teknolojiyi kötüye kullanabilecek insanlar.

Olumlu getirileri açısından çok büyük bir potansiyel taşıyan bu teknolojinin, sanayi devrimi ve dijital devriminden sonraki devrim olacağı ön görülüyor.

Bu tür dil modelleri inovatif ve (henüz?) yeni bir çağ başlangıcı değildir çünkü bunlar bir süredir vardır [24]. ChatGPT’nin bu kadar dikkat çekme nedeni bir API aracılığıyla herkesin kullanımına açık hale getirilmesidir.

ChatGPT, yapbozdaki sadece küçük parçalardan biri. Bu yazıyı yazarken bile, çeşitli dev firmalar yeni stratejiler belirleyerek milyarca dolar kar yapmanın ve globali net bir şekilde domine etmenin planını oluşturmakta.

Ek olarak, OpenAI modeli toksik olan veriyi (çocuk cinsel istismarı, hayvanlarla cinsel ilişki, cinayet, intihar, işkence, kendine zarar, ensest vb.) elemek için Kenya, Uganda ve Hindistan gibi ülkelerden insanları saati en fazla 2$ olacak şekilde kiralamıştır ve kuruluşlar kendilerini “ethical AI” şirketi olarak tanımlamaktadır [25].

Bir diğer konu da, daha soyutsal veya somut olsun yükselen bu teknolojik gelişmeler insanlardan daha fazla değer görmektedir. Buna örnek olarak, Amazon çalışanlarının, şirkette robotlara daha iyi davranıldığına dair olan iddiası verilebilir [31]. Merak ettiğim, ileride teknolojik unsurların da insanların uğradığı ön yargısal (ırkçılık, cinsiyetçilik, dini ayrım vb.) sorunlarla karşılaşıp karşılaşmayacağı ve karşılaşırsa bunun nasıl ve kim tarafından olacağıdır.

Barış Özcan’ın bu videosu ile Lex Fridman ve Andrej Karpathy’nin podcast’ini buraya ekliyorum.

Nihayetinde ise… insanları, makineleri olan insanlar yönetecektir.

4. Özet 📝

Tebrikler, bir sürü konsept hakkında fikir yürüttük ve buraya kadar geldin!

Şimdi, bu yazıda neler bahsettiğimizi özetleyelim ve her şeyi toparlayalım.

  • ChatGPT sadece sohbet edebildiğiniz uygulamanın ismi. Arkasında GPT-3 modeli kullanılıyor. Aslında topluma açık hale getirildiği için, aldığı geri bildirimlerle birlikte GPT-3.5 olmuş bulunmakta.
  • Çoook büyük bir veri seti üzerinde eğitilmiştir.
  • GPT, GPT-2 ve GPT-3 olmak üzere versiyonları mevcut. Temelde mimarileri benzese de, en büyük farkları çok daha büyük parametre sayısına sahip olması.
Figür 31. Parametre Sayısı Karşılaştırması [21]
Figür 32. “GPT3'ün muhteşem performansını geleceğe yansıtmak, yaşam, evren ve her şeyin cevabının sadece 4.398 trilyon parametre olduğunu gösteriyor.” [22]
  • GPT, transformer’ların sadece decoder bloklarından oluşan bir modeldir.
  • Unsupervised bir şekilde pre-train edilip, spesifik görevler için supervised şeklinde fine-tune edilirler.
  • Çeşitli dil görevlerini yerine getirebilmekte: dil çevirisi, özetleme, soru cevaplama vb.
  • Harika sonuca sahip olmasına karşın, toplumsal perspektifte ön yargısal ve negatif etkilere sahip olma potansiyeli mecvut.
  • Humanity its own worst enemy. [23]

5. Sıfırdan GPT İnşaa Edelim 🛠️👩‍💻

Bu bölümde Oğuz Atay’ın Tutunamayanlar kitabının .txt haliyle eğitilmiş bir veri seti ile basit bir GPT modeli eğiteceğiz. Tam hali aşağıdaki linkte:

Bunun için YouTube’daki Andrej Karpathy’nin videosu baz alınmıştır.

Adım adım kodu inceleyelim. Burada, Google Colab ortamını tercih ettim.

Veri seti olarak Oğuz Atay’ın Tutunamayanlar kitabını seçtim. Böylelikle modelimiz, bu kitaba benzer şekilde cümleler üretecek. Çakma bir Oğuz Atay, evet.

Öncelikle gerekli kütüphane ve fonksiyonları çağırıyoruz. İmplementasyonda seçimimiz PyTorch. Sonrasında hiperparametreleri belirliyoruz. Bir tane seed atıyoruz ki, her kod çalıştığında o oturumda aynı sonuç elde edilsin. Sonra da wget komutuyla, Tutunamayanlar kitabının .txt dosya halini indiriyoruz. Ardından indirilen dosyayı okuyup, metni bir değişken içerisine atıyoruz.

Daha sonra, metindeki eşsiz karakterleri sıralı bir liste halinde chars değişkenine atıyoruz. Bu değişkeni kullandığımız her bir karakter için özel bir alfabe olarak düşünebilirsiniz. Sonrasında özel alfabemizin (:D?) uzunluğunu da vocab_size değişkenine atıyoruz ki, modeli kurarken boyutları ayarlamamızda önemli olacak olan bir parametre.

Ardından özel alfabemizin her bir karakterini ile dict veri yapıları oluşturuyoruz. Birisi her bir harfin integer karşılığını, diğeri ise her bir interger’ın harf karşılığını bize verecek. Sonra encode ve decode olmak üzere iki lambda fonksiyonu tanımlıyoruz. Encode fonksiyonu, verilen kelimeyi int token’lerden oluşan bir listeye dönüştürür ve decoder fonksiyonu ise, verilen int token listesini kelimelere dönüştürür. Model ile bizim aramızdaki portal gibi düşünülebilir. Daha sonra da veriyi pytorch tensor haline getirdikten sonra, ki efektif bir biçimde pytorch modelimizde işlensin, train ve val olmak üzere iki sete bölüyoruz. En sondaki fonksiyon ise, veriden x(input context) ve y(target) içeren küçük bir batch çağırmak içindir. Verideki diziyi blok blok işleyeceğimizi düşünürsek, en son bloğa kadarki elemanlardan batch_size boyutunda index seçimi yapıyoruz (ix değişkeni). Sonra da, x’ten blok blok batch alıyoruz ve y’den de bir kaydırılmış halinde seçim yaparak target değerleri alıyoruz.

Ardından loss hesaplamak için bir fonksiyon yazıyoruz. Başından no_grad decorator olma nedeni, bu fonksiyon eğitim için kullanılmayacağından boşuna backward yapıp memory ve cost neden olmasın diye. Bir batch çağrılıp, modele atılıp, loss değeri kaydedilir.

Daha sonra da, self-attention için bir head implemente ediyoruz. Klasik olarak, nn.Module’den bir sürü özelliği miras alıyoruz. Key, query ve value şekilnde nn.Linear fonksiyonu ile ağımızdaki node’ları oluşturuyoruz. (n_embd, head_size) boyutu ile başlatıyoruz. Bu sınıfa ait olmasa da kullanmak istediğimiz bir değişken var. Dolayısıyla, onu register_buffer ile oluşturuyoruz: tril değişkeni. Kısacası bu bir lower triangular matrix yani matrisiniz kare pastayı sol üst köşeden sağ alt köşeye kesmişsiniz de, üst bölgedekiler hep sıfır iken, alt bölgedekilerin değeri bulunmakta. Kullanım nedeni tokenlerimiz harf harf, bu yüzden cümlede ilerledikçe buna benzer bir şekil oluşmakta.

Figür 33. Tokenlerin İlerledikçe Lower Triangular Matrix Yapısına Benzemesine Örnek

PyTorch back-propagation işini bizim için otomatik olarak hallediyor, bu yüzden sadece forward implemente ediyoruz. (Az önceki torch.no_grad decorator nedeni işte tam bu yüzden) Key değerlerini hesaplamak için, veriyi key node’larına atıyoruz. Query için de benzeri bir işlem yapıldıktan sonra, artık attention score’ları hesaplayabiliriz. @ işareti, np.matmul fonksiyonuna tekabül etmektedir yani matrix çarpımı yapmaktadır. Kolaylık olsun diye böyle bir güzellik yapmışlar. Query ve Transpose Key matrisleri (boyutların yeriyle oynanır) çarpılır ve değerlerin boyutunun kareköküne bölünür. Niye bunu yaptık derseniz, attention is all you need:

Figür 34. Attention Skor Formülü [26]

Sonrasında öncesinde oluşturduğumuz lower triangular matrisimizi, T. zamana kadar olan satır ve sütunlarda, eğer 0'a eşitse değer onu -infinity yapıyoruz. Sonra da matrisi softmax’in içine bandırıyoruz.

Figür 35. Softmax Fonksiyonu [27]
Figür 36. e^x Fonksiyonu [28]

Softmax fonksyionundaki e fonksiyonlarına dikkat ediniz. e^x fonksiyonunun grafiğine göre, Figür 36, x değeri ne kadar eksi sonsuza giderse o kadar sıfıra yaklaşır. Bu yüzden, matrisimizde istenmeyen bölgeyi eksi sonsuz (-infinity) ile doldurduk ki, softmax içine atıldığında sıfır olarak dışarı çıksınlar.

Ardından dropout işlemi uygulanır, ki bu değeri 0.0 yaptığımız için en başta hiperparametre tanımlarken, bir şey olmayacak. Sonrasında hesaplanan value değeri ile lower triangular matrisimizi çarpıyoruz. Sonrasında oluşan değeri döndürüyoruz.

Tabii ki de bu, tek bir attention head idi. Biz ne yapıyorduk, gül demeti gibi paralel olarak bunları multi head attention olarak bağlıyorduk. Bu şekilde oluşan gül demetimizi, daha da güzelleştirmek için yani bir decoder haline getirmek için, gavur ıtırı demeti gibi olan feed forward fonksiyonları ile bütün demet haline getiriyoruz.

Figür 37. Gül (Rose) ve Gavur Itırı (Hardy Geranium) Bahçedelerde Sık Kullanılan İkilidir [29].

Block sınıfı sayesinde de, multi head attention ve feed forward bir araya getirilmiş oldu. LayerNorm katmanı burada çok önemli. Çünkü bu katman olmadan model performansı gerçekten kötü etkileniyor.

Son olarak da, modelimizi BigramLanguageModel adı altında, yani ardışık iki tokeni göz önüne alarak, oluşturuyoruz. Bu durumda her harften sonra, o harften sonra hangi harfin geleceğini tahmin etmeye çalışacağız.

Figür 38. n-gram Örneği. Ne kadar n, o kadar ardışık köfte yani token[30]

İlk olarak, birer tane token embedding ve position embedding table oluşturuyoruz. Sonra az önce oluşturduğumuz blokları, gül ve gavur ıtırı demeti, bir dizi halinde diziyoruz. LayerNorm ve Linear fonksiyonlarını da başlatıyoruz.

Forward propagation kısmında, token embedding tablosundan, index’e göre token embedding alınır. Sonra position embedding tablosundan T zamanı kadar position embedding alınır. Token embedding ile position embedding’i toplayarak, yer bilgisi de içinde bulunan bilgiyi elde ederiz. Oluşan bilgiyi, blokların içerisine atarız. Bloklardan çıkan değere LayerNorm ile çekidüzen verdikten sonra, linear node’lara atarak logits değerlerini elde ederiz. Logits ve targets değişkenlerini yeniden şekillendirip, ikisi arasında boyut sorunu ile karşılaşmadan işlem yapabilmek için, cross entropy fonksiyonu ile loss değerini buluruz.

En sonda ise, generate kısmında, belirlediğimiz maksimum token sayısına göre, o kadar harften sonra harf tahmin ediyoruz. Birdirbir oyunu gibi.

Harf dizimizi küme küme, bu durumda blok blok, işliyoruz. Son bloğa kadar olan tüm harfler seçilir. Forward propagation içine atılır, self içine atılınca default olarak oraya gidiyor, ardından da logits ve loss elde edilir. Logits’ten sadece son zaman boyutundaki seçilir ve softmax içine atılarak olasılık değeri hesaplanır. Elde edilen olasılıklardan, multinomial olasılığa göre bir tane seçilir ve çalışmakta olan diziye eklenir. Bu sayede, birdirbir oynayan harflerin tek tek oluşumunu sağlamış oluruz, Figür 39.

Figür 39. Birdirbir Oynayan Bigram Language Model

Artık en son aşamaya geldik. Burada, yazdığımız her şeyi birleştireceğiz. Önce modeli oluşturuyoruz, ardından GPU’ya atıyoruz. Diğer türlüsü makinenizde yumurta kızartarak, uzun bir süre beklersiniz. Optimizer olarak adam gibi adam olan AdamW kullanıyoruz. Sonrasında belirlediğimiz max iter sayısı kadar, 5000, modeli eğitiyoruz. Yeni bir metin sentezlemek için modele pseudo bir değer atıyoruz. Sonda da, train ve loss eğrilerini çizdiriyoruz.

Train ve val setlerinin loss’ları:

Üretilen metin:

zalada. Geçip onlar, olusunurdu yolarlak. Gerçekkeyenler ve günen
biçle bir de şişlerde
bıraktık. Oyne orada Talp yengil saderemeklerindikten ön-
denik biçirt”iz dedi sözlerin-
leri
nimle, işmeye neredir middileri olamadığını geçmeneniklerce, ocudur: ‘Hembrizlerdi,
Dedöndüklerimizasını sizdi.
Selim) sıkardı. Oraçalı yaparılantmış için
şira kitap teh düşüncelerden yöndüsünüverdiğime güç-
lümüzdeceklerinle Adaman için ağmayı mı?” Bir niden kendi ihratti seyğini babaşladı da tanıkkaradaştı bir deren yelinonlarını zoruk iki bulan olduk fonza hayvayım yanıyorumduya bizimli döğtlerden sözendir her harafikmeler.”
“MA0 alimeleri, hep bir şeyir
yapdılaktı olduğu konuzdu. Türkküyu de-
n düzean edkim sizinin şey şekil demekse
giyece çerimesiyle
bir yoki. Elledi meneler. Türktere kayfada kereşisini içmez yetin azalımkele-
ceğini-
miz, daha benzemez
birlikten olduğu kadanlım.
Telli susurduğun rarçık kaybir hükütü Miharlık ona ora-
lanma da baskaydık. Öylece, sonra?” dışıntıma dore-
de tazan sahtecalar, den kalmazdır. Metinan ölce kurbu uzan evlenmiştiniz ıvarıyorum ve dilence kendiler belki Münetleri, Marplarızarı daskaramadan her kadar kadar gündeyi, Selim çıkışın sankiyesini yetişomuza hayal’ın “Oyunun
orna-
da, yüz. Belki kaçılna giddiğe için kalim konadık rengclileri yeni etrecekten dumuştuk vermizden boşarları beri sizleririni Ürkekin düşünce, kürkere daiari gelendiğin evilmezlik seyrinde ta-
ra detmiştirdiğim bir kimse içindiğinde Antak boynemişde bize değerlik, ortarak kitaplı oldu senin ölrirlikteyince yorulukları, çeşanılıktan de-
ğitsim, kalanmış olmanız sın odarlık sigarinmiş meresinde ölmüyanların Bir nasan tehuset bin inan bir sürmek önce-
tlerini değil olarak imadeler
birlomları elinüzdü:
her şey yaklatrak karşı kal-
yum.” Karıda olmuştu oturulmuş kulok kalmamla uğruhatte ildi? Başlagılar şimdilerini
ne beşiştiririm ayrıca, kapıt mükemsim için sariyorum gene yerler tayrigzler? Ve
değil yokluğunu yıkanında bir dildikinan, benim hopameler hepfendiğimizz

Bir sonuç elde etmiş olsak da, sonuç metin anlamlı olmaktan biraz uzakta.

Burada veri hakkında birkaç durum söz konusu.

  1. txt dosyası pek temiz değildi. Sayfa numaraları ve boş satırlar çok vardı.
  2. Kitabı okumak uzun sürse de, aslında bu çok küçük bir veri seti.

[Güncelleme: 26.01.2023]: Yaşar Kemal’in yazdığı İnce Memed 1, 2, 3 ve 4 kitapları ile modeli tekrar eğittim. Sonucu buraya iliştiriyorum.

nerdi:
"Kafacık, güne öldürürür­
nen Ana bem nedi tame-
li
mış altıvara Akşesi olduklar, delim. Hemur Almı?"
"Boğkacım taşının bir İnce Memede ondan kayıyordu. Sonra kolmaya öfekammak. Bu öylemedin seyreyse, dem, bahçeberini, de, cakan
giye aktı.
"Seninden olsun, en geldi edemelerdi.
"Hayanın cevveta getiriyor, harnm, ağlanmdı, harahbe dali, "Kae­
remeri geçmez düştü, karamı adam, barasında benden ötekek atmıyordu. Memed?"
"Zürülü, gözyü tikelim.."
Dayram," dede Memed, Memed:
1Illah açlın."
Kanerce Arkene köylemede akı­
yım
konşar gitti. Ali Memedin karşı yarı bütülü çeğikti, erkeli, başamalar, yaran bes
dum kendi Alik ben Sulnanda alacam. İnce Memedin alıya görümüyorum. Yüzbe şaşlıyordu. Bit orada mahmıyor, ertasında
habboynanın çekte koçune çok müygitçel sana birmu inden vayvarmızlayın sehikten kulmanızlarlayım. İnce
mi Memedin üstünde sizmetme gözgetinlere elgenleh de..
"Çocunlanız D güğe germez Torom Eişi etmeri iyi ve.ayrı fıkarmadan
bir ben kok. Herke çekin çoca vuzları giderir. Kimse aşlıya germel yerine? Çomeler gözler buldu ortaca, Eşkı Ferhar gözleren oluyorum kabalm. Tüfe ayaklan balt emendi, yer torta birimondan işli,rası Catarn Efal inlende yoldu, şilim edleriye gitmiyor, or­
gece M maharnı karkası altmı olu edeceği dusunu bir da bulamaz bulduros ili işleyirlerinin birrimizen vardaşlar, Hürük korbacı.
Memelid," dedi. "Aridaki ele eli har oldu.
Bir koy­
lara gidenin Meşi bir birliU
kal anlıyordu, acak hala Kelas gece Memedin ya­
vrum, onu tazığınlı:

Konann bışıydan çifdeki. Kisine etin iyi verdi çeki yanı? Yıl etir gincik eli harkane titrdi yatinde aralada sonra da kimşi başımadan gördürdü.
R9
enar de­
niyordu:
"Dele dedi bilere
ıldı, arardam, am areştin aşkıya gir benden köp­
ğüm. Yüzbaşı içinin yürüdüğünün iz yap daha valhsın, öfbekelini önleri de...... Ko­
yun al, böyle gümler
sevince seni belim, Ana dene o at senirden doğların bu oldu kelesindi kırtmıştı, etli:
"Bir kaydı

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

Ve böylelikle hem bu bölümün, hem de bu yazımın sonuna gelmiş bulunuyoruz. Hem teşekkürler, hem de tebrikler😇 Katkı ve önerilere her zaman açığım, böylesi daha eğlenceli!

Bir sonraki yazımda görüşmek üzere.

Kaynakça

[1] Facundo Verdun. (2017, June 25). I, Robot — Human emotions scene [Video]. YouTube. https://www.youtube.com/watch?v=siHfHUm3HGE

[2]Singh, S. (2021, May 2). Paper Summary #3 — Improving Language Understanding by Generative Pre-Training. Shreyansh Singh. https://shreyansh26.github.io/post/2021-05-02_language_understanding_generative_pretraining/

[3] 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.

[4] Why does the transformer do better than RNN and LSTM in long-range context dependencies? (2020, April 7). Artificial Intelligence Stack Exchange. https://ai.stackexchange.com/questions/20075/why-does-the-transformer-do-better-than-rnn-and-lstm-in-long-range-context-depen

[5] Radford, Alec, et al. Improving language understanding by generative pre-training. (2018).

[6] Radford, Alec, et al. Language Models are Unsupervised Multitask Learners.

[7] Wolfe, C. R. (2022b, November 21). Language Models: GPT and GPT-2. By Cameron R. Wolfe. https://cameronrwolfe.substack.com/p/language-models-gpt-and-gpt-2

[8] Alammar, J (2018). The Illustrated Transformer [Blog post]. Retrieved from https://jalammar.github.io/illustrated-transformer/

[9] Brown, T. B., Mann, B., Ryder, N., Subbiah, M., Kaplan, J., Dhariwal, P., Neelakantan, A., Shyam, P., Sastry, G., Askell, A., Agarwal, S., Herbert-Voss, A., Krueger, G., Henighan, T., Child, R., Ramesh, A., Ziegler, D. M., Wu, J., Winter, C., . . . Amodei, D. (2020). Language Models are Few-Shot Learners. ArXiv: Computation and Language. https://arxiv.org/pdf/2005.14165.pdf

[10] Yuan, L., Chen, D., Chen, Y., Codella, N. C. F., Dai, X., Gao, J., Hu, H., Huang, X., Li, B., Li, C., Liu, C., Liu, S., Liu, Z., Lu, Y., Shi, Y., Wang, L., Wang, J., Xiao, B., Xiao, Z., . . . Zhang, P. (2021). Florence: A New Foundation Model for Computer Vision. Cornell University — ArXiv. https://doi.org/10.48550/arxiv.2111.11432

[11] Word embeddings | Text |. (n.d.). TensorFlow. https://www.tensorflow.org/text/guide/word_embeddings

[12] Tyagi, H. (2021, October 5). The Evolution of Tokenization — Byte Pair Encoding in NLP. freeCodeCamp.org. https://www.freecodecamp.org/news/evolution-of-tokenization/

[13] Review for NeurIPS paper: Language Models are Few-Shot Learners. (n.d.). https://proceedings.neurips.cc/paper/2020/file/1457c0d6bfcb4967418bfb8ac142f64a-Review.html

[14] Thoppilan, R., De Freitas, D., Hall, J., Shazeer, N., Kulshreshtha, A., Cheng, H. T., … & Le, Q. (2022). Lamda: Language models for dialog applications. arXiv preprint arXiv:2201.08239.

[15] Taylor, R., Kardas, M., Cucurull, G., Scialom, T., Hartshorn, A., Saravia, E., … & Stojnic, R. (2022). Galactica: A large language model for science. arXiv preprint arXiv:2211.09085.

[16] Chen, M., Tworek, J., Jun, H., Yuan, Q., Pinto, H. P. D. O., Kaplan, J., … & Zaremba, W. (2021). Evaluating large language models trained on code. arXiv preprint arXiv:2107.03374.

[17] Glaese, A., McAleese, N., Trębacz, M., Aslanides, J., Firoiu, V., Ewalds, T., … & Irving, G. (2022). Improving alignment of dialogue agents via targeted human judgements. arXiv preprint arXiv:2209.14375.

[18] Lex Fridman. (2022, October 29). Andrej Karpathy: Tesla AI, Self-Driving, Optimus, Aliens, and AGI | Lex Fridman Podcast #333 [Video]. YouTube. https://www.youtube.com/watch?v=cdiD-9MMpb0

[19] Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. Amsterdam University Press.

[20] TURING, A. M. (1950). I. — COMPUTING MACHINERY AND INTELLIGENCE. Mind, LIX(236), 433–460. https://doi.org/10.1093/mind/lix.236.433

[21] What Can You Do with the OpenAI GPT-3 Language Model? | Exxact Blog. (n.d.). https://www.exxactcorp.com/blog/Deep-Learning/what-can-you-do-with-the-openai-gpt-3-language-model

[22] Geoffrey Hinton on. (2020, June 10). Twitter. https://twitter.com/geoffreyhinton/status/1270814602931187715

[23] Lander, Harry. (‎1990)‎. Humanity its own worst enemy [‎letter]‎. World health forum 1990 ; 11(‎4)‎ : 431 https://apps.who.int/iris/handle/10665/45653

[24] Ray, T. (2023, January 24). ChatGPT is “not particularly innovative,” and “nothing revolutionary”, says Meta’s chief AI scientist. ZDNET. https://www.zdnet.com/article/chatgpt-is-not-particularly-innovative-and-nothing-revolutionary-says-metas-chief-ai-scientist/

[25] Perrigo, B. (2023, January 18). Exclusive: OpenAI Used Kenyan Workers on Less Than $2 Per Hour to Make ChatGPT Less Toxic. Time. https://time.com/6247678/openai-chatgpt-kenya-workers/

[26] 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.

[27] Wood, T. (2020, June 25). Softmax Function. DeepAI. https://deepai.org/machine-learning-glossary-and-terms/softmax-layer

[28] 2.1 The Exponential Function. (n.d.). https://ocw.mit.edu/ans7870/18/18.013a/textbook/HTML/chapter02/section01.html

[29] Rushton, S. (2021, April 8). Great Companion Plants For a Cottage Garden: Geraniums. Susan Rushton. https://susanrushton.net/2019/09/09/great-companion-plants-for-a-cottage-garden-geraniums/

[30] Mehmood, Arshad. 2019. “Generate Unigrams Bigrams Trigrams Ngrams Etc In Python.” March 19. Accessed 2019–09–26.

[31] Conway, Z. J. D. B. &. (2023, January 25). Amazon strikes: Workers claim their toilet breaks are timed. BBC News. https://www.bbc.com/news/business-64384287

[32] Chatterjee, P. (2022, March 23). How do zero-shot, one-shot and few-shot learning differ? Analytics India Magazine. https://analyticsindiamag.com/how-do-zero-shot-one-shot-and-few-shot-learning-differ/

--

--