9-bo‘lim
Matn yozish usullari
Greedy va sampling, temperatura, top-k va top-p (nucleus), takrorlanish jazosi va ularni qanday tanlash.
Ushbu bo‘lim mundarijasi
8-bo'limdagi model har qadamda 34 ta belgi ustidan taqsimot beradi. Undan qaysi birini tanlash - alohida masala va u natijaga kutilganidan ko'ra kuchliroq ta'sir qiladi.
Misol uchun modelning bashorati shunday bo'lsin:
sozlar = ["yaxshi", "zo'r", "yomon", "katta", "kichik", "qizil", "tez", "sekin"]
logit = torch.tensor([3.2, 2.8, 1.5, 1.2, 0.9, 0.3, 0.1, -0.5])
Ikki chekka #
Eng oddiy ikki yo'l bor va ikkalasi ham yomon:
temp=0 (greedy) yaxshi=1.000 zo'r=0.000 yomon=0.000 katta=0.000 kichik=0.000
temp=100 yaxshi=0.125 zo'r=0.125 yomon=0.125 katta=0.125 kichik=0.125
| Usul | Nima qiladi | Muammosi |
|---|---|---|
| Greedy | Har doim eng kattasini oladi | Zerikarli, o'zini takrorlaydi |
| To'liq tasodif | Hammasini teng ko'radi | Ma'nosiz matn |
Kerakli narsa - o'rtadagi sozlagich.
Temperatura #
for t in [0.2, 0.5, 1.0, 2.0]:
p = F.softmax(logit / t, dim=-1)
temp=0.2 yaxshi=0.881 zo'r=0.119 yomon=0.000 katta=0.000 kichik=0.000
temp=0.5 yaxshi=0.659 zo'r=0.296 yomon=0.022 katta=0.012 kichik=0.007
temp=1.0 yaxshi=0.452 zo'r=0.303 yomon=0.083 katta=0.061 kichik=0.045
temp=2.0 yaxshi=0.283 zo'r=0.232 yomon=0.121 katta=0.104 kichik=0.090
Butun amal bitta bo'lishdan iborat: logit / temp.
- Kichik temperatura farqni kattalashtiradi - kuchli variant yanada ustun bo'ladi.
- Katta temperatura farqni tekislaydi - zaif variantlar ham imkon oladi.
temp=0.2 da «yaxshi» 88% oldi, temp=2.0 da esa atigi 28%.
Top-k #
Temperaturaning kamchiligi bor: u eng yomon variantlarga ham imkon
qoldiradi. temp=2.0 da «sekin» so'zi ham tanlanishi mumkin.
Top-k eng yaxshi k tasidan boshqasini butunlay o'chiradi:
for k in [1, 3, 5]:
v, i = torch.topk(logit, k)
f = torch.full_like(logit, float('-inf'))
f[i] = v
p = F.softmax(f, dim=-1)
top-k=1 yaxshi=1.000 zo'r=0.000 yomon=0.000 katta=0.000 kichik=0.000
top-k=3 yaxshi=0.540 zo'r=0.362 yomon=0.099 katta=0.000 kichik=0.000
top-k=5 yaxshi=0.479 zo'r=0.321 yomon=0.087 katta=0.065 kichik=0.048
top-k=1 - bu greedy ning o'zi. top-k=3 da esa faqat uchta nomzod
qoladi va ular orasida tanlov qilinadi.
k qat'iy son. Lekin vaziyatlar har xil bo'ladi.
Model juda ishonchli bo'lsa (masalan, «Toshkent - O'zbekiston
poytax...» dan keyin), k=50 ortiqcha 49 ta yomon variantni ham
qoldiradi.
Model ikkilanayotgan bo'lsa, k=50 esa kam bo'lishi mumkin.
Top-p (nucleus) #
Top-p qat'iy son o'rniga ehtimollar yig'indisiga qaraydi:
p = F.softmax(logit, dim=-1)
sp, si = torch.sort(p, descending=True)
yig = torch.cumsum(sp, dim=-1)
saralangan ehtimollar: [0.452, 0.303, 0.083, 0.061, 0.045, 0.025, 0.02, 0.011]
to'plangan yig'indi: [0.452, 0.755, 0.837, 0.898, 0.944, 0.968, 0.989, 1.0]
top-p=0.5 -> 2 ta so'z qoladi: ['yaxshi', "zo'r"]
top-p=0.9 -> 5 ta so'z qoladi: ['yaxshi', "zo'r", 'yomon', 'katta', 'kichik']
Mantiq: ehtimollarni kattadan kichikka yig'ib boramiz va yig'indi p dan
oshgan joyda to'xtaymiz.
Shuning uchun nomzodlar soni o'zgaruvchan: model ishonchli bo'lsa 2 ta, ikkilansa 5 ta.
| Usul | Nechta nomzod | Qachon yaxshi |
|---|---|---|
| Greedy | 1 | Tarjima, faktik javob |
| Top-k | Doim k ta | Oddiy va tez |
| Top-p | O'zgaruvchan | Ko'pchilik holatda eng yaxshisi |
Amalda top-p va temperatura birga ishlatiladi: temp=0.8, top_p=0.9
keng tarqalgan kombinatsiya.
Takrorlanish jazosi #
Til modellarining ma'lum kasali - o'zini takrorlash. Yechim: allaqachon ishlatilgan so'zlarning ballini pasaytirish.
oldingi = [0, 0, 1] # "yaxshi" ikki marta, "zo'r" bir marta
for jaz in [1.0, 1.5]:
l = logit.clone()
for idx in set(oldingi):
l[idx] = l[idx] / jaz if l[idx] > 0 else l[idx] * jaz
jazo=1.0 yaxshi=0.452 zo'r=0.303 yomon=0.083 katta=0.061 kichik=0.045
jazo=1.5 yaxshi=0.299 zo'r=0.229 yomon=0.159 katta=0.118 kichik=0.087
«Yaxshi» 45% dan 30% ga tushdi, qolganlarga esa joy ochildi.
repetition_penalty ni 1.5 dan oshirsangiz, model kerakli
takrorlarni ham qilmay qo'yadi.
O'zbek tilida bu ayniqsa sezilarli: «*Men kitobni oldim va kitobni o'qidim*» - bu yerda «kitobni» takrorlanishi tabiiy. Jazo baland bo'lsa, model uni boshqa so'z bilan almashtirishga urinib, jumlani buzadi.
Odatiy qiymat 1.0-1.2 oralig'ida.
Amalda o'lchaymiz #
200 marta tanlab, natijani sanaymiz:
usul turli so'z eng ko'pi
temp=0.2 2 yaxshi (181)
temp=1.0 8 yaxshi (99)
temp=1.5 8 yaxshi (64)
temp=0.2 da 8 ta so'zdan atigi 2 tasi ishlatildi va «yaxshi»
181 marta chiqdi. temp=1.5 da esa hamma 8 tasi ishlatildi.
Raqamlar aytayotgan narsa oddiy: temperatura xilma-xillikni boshqaradi.
| Vazifa | Tavsiya |
|---|---|
| Tarjima, savolga faktik javob | temp=0 yoki 0.2 |
| Kod yozish | temp=0.2, top_p=0.95 |
| Odatiy suhbat | temp=0.7-0.8, top_p=0.9 |
| Ijodiy matn, she'r | temp=1.0-1.2, top_p=0.95 |
Natija g'alati bo'lsa, birinchi temperaturani o'zgartiring - u eng kuchli ta'sir qiladigan sozlama.
- Logitlar ro'yxatini yaratib,
tempni 0.2, 1.0 va 2.0 qilib taqsimotni chop eting. - Temperatura nega yangi ma'lumot qo'shmasligini tushuntiring.
- Greedy va to'liq tasodifiy tanlovning kamchiligini yozing.
top-kni 1, 3 va 5 qilib natijani solishtiring.top-k=1nega greedy bilan bir xil ekanini ko'rsating.top-p=0.9uchun nechta nomzod qolishini qo'lda hisoblang.- Top-k va top-p farqini bitta misol bilan tushuntiring.
- Takrorlanish jazosini qo'llab, ehtimollar qanday o'zganini kuzating.
- 200 ta tanlov qilib, turli so'zlar sonini uch xil temperaturada sanang.
- 8-bo'limdagi modelga shu usullarni qo'llab, matn sifatini solishtiring.
Xulosa #
- Model taqsimot beradi; undan tanlash usuli natijaga kuchli ta'sir qiladi.
- Greedy har doim eng kattasini oladi - ishonchli, lekin zerikarli va takrorlanadi.
- Temperatura
logit / tempamali: kichik qiymat farqni kuchaytiradi, katta tekislaydi. - U yangi ma'lumot qo'shmaydi - faqat mavjud farqlarni o'zgartiradi.
- Top-k eng yaxshi
ktasidan boshqasini o'chiradi;top-k=1bu greedy. - Uning kamchiligi -
kqat'iy, vaziyat esa o'zgaruvchan. - Top-p ehtimollar yig'indisiga qaraydi va nomzodlar sonini o'zi tanlaydi.
- Amalda temperatura va top-p birga ishlatiladi:
temp=0.8, top_p=0.9. - Takrorlanish jazosi ishlatilgan so'zlar ballini pasaytiradi; 1.0-1.2 yetarli.
- O'zbek tilida jazoni oshirib yuborish tabiiy takrorlarni ham buzadi.
Keyingi bo'limda transformerning uchta oilasini - encoder, decoder va encoder-decoder ni solishtiramiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.