9-bo‘lim

Matn yozish usullari

Greedy va sampling, temperatura, top-k va top-p (nucleus), takrorlanish jazosi va ularni qanday tanlash.

🕑 9 daqiqa o‘qish 📄 684 so‘z 👁 2 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Ikki chekka
  2. Temperatura
  3. Top-k
  4. Top-p (nucleus)
  5. Takrorlanish jazosi
  6. Amalda o'lchaymiz
  7. Xulosa

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:

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

Natija
  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
UsulNima qiladiMuammosi
GreedyHar doim eng kattasini oladiZerikarli, o'zini takrorlaydi
To'liq tasodifHammasini teng ko'radiMa'nosiz matn

Kerakli narsa - o'rtadagi sozlagich.

Temperatura #

Python
for t in [0.2, 0.5, 1.0, 2.0]:
    p = F.softmax(logit / t, dim=-1)
Natija
  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%.

Bir xil logitlar, uch xil temperatura temp = 0.2 temp = 1.0 temp = 2.0 .88 .12 .45 .30 .08 .28 .23 .12 ishonchli, zerikarli muvozanatli xilma-xil, xavfli Temperatura yangi ma'lumot qo'shmaydi - u faqat mavjud farqlarni kuchaytiradi yoki tekislaydi
Past temperatura ishonchni oshiradi, yuqorisi xilma-xillikni

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:

Python
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)
Natija
  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.

Top-k ning kamchiligi

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:

Python
p = F.softmax(logit, dim=-1)
sp, si = torch.sort(p, descending=True)
yig = torch.cumsum(sp, dim=-1)
Natija
  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.

UsulNechta nomzodQachon yaxshi
Greedy1Tarjima, faktik javob
Top-kDoim k taOddiy va tez
Top-pO'zgaruvchanKo'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.

Python
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
Natija
  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.

Jazoni oshirib yubormang

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:

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

Qaysi sozlamani tanlash
VazifaTavsiya
Tarjima, savolga faktik javobtemp=0 yoki 0.2
Kod yozishtemp=0.2, top_p=0.95
Odatiy suhbattemp=0.7-0.8, top_p=0.9
Ijodiy matn, she'rtemp=1.0-1.2, top_p=0.95

Natija g'alati bo'lsa, birinchi temperaturani o'zgartiring - u eng kuchli ta'sir qiladigan sozlama.

Amaliy topshiriq
  1. Logitlar ro'yxatini yaratib, temp ni 0.2, 1.0 va 2.0 qilib taqsimotni chop eting.
  2. Temperatura nega yangi ma'lumot qo'shmasligini tushuntiring.
  3. Greedy va to'liq tasodifiy tanlovning kamchiligini yozing.
  4. top-k ni 1, 3 va 5 qilib natijani solishtiring.
  5. top-k=1 nega greedy bilan bir xil ekanini ko'rsating.
  6. top-p=0.9 uchun nechta nomzod qolishini qo'lda hisoblang.
  7. Top-k va top-p farqini bitta misol bilan tushuntiring.
  8. Takrorlanish jazosini qo'llab, ehtimollar qanday o'zganini kuzating.
  9. 200 ta tanlov qilib, turli so'zlar sonini uch xil temperaturada sanang.
  10. 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 / temp amali: kichik qiymat farqni kuchaytiradi, katta tekislaydi.
  • U yangi ma'lumot qo'shmaydi - faqat mavjud farqlarni o'zgartiradi.
  • Top-k eng yaxshi k tasidan boshqasini o'chiradi; top-k=1 bu greedy.
  • Uning kamchiligi - k qat'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.

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.