Astro Basics

Od paragrafu k odpovedi: Ako chunking zlepšuje právnu AI

Keďže už vieme, čo je embedding, a že najlepšie vyhľadávanie funguje na hybridnom prístupe (kombinujeme embeddingy s full‑textovým vyhľadávaním), mohlo by sa zdať, že stačí zobrať zákony, urobiť z nich embeddingy a sme hotoví.

Našťastie to nie je také jednoduché. Hrajú v tom dve protichodné sily:

  1. Embedding celého dokumentu – najjednoduchšie riešenie, ktoré zachytí celý význam textu, no v praxi nefunguje. Ak si spomenieme, ako embeddingy fungujú, vieme, že zachytávajú význam len toho textu, ktorý sa do nich zmestí. Keď embedneme celý zákon, výsledný vektor nebude poriadne reprezentovať žiadnu konkrétnu tému. Navyše algoritmus má limit na počet tokenov, takže pri príliš dlhom dokumente sa jeho koniec jednoducho odreže.

  2. Embedding jednej vety – na opačnom konci spektra máme dokonalé pokrytie limitu, no vo vektore skončí príliš málo informácií. Presvedčíme sa na príklade.

    „(3) Odňatím slobody na tri roky až osem rokov sa páchateľ potrestá, ak spácha čin uvedený v odseku 1 a spôsobí ním značnú škodu.“

    Z tejto izolovanej vety nedokážeme zistiť, že ide Tretí odsek §224 ktorý sprísňuje trest za kapitálový podvod v prípadoch, keď páchateľ spôsobí značnú škodu. Zvýšená trestná sadzba odráža spoločenskú nebezpečnosť takéhoto konania, najmä vo vzťahu k dôvere investorov a stabilite finančného trhu.

Riešením je zvoliť zlatú strednú cestu: mať dostatok kontextu, aby embedding zachytil podstatné informácie, no stále sa vojsť do limitov modelu.

Päť prístupov k chunkingu

1. Pevné okno podľa počtu tokenov

Rozdelíme dokument na vety a zbierame ich, kým neprekročíme napr. 8 192 tokenov (≈ 32 k znakov). Výhoda – trivialna implementácia. Nevýhoda – môže nám chýbať začiatok odseku v následnom chunku, čo skreslí význam.

V obrázku vidíme príklad kedy nám chýba začiatok s odseku vo fialovom chunku. Kedze ako ludia logicky chapeme ze odseky robia rozdiely a zaciatok nam dava kontext k zvysku textu, tak toto moze byt velky problem.

CleanShot 2025-05-05 at 10.33.06.png

2. Prekrytie (overlap)

Začíname nový chunk nie priamo po konci predchádzajúceho, ale o pár viet späť. Zelená časť textu sa ocitne v oboch embeddingoch, čím znižujeme riziko, že odseknutím zmeníme význam.

CleanShot 2025-05-05 at 10.33.06.png

Stále nám to ale neriesi celý problém. Zoberme si nasledujúcu situáciu.

CleanShot 2025-05-05 at 10.24.54.png

Máme síce prekritie 5 bodov, ale fialový chunk stále nemá začiatok zoznamu ktory v tomto pripade je velice doležitý.

Treba si uvedomiť, že keďže dĺžky odsekov a viet sú v podstate arbitráne, prístupom prekrytia a sekania na základe viet, odsekov, zoznamov atď. nikdy neodstránime situáciu, keď odsekneme podstatnú časť textu zo začiatku alebo konca.

3. Semantický chunking.

Náš hlavný problém je, že chceme dať vety, ktoré k sebe patria, do jedného chunku. To, že k sebe patria, vieme povedať ako ľudia prirodzene, ale je to na základe rozloženia dokumentu a významu. Keďže význam vieme zachytiť cez embedding, tak porovnávajme vety/chunky cez embedding a na základe podobnosti rozšírme alebo skráťme chunk.

Týmto spôsobom vieme automatizovane zlepšiť chunking, keďže vieme detekovať koniec chunku podľa významu, a tým pádom by sme mali predísť situáciám ako bola predchádzajúca.

Hovorím ‚mali‘, lebo nič nie je 100 % pri automatizovanom prístupe. Príklad, kedy prístup zlyhá, je, keď si zoberieme predchádzajúci príklad zoznamu bodov v §36. Ak by zoznam bol príliš dlhý na jeden chunk, museli by sme ho rozbiť na dva chunky – a znova sme pri predchádzajúcom probléme.

4. AI Kontext.

Problém, ktorý sa snažíme riešiť postupne komplikovanejšími prístupmi, je ten, že chunk nemá kontext, kde sa v dokumente nachádza. Napríklad ak ide o zoznam, potrebujeme mať v chunku aj informácie o podstate toho zoznamu, nielen jednotlivé položky.

Teória za AI kontextom spočíva v tom, že si dokument rozdelíme hierarchicky – v našom prípade na hlavy, diely, paragrafy atď. Pre jednotlivé časti vygenerujeme sumár a vložíme ho na začiatok chunku ako informáciu o tom, kde sa chunk nachádza. Napríklad pre náš predchádzajúci príklad s §36 by sme ako kontext pridali: „Tento úsek Trestného zákona patrí do všeobecnej časti a venuje sa základným zásadám ukladania sankcií. Konkrétne sa zameriava na poľahčujúce a priťažujúce okolnosti, ktoré ovplyvňujú výšku a druh trestu.“

Tým pádom, aj keď je zoznam v §36 príliš dlhý, máme informáciu o tom, čoho sa týka, a samotný embedding bude presnejší.


Prístupov na chunking existuje priveľa. Netreba zabúdať, že čím komplikovanejší prístup si vyberieme, tým je drahší, pomalší a zvyšuje sa šanca, že pri neočakávanom prípade úplne zlyhá. Treba si teda dobre premyslieť, aké typy dokumentov chceme chunkovať, a využiť doménovú expertízu pre konkrétny prípad.

Ak napríklad vieme, že dokument obsahuje len odseky, ktoré na seba nenadväzujú, stačí nám dokument rozbiť na tieto odseky a do každého pridať základnú informáciu o dokumente ako kontext.

Verím, že vám článok pomohol získať náhľad na rôzne metódy chunkingu. Téme sa stále venuje výskum a neustále sa vyvíja.