Daromadlar:
- Bo'lak o'lchamini, bir-biriga mos kelishini va semantik bo'linishlarni raqamli ravishda baholang
- Turli xil hujjat turlari uchun mos bo'linish strategiyasini tanlash (PDF, jadval, kod, chat jurnali)
- Har bir bo'lakka metadata qo'shish orqali qidirish sifatini va filtrlashni kuchaytiring
Bu RAGdagi eng ko'p e'tibordan chetda qolgan, ammo eng hal qiluvchi qadam: hujjatni qanday sindirish. Bu yig'ish deb ataladi. Agar siz bir xil hujjatni bir xil modelga bersangiz ham, noto'g'ri yig'ish tufayli qidirish noto'g'ri bo'lakni qaytaradi va model hech qachon ajoyib javob bermaydi. Ushbu bo'limda biz parchalanish strategiyalarini, ularni hujjat turiga ko'ra qanday moslashtirishni va har bir fragmentga mazmunli metama'lumotlarni qanday qo'shishni ko'rib chiqamiz.
Nega biz parchalaymiz?
Buning uchta sababi bor. Birinchidan, joylashtirish modellari ma'lum uzunlikdagi matnni mazmunli vektorga aylantiradi; Agar butun 40 betlik bob bitta vektorga tiqilib qolsa, ma'no "xiralashgan" bo'ladi. Ikkinchidan, biz modelga faqat kontekst sifatida kerak bo'lgan qismini berishni xohlaymiz; butun hujjatni topshirish qimmat va chalg'ituvchi. Uchinchidan, qidirishning aniq bo'lishi uchun qidiruv bo'limi kichik va yo'naltirilgan bo'lishi kerak.
Shunday qilib, bo'lak - bu qidirishning eng kichik birligi. Bu juda katta yoki juda kichik bo'lmasligi kerak - to'g'ri.
Bo'lak o'lchami va bir-biriga o'xshash balans
Ikkita asosiy sozlamalar mavjud: bo'lak o'lchami (bir bo'lakda qancha token/so'z bo'ladi) va bir-biriga yopishish (qo'shni bo'laklar tomonidan taqsimlangan qism).
Juda kichik qismlar (masalan, 100 ta token): diqqat markazida, lekin kontekstdan uzilgan. U “14 kunga” deydi, lekin 14 kun nima bo‘lsa, avvalgi gapda qolgan. Juda katta bo'laklar (masalan, 2000 ta token): kontekstni saqlaydi, lekin ko'p iplar aralashtiriladi; joylashtirish aralashib ketadi va ahamiyatsiz mavzular birlashadi.
Qoplama chegara muammosini hal qiladi. Agar gap aynan ikki qism chegarasiga tushsa, u bir-birini takrorlamasdan ikkiga bo'linadi va ma'nosi yo'qoladi. 50-100 ta tokenning bir-biriga mos kelishi chegara doirasidagi ma'lumotlarning kamida bitta qismida saqlanib qolishini ta'minlaydi.
Bo'lak hajmi
Afzallik
Kamchilik
tegishli tarkib
Kichik (100-250 token)
Yuqori sezuvchanlik, diqqat markazida
Kontekst buzilishi mumkin
Tez-tez so'raladigan savollar, qisqa maqolalar, ta'riflar
O'rta (300-600 token)
Balans; ko'p stsenariylar
—
Protseduralar, siyosat matnlari
Katta (800-1500 token)
Kontekstning yaxlitligi
loyqa joylashtirish
Hikoya, uzoq tushuntirishlar
Maslahat: Agar qaerdan boshlashni bilmasangiz, 400-500 ta token boʻlagi va 50-80 ta tokenning bir-biriga mos kelishidan boshlang; keyin o'z ma'lumotlaringiz bilan o'lchang va sozlang. "To'g'ri" o'lcham universal emas, u kontekstga bog'liq.
Bo'linish strategiyalari
Ruxsat etilgan o'lcham: matnni har N tokenda qisqartiradi. Bu oddiy va tez, lekin jumlaning oʻrtasini buzishi mumkin.
Separatorga asoslangan (rekursiv/ajratuvchi): paragrafga, keyin esa gap chegaralariga ko'ra ajratadi; Bu ma'noning yaxlitligini yaxshiroq saqlaydi. Aksariyat ishlab chiqarish tizimlari shundan boshlanadi.
Semantik bo'linish: U jumlalarning joylashishini ko'rib chiqadi va ularni mavzu o'zgarishi sodir bo'lgan joyda ajratadi. Bu eng sifatli, lekin eng qimmat usul; Katta hajmlar bilan tranzaksiya xarajatlari oshadi.
Strukturadan xabardor: sarlavhalar, bo'limlar, jadvallar kabi hujjat tuzilishidan foydalanadi. Misol uchun, Markdown hujjatini sarlavhalarga bo'lish har bir qismning o'z sarlavhasiga ega bo'lishini ta'minlaydi.
Hujjat turi bo'yicha moslashtirish
Har bir hujjat bir xil emas. Strategiya turiga qarab farqlanadi:
- PDF/siyosat matni: Xatcho‘pga asoslangan, o‘rta o‘lchamli. Sahifaning yuqori/pastki takrorlanishini tozalash (sarlavha/kolontitr).
- Jadvallar: chiziqni kontekstdan olib tashlamang; har bir qatorni sarlavha ma'lumotlari bilan saqlang ("Item: X, Narx: Y, Stock: Z"). Xom jadvalni oddiy matnga aylantirish ko'pincha muhim ahamiyatga ega.
- Kod: Funktsiya/sinf chegaralari bo'yicha bo'linish; Funktsiyani yo'ldan chetga surib qo'ymang.
- Chat/chipta yozish: Xabar yoki suhbat bo'yicha bo'linish; Kim nima degani haqidagi bilimlarni saqlang.
# qavsga asoslangan bo'laklar (kontseptual) bo'laklar = bol(matn, maqsad_sizi=450, # tokenning o'zaro kelishi=70, # token qavslari=["\n\n", "\n", ". ", " "] # paragraf birinchi, so'z oxirgi)
Har bir trekka metadata qo'shing
Bo'linish shunchaki "bo'lish" emas; har bir parchani boyitishdir. Trekka biriktirgan har bir teg kelajakda filtrlash va manbaga iqtibos keltirish uchun oltin bilan baholanadi.
# Boyitilgan bo'lak (kontseptual){ "matn": "Yillik haq to'lanadigan ta'til 1-5 yillik xizmat muddati bilan 14 kun...", "metadata": { "manba": "ik_el_kitabi_v7.pdf", "bo'lim": "5.2 Yillik ta'til", "sahifa": 23, "sana": "IK": "02-qism:" "maxfiylik": "ichki" }}
Yana bir kuchli usul - kontekstli sarlavha qo'shish: har bir qismning boshida unga tegishli bo'limning nomini yozish. Shunday qilib, hatto "14 kun davomida" kabi bir-biridan ajratilgan parcha ham "Yillik ta'til - 14 kun" kabi yaxshiroq joylashtirilgan va yanada mazmunli.
Zaif Chunking / Kuchli Chunki
Zaif (koʻr qattiq, metamaʼlumotlar yoʻq):
Matnni har 1000 belgidan qisqartiring. Faqat matnni saqlang.# Natija: jadvallar oʻrtada boʻlinadi, “14 kun” kontekstsiz qoladi,# qaysi hujjatdan kelgani nomaʼlum, filtrni amalga oshirib boʻlmaydi.
Kuchli (tuzilishdan xabardor + sarlavha + metama'lumotlar):
Hujjatni sarlavhalar bo'yicha ajrating; har bir qismga bo'lim sarlavhasini qo'shing;manba, sahifa, sana va maxfiylik metama'lumotlarini qo'shing; jadval qatorlarini sarlavhalari bilan oddiy matnga aylantiring.# Natija: yo'naltirilgan, kontekstli, filtrlanadigan, manba.
Uchta mini korpus
1-holati - Rasmdagi falokat. Moliya jamoasi 200 betlik narxlar ro'yxatini ko'r-ko'rona qattiq kesish bilan ajratdi; jadval qatorlari tasodifiy bo'lingan. "X mahsulotining narxi qancha?" Model noto'g'ri chiziqni o'qib chiqdi va noto'g'ri narx berdi (12 holatdan 9 tasi noto'g'ri). Jadval satrlarini "Mahsulot: … | Narxi: … | Birlik: …" formatida oddiy matnga aylantirganimda xatolik 12 tadan 0 ga kamaydi.
2-holat - Juda katta bo'lak. Wiki-da har bir sahifa bitta bo'lakdan iborat (ba'zilar 3000 ta tokendan iborat). Bir sahifada "ta'til", "qo'shimcha ish" va "ish haqi" borligi sababli, joylashtirish xiralashgan; Ta'til masalasida ish vaqti bo'limi ham o'ynadi. Sahifalar sarlavha bo'yicha o'rta hajmga bo'linganda, eslab qolish@5 64% dan 91% gacha ko'tarildi.
3-holat - Qirqilgan gap, bir-biriga o'xshamagan. Yuridik jamoa uchun 250 ta token belgilangan, bir-biriga mos kelmaydi. Tanqidiy ta'rif ikki qismning chegarasiga to'g'ri keldi va ikkiga bo'lindi; Na birida, na boshqasida to'liq javob mavjud emas. 60 ta token qo'shilganda, xuddi shu ta'rif bir parchada saqlanib qoldi va to'g'ri javob qaytarildi.
Umumiy xatolar
- Blind fixed cut: jumlalar va jadvallarni o'rtaga ajratadi; ma'no yo'qoladi.
- Bir-biriga o'xshashlikni nolga qo'yish: chegaraga tushgan ma'lumotlar bo'linadi va yo'qoladi.
- Metadata qo'shmaslik: Filtrlash va manbani ko'rsatish imkonsiz bo'ladi.
- Jadvallarni xom ashyoni qoldirish: Model jadval tuzilishini hal qila olmaydi; Chiziqlarni oddiy matnga aylantiring.
- Bitta strategiyani qo'llash: PDF, kod va jadval bir xil usulda bo'linmaydi; Janrga moslashish.
Diqqat: Chunkingni bir marta o'rnatmang va uni unuting. Hujjatlarning yangi turlari kelganda (yangi tizimdan chiptalar, skanerlangan PDF-fayllar) olish sifatini qayta o'lchang. Noto'g'ri kiritilgan ma'lumotlar yomon javob degan ma'noni anglatadi ("axlat kirdi, chiqindi").
Xulosa
- Chunk - qidirishning eng kichik birligi; Na juda katta, na juda kichik - tarkibga ko'ra muvozanatli bo'lishi kerak.
- Bo'lak o'lchami diqqat-kontekst muvozanatini ko'rsatadi; Overlap chegara yo'qotilishini boshqaradi.
- Qavsga asoslangan va tuzilishdan xabardor bo'linish ko'pchilik avlod tizimlarining boshlang'ich nuqtasidir; semantik yig'ish yaxshi sifat, lekin qimmat.
- Jadval, skript va chat kabi turlar o'z strategiyalarini talab qiladi; Jadvallarni oddiy matnga aylantirish.
- Har bir trekka manba/sana/bob/maxfiylik meta-maʼlumotlari va boʻlim sarlavhasini qoʻshing; Bu filtrlash va iqtibosning asosidir.
Ilova vazifasi
Hujjatning bir qismini uch xil usulga bo'ling: (1) 200 ta tokendan iborat kichik bo'laklar, (2) 500 ta tokendan iborat o'rta bo'laklar (70 ta tokenning bir-birining ustiga chiqishi), (3) bitta katta bo'lak. Har bir strategiya uchun bir xil 3 ta savolni bering, qaysi qismni kiritish kerakligini qo'lda belgilang va ushbu hujjat uchun qaysi strategiya eng mos kelishining sababini yozing. Keyin har bir trekka kamida to'rtta metadata maydoni va "bob sarlavhasi" qo'shing. Agar hujjatda jadval mavjud bo'lsa, jadval qatorini "maydon: qiymat" formatida oddiy matnga aylantiring.
nazorat ro'yxati
- [ ] Aytishim mumkinki, chunk qidiruvning eng kichik birligi va o'lcham - bu fokus-kontekst balansi.
- [ ] Nima uchun Overlap chegara yoʻqolishini oldini olishini bilaman.
- [ ] Men qavsga asoslangan, semantik va tuzilishdan xabardor qismlarni ajrata olaman.
- [ ] Men strategiyani jadval, kod va chat uchun moslashtira olaman.
- [ ] Har bir trekka metadata va bob sarlavhasini qoʻshish orqali qidiruvni kuchaytiraman.