11-bo‘lim

transformers kutubxonasi

pipeline bilan tez boshlash, Auto sinflari, model ichida nima borligi, kesh hajmi va tayyor modelning ishonchli xatosi.

🕑 8 daqiqa o‘qish 📄 627 so‘z 👁 2 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. pipeline - eng qisqa yo'l
  2. Endi o'zbekchada
  3. pipeline ichida nima bor
  4. AutoModel oilasi
  5. Modellar qayerda saqlanadi
  6. Xulosa

8-bo'limda modelni noldan yozdik. Amalda esa hech kim shunday qilmaydi - tayyor modellar olinadi. transformers kutubxonasi shu ish uchun.

pipeline - eng qisqa yo'l #

Python
from transformers import pipeline

p = pipeline("sentiment-analysis",
             model="distilbert-base-uncased-finetuned-sst-2-english")

for s in ["This tutorial is excellent!", "I did not like it at all."]:
    r = p(s)[0]
    print(f"  {s:34s} -> {r['label']} ({r['score']:.4f})")
Natija
  yuklandi: 27s
  This tutorial is excellent!        -> POSITIVE (0.9999)
  I did not like it at all.          -> NEGATIVE (0.9993)

Uch qator kod - va ishlaydigan tahlilchi. pipeline tokenizatorni, modelni va natijani qayta ishlashni o'zi bajaradi.

Endi o'zbekchada #

Python
for s in ["Bu darslik juda zo'r!", "Menga umuman yoqmadi."]:
    r = p(s)[0]
    print(f"  {s:28s} -> {r['label']} ({r['score']:.4f})")
Natija
  Bu darslik juda zo'r!        -> NEGATIVE (0.9919)
  Menga umuman yoqmadi.        -> NEGATIVE (0.9942)

Birinchi jumla - ijobiy maqtov. Model uni salbiy dedi, ustiga 99.19% ishonch bilan.

Ikkinchisi tasodifan to'g'ri chiqdi - chunki model hamma narsani salbiy deyapti.

Ishonchli xato - eng xavfli xato

PyTorch darsligining 18-bo'limida «kalibrlanmagan model» haqida gapirgan edik. Mana uning eng toza namunasi.

Model xato qilganini bilmaydi. U 99% ishonch qaytaradi va sizning kodingiz o'sha songa qarab qaror qabul qiladi.

Agar bu do'kon sharhlarini saralaydigan tizim bo'lsa, barcha o'zbekcha maqtovlar shikoyat papkasiga tushardi - va hisobotda hech qanday ogohlantirish ko'rinmasdi.

Sababi oddiy: bu model faqat inglizcha sharhlarda o'qitilgan (-uncased-finetuned-sst-2-english). Model nomining o'zi buni aytib turibdi - nomni o'qing.

pipeline ichida nima bor #

Python
from transformers import AutoTokenizer, AutoModelForSequenceClassification

nom = "distilbert-base-uncased-finetuned-sst-2-english"
tok = AutoTokenizer.from_pretrained(nom)
mdl = AutoModelForSequenceClassification.from_pretrained(nom)
mdl.eval()

print("  sinflar:", mdl.config.id2label)

enc = tok("This tutorial is excellent!", return_tensors="pt")
with torch.no_grad():
    logit = mdl(**enc).logits
p_ = torch.softmax(logit, dim=-1)[0]
Natija
  sinflar: {0: 'NEGATIVE', 1: 'POSITIVE'}
  logitlar: [-4.262, 4.623]
  ehtimollar: {'NEGATIVE': 0.0001, 'POSITIVE': 0.9999}

Tanish ko'rinadi. Bu PyTorch darsligining 19-bo'limidagi bashorat funksiyasining o'zi: tokenizatsiya, eval(), no_grad(), model, softmax.

Model logit qaytaradi - softmax ichida emas (PyTorch 6-bo'lim).

Qachon pipeline, qachon Auto

pipeline - tez sinash va oddiy holatlar uchun.

Auto sinflari - nazorat kerak bo'lganda: paketlash, no_grad, qurilma tanlash, ehtimollarni o'zingiz qayta ishlash, fine-tuning.

Ishlab chiqarishda deyarli har doim Auto ishlatiladi.

AutoModel oilasi #

Bitta tayyor model turli masalalarga moslanadi. Buni bosh (head) belgilaydi:

SinfNima uchun
AutoModelXom yashirin holat (embedding)
AutoModelForSequenceClassificationMatn tasniflash
AutoModelForTokenClassificationNER - har token uchun yorliq
AutoModelForQuestionAnsweringMatndan javob topish
AutoModelForMaskedLM[MASK] to'ldirish
AutoModelForCausalLMMatn yozish

Tana (transformer bloklari) bir xil - faqat oxirgi qatlam farq qiladi. Bu PyTorch darsligining 16-bo'limidagi transfer learning g'oyasining o'zi: backbone saqlanadi, bosh almashtiriladi.

Python
base = AutoModel.from_pretrained("bert-base-multilingual-cased")
e = btok("Dasturlash qiziqarli", return_tensors="pt")
with torch.no_grad():
    o = base(**e)
print("  last_hidden_state:", tuple(o.last_hidden_state.shape))
Natija
  last_hidden_state: (1, 9, 768)  <- har token uchun vektor
  tokenlar: ['[CLS]', 'Das', '##tur', '##lash', 'q', '##izi', '##qa', '##rli', '[SEP]']

AutoModel boshsiz keladi: u har token uchun 768 o'lchamli vektor beradi. 16-bo'limda aynan shu vektorlardan semantik qidiruv quramiz.

Bir xil tana, almashtiriladigan bosh matn -> tokenizator Transformer bloklari (tana) tayyor o'qitilgan - o'zgarmaydi Tasniflash boshi ijobiy / salbiy Boshsiz (AutoModel) 768 o'lchamli vektor Matn yozish boshi lug'at ustidan ballar PyTorch darsligining 16-bo'limidagi transfer learning - o'sha g'oya
Og'irlikning katta qismi tanada; bosh kichik va almashtiriladi

Modellar qayerda saqlanadi #

Natija
  models--bert-base-multilingual-cased                    1368 MB
  models--distilbert-base-multilingual-cased              1039 MB
  models--distilbert-base-uncased-finetuned-sst-2-engl     511 MB
  models--gpt2                                            1051 MB
  JAMI                                                    5945 MB

Bu darslikda ishlatilgan bir necha model 6 GB joy egalladi. Fayllar ~/.cache/huggingface/hub da yotadi.

Diskni kuzatib turing

Modellar avtomatik yuklanadi va avtomatik o'chirilmaydi. Bir necha kun tajriba qilsangiz, kesh o'nlab gigabaytga yetadi.

Tozalash:

Terminal
du -sh ~/.cache/huggingface/hub
rm -rf ~/.cache/huggingface/hub/models--kerak-emas-model

Boshqa joyga o'tkazish uchun HF_HOME muhit o'zgaruvchisini o'rnating.

Model tanlashda nomni o'qing

Model nomlari ma'lumot beradi:

Bo'lakMa'nosi
base, large, smallModel o'lchami
multilingualKo'p tilli (o'zbekcha uchun umid bor)
uncasedKatta-kichik harf farqlanmaydi
distilKichraytirilgan, tezroq variant
finetuned-sst-2-englishAniq masala va til

Yuqoridagi xato aynan oxirgi qatorni o'qimaslikdan kelib chiqdi.

Amaliy topshiriq
  1. pipeline bilan inglizcha matn kayfiyatini aniqlang.
  2. Xuddi shu modelga ijobiy o'zbekcha jumla berib, natijani yozing.
  3. Model ishonch darajasini ko'rib, xulosa chiqaring.
  4. Model nomidagi english bo'lagi nimani anglatishini tushuntiring.
  5. AutoTokenizer va AutoModelForSequenceClassification bilan pipeline ni qo'lda takrorlang.
  6. id2label ni chop etib, sinflar tartibini aniqlang.
  7. Logit va ehtimol farqini ko'rsating.
  8. AutoModel bilan xom vektorlarni oling va shaklini izohlang.
  9. AutoModel* sinflaridan uchtasining vazifasini yozing.
  10. Kesh papkasi hajmini o'lchab, keraksiz modelni o'chiring.

Xulosa #

  • pipeline uch qatorda ishlaydigan model beradi - tez sinash uchun qulay.
  • U tokenizatsiya, model va natijani qayta ishlashni o'zi bajaradi.
  • Inglizcha model o'zbekcha maqtovni NEGATIVE (99.19%) deb baholadi.
  • Bu kalibrlanmagan modelning namunasi: ishonchli, lekin xato.
  • Sabab model nomida yozilgan edi: finetuned-sst-2-english.
  • Auto sinflari nazorat beradi va ishlab chiqarishda shular ishlatiladi.
  • Model logit qaytaradi; softmax ni o'zingiz qo'llaysiz.
  • Bitta tana turli boshlar bilan turli masalaga moslanadi.
  • AutoModel boshsiz keladi va har token uchun 768 o'lchamli vektor beradi.
  • Modellar keshda to'planadi - bizda bir necha model 6 GB egalladi.

Keyingi bo'limda tayyor modelni o'z ma'lumotimizga sozlashga tayyorlanamiz - ma'lumot to'plami va baholash mezoni bilan.

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.