20-bo‘lim
Yakuniy loyiha
To'liq savol-javob tizimini bitta sinfda yig'ish, uni halol baholash, chegara tanlash va yaxshilash rejasini tuzish.
Ushbu bo‘lim mundarijasi
Oxirgi bo'lim. Barcha qismlarni - qidiruv, chegara, prompt, kesh va baholashni - bitta ishlaydigan tizimga birlashtiramiz.
Tizim #
class SavolJavob:
def __init__(s, model="sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2",
chegara=0.45, k=3):
s.tok = AutoTokenizer.from_pretrained(model)
s.mdl = AutoModel.from_pretrained(model); s.mdl.eval()
s.chegara, s.k = chegara, k
s.hujjatlar, s.indeks, s.kesh = [], None, {}
def qosh(s, hujjatlar):
s.hujjatlar = hujjatlar
s.indeks = s.vek([f"{h['sarlavha']}. {h['matn']}" for h in hujjatlar])
s.kesh.clear() # indeks o'zgardi - kesh eskirdi
return s
def javob(s, savol):
r = s.qidir(savol)
if not r or r[0][0] < s.chegara:
return {"holat": "malumot_yoq", "ball": r[0][0] if r else 0.0,
"manba": None, "prompt": None}
return {"holat": "topildi", "ball": r[0][0],
"manba": r[0][1]["sarlavha"], "prompt": s.prompt(savol, r)}
=== Tizim qurildi ===
6 hujjat, indeks (6, 384), 3580 ms
Har bo'lim shu sinfda o'z izini qoldirgan:
| Qism | Qaysi bo'limdan |
|---|---|
Tokenizatsiya va max_length | 2, 12-bo'limlar |
| Mean pooling va normallash | 15-bo'lim |
| Kosinus o'xshashlik bilan qidiruv | 16-bo'lim |
| Chegara va «Ma'lumot yo'q» | 17-bo'lim |
| Prompt tuzilishi | 17-bo'lim |
| Kesh va kalit normallash | 19-bo'lim |
qosh() da keshni tozalash | 16, 19-bo'limlar |
Halol baholash #
18-bo'limdagi qoida bo'yicha, avval o'lchaymiz:
=== Baholash ===
Recall@1: 30.8% (4/13)
Recall@3: 69.2% (9/13)
Recall@5: 92.3% (12/13)
Raqamlar yomon. Recall@1 atigi 30.8% - har uch savoldan faqat bittasida to'g'ri hujjat birinchi o'rinda.
Recall@5 esa 92.3% - ya'ni hujjat deyarli har doim topiladi, lekin tartibda pastda qoladi.
Chegara #
chegara 0.40: javob berdi 13/13 | manbasi to'g'ri 4
chegara 0.45: javob berdi 9/13 | manbasi to'g'ri 4
chegara 0.50: javob berdi 8/13 | manbasi to'g'ri 4
chegara 0.55: javob berdi 5/13 | manbasi to'g'ri 3
0.40 dan 0.50 ga ko'tarilganda to'g'ri javoblar soni
o'zgarmadi (4 ta), lekin xato javoblar 9 tadan 4 taga tushdi.
Demak 0.50 yaxshiroq: bir xil foyda, kamroq zarar. Bu chegarani
taxmin bilan emas, jadval bilan tanlash degani.
Ishlashi #
SAVOL: Ta'tilga qancha oldin ariza beraman?
-> manba: Ta'til (ball 0.623)
SAVOL: Yo'l puli qoplanadimi?
-> Ma'lumot yo'q (eng yuqori ball 0.406 < 0.45)
SAVOL: Kompaniyada nechta xodim bor?
-> Ma'lumot yo'q (eng yuqori ball 0.295 < 0.45)
Uchinchi holat to'g'ri: bazada xodimlar soni haqida ma'lumot yo'q va tizim buni tan oldi.
Ikkinchisi esa xato rad etish. Javob bazada bor - «Transport xarajati» hujjati aynan shunday boshlanadi:
«Yo'l puli va transport xarajati oyiga 500 ming so'mgacha qoplanadi.»
Savolda «yo'l puli» bor, hujjatda ham «yo'l puli» bor - lekin ball atigi 0.406.
So'z aynan mos kelgan holatda ham model past ball berdi.
Bu 10 va 15-bo'limlarda ko'rgan narsaning davomi: ko'p tilli model o'zbek tilida ishonchsiz. U inglizcha jumlalarda aniq ishlaydigan bog'lanishlarni o'zbekchada uzib qo'yadi.
Shuning uchun bu tizim hozircha ishlab chiqarishga tayyor emas. Uni shunday e'lon qilish - 13-bo'limdagi «100% aniqlik» xatosining takrori bo'lardi.
Kesh #
birinchi so'rov: 10.86 ms
normallangan takror: 0.025 ms (438x tez)
«Ta'til necha kun?» va «ta'til NECHA kun?» - bir xil kalit berdi, chunki kalit normallangan (19-bo'lim).
Yaxshilash rejasi #
Raqamlarga tayanib, tartib aniq:
| Qadam | Nima qilinadi | Kutilgan foyda |
|---|---|---|
| 1 | k ni 5 ga oshirish | Recall 30.8% -> 92.3% |
| 2 | Hujjatlarni 1-2 jumlalik parchalarga bo'lish | Aniqroq moslik |
| 3 | Gibrid qidiruv: kalit so'z + embedding | «Yo'l puli» kabi holatlar |
| 4 | Boshqa embedding modelini sinash | O'zbek tilida kuchliroq variant |
| 5 | Baholash to'plamini 50-100 savolga kengaytirish | Ishonchli o'lchov |
| 6 | Javob yozuvchi modelni ulash | To'liq javob |
Birinchi ikkitasi bugun bajariladi va katta foyda beradi. Uchinchisi - 16-bo'limdagi maslahat: kalit so'z aniq atamalarni, embedding ma'noni topadi.
Har qadamdan keyin o'sha 13 ta savolni qayta o'tkazing.
O'zgarish foyda berdimi yoki zarar - buni faqat raqam aytadi. Ikkita o'zgarishni birdan kiritsangiz, qaysi biri ishlaganini bilmay qolasiz (PyTorch darsligi, 12-bo'lim).
Darslikning xulosasi #
Yigirma bo'limda quyidagi yo'lni bosib o'tdik:
| Bo'limlar | Nima qildik |
|---|---|
| 1-2 | Transformer tarixi va tokenizatsiya |
| 3-7 | E'tibor mexanizmini qo'lda qurdik |
| 8-9 | Undan ishlaydigan kichik GPT yasadik |
| 10-11 | Tayyor modellar bilan tanishdik |
| 12-14 | Fine-tuning qildik va uning chegarasini ko'rdik |
| 15-18 | Embedding, qidiruv, RAG va baholash |
| 19-20 | Ishlab chiqarish va yakuniy tizim |
Eng muhim saboqlar esa texnik emas edi:
- 100% natija ko'rsangiz, shubhalaning (13-bo'lim).
- Bazaviy darajani o'lchamasdan model qurmang (12-bo'lim).
- Bo'lish chegarasi manba bo'yicha o'tkaziladi (14-bo'lim).
- Tayyor modelni o'z tilingizda sinamasdan ishonmang (10, 11-bo'limlar).
- RAG sifati qidiruv sifatidan yuqori bo'lmaydi (17-bo'lim).
- Modellar: XLM-R, mT5 va o'zbek tili uchun maxsus sozlangan modellar.
- Vositalar:
sentence-transformers, FAISS, vektor bazalari. - Usullar: LoRA bilan arzon fine-tuning, qayta saralash (reranking).
- Ma'lumot: eng katta foyda - o'z sohangizda o'zbekcha to'plam yig'ish.
Oxirgi qator eng muhimi. Modellar yaxshilanib boradi, lekin sizning sohangizdagi o'zbekcha ma'lumotni sizdan boshqa hech kim yig'maydi.
SavolJavobsinfini to'liq yozib ishga tushiring.- O'z sohangizdan kamida 8 ta hujjat qo'shing.
- 13-15 ta baholash savolini yozing.
- Recall@1, @3 va @5 ni o'lchang.
- To'rt xil chegarada javob va xato sonini jadvalga yozing.
- Eng yaxshi chegarani tanlab, asoslang.
- Hujjatlarni kichik parchalarga bo'lib, Recall qanday o'zganini o'lchang.
- Kesh kalitini normallash ishlayotganini tekshiring.
- Tizim xato rad etgan bitta savolni toping va sababini tahlil qiling.
- Yaxshilash rejasidan bittasini bajarib, natijani raqam bilan solishtiring.
Xulosa #
- Butun darslik bitta
SavolJavobsinfiga sig'di. - Unda har bo'limdan bir qism bor: tokenizatsiya, pooling, qidiruv, chegara, kesh.
- Tizim Recall@1 = 30.8%, Recall@5 = 92.3% ko'rsatdi.
- Ya'ni hujjat topiladi, lekin tartibda pastda qoladi.
- Chegarani
0.40dan0.50ga ko'tarish xatolarni 9 dan 4 ga tushirdi, foydani kamaytirmasdan. - Tizim bilmagan savolni to'g'ri rad etdi - bu muhim xossa.
- Lekin «Yo'l puli» savolini xato rad etdi, garchi so'z hujjatda aynan bo'lsa ham.
- Sabab - modelning o'zbek tilidagi kuchsizligi, kodda emas.
- Kesh takroriy so'rovni 438 barobar tezlashtirdi.
- Halol xulosa: quvur tayyor, sifat esa hali yetarli emas - va buni yashirmaslik kerak.
Darslik shu yerda tugaydi. Endi eng foydalisi - o'z ma'lumotingizda o'z tizimingizni qurish va uni raqam bilan o'lchash.
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.