Jedinica 3 / 11

Chunking i priprema dokumenata

Dobici:

  • Numerički procijenite veličinu bloka, preklapanje i semantičke kompromise u komadima
  • Odabir odgovarajuće strategije dijeljenja za različite vrste dokumenata (PDF, tablica, kod, dnevnik razgovora)
  • Ojačajte kvalitetu dohvaćanja i filtriranje dodavanjem metapodataka svakom dijelu

Ovo je najzanemareniji, ali najodlučniji korak u RAG-u: kako raščlaniti dokument. To se zove chunking. Čak i ako isti dokument date istom modelu, zbog lošeg dijeljenja dohvaćanje vraća pogrešan dio i model nikada neće proizvesti dobar odgovor. U ovoj jedinici pokrivamo strategije fragmentacije, kako ih prilagoditi prema vrsti dokumenta i kako dodati smislene metapodatke svakom fragmentu.

Zašto Shred?

Tri su razloga. Prvo, modeli ugradnje pretvaraju tekst do određene duljine u smisleni vektor; Ako se cijelo poglavlje od 40 stranica strpa u jedan vektor, značenje postaje "zamagljeno". Drugo, modelu želimo dati samo dio koji je potreban kao kontekst; predaja cijelog dokumenta skupa je i smeta. Treće, da bi pronalaženje bilo precizno, jedinica za pretraživanje mora biti mala i fokusirana.

Dakle, chunk je najmanja jedinica za dohvaćanje. Ne smije biti ni prevelika ni premala – taman koliko treba.

Veličina dijela i ravnoteža preklapanja

Postoje dvije glavne postavke: veličina dijela (koliko će tokena/riječi biti u komadu) i preklapanje (dio koji dijele susjedni dijelovi).

Vrlo mali dijelovi (npr. 100 tokena): fokusirani, ali nepovezani s kontekstom. Kaže "na 14 dana", ali što je 14 dana ostalo je u prethodnoj rečenici. Vrlo veliki komadi (npr. 2000 tokena): čuva kontekst, ali su mnoge niti umiješane; ugradnja postaje zbrkana i nebitne teme se skupljaju.

Preklapanje rješava problem granice. Ako rečenica padne točno na granicu dvaju dijelova, dijeli se na dva dijela bez preklapanja i gubi smisao. Preklapanje od 50-100 tokena osigurava da informacije koje spadaju u ograničenje ostanu netaknute u barem jednom dijelu.

Veličina komada

Prednost

Nedostatak

odgovarajući sadržaj

Mali (100-250 tokena)

Visoka osjetljivost, fokusiran

Kontekst se može pokvariti

FAQ, kratki članci, definicije

Srednje (300-600 tokena)

ravnoteža; većina scenarija

Procedure, tekstovi politike

Veliki (800-1500 tokena)

Cjelovitost konteksta

mutno ugrađivanje

Narativ, duga objašnjenja

Savjet: Ako ne znate odakle početi, počnite s komadom od 400-500 tokena i preklapanjem od 50-80 tokena; zatim izmjerite i prilagodite svojim podacima. "Prava" veličina nije univerzalna, ovisi o kontekstu.

Strategije usitnjavanja

Fiksna veličina: skraćuje tekst svakih N tokena. Jednostavan je i brz, ali može prekinuti usred rečenice.

Na temelju razdjelnika (rekurzivno/razdjelnik): Dijeli prema odlomku, a zatim prema granicama rečenice; Bolje čuva cjelovitost značenja. Većina proizvodnih sustava počinje s ovim.

Semantičko usitnjavanje: promatra umetnute rečenice i dijeli ih tamo gdje dolazi do promjene subjekta. To je najkvalitetnija, ali najskuplja metoda; Uz velike količine, transakcijski troškovi rastu.

S obzirom na strukturu: koristi strukturu dokumenta kao što su naslovi, odjeljci, tablice. Na primjer, dijeljenje Markdown dokumenta po naslovima osigurava da svaki dio nosi vlastiti naslov.

Prilagodba prema vrsti dokumenta

Nije svaki dokument isti. Strategija se razlikuje prema vrsti:

  • PDF/tekst pravila: na temelju knjižnih oznaka, srednje veličine. Očisti ponavljanja vrha/dna stranice (zaglavlje/podnožje).
  • Tablice: Ne izvlačite redak iz konteksta; zadržite svaki redak s informacijama zaglavlja ("Stavka: X, Cijena: Y, Zaliha: Z"). Pretvaranje neobrađene tablice u običan tekst često je bitno.
  • Šifra: Split prema granicama funkcije/klase; Ne skrećite funkciju s puta.
  • Snimanje razgovora/ulaznica: Podijelite po poruci ili rundi razgovora; Održavajte znanje o tome tko je što rekao.

# chunking (konceptualni) chunks na temelju zagrada = bol( text, target_size=450, # token overlap=70, # token brackets=["\n\n", "\n", ". ", " "] # paragraf prvi, riječ zadnja)

Dodajte metapodatke svakoj stazi

Chunking nije samo "podijeli"; je obogatiti svaki komad. Svaka oznaka koju priložite stazi zlata je vrijedna za buduće filtriranje i navođenje izvora.

# Obogaćeni dio (konceptualno){ "text": "Godišnji plaćeni dopust je 14 dana s 1-5 godina radnog staža...", "metadata": { "source": "ik_el_kitabi_v7.pdf", "section": "5.2 Godišnji odmor", "page": 23, "date": "2025-06", "department": "IK", "privacy": "interno" }}

Još jedna moćna tehnika je dodavanje kontekstualnog zaglavlja: pisanje naslova poglavlja kojem pripada na početku svakog djela. Stoga je čak i nepovezano djelo poput "Za 14 dana" i bolje uklopljeno i smislenije od "Godišnji odmor - 14 dana".

Slabo usitnjavanje/jako usitnjavanje

Slab (slijepi hardcut, bez metapodataka):

Skratite tekst svakih 1000 znakova. Zadrži samo tekst.# Rezultat: tablice su podijeljene po sredini, "14 dana" ostaje bez konteksta,# ne zna se iz kojeg je dokumenta, ne može se napraviti filter.

Snažan (svjestan strukture + zaglavlje + metapodaci):

Podijelite dokument po naslovima; dodajte naslov odjeljka svakom dijelu; priložite izvor, stranicu, datum i metapodatke o privatnosti; pretvorite retke tablice u običan tekst s njihovim zaglavljima. # Rezultat: fokusiran, kontekstualan, filtriran, izvorni.

Tri mini kućišta

Slučaj 1 — Slikarska katastrofa. Financijski tim podijelio je cjenik od 200 stranica slijepim tvrdim rezanjem; redovi tablice bili su nasumično podijeljeni. "Koja je cijena proizvoda X?" Model je pročitao pogrešan redak i dao krivu cijenu (9 od 12 slučajeva je pogrešno). Kad sam retke tablice pretvorio u običan tekst u formatu "Proizvod: … | Cijena: … | Jedinica: …", pogreška se smanjila na 0 od 12.

Slučaj 2 — Iznimno velik komad. U wikiju je svaka stranica sastavljena od jednog dijela (neki kažu 3000 tokena). Ugradnja je zamagljena jer na jednoj stranici ima "dopust", "prekovremeni" i "plaća"; Dio o radnom vremenu također je došao u obzir u vezi s pitanjem dopusta. Kada su stranice podijeljene na stranice srednje veličine po naslovu, recall@5 je porastao sa 64% na 91%.

Slučaj 3 — Skraćena rečenica bez preklapanja. 250 tokena fiksni rez za pravni tim, bez preklapanja. Kritička definicija pala je točno na granicu dvaju dijelova i prepolovila se; Ni jedno ni drugo ne sadrži potpuni odgovor. Kada je dodano preklapanje od 60 tokena, ista je definicija ostala netaknuta u jednom dijelu i vraćen je točan odgovor.

Uobičajene greške

  • Slijepi fiksni rez: Rastavlja rečenice i tablice po sredini; smisao se gubi.
  • Ostavljanje preklapanja na nuli: Informacije koje padnu na granicu se dijele i gube.
  • Bez dodavanja metapodataka: Filtriranje i prikaz izvora postaju nemogući.
  • Ostavljanje tablica neobrađenih: Model ne može riješiti strukturu tablice; Pretvorite retke u običan tekst.
  • Nametanje jedne strategije: PDF, kôd i tablica nisu podijeljeni istom metodom; Prilagodite se žanru.
Oprez: Nemojte jednom postaviti Chunking i zaboraviti ga. Ponovno izmjerite kvalitetu dohvaćanja kako stignu nove vrste dokumenata (ulaznice iz novog sustava, skenirani PDF-ovi). Loši ulazni podaci znače loš odgovor ("smeće unutra, smeće van").

Ukratko

  • Chunk je najmanja jedinica za pronalaženje; Ni prevelika ni premala – treba biti uravnotežena prema sadržaju.
  • Veličina dijela označava ravnotežu fokusa i konteksta; Preklapanje upravlja gubitkom granice.
  • Chunking temeljen na zagradama i svjestan strukture početna je točka većine sustava za generiranje; semantičko dijeljenje je kvalitetno, ali skupo.
  • Vrste poput tablice, skripte i chata zahtijevaju vlastite strategije; Pretvorite tablice u običan tekst.
  • Svakoj pjesmi dodajte izvor/datum/poglavlje/metapodatke o privatnosti i naslov odjeljka; Ovo je osnova filtriranja i citiranja.

Zadatak aplikacije

Dio dokumenta koji odaberete razdvojite na tri različita načina: (1) male dijelove od 200 tokena, (2) srednje dijelove od 500 tokena (70 tokena se preklapaju), (3) pojedinačne velike dijelove. Postavite ista 3 pitanja za svaku strategiju, ručno označite koji dio unijeti i zapišite obrazloženje koja strategija najbolje funkcionira za taj dokument. Zatim svakoj pjesmi dodajte najmanje četiri polja metapodataka i "naslov poglavlja". Ako dokument sadrži tablicu, pretvorite red tablice u običan tekst u formatu "polje:vrijednost".

popis za provjeru

  • [ ] Mogu reći da je chunk najmanja jedinica za pronalaženje, a veličina je ravnoteža fokusa i konteksta.
  • [ ] Znam zašto preklapanje sprječava gubitak granica.
  • [ ] Mogu razlikovati grupiranje na temelju zagrada, semantičko i strukturno svjesno.
  • [ ] Mogu prilagoditi strategiju za stol, kod i chat.
  • [ ] Pojačavam dohvaćanje dodavanjem metapodataka i naslova poglavlja svakoj pjesmi.