Mga nadagdag:
- Suriin ayon sa numero ang laki ng chunk, overlap at semantic chunking tradeoffs
- Pagpili ng naaangkop na diskarte sa chunking para sa iba't ibang uri ng dokumento (PDF, table, code, chat log)
- Palakasin ang kalidad ng pagkuha at pag-filter sa pamamagitan ng pagdaragdag ng metadata sa bawat tipak
Ito ang pinaka hindi napapansin ngunit pinaka mapagpasyang hakbang sa RAG: kung paano mo sinira ang dokumento. Ito ay tinatawag na chunking. Kahit na ibinigay mo ang parehong dokumento sa parehong modelo, dahil sa masamang chunking ang pagkuha ay nagbabalik ng maling piraso at ang modelo ay hindi kailanman makakapagbigay ng isang mahusay na sagot. Sa unit na ito, sinasaklaw namin ang mga diskarte sa fragmentation, kung paano iaangkop ang mga ito ayon sa uri ng dokumento, at kung paano magdagdag ng makabuluhang metadata sa bawat fragment.
Bakit Tayo Nagsisira?
May tatlong dahilan. Una, ang pag-embed ng mga modelo ay nagko-convert ng teksto hanggang sa isang tiyak na haba sa isang makabuluhang vector; Kung ang isang buong 40-pahinang kabanata ay siksikan sa isang vector, ang kahulugan ay nagiging "blur." Pangalawa, gusto naming ibigay sa modelo lamang ang bahaging kailangan bilang konteksto; ang pag-abot ng buong dokumento ay mahal at nakakagambala. Pangatlo, para maging tumpak ang pagkuha, dapat maliit at nakatuon ang unit ng paghahanap.
Kaya ang tipak ay ang pinakamaliit na yunit ng pagkuha. Hindi ito dapat masyadong malaki o masyadong maliit – tama lang.
Sukat ng Tipak at Balanse ng Overlap
Mayroong dalawang pangunahing setting: laki ng tipak (kung gaano karaming mga token/salita ang nasa isang tipak) at magkakapatong (ang bahaging ibinahagi ng mga kalapit na tipak).
Napakaliit na chunks (hal. 100 token): nakatutok ngunit hindi nakakonekta sa konteksto. Sinasabi niya na "para sa 14 na araw", ngunit kung ano ang 14 na araw ay natitira sa nakaraang pangungusap. Napakalaking tipak (hal. 2000 token): pinapanatili ang konteksto ngunit maraming mga thread ang pinaghalo; nalilito ang pag-embed at nagsasama-sama ang mga hindi nauugnay na paksa.
Nalulutas ng overlap ang problema sa hangganan. Kung ang isang pangungusap ay eksaktong bumagsak sa hangganan ng dalawang bahagi, ito ay nahahati sa dalawa nang hindi nagsasapawan at nawawala ang kahulugan nito. Ang overlap ng 50-100 na mga token ay nagsisiguro na ang impormasyong nasa loob ng limitasyon ay mananatiling buo sa kahit isang bahagi.
Laki ng tipak
Advantage
Disadvantage
angkop na nilalaman
Maliit (100-250 token)
Mataas na sensitivity, nakatutok
Maaaring masira ang konteksto
FAQ, maikling artikulo, mga kahulugan
Katamtaman (300-600 token)
Balanse; karamihan sa mga senaryo
—
Mga pamamaraan, mga teksto ng patakaran
Malaki (800-1500 token)
Integridad ng konteksto
malabong pag-embed
Salaysay, mahabang paliwanag
Tip: Kung hindi mo alam kung saan magsisimula, magsimula sa 400-500 token chunk at 50-80 token overlap; pagkatapos ay sukatin at ayusin gamit ang iyong sariling data. Ang "tamang" laki ay hindi pangkalahatan, depende ito sa konteksto.
Mga Istratehiya ng Chunking
Fixed-size: Pinuputol ang text sa bawat N token. Ito ay simple at mabilis, ngunit maaaring makagambala sa kalagitnaan ng pangungusap.
Separator-based (recursive/separator): Hinahati ayon sa talata at pagkatapos ay mga hangganan ng pangungusap; Mas pinapanatili nito ang integridad ng kahulugan. Karamihan sa mga sistema ng produksyon ay nagsisimula dito.
Semantic chunking: Tinitingnan nito ang mga pagkakalagay ng mga pangungusap at hinahati ang mga ito kung saan nagaganap ang pagbabago ng paksa. Ito ang pinakamataas na kalidad ngunit pinakamahal na paraan; Sa malalaking volume, tumataas ang mga gastos sa transaksyon.
Structure-aware: Gumagamit ng istraktura ng dokumento tulad ng mga heading, seksyon, talahanayan. Halimbawa, ang paghahati ng isang Markdown na dokumento sa pamamagitan ng mga heading ay nagsisiguro na ang bawat bahagi ay may sariling heading.
Pagbagay ayon sa Uri ng Dokumento
Hindi lahat ng dokumento ay pareho. Ang diskarte ay nag-iiba ayon sa uri:
- PDF/text ng patakaran: Batay sa bookmark, katamtamang laki. I-clear ang mga pag-uulit sa itaas/ibaba ng pahina (header/footer).
- Mga Talahanayan: Huwag alisin ang linya sa konteksto; panatilihin ang bawat hilera na may impormasyon ng header ("Item: X, Presyo: Y, Stock: Z"). Ang pag-convert ng raw table sa plain text ay kadalasang mahalaga.
- Code: Hatiin ayon sa function/mga hangganan ng klase; Huwag putulin ang isang function sa labas ng paraan.
- Pag-record ng chat/ticket: Hatiin ayon sa mensahe o round ng pag-uusap; Panatilihin ang kaalaman kung sino ang nagsabi kung ano.
# bracket-based chunking (conceptual) chunks = bol( text, target_size=450, # token overlap=70, # token brackets=["\n\n", "\n", ". ", " "] # na talata muna, huling salita)
Magdagdag ng Metadata sa Bawat Track
Ang pag-chunking ay hindi lang "divide"; ay upang pagyamanin ang bawat piraso. Ang bawat tag na ikakabit mo sa track ay katumbas ng bigat nito sa ginto para sa pag-filter sa hinaharap at pagbanggit ng pinagmulan.
# Enriched chunk (conceptual){ "text": "Ang taunang may bayad na bakasyon ay 14 na araw na may 1-5 taon ng serbisyo...", "metadata": { "source": "ik_el_kitabi_v7.pdf", "section": "5.2 Annual Leave", "page": 23, "date": "2025-06", "private": "2025-06" }}
Ang isa pang makapangyarihang pamamaraan ay ang pagdaragdag ng isang contextual header: pagsulat ng pamagat ng kabanata na kinabibilangan nito sa simula ng bawat piraso. Kaya, kahit na ang isang putol-putol na piraso tulad ng "Para sa 14 na araw" ay parehong mas mahusay na naka-embed at mas makabuluhan bilang "Taunang leave - 14 na araw."
Mahinang Chunking / Malakas na Chunking
Mahina (bulag na hardcut, walang metadata):
Putulin ang teksto bawat 1000 character. Panatilihin lamang ang teksto.# Resulta: ang mga talahanayan ay nahahati sa gitna, ang "14 na araw" ay nananatiling walang konteksto,# hindi alam kung saang dokumento ito nanggaling, walang filter na maaaring gawin.
Napakahusay (alam sa istruktura + header + metadata):
Hatiin ang dokumento sa pamamagitan ng mga heading; magdagdag ng pamagat ng seksyon sa bawat bahagi;ilakip ang pinagmulan, pahina, petsa at metadata ng privacy; i-convert ang tablerows sa plain text gamit ang kanilang mga header.# Resulta: nakatutok, ayon sa konteksto, na-filter, napagkukunan.
Tatlong Mini Case
Kaso 1 — Pagpipinta ng kalamidad. Hinati ng isang finance team ang 200-pahinang listahan ng presyo na may blind hard cutting; random na hinati ang mga hilera ng talahanayan. "Ano ang presyo ng produkto X?" Nabasa ng modelo ang maling linya at nagbigay ng maling presyo (9 sa 12 kaso ay mali). Nang i-convert ko ang mga row ng talahanayan sa plain text sa format na "Produkto: … | Presyo: … | Unit: …" ang error ay bumaba sa 0 sa 12.
Case 2 — Napakalaking tipak. Sa isang wiki, ang bawat pahina ay gawa sa isang tipak (sabi ng ilan ay 3,000 token). Malabo ang pag-embed dahil may "leave", "overtime" at "payroll" sa isang page; Ang seksyon ng mga oras ng pagtatrabaho ay naglaro din tungkol sa tanong sa leave. Kapag hinati ang mga pahina sa katamtamang laki ayon sa pamagat, tumaas ang recall@5 mula 64% hanggang 91%.
Case 3 — Pinutol na pangungusap nang walang overlap. 250 token fixed cut para sa isang legal na team, walang overlap. Ang isang kritikal na kahulugan ay nahulog mismo sa hangganan ng dalawang bahagi at nahati sa dalawa; Wala sa isa o sa isa pa ang naglalaman ng kumpletong sagot. Kapag naidagdag ang 60 token overlap, nanatiling buo ang parehong kahulugan sa isang piraso at ibinalik ang tamang sagot.
Mga karaniwang pagkakamali
- Blind fixed cut: Hinahati ang mga pangungusap at talahanayan sa gitna; nawawala ang kahulugan.
- Ang pag-iwan sa overlap sa zero: Ang impormasyon na nasa hangganan ay nahahati at nawala.
- Hindi pagdaragdag ng metadata: Nagiging imposible ang pag-filter at pagpapakita ng pinagmulan.
- Iniwan ang mga talahanayan nang hilaw: Hindi mareresolba ng modelo ang istraktura ng talahanayan; I-convert ang mga linya sa plain text.
- Pagpapataw ng isang diskarte: PDF, code at talahanayan ay hindi nahati sa parehong paraan; Iangkop sa genre.
Babala: Huwag itakda ang Chunking nang isang beses at kalimutan ito. Sukatin muli ang kalidad ng pagkuha kapag dumating ang mga bagong uri ng dokumento (mga tiket mula sa isang bagong system, mga na-scan na PDF). Ang masamang data ng pag-input ay nangangahulugan ng masamang tugon ("basura sa loob, basura sa labas").
Sa buod
- Ang tipak ay ang pinakamaliit na yunit ng pagkuha; Hindi masyadong malaki o masyadong maliit - dapat itong balanse ayon sa nilalaman.
- Ang laki ng tipak ay nagpapahiwatig ng balanse ng focus-context; Pinamamahalaan ng overlap ang pagkawala ng hangganan.
- Ang bracket-based at structure-aware na chunking ay ang panimulang punto ng karamihan sa mga sistema ng henerasyon; Ang semantic chunking ay magandang kalidad ngunit mahal.
- Ang mga uri tulad ng talahanayan, script, at chat ay nangangailangan ng kanilang sariling mga diskarte; I-convert ang mga talahanayan sa plain text.
- Magdagdag ng pinagmulan/petsa/kabanata/privacy metadata at pamagat ng seksyon sa bawat track; Ito ang batayan ng pagsasala at pagsipi.
Gawain ng aplikasyon
Hatiin ang isang seksyon ng dokumentong pipiliin mo sa tatlong magkakaibang paraan: (1) maliliit na piraso ng 200 token, (2) medium na piraso ng 500 token (70 token overlap), (3) solong malalaking piraso. Magtanong ng parehong 3 tanong para sa bawat diskarte, manu-manong markahan kung aling piraso ang dadalhin, at isulat ang pangangatwiran kung aling diskarte ang pinakamahusay na gumagana para sa dokumentong iyon. Pagkatapos ay magdagdag ng hindi bababa sa apat na metadata field at isang "pamagat ng kabanata" sa bawat track. Kung ang dokumento ay naglalaman ng isang talahanayan, i-convert ang isang table row sa plain text sa "field:value" na format.
checklist
- [ ] Masasabi ko na ang tipak ay ang pinakamaliit na yunit ng pagkuha at ang laki ay ang balanse ng focus-context.
- [ ] Alam ko kung bakit pinipigilan ng Overlap ang pagkawala ng hangganan.
- [ ] Maaari kong makilala ang pagitan ng bracket-based, semantic at structure-aware na chunking.
- [ ] Maaari kong iakma ang diskarte para sa talahanayan, code at chat.
- [ ] Pinalalakas ko ang pagkuha sa pamamagitan ng pagdaragdag ng metadata at pamagat ng kabanata sa bawat track.