AI-oplossingen die organisaties helpen om efficiënter te werken, zijn niet meer weg te denken. Maar hoe kunnen we AI op een transparante en actuele manier inzetten binnen een uitgeverij van juridische teksten? Het doel: gebruikers ondersteunen bij hun dagelijkse werkzaamheden met behulp van een intelligente, contextbewuste chatbot. Door complexe informatie op een begrijpelijke manier te ontsluiten, wordt het mogelijk om binnen enkele seconden antwoord te verkrijgen op vragen waar normaal gesproken uren onderzoek aan voorafgaat.
Juridische kennis slim ontsluiten met RAG
Omdat dit project draait om juridische informatie, is explainability essentieel. Gebruikers moeten kunnen vertrouwen op de antwoorden én begrijpen waarop die antwoorden werden gebaseerd. Bijkomend veranderen wetten en regelgevingen continu. Het is dus cruciaal dat de chatbot steeds met de meest actuele informatie te werk gaat.
Op basis van deze vereisten lag de keuze voor Retrieval Augmented Generation (RAG) voor de hand. Deze aanpak combineert de kracht van generatieve AI met een dynamische databank. Waar een traditioneel Large Language Model (LLM) uitsluitend vertrouwt op getrainde data, haalt een RAG-model zijn kennis in real time op uit een betrouwbare en actuele databron.
Lemon positioneert zich niet als innovatiebureau, maar als organisatie die zich richt op het toepassen van reeds bestaande en uitgebreid geteste technologieën. In deze context is LangChain de meest geschikte oplossing op vlak van RAG-georiënteerde chatbots. Dit project draagt bovendien bij aan de standaardisatie van LLM-applicaties in het bredere veld. Binnen LangChain wordt een RAG-chatbot gedefinieerd als een AI-chatbot met een geïntegreerde Retrieval-Tool.
De gebruikersvraag wordt in een natuurlijke taal gesteld, terwijl de databron een strikt gestructureerde vraag vereist.
Een dergelijk systeem bestaat uit twee te optimaliseren componenten: retrieval en generatie. De eerste uitdaging ligt in de retrieval-fase. De gebruikersvraag wordt in een natuurlijke taal gesteld, terwijl de databron een strikt gestructureerde vraag vereist. Deze discrepantie kan overbrugd worden door middel van vector search.
Vector Search
Vector search verschuift de centrale vraag "Hoe formuleer ik een natuurlijke taal-query?" naar "Wanneer vertonen twee tekstfragmenten gelijkenis?". Door deze gelijkenis kwantitatief te maken, kan iedere brontekst worden gerangschikt op relevantie ten opzichte van de vraag.
Hoewel klassieke methoden zoals ROUGE- en BLEU-scores bestaan, wordt in dit project gefocust op text embedding. Een text-embedder converteert tekst naar numerieke vectoren. Bijgevolg kunnen we de afstand tussen twee vectoren berekenen, en sterker nog, de score normaliseren om iedere vector met een andere te kunnen vergelijken. De effectiviteit van de text-embedder ligt in de training om vectoren te genereren die dicht bij elkaar liggen voor semantisch gelijkwaardige teksten.
De database-technologie die hiervoor wordt gebruikt is Mongo Atlas. Deze storage-provider biedt namelijk inherente ondersteuning voor vector search-indices. Deze kent zoekmethode uiteraard meerdere parameters ter optimalisatie.
Wanneer is een AI-chatbot bruikbaar?
Dat brengt ons bij de volgende uitdaging: "Wanneer is het systeem goed genoeg?". Hierbij maken we gebruik van de classificatietermen recall en precisie. De definitie blijft inherent gelijk in ieder subsysteem, maar heeft een contextafhankelijke betekenis:
- Recall: Van alle true-positives, hoeveel elementen zijn gemarkeerd als positive?
- Precisie: Van alle als positive gemarkeerde elementen, hoeveel daarvan zijn daadwerkelijk true-positives?
Voor de retrieval-fase in deze case werden recall en precisie als volgt gedefinieerd:
- Recall → context-recall: Zijn alle essentiële tekstfragmenten opgehaald?
- Precisie → context-precision: Hoeveel irrelevante informatie is meegekomen?
Aangezien in dit project met exacte tekst wordt gewerkt, kan per karakter gecontroleerd worden of een opgehaald fragment relevant is. Om dit te bewerkstelligen, is de exacte brontekst nodig als referentie in onze testbench-dataset.
Door kleine fragmenten op te halen en een techniek toe te passen die we neighborhood-retrieval noemen (het ophalen van fragmenten rondom het geïdentificeerde stuk), werd een recall van 80% bij een precisie van 40% bereikt. Er werd bewust geoptimaliseerd voor recall, omdat interne analyses aantoonden dat de chatbot zelf de capaciteit heeft om irrelevante informatie te filteren.
Voor de generatie-fase werden de metrics als volgt gedefinieerd:
- Recall → Answer-correctness: Hoeveel stellingen uit het voorbeeldantwoord komen terug in het gegenereerde antwoord?
- Precisie → Answer-faithfulness: Hoeveel stellingen uit het gegenereerde antwoord komen overeen met de opgehaalde context?
De vergelijking van deze gegenereerde teksten vereist een meer gesofisticeerde aanpak. Hierbij worden teksten op zinsniveau gesplitst. Vervolgens wordt voor iedere stelling een vector gegenereerd. Wanneer de vectoren van twee stellingen dicht genoeg bij elkaar liggen, worden ze als semantisch gelijk beschouwd.
Uit de testing bleek dat de basis-chatbot van nature al zeer faithful is met 95%. Hiervoor was enkel minimale prompt engineering nodig. Daarnaast is de correctheid van een antwoord sterk gekoppeld aan de prestaties van het retrieval-systeem. In voorbeelden uit de dataset waarbij we uitstekend scoorden op retrieval, presteerde onze chatbot ook goed op correctheid. Dit onderstreept dat een goed retrieval-systeem 80% van het werk voltooit.
Verbeteringen volgen
De engineering-methodologie vereist dat alle beslissingen data gedreven zijn. Om onze experimenten op te volgen en te vergelijken, werd er voor LangSmith gekozen. LangSmith, een hosted service van het LangChain-team, omvat drie aspecten:
1. Evaluatie
2. Prompt Engineering
3. Observability
Aanvankelijk gebruikten we LangSmith vanwege de uitgebreide evaluatiemogelijkheden met heldere grafieken en eenvoudige side-by-side vergelijkingen. Eveneens bleek dat de Prompt-playground zeer nuttig is om snel verschillende prompts te testen en de impact van chatbotparameters te analyseren alvorens grootschalige experimenten uit te voeren. Beide functies hebben zo aanzienlijk bijgedragen aan de verbetering van de antwoordkwaliteit.
Het observability-platform levert op zijn beurt waardevolle inzichten in de systeemperformance, waardoor bottlenecks makkelijk worden geïdentificeerd en easy wins worden gerealiseerd. Daarnaast kan het platform ook als een handige debug-tool dienen, waardoor *console.log* in de code minder gebruikt moet worden. Echter werd, omwille van de kostenefficiëntie, ervoor gekozen dit niet in een productieomgeving toe te passen.
Na de experimentele optimalisatie, uitgevoerd op een kleine maar representatieve subset van de volledige databron, volgde de indexatie van de volledige dataset: downloaden, splitsen, embedden en opslaan. De laatstgenoemde stap bleek een significant probleem.
Optimaliseer wat essentieel is, en maak de rest mogelijk.
De databron bevatte een gigantische hoeveelheid informatie; minstens 10.000 boeken met 200-300 pagina's, wat goed is voor ongeveer 500 miljoen vectoren. Het opslaan hiervan zou te hoge kosten met zich meebrengen. Bovendien betrof dit slechts één van de drie brontypes. Om het project schaalbaar te houden, bleef de vector search behouden voor centrale brontypes en werd voor minder kritieke bronnen overgeschakeld op key-word search.
De implementatie van Mongo Atlas' Lucene search-index resulteerde in een solide en kostenefficiënte oplossing. Bijkomend maakt deze implementatie het eveneens mogelijk om de vector search met de klassieke key-word search te vergelijken. Experimentele data tonen dat de key-word search een aanzienlijk hogere precisie heeft, maar helaas ten koste gaat van de recall.
Slim, efficiënt, transparant en actueel
Het resultaat: een chatbot die juridische kennis toegankelijk maakt, correct communiceert, en ontworpen is met de zorgvuldigheid die in de juridische wereld past. Dankzij het optimalisatietraject beschikken we nu over een performant systeem, zelfs ondanks de enorme omvang van de betrokken informatiebronnen. RAG is met andere woorden een krachtige bouwsteen voor het ontwikkelen van explainable AI-oplossingen in kennisintensieve sectoren.
Met iedere nieuwe implementatie verfijnen we onze aanpak, en helpen we organisaties om complexe informatie toegankelijk te maken op een manier die echt werkt.

.avif)

.avif)

.avif)