Asosiy kontentga o‘tish
AI qo‘llanmalari

NamiGPT boshlang‘ich qo‘llanmasi: GPT-2 ni noldan yozish va matn yaratishni ishga tushirish

Ushbu qo‘llanma NamiGPT’ni o‘rnatish, tokenizatsiya, embedding va attention orqali GPT-2 ni tushunish, OpenAI’ning rasmiy og‘irliklarini yuklab, matnni davom ettirishni o‘rgatadi. Shuningdek, vizualizatsiya vositalari, mustaqil bob skriptlari, Gradio demosi va HuggingFace bilan moslik testlari yoritiladi.

NamiGPT qo‘llanmasi: GPT-2 ni noldan yozish va matn yaratish

NamiGPT nima

NamiGPT xitoy tilini endi o‘rganayotganlar uchun mo‘ljallangan yirik til modellari asoslari bo‘yicha qo‘llanmadir. U PyTorch yordamida GPT-2 ni noldan amalga oshiradi, tayyor Transformer modullaridan foydalanmaydi va OpenAI’ning rasmiy oldindan o‘qitilgan vaznlarini yuklab, inferens hamda matn generatsiyasini bajaradi.

NamiGPT loyihasi ko‘rinishi

Loyiha uchun asosiy maqsad o‘qitish samaradorligi emas, balki tushunishdir: asosiy model gpt2/model.py faylida joylashgan va kod 200 qatordan kam; qo‘llanma “mushuk baliq yeydi” nomli uch so‘zli misol orqali tokenizatsiya, vektorlar, diqqat matritsasi va yakuniy generatsiya jarayonini bosqichma-bosqich tushuntiradi.

NamiGPT nomi Karpathy’ning nanoGPT loyihasiga hurmat sifatida tanlangan. U xitoy tilini noldan o‘rganayotganlar uchun ta’limga ko‘proq e’tibor qaratib, GPT-2 ning har bir bosqichini minimal misollar orqali tushuntiradi.

Nimalarni o‘rganasiz

  • Tokenizer matnni token ID lariga qanday aylantirishi.
  • Embedding va pozitsion kodlash model kirishini qanday shakllantirishi.
  • Self-Attention va Multi-Head Attention qanday hisoblanishi.
  • Qoldiq ulanishi, LayerNorm, FFN va aktivatsiya funksiyalari qanday vazifalarni bajarishi.
  • Bir nechta Transformer Block GPT-2 ga qanday birlashtirilishi.
  • OpenAI’ning rasmiy vaznlarini qo‘lda yozilgan modelga qanday yuklash.
  • Matn generatsiyasi uchun ochko‘zlik, harorat va top-k strategiyalaridan qanday foydalanish.
  • Qo‘lda yozilgan implementatsiya HuggingFace implementatsiyasiga mosligini testlar orqali qanday tekshirish.

Loyihaning asosiy xususiyatlari

Asosiy komponentlar noldan amalga oshirilgan

NamiGPT tayyor Transformer modullarini bevosita chaqirmaydi. Model tarkibiga LayerNorm, Attention, FFN, Block va GPT komponentlari kiradi. Bu ma’lumotlar va tensorlar qanday oqishini satrma-satr o‘rganish uchun qulay.

Bob skriptlari mustaqil ishlaydi

Inferens bo‘limi 15 ta bosqichma-bosqich murakkablashib boradigan mavzudan iborat. Ular tokenizator, Embedding, pozitsion kodlash, o‘z-o‘ziga diqqat, ko‘p boshli diqqat, qoldiq ulanishi, qatlamni normallashtirish, oldinga uzatiluvchi tarmoq, aktivatsiya funksiyalari, Transformer Block, steklash, vaznlarni yuklash, matn generatsiyasi va izohlanuvchanlikni o‘z ichiga oladi. Har bir mavzu uchun ishga tushiriladigan skript mavjud.

Interaktiv vizualizatsiya taqdim etiladi

Loyiha Transformer arxitekturasining dinamik tasvirini va to‘liq inferens matritsasi vizualizatsiyasini taqdim etadi. Kod yoki formulalarni tushunish qiyin bo‘lganda, “mushuk baliq yeydi” misolidagi matritsa elementlari katakma-katak qanday hisoblanishini kuzatish mumkin.

Diqqat matritsasini katakma-katak hisoblash namoyishi

Avval Transformer’ni bir rasmda tushunish materialini ko‘rib chiqing, so‘ng bob kodlari bilan taqqoslash uchun yirik til modeli inferens vizualizatsiyasidan foydalaning.

HuggingFace natijalari bilan moslashtirilgan

Repozitoriyda shakl tekshiruvlari hamda HuggingFace’ning rasmiy implementatsiyasi bilan moslik testlari mavjud. Tasodifiy vaznlar yordamida tezkor taqqoslashdan tashqari, qo‘shimcha tekshiruv uchun haqiqiy GPT-2 vaznlarini ham yuklab olish mumkin.

O‘rnatishdan oldingi tayyorgarlik

Boshlashdan oldin Python kodini o‘qish bo‘yicha boshlang‘ich ko‘nikmaga ega bo‘lish va matritsalarni ko‘paytirish kabi asosiy chiziqli algebra tushunchalarini bilish kerak. Loyiha ko‘rsatgan ish muhiti Python 3.9 va undan yuqori versiya hamda PyTorch 2.x dan iborat.

Avval repozitoriyni klonlang, loyiha katalogiga kiring va bog‘liqliklarni o‘rnating:

git clone https://github.com/aa1143/NamiGPT.git
cd NamiGPT
pip install -r requirements.txt

HuggingFace’dan rasmiy vaznlarni yuklashda tarmoq cheklangan bo‘lsa, joriy terminalda mirror manzilini belgilang:

export HF_ENDPOINT=https://hf-mirror.com

Ushbu mirror faqat rasmiy vaznlarni yuklash uchun ishlatiladi. Keyinchalik from_pretrained chaqirilganda, model tuzilmasi baribir NamiGPT’ning qo‘lda yozilgan implementatsiyasidan olinadi.

Birinchi qadam: GPT-2 ni boblar orqali tushunish

Boshlovchilar uchun eng qulay usul to‘liq modelni darhol o‘qish emas, balki inferens ma’lumotlar oqimini bobma-bob o‘rganishdir:

  1. Kirish bosqichi: avval Tokenizer, Embedding va pozitsion kodlashni o‘zlashtiring.
  2. Diqqat bosqichi: Self-Attention ni tushuning, keyin Multi-Head Attention ga o‘ting.
  3. Modullar bosqichi: qoldiq ulanishi, LayerNorm, FFN va aktivatsiya funksiyalarini o‘rganing.
  4. Model bosqichi: komponentlarni Transformer Block ga birlashtiring va uni steklab, to‘liq GPT-2 ni hosil qiling.
  5. Qo‘llash bosqichi: rasmiy vaznlarni yuklang, matn yarating va izohlanuvchanlik natijalarini ko‘ring.

Har bir skriptni mustaqil ishga tushirish mumkin. Masalan, ko‘p boshli diqqat bobini ishga tushirish:

python chapters/01-inference/ep06_multi_head_attention.py

To‘liq matnli va rasmlarga boy materialni NamiGPT illyustratsiyali qo‘llanmasidan ko‘rish mumkin, repozitoriydagi asl nusxalar esa docs/01-inference/ katalogida joylashgan.

Ikkinchi qadam: GPT-2 ni yuklash va matn generatsiya qilish

O‘rnatish tugagach, NamiGPT taqdim etadigan modelni yuklash va generatsiya interfeyslarini bevosita import qilish mumkin. Quyidagi misolda GPT-2 tokenizeridan foydalanib, inglizcha prompt token ID lariga kodlanadi, so‘ng qo‘lda yozilgan model va rasmiy 124M vaznlar yuklanadi:

import tiktoken, torch
from gpt2 import from_pretrained, generate

enc = tiktoken.get_encoding("gpt2")
model = from_pretrained("gpt2")

ids = torch.tensor([enc.encode("The cat sat on the")])
out = generate(
    model,
    ids,
    max_new_tokens=30,
    temperature=0.8,
    top_k=50,
)
print(enc.decode(out[0].tolist()))

Kodning bajarilish jarayoni

  1. tiktoken.get_encoding("gpt2") GPT-2 ishlatadigan kodlovchini oladi.
  2. enc.encode(...) prompt matnini token ID lariga aylantiradi.
  3. torch.tensor ID larni model talab qiladigan batch tensoriga o‘raydi.
  4. from_pretrained("gpt2") qo‘lda yozilgan GPT-2 ni yaratadi va rasmiy 124M vaznlarni yuklaydi.
  5. generate prompt matnidan keyin ko‘pi bilan 30 ta yangi token generatsiya qiladi.
  6. enc.decode chiqish token ID larini yana matnga aylantiradi.

Eslatma: GPT-2 dialog uchun nozik sozlanmagan. U savollarga chat modeli kabi javob berishdan ko‘ra, mavjud matnni davom ettirishga mo‘ljallangan. Uning o‘qitish korpusi asosan ingliz tilida bo‘lgani sababli, avval inglizcha promptlardan foydalanish tavsiya etiladi.

Uchinchi qadam: generatsiya parametrlarini tushunish

Misolda ikkita muhim sampling parametri ishlatilgan:

  • temperature=0.8: nomzod tokenlar ehtimollik taqsimotini sozlaydi. Loyiha generatsiya moduli harorat strategiyasini qo‘llab-quvvatlaydi.
  • top_k=50: faqat ehtimoli yuqori bo‘lgan dastlabki 50 ta nomzod token orasidan tanlaydi. Loyiha ochko‘zlik va top-k generatsiyasini ham qo‘llab-quvvatlaydi.

O‘rganish paytida prompt matnini o‘zgartirmasdan, faqat harorat yoki top-k qiymatini o‘zgartirib, davom ettirish natijalarini taqqoslash mumkin. Shu orqali generatsiya strategiyasi chiqishga qanday ta’sir qilishini bevosita ko‘rish mumkin, ammo aniq parametrlar tajriba maqsadiga qarab tanlanishi kerak.

To‘rtinchi qadam: Gradio veb namoyishini ishga tushirish

Brauzerda prompt kiritish, davom ettirish natijalarini va har bir bosqichdagi nomzod so‘zlar ehtimolini ko‘rish uchun Gradio’ni o‘rnating va repozitoriydagi namoyish dasturini ishga tushiring:

pip install gradio
python demo/app.py

Veb namoyish modelning har bir bosqichdagi bashoratini kuzatish uchun qulay, bob skriptlari esa alohida komponentlarning hisoblash jarayonini o‘rganish uchun mos. Ularni birga ishlatish orqali yakuniy matnni ichki ehtimollik o‘zgarishlari bilan bog‘lash mumkin.

Beshinchi qadam: testlarni ishga tushirish

Diqqat, vaznlarni yuklash yoki generatsiya mantiqiga o‘zgartirish kiritgandan so‘ng testlarni ishga tushirish tavsiya etiladi. Standart testlar tasodifiy vaznlar yordamida taqqoslanadi, oldindan o‘qitilgan modelni yuklashni talab qilmaydi va odatda tez yakunlanadi:

pytest tests/ -v

Agar haqiqiy GPT-2 vaznlari bilan qo‘shimcha moslik tekshiruvini ham o‘tkazmoqchi bo‘lsangiz:

TEST_PRETRAINED=1 pytest tests/ -v

Ikkinchi buyruq haqiqiy vaznlarni qo‘shimcha ravishda yuklaydi, shuning uchun birinchi ishga tushirishda yuklab olish tugashini kutish kerak.

Repozitoriy tuzilmasiga qisqa nazar

  • gpt2/config.py: model konfiguratsiyasi, 124M, 355M, 774M va 1.5B o‘lchamlarini o‘z ichiga oladi.
  • gpt2/model.py: LayerNorm, Attention, FFN, Block va GPT modelining asosiy qismi.
  • gpt2/load_weights.py: rasmiy vaznlarni qo‘lda yozilgan modelga yuklaydi.
  • gpt2/generate.py: ochko‘zlik, harorat va top-k generatsiyasi mantiqi.
  • chapters/01-inference/: turli qo‘llanma boblariga mos namoyish skriptlari.
  • docs/01-inference/: qo‘llanma maqolalarining asl nusxalari.
  • demo/app.py: Gradio veb namoyishi.
  • tests/: shakl tekshiruvlari va HuggingFace bilan moslik testlari.

Ilg‘or usullar: HuggingFace bilan moslashtirishdagi uchta muhim jihat

1. Sababiy niqobni to‘g‘ri qo‘llash

GPT-2 autoregressiv til modelidir. Ketma-ketlikdagi har bir so‘z faqat o‘zini va undan oldingi so‘zlarni o‘qiy oladi, keyingi tokenlarni oldindan ko‘ra olmaydi. Agar sababiy niqob qoldirib ketilsa, rasmiy vaznlar muvaffaqiyatli yuklangan taqdirda ham model chiqishi xato bo‘ladi.

2. Vaznlarni ko‘chirishda transpozitsiyani hisobga olish

GPT-2 ning original implementatsiyasi Conv1D dan foydalanadi va uning vazn shakli [in, out] ko‘rinishida; PyTorch’ning nn.Linear moduli esa [out, in] shaklidan foydalanadi. Shu sababli rasmiy parametrlarni qo‘lda yozilgan chiziqli qatlamga yuklashda ularni transpozitsiya qilish shart.

Bundan tashqari, c_attn Query, Key va Value parametrlarini birga birlashtiradi. Qo‘lda yozilgan implementatsiyani moslashtirishda avval ularni tegishli uch qismga ajratib, keyin to‘g‘ri joylarga joylashtirish kerak.

3. GELU ning tanh yaqinlashuvidan foydalanish

GPT-2 GELU ning tanh yaqinlashuv variantidan foydalanadi, PyTorch’ning nn.GELU() moduli esa sukut bo‘yicha aniq variantni qo‘llaydi. Elementma-element moslikka erishish uchun quyidagicha sozlang:

nn.GELU(approximate="tanh")

Bu uchta jihat kichik ko‘rinsa-da, qo‘lda yozilgan model rasmiy implementatsiya natijalarini takrorlay olishiga bevosita ta’sir qiladi. Xatoni aniqlashda niqob, parametr shakli va aktivatsiya funksiyasi versiyasini ketma-ket tekshirish mumkin.

Tavsiya etiladigan o‘rganish va nosozliklarni tuzatish usuli

  1. Avval arxitekturaning dinamik tasviri orqali GPT-2 faqat Transformer dekoder qismidan foydalanishini umumiy tarzda tushuning.
  2. Joriy bob skriptini ishga tushiring, kirish, chiqish va oraliq tensorlar shakllarini qayd eting.
  3. Diqqat matritsasini tushunish qiyin bo‘lsa, onlayn matritsa vizualizatsiyasi yordamida katakma-katak tekshiring.
  4. Biror komponentni tugatgach, gpt2/model.py dagi mos implementatsiyani o‘qing.
  5. Implementatsiyani o‘zgartirgandan so‘ng avval tasodifiy vaznlar testini, keyin zarurat bo‘lsa haqiqiy vaznlar testini ishga tushiring.
  6. Oxirida matn generatsiyasi misoli va Gradio sahifasi orqali to‘liq model xatti-harakatini kuzating.

Bu ketma-ketlik arxitektura diagrammasi, matritsa hisoblari, bob kodlari, to‘liq model va yakuniy chiqishni o‘zaro bog‘laydi hamda boshidanoq to‘liq GPT-2 ning ko‘p qatlamli tuzilmasi ichida adashib qolishning oldini oladi.

Xulosa

NamiGPT asosiy matritsa hisob-kitoblaridan to‘liq GPT-2 inferensiyasigacha bo‘lgan o‘rganish yo‘lini taqdim etadi. Avval har bir komponentni tushunish uchun mustaqil bob skriptlarini ishga tushirishingiz, keyin OpenAI’ning rasmiy vaznlarini yuklab, inglizcha matnni davom ettirishni amalga oshirishingiz va nihoyat vizualizatsiya hamda HuggingFace bilan moslik testlari orqali tushunchalaringiz va o‘zgartirishlaringizni tekshirishingiz mumkin.

Loyiha kodi MIT litsenziyasi ostida tarqatiladi; docs/ katalogidagi maqolalar CC BY-NC 4.0 litsenziyasi ostida bo‘lib, qayta nashr etishda manbani ko‘rsatish talab etiladi va tijoriy foydalanish taqiqlanadi.