Nu när du har samlat in dina testdokument och frågor och utfört en dokumentanalys i förberedelsefasen är nästa fas segmentering. Att dela upp dokument i en samling segment av rätt storlek, som var och en innehåller semantiskt relevant innehåll, är en viktig faktor för att din RAG-implementering (Retrieval-Augmented Generation) ska lyckas. Att skicka hela dokument eller stora segment är dyrt, kan överbelasta modellens tokengränser och ger inte det bästa resultatet. Att skicka information till en stor språkmodell som inte är relevant för frågan kan leda till hallucinationer. Du måste optimera processen för att skicka relevant information och ta bort irrelevant information. Du gör den här optimeringen genom att använda effektiva segmenterings- och sökstrategier för att minimera falska positiva och falska negativa identifieringar och maximera sanna positiva och sanna negativa resultat.
Att skicka segment som är för små och inte innehåller tillräckligt med kontext för att hantera frågan leder också till dåliga resultat. Relevant kontext som finns i flera segment kanske inte registreras. Konsten implementerar effektiva segmenteringsmetoder för dina specifika dokumenttyper och deras strukturer och innehåll. Det finns olika segmenteringsmetoder att tänka på, var och en med sina egna kostnadskonsekvenser och effektivitet, beroende på typ och struktur för dokument som de tillämpas på.
Den här artikeln beskriver olika segmenteringsmetoder och undersöker hur strukturen i dina dokument kan påverka den segmenteringsmetod du väljer.
Segmentering av ekonomi
När du fastställer din övergripande segmenteringsstrategi måste du överväga din budget tillsammans med dina krav på kvalitet och dataflöde för dokument corpus. Det finns tekniska kostnader för design och implementering av varje unik segmenteringsimplementering och bearbetningskostnader per dokument som skiljer sig beroende på metoden. Om dina dokument har inbäddade eller länkade medier måste du överväga ekonomin för att bearbeta dessa element. För segmentering använder den här bearbetningen vanligtvis språkmodeller för att generera beskrivningar av mediet, och dessa beskrivningar segmenteras sedan. En alternativ metod med vissa medier är att skicka dem som är till en multimodal modell vid slutsatsdragningstid, men det tillvägagångssättet skulle inte påverka segmenteringsekonomin.
I det här avsnittet går vi igenom ekonomin för både segmenteringsbilder och den övergripande lösningen.
Bild som segmenterar ekonomi
Det finns en kostnad för att använda en språkmodell för att generera en beskrivning av en bild som sedan segmenteras. Till exempel debiterar molnbaserade tjänster som Azure OpenAI antingen en grundläggande avgift per transaktion eller på förbetalda etableringsbasis. Större bilder medför en större kostnad. Genom dokumentanalysen bör du bestämma vilka bilder som är värdefulla för segment och vilka bilder du ska ignorera. Därifrån måste du förstå antalet och storleken på bilderna i din lösning och du bör väga värdet för att segmentera bildbeskrivningarna mot kostnaden för att generera dessa beskrivningar.
Ett sätt att avgöra vilka bilder som ska bearbetas är att använda en tjänst som Azure AI Vision för att klassificera bilder, tagga bilder eller göra logotypidentifiering. Du kan sedan använda resultat- och konfidensindikatorerna för att avgöra om bilden lägger till meningsfullt, kontextuellt värde och ska bearbetas. Samtal till Azure AI Vision kan vara billigare än anrop till språkmodeller, så den här metoden kan leda till kostnadsbesparingar. Du måste experimentera för att avgöra vilka konfidensnivåer och vilka klassificeringar eller taggar som ger bäst resultat för dina data. Ett annat alternativ är att skapa en egen klassificerarmodell. Du måste ta hänsyn till kostnaderna för att bygga, vara värd för och underhålla din egen klassificerarmodell.
En annan kostnadsoptimering är cachelagring med hjälp av cache-aside-mönstret. Du kan generera en nyckel baserat på bildens hash. Som ett första steg kan du kontrollera om du har ett cachelagrat resultat från en tidigare körning eller ett tidigare bearbetat dokument. Om du gör det kan du använda det resultatet. Den metoden håller dig från kostnaderna för att anropa en klassificerare eller en språkmodell. Om det inte finns någon cache cache cachelagrade du resultatet när du anropar klassificeraren eller språkmodellen. Framtida anrop för den här avbildningen skulle använda cacheminnet.
Ett enkelt arbetsflöde som integrerar alla dessa kostnadsoptimeringsprocesser skulle vara:
- Kontrollera om bildbearbetningen cachelagrades. I så fall använder du de cachelagrade resultaten.
- Kör klassificeraren för att avgöra om du ska bearbeta avbildningen. Cachelagrade klassificeringsresultatet. Fortsätt bara om klassificeringslogik säger att du ska göra det.
- Generera beskrivningen för avbildningen. Cachelagrat resultatet.
Ekonomi för den övergripande lösningen
Följande är faktorer att tänka på när du tittar på kostnaden för din övergripande lösning:
- Antal unika segmentimplementeringar – Varje unik implementering har både en teknik- och underhållskostnad. Du måste ta hänsyn till antalet unika dokumenttyper i din corpus och kostnaden jämfört med kvalitetsavvägningarna för unika implementeringar för var och en.
- Kostnader per dokument för varje implementering – Vissa segmenteringsmetoder kan leda till segment av bättre kvalitet men har en högre ekonomisk och tidsmässig kostnad för att generera dessa segment. Om du till exempel använder en fördefinierad modell i Azure AI Document Intelligence har det sannolikt en högre kostnad per dokument än en ren textparsningsimplementering, men kan leda till bättre segment.
- Antal inledande dokument – Antalet inledande dokument som du behöver bearbeta för att starta lösningen.
- Antal inkrementella dokument – Antalet och antalet nya dokument som du måste bearbeta för kontinuerligt underhåll av systemet.
Inläsning och segmentering
Logiskt sett måste du först läsa in dokumentet i minnet i något format under segmenteringen. Segmenteringskoden fungerar sedan mot den minnesinterna representationen av dokumentet. Du kan välja att kombinera inläsningskoden med segmentering, eller så kan du separera inläsningen i en egen fas. Den metod du väljer bör till stor del baseras på arkitekturbegränsningar och dina inställningar. Det här avsnittet utforskar kort båda alternativen och ger dig sedan några allmänna rekommendationer.
Separat inläsning och segmentering
Det finns flera orsaker till att du kan välja att separera inläsnings- och segmenteringsfaserna. Du kanske vill kapsla in logik i inläsningskoden. Du kanske vill spara resultatet av inläsningskoden före segmentering, särskilt när du experimenterar med olika segmenteringspermutationer för att spara på bearbetningstid eller kostnad. Slutligen kanske du vill köra inläsnings- och segmenteringskoden i separata processer av arkitekturskäl, till exempel process bulkheading eller säkerhetssegmentering som innebär att PII tas bort.
Kapsla in logik i inläsningskoden
Du kan välja att kapsla in förbearbetningslogik i inläsningsfasen. Detta förenklar segmenteringskoden eftersom den inte behöver utföra någon förbearbetning. Förbearbetning kan vara så enkelt som att ta bort eller kommentera delar av dokumentet som du har fastställt att du vill ignorera i dokumentanalys, till exempel vattenstämplar, sidhuvuden och sidfötter eller så komplext som att formatera om dokumentet. Följande är några exempel på förbearbetning som du kan välja att kapsla in i inläsningsfasen:
- Ta bort eller kommentera objekt som du vill ignorera.
- Ersätt bildreferenser med bildbeskrivningar. Under den här fasen använder du en LLM för att generera en beskrivning av bilden och uppdatera dokumentet med den beskrivningen. Om du i dokumentanalysen har fastställt att det finns omgivande text som ger värdefull kontext till bilden skickar du den, tillsammans med bilden, till LLM.
- Ladda ned eller kopiera bilder till fillagring som Azure Data Lake som ska bearbetas separat från dokumenttexten. Om du i dokumentanalysen har fastställt att det finns omgivande text som ger värdefull kontext till bilden måste du lagra den här texten tillsammans med bilden i fillagringen.
- Formatera om tabeller så att de blir enklare att bearbeta.
Bevara resultatet av inläsningskoden
Det finns flera orsaker till att du kan välja att spara resultatet av inläsningskoden. En orsak är om du vill kunna inspektera dokumenten när de har lästs in och bearbetats i förväg, men innan segmenteringslogik körs. En annan orsak är att du kanske vill köra olika segmenteringslogik mot samma förbearbetade kod under utveckling eller i produktion. Om den inlästa koden sparas påskyndas den här processen.
Köra inläsnings- och segmenteringskod i separata processer
Genom att separera inläsnings- och segmenteringskoden i separata processer kan du köra flera segmentimplementeringar mot samma förbearbetade kod. Med den här separationen kan du också köra inläsnings- och segmenteringskod i olika beräkningsmiljöer och på olika maskinvara. Med den här designen kan du dessutom separat skala den beräkning som används för inläsning och segmentering.
Kombinera inläsning och segmentering
Att kombinera inläsnings- och segmenteringskoden är en enklare implementering i de flesta fall. Många av de åtgärder som du kan överväga att utföra i förbearbetning i en separat inläsningsfas kan utföras i segmenteringsfasen. I stället för att till exempel ersätta bild-URL:er med en beskrivning i inläsningsfasen kan segmenteringslogik göra anrop till LLM för att hämta en textbeskrivning och segmentera beskrivningen.
När du har dokumentformat som HTML som har taggar med referenser till bilder måste du se till att läsaren eller parsern som segmenteringskoden använder inte tar bort taggarna. Segmenteringskoden måste kunna identifiera bildreferenser.
Rekommendationer
Följande är några rekommendationer att tänka på när du avgör om du kombinerar eller separerar segmenteringslogik.
- Börja med att kombinera inläsnings- och segmenteringslogik. Separera dem när lösningen kräver det.
- Undvik att konvertera dokument till ett mellanliggande format om du väljer att separera processerna. Sådana åtgärder kan vara förlustfyllda.
Segmenteringsmetoder
Det här avsnittet ger dig en översikt över några vanliga segmenteringsmetoder. Den här listan är inte avsedd att vara fullständig, snarare några vanliga representativa metoder. Du kan använda flera metoder i implementeringen, till exempel att kombinera användningen av en stor språkmodell för att få en textrepresentation av en bild med många av de angivna metoderna.
Varje metod åtföljs av en sammanfattad beslutsmatris som markerar verktygen, tillhörande kostnader med mera. Kostnaderna för teknisk ansträngning och bearbetning är subjektiva och ingår för relativ jämförelse.
Meningsbaserad parsning
Den här enkla metoden delar upp textdokument i segment som består av fullständiga meningar. Fördelarna med den här metoden är att det är billigt att implementera, att det har låg bearbetningskostnad och att det kan tillämpas på alla textbaserade dokument som är skrivna i prosa eller fullständiga meningar. En utmaning med den här metoden är att varje segment kanske inte avbildar hela kontexten för en tanke eller mening. Ofta måste flera meningar tas tillsammans för att fånga den semantiska innebörden.
Verktyg: SpaCy mening tokenizer, LangChain rekursiv text splitter, NLTK mening tokenizer
Teknisk insats: Låg
Bearbetningskostnad: Låg
Användningsfall: Ostrukturerade dokument skrivna i prosa eller fullständiga meningar, och din dokumentgrupp innehåller ett oöverkomligt antal olika dokumenttyper för att skapa enskilda segmenteringsstrategier för
Exempel: Användargenererat innehåll som öppen feedback från undersökningar, foruminlägg, recensioner, e-postmeddelanden, en roman eller en uppsats
Parsning med fast storlek (med överlappning)
Den här metoden delar upp ett dokument i segment baserat på ett fast antal tecken eller token och tillåter viss överlappning av tecken mellan segment. Den här metoden har många av samma fördelar och nackdelar som meningsbaserad parsning. En fördel med den här metoden jämfört med meningsbaserad parsning är att det är möjligt att hämta segment med semantisk betydelse som sträcker sig över flera meningar.
Du måste välja segmentens fasta storlek och mängden överlappning. Eftersom resultaten skiljer sig åt för olika dokumenttyper är det bäst att använda ett verktyg som HuggingFace-segmentvisualiseraren för att utföra undersökande analys. Med verktyg som detta kan du visualisera hur dina dokument är segmenterade, med tanke på dina beslut. Det är bästa praxis att använda BERT-token över teckenantal när du använder parsning med fast storlek. BERT-token baseras på meningsfulla språkenheter, så de bevarar mer semantisk information än teckenantal.
Verktyg: Rekursiv textdelning i LangChain, Hugging Face chunk visualizer
Teknisk insats: Låg
Bearbetningskostnad: Låg
Användningsfall: Ostrukturerade dokument skrivna i prosa eller icke-prosa med fullständiga eller ofullständiga meningar. Din dokumentkorus innehåller ett oöverkomligt antal olika dokumenttyper för att skapa enskilda segmenteringsstrategier för
Exempel: Användargenererat innehåll som öppen feedback från undersökningar, foruminlägg, recensioner, e-postmeddelanden, personliga anteckningar eller forskningsanteckningar eller listor
Anpassad kod
Den här metoden parsar dokument med anpassad kod för att skapa segment. Den här metoden är mest framgångsrik för textbaserade dokument där strukturen antingen är känd eller kan härledas och en hög grad av kontroll över att skapa segment krävs. Du kan använda textparsningstekniker som reguljära uttryck för att skapa segment baserat på mönster i dokumentets struktur. Målet är att skapa segment som har liknande storlek i längd och segment som har distinkt innehåll. Många programmeringsspråk har stöd för reguljära uttryck och vissa har bibliotek eller paket som erbjuder mer eleganta funktioner för strängmanipulering.
Verktyg: Python (re, regex, BeautifulSoup, lxml, html5lib, marko), R (stringr, xml2), Julia (Gumbo.jl)
Teknisk insats: Medel
Bearbetningskostnad: Låg
Användningsfall: Halvstrukturerade dokument där struktur kan härledas
Exempel: Patentansökningar, forskningsdokument, försäkringar, skript och manus
Förstoring av stora språkmodeller
Stora språkmodeller kan användas för att skapa segment. Vanliga användningsfall är att använda en stor språkmodell, till exempel GPT-4, för att generera textrepresentationer av bilder eller sammanfattningar av tabeller som kan användas som segment. Förstoring av stora språkmodeller används med andra segmenteringsmetoder, till exempel anpassad kod.
Om du i bilddelen av dokumentanalysavsnittet har fastställt att texten före eller efter bilden krävs för att besvara några frågor måste du skicka den här ytterligare kontexten till den stora språkmodellen. Det är viktigt att experimentera för att avgöra om den här ytterligare kontexten förbättrar eller inte förbättrar lösningens prestanda.
Om segmenteringslogik delar upp bildbeskrivningen i flera segment kontrollerar du att du inkluderar bild-URL:en i varje segment. Om du inkluderar bild-URL:en i varje segment säkerställer du att metadata returneras för alla frågor som bilden hanterar, särskilt för scenarier där slutanvändaren kräver möjligheten att komma åt källbilden via den URL:en eller vill använda råa bilder under inferenstiden.
Verktyg: Azure OpenAI, OpenAI
Teknisk insats: Medel
Bearbetningskostnad: Hög
Användningsfall: Bilder, tabeller
Exempel: Generera textrepresentationer av tabeller och bilder, sammanfatta avskrifter från möten, tal, intervjuer eller podcaster
Analys av dokumentlayout
Dokumentlayoutanalysbibliotek och -tjänster kombinerar ocr-funktioner (optisk teckenigenkänning) med djupinlärningsmodeller för att extrahera både dokumentstrukturen och text. Strukturella element kan innehålla sidhuvuden, sidfötter, rubriker, avsnittsrubriker, tabeller och siffror. Målet är att ge bättre semantisk betydelse för innehåll som finns i dokument.
Dokumentlayoutanalysbibliotek och -tjänster exponerar en modell som representerar innehållet, både strukturellt och text, i dokumentet. Du måste fortfarande skriva kod som interagerar med modellen.
Kommentar
Azure AI Document Intelligence är en molnbaserad tjänst som kräver att du laddar upp dokumentet till tjänsten. Du måste se till att dina säkerhets- och efterlevnadsregler gör att du kan ladda upp dokument till tjänster som denna.
Verktyg: Dokumentanalysmodeller för Azure AI Document Intelligence, Donut, Layout Parser
Teknisk insats: Medel
Bearbetningskostnad: Medel
Användningsfall: Halvstrukturerade dokument
Exempel: Nyhetsartiklar, webbsidor, meritförteckningar
Fördefinierad modell
Det finns tjänster, till exempel Azure AI Document Intelligence, som erbjuder fördefinierade modeller som du kan dra nytta av för olika dokumenttyper. Vissa modeller tränas för specifika dokumenttyper, till exempel formuläret US Tax W-2, medan andra riktar in sig på en bredare genre av dokumenttyper, till exempel en faktura.
Verktyg: Fördefinierade modeller för Azure AI Document Intelligence, Power Automate Intelligent Document Processing, LayoutLMv3
Teknisk insats: Låg
Bearbetningskostnad: Medel/hög
Användningsfall: Strukturerade dokument där en fördefinierad modell finns
Specifika exempel: Fakturor, kvitton, sjukförsäkringskort, W-2-formulär
Anpassad modell
För mycket strukturerade dokument där det inte finns någon fördefinierad modell kan du behöva skapa en anpassad modell. Den här metoden kan vara effektiv för bilder eller dokument som är mycket strukturerade, vilket gör dem svåra att använda textparsningstekniker.
Verktyg: Anpassade modeller för Azure AI Document Intelligence, Tesseract
Teknisk insats: Hög
Bearbetningskostnad: Medel/hög
Användningsfall: Strukturerade dokument där en fördefinierad modell inte finns
Exempel: Scheman för fordonsreparation och underhåll, akademiska avskrifter och arkivhandlingar, tekniska manualer, driftprocedurer, underhållsriktlinjer
Dokumentstruktur
Dokumenten varierar i hur mycket struktur de har. Vissa dokument, till exempel myndighetsformulär, har en komplex och välkänd struktur, till exempel ett skattedokument från W-2 i USA. I andra änden av spektrumet finns ostrukturerade dokument som friformsanteckningar. Graden av struktur för en dokumenttyp är en bra utgångspunkt för att fastställa en effektiv segmenteringsmetod. Även om det inte finns några hårda och snabba regler ger det här avsnittet några riktlinjer att följa.
Figur 1. Segmenteringsmetod passar efter dokumentstruktur
Strukturerade dokument
Strukturerade dokument, som ibland kallas dokument med fast format, har definierade layouter. Data i dessa dokument finns på fasta platser. Till exempel hittas datumet eller kundens familjenamn på samma plats i varje dokument med samma fasta format. Exempel på dokument med fast format är skattedokumentet W-2 i USA.
Dokument med fast format kan vara skannade bilder av originaldokument som är handfyllda eller har komplexa layoutstrukturer, vilket gör dem svåra att bearbeta med en grundläggande textparsningsmetod. En vanlig metod för att bearbeta komplexa dokumentstrukturer är att använda maskininlärningsmodeller för att extrahera data och tillämpa semantisk betydelse på dessa data, där det är möjligt.
Exempel: W-2-formulär, Försäkringskort
Vanliga metoder: Fördefinierade modeller, anpassade modeller
Halvstrukturerade dokument
Halvstrukturerade dokument har inte något fast format eller schema, till exempel W-2-formuläret, men de ger konsekvens när det gäller format eller schema. Till exempel anges inte alla fakturor på samma sätt, men i allmänhet har de ett konsekvent schema. Du kan förvänta dig att en faktura har en invoice number
och någon form av bill to
och ship to
namn och adress, bland andra data. En webbsida kanske inte har schemakonsekvenser, men de har liknande strukturella element eller layoutelement, till exempel body
, title
, H1
och p
som kan användas för att lägga till semantisk betydelse i den omgivande texten.
Precis som strukturerade dokument är halvstrukturerade dokument som har komplexa layoutstrukturer svåra att bearbeta med textparsing. För dessa dokumenttyper är maskininlärningsmodeller en bra metod. Det finns fördefinierade modeller för vissa domäner som har konsekventa scheman som fakturor, kontrakt eller sjukförsäkring. Överväg att skapa anpassade modeller för komplexa strukturer där det inte finns någon fördefinierad modell.
Exempel: Fakturor, kvitton, webbsidor, markdown-filer
Vanliga metoder: Dokumentanalysmodeller
Härledd struktur
Vissa dokument har en struktur men skrivs inte i markering. För dessa dokument måste strukturen härledas. Ett bra exempel är följande eu-förordningsdokument.
Figur 2. EU-förordning som visar en ansenlig struktur
Eftersom du tydligt kan förstå dokumentets struktur och det inte finns några kända modeller för det kan du fastställa att du kan skriva anpassad kod. Ett dokumentformat som detta kanske inte motiverar arbetet med att skapa en anpassad modell, beroende på antalet olika dokument av den här typen som du arbetar med. Om din corpus till exempel är alla EU-förordningar eller amerikanska delstatslagar kan en anpassad modell vara en bra metod. Om du arbetar med ett enda dokument, som EU-förordningen i exemplet, kan anpassad kod vara mer kostnadseffektiv.
Exempel: Lagdokument, skript, tillverkningsspecifikationer
Vanliga metoder: Anpassad kod, anpassade modeller
Ostrukturerade dokument
En bra metod för dokument med liten eller ingen struktur är meningsbaserad eller fast storlek med överlappande metoder.
Exempel: Användargenererat innehåll som öppen feedback från undersökningar, foruminlägg eller recensioner, e-postmeddelanden och personliga anteckningar eller forskningsanteckningar
Vanliga metoder: Meningsbaserad eller gränsbaserad med överlappning
Experimenterande
Även om de bästa passar för var och en av segmenteringsmetoderna listas, kan i praktiken någon av metoderna vara lämplig för alla dokumenttyper. Till exempel kan meningsbaserad parsning vara lämplig för mycket strukturerade dokument, eller så kan en anpassad modell vara lämplig för ostrukturerade dokument. En del av optimeringen av DIN RAG-lösning är att experimentera med olika segmenteringsmetoder, med hänsyn till antalet resurser du har, den tekniska kompetensen för dina resurser och mängden dokument som du måste bearbeta. För att uppnå en optimal segmenteringsstrategi måste du observera fördelarna och kompromisserna med var och en av de metoder som du testar för att säkerställa att du väljer rätt metod för ditt användningsfall.