Câștiguri:
- Evaluați numeric dimensiunea bucăților, suprapunerea și compromisurile de fragmentare semantică
- Alegerea strategiei adecvate de fragmentare pentru diferite tipuri de documente (PDF, tabel, cod, jurnal de chat)
- Consolidați calitatea regăsirii și filtrarea prin adăugarea de metadate la fiecare bucată
Acesta este pasul cel mai trecut cu vederea, dar cel mai decisiv din RAG: cum defalci documentul. Aceasta se numește fragmentare. Chiar dacă dați același document aceluiași model, din cauza fragmentării proaste, recuperarea returnează piesa greșită și modelul nu va produce niciodată un răspuns grozav. În această unitate, vom acoperi strategiile de fragmentare, cum să le adaptăm în funcție de tipul de document și cum să adăugați metadate semnificative la fiecare fragment.
De ce zdrobim?
Există trei motive. În primul rând, modelele de încorporare convertesc textul de până la o anumită lungime într-un vector semnificativ; Dacă un întreg capitol de 40 de pagini este înghesuit într-un singur vector, semnificația devine „neclară”. În al doilea rând, dorim să oferim modelului doar partea care este necesară ca context; predarea întregului document este costisitoare și distrage atenția. În al treilea rând, pentru ca recuperarea să fie precisă, unitatea de căutare trebuie să fie mică și concentrată.
Deci chunk este cea mai mică unitate de recuperare. Nu ar trebui să fie prea mare sau prea mic - doar corect.
Dimensiunea bucăților și echilibrul de suprapunere
Există două setări principale: dimensiunea bucăților (câte jetoane/cuvinte vor fi într-o bucată) și suprapunere (porțiunea partajată de bucățile învecinate).
Bucăți foarte mici (de exemplu, 100 de jetoane): concentrate, dar deconectate de context. El spune „pentru 14 zile”, dar ceea ce este 14 zile este lăsat în propoziția anterioară. Bucăți foarte mari (de exemplu, 2000 de jetoane): păstrează contextul, dar multe fire sunt amestecate; încorporarea devine confuză și subiectele irelevante se reunesc.
Suprapunerea rezolvă problema limitelor. Dacă o propoziție se încadrează exact la granița a două părți, ea este împărțită în două fără a se suprapune și sensul ei se pierde. Suprapunerea a 50-100 de jetoane asigură că informațiile care se încadrează în limită rămân intacte în cel puțin o parte.
Dimensiunea bucatilor
Avantaj
Dezavantaj
conținut adecvat
Mic (100-250 de jetoane)
Sensibilitate mare, concentrat
Contextul se poate rupe
Întrebări frecvente, articole scurte, definiții
Mediu (300-600 de jetoane)
echilibru; majoritatea scenariilor
—
Proceduri, texte de politici
Mare (800-1500 de jetoane)
Integritatea contextului
înglobare neclară
Narativ, explicații lungi
Sfat: Dacă nu știți de unde să începeți, începeți cu 400-500 de jetoane și o suprapunere de 50-80 de jetoane; apoi măsurați și ajustați cu propriile date. Mărimea „corectă” nu este universală, depinde de context.
Strategii de fragmentare
Dimensiune fixă: decupează textul la fiecare N jetoane. Este simplu și rapid, dar poate întrerupe la mijlocul propoziției.
Bazat pe separator (recursiv/separator): Împarte în funcție de granițele de paragraf și apoi de propoziție; Păstrează mai bine integritatea sensului. Majoritatea sistemelor de producție încep cu asta.
Semantic chunking: Se uită la înglobarea propozițiilor și le împarte acolo unde are loc schimbarea subiectului. Este metoda de cea mai înaltă calitate, dar cea mai scumpă; Cu volume mari, costurile de tranzacție cresc.
Conștient de structură: utilizează structura documentului, cum ar fi titluri, secțiuni, tabele. De exemplu, împărțirea unui document Markdown după titluri asigură că fiecare parte are propriul său titlu.
Adaptare după tipul de document
Nu toate documentele sunt la fel. Strategia variază în funcție de tip:
- PDF/text politică: bazat pe marcaje, dimensiune medie. Ștergeți repetarea de sus/de jos a paginii (antet/subsol).
- Tabele: nu scoate linia din context; păstrați fiecare rând cu informații din antet ("Articol: X, Preț: Y, Stoc: Z"). Convertirea tabelului brut în text simplu este adesea esențială.
- Cod: Împărțit după granițele funcției/claselor; Nu tăiați o funcție din drum.
- Înregistrare chat/bilet: împărțit după mesaj sau rundă de conversație; Menține cunoștințele despre cine a spus ce.
# fragmente (conceptuale) bazate pe paranteze = bol( text, target_size=450, # token overlap=70, # token brackets=["\n\n", "\n", ". ", " "] # primul paragraf, ultimul cuvânt)
Adăugați metadate la fiecare piesă
Împărțirea în bucăți nu înseamnă doar „împărțire”; este de a îmbogăți fiecare piesă. Fiecare etichetă pe care o atașați piesei își merită greutatea în aur pentru filtrarea viitoare și citarea surselor.
# Bloc îmbogățit (conceptual){ "text": "Concediul anual plătit este de 14 zile cu 1-5 ani de serviciu...", "metadata": { "source": "ik_el_kitabi_v7.pdf", "section": "5.2 Annual Concediu", "page": 23, "date": "2025-06":" IK "departmental":"" }}
O altă tehnică puternică este adăugarea unui antet contextual: scrierea titlului capitolului căruia îi aparține la începutul fiecărei piese. Astfel, chiar și o piesă neconexă precum „Pentru 14 zile” este atât mai bine încorporată, cât și mai semnificativă ca „Concediu anual - 14 zile”.
Bucățiune slabă / Bucățiune puternică
Slab (cutare oarbă, fără metadate):
Trunchiază textul la fiecare 1000 de caractere. Păstrați doar textul.# Rezultat: tabelele sunt împărțite la mijloc, „14 zile” rămâne fără context,# nu se știe din ce document provine, nu se poate face niciun filtru.
Puternic (conștient de structură + antet + metadate):
Împărțiți documentul după titluri; adăugați titlul secțiunii la fiecare parte; atașați metadate sursa, pagina, data și confidențialitatea; convertiți rândurile de tabel în text simplu, cu anteturile lor. # Rezultat: concentrat, contextual, filtrabil, disponibil la sursă.
Trei mini carcase
Cazul 1 — Dezastru de pictură. O echipă financiară a împărțit lista de prețuri de 200 de pagini cu tăiere tare oarbă; rândurile de masă au fost împărțite aleatoriu. „Care este prețul produsului X?” Modelul a citit greșit rând și a dat un preț greșit (9 din 12 cazuri sunt greșite). Când am convertit rândurile tabelului în text simplu în formatul „Produs: … | Preț: … | Unitate: …”, eroarea a scăzut la 0 din 12.
Cazul 2 – Bucățiune extrem de mare. Într-un wiki, fiecare pagină este formată dintr-o singură bucată (unii spun că 3.000 de jetoane). Încorporarea este neclară, deoarece există „concediu”, „orele suplimentare” și „statul de plată” pe o singură pagină; În ceea ce privește problema concediului a intrat în joc și secțiunea de program de lucru. Când paginile au fost împărțite în dimensiune medie după titlu, recall@5 a crescut de la 64% la 91%.
Cazul 3 — Propoziție trunchiată fără suprapunere. 250 de jetoane tăiate fix pentru o echipă juridică, fără suprapunere. O definiție critică a căzut chiar la granița a două părți și s-a împărțit în două; Nici unul, nici celălalt nu conține răspunsul complet. Când a fost adăugată suprapunerea a 60 de jetoane, aceeași definiție a rămas intactă într-o singură bucată și răspunsul corect a fost returnat.
Greșeli comune
- Tăiere fixă oarbă: Împarte propozițiile și tabelele la mijloc; sensul se pierde.
- Lăsând suprapunerea la zero: informațiile care se încadrează la graniță sunt împărțite și pierdute.
- Nu se adaugă metadate: filtrarea și afișarea sursei devin imposibile.
- Lăsarea tabelelor brute: Modelul nu poate rezolva structura tabelului; Convertiți liniile în text simplu.
- Impunerea unei singure strategii: PDF, cod și tabel nu sunt împărțite prin aceeași metodă; Adaptați-vă la gen.
Atenție: nu setați Chunking o dată și uitați-l. Măsurați din nou calitatea recuperării pe măsură ce sosesc noi tipuri de documente (bilete dintr-un sistem nou, PDF-uri scanate). Datele de intrare greșite înseamnă răspuns prost („gunoi intră, gunoi ieșit”).
Pe scurt
- Chunk este cea mai mică unitate de recuperare; Nici prea mare, nici prea mic – ar trebui să fie echilibrat în funcție de conținut.
- Dimensiunea fragmentului indică echilibrul focus-context; Suprapunerea gestionează pierderea limitei.
- Chunking-ul bazat pe paranteze și conștient de structură este punctul de plecare al majorității sistemelor de generație; fragmentarea semantică este de bună calitate, dar scumpă.
- Tipuri precum tabelul, scriptul și chatul necesită propriile strategii; Convertiți tabelele în text simplu.
- Adăugați metadate sursă/data/capitol/confidențialitate și titlul secțiunii la fiecare piesă; Aceasta este baza de filtrare și de citare.
Sarcina de aplicare
Împărțiți o secțiune a documentului pe care o alegeți în trei moduri diferite: (1) bucăți mici de 200 de jetoane, (2) bucăți medii de 500 de jetoane (se suprapun 70 de jetoane), (3) bucăți mari unice. Pune aceleași 3 întrebări pentru fiecare strategie, marchează manual ce piesă să introduci și notează raționamentul pentru care strategie funcționează cel mai bine pentru acel document. Apoi adăugați cel puțin patru câmpuri de metadate și un „titlu de capitol” la fiecare piesă. Dacă documentul conține un tabel, convertiți un rând de tabel în text simplu în formatul „câmp:valoare”.
lista de verificare
- [ ] Pot spune că bucata este cea mai mică unitate de recuperare, iar dimensiunea este echilibrul focus-context.
- [ ] Știu de ce Suprapunerea previne pierderea limitei.
- [ ] Pot distinge între fragmentarea bazată pe paranteze, semantică și conștientă de structură.
- [ ] Pot adapta strategia pentru masă, cod și chat.
- [ ] Întăresc recuperarea adăugând metadate și titlul capitolului la fiecare piesă.