Toen Google-wetenschappers voor het eerst het concept van de “transformer” introduceerden (https://arxiv.org/pdf/1706.03762.pdf), kreeg het idee veel aandacht binnen de Natural Language Processing (NLP)-gemeenschap. Het opende een nieuwe richting voor onderzoekers om neurale netwerkmodellen te ontwikkelen die toepassingen hebben voor het begrijpen van natuurlijke taal.

Niet lang daarna populariseerde OpenAI de Generative Pre-trained Transformers (GPT) en pionierde het met Grote Taalmodellen (LLMs) via ChatGPT. De conversatie- prestaties van deze modellen gaven mensen het idee dat AI snel menselijke intelligentie benaderde en dus kon worden getraind om een verscheidenheid aan menselijke taken uit te voeren.

Hoe “menselijk” deze LLM’s ook mogen lijken, ze zijn nog verre van het echt zien, interpreteren en begrijpen van de wereld zoals mensen dat doen. Deze modellen moeten worden beschouwd als “probabilistische conversatiesimulatoren” in plaats van echte analytische systemen. Het onderliggende concept achter deze modellen is patroonherkenning en semantische correlatie, niet echte logica en redenering.

Chatwize wordt aangedreven door de LLM’s van OpenAI. Het maakt gebruik van Retrieval Augmented Generation (RAG)-technologie om zijn antwoorden af te stemmen op de gegevens die jij uploadt als referentiecontext.

Wat is Retrieval Augmented Generation (RAG)?

Grote Taalmodellen (LLMs) worden getraind op enorme hoeveelheden tekstgegevens. Op basis van deze gegevens identificeert het model patronen en probeert het deze te repliceren tijdens de eigen tekstgeneratie. Bij het produceren van een output begint een LLM met een door de gebruiker geschreven prompt en wijst het algoritmisch waarschijnlijkheden toe aan “tokens” of woorden die waarschijnlijk het prompt opvolgen op basis van patronen die het heeft waargenomen in de oorspronkelijke trainingsgegevens. Daarom noemt OpenAI sommige van zijn API-eindpunten “Chat Completions” - het model probeert de invoer van de gebruiker aan te vullen.

Voor een beter begrip van wat “tokens” zijn in de context van LLM’s, raadpleeg het volgende artikel uit de documentatie van OpenAI: https://help.openai.com/en/articles/4936856-what-are-tokens-and-how-to-count-them

Maar patronen impliceren niet noodzakelijk waarheid, consistentie of logische naleving, net zoals correlatie geen causaliteit impliceert. Dit is de reden waarom LLM’s vaak “hallucineren” bij het genereren van een antwoord. Retrieval Augmented Generation (RAG) probeert dit probleem op te lossen door de eerder genoemde waarschijnlijkheden te “sturen” tijdens tekstgeneratie via extra context die in de prompt wordt geïnjecteerd.

Om dit verder te illustreren, nemen we het volgende voorbeeld:

Wanneer je een vraag stelt aan ChatGPT, ziet een typische vraag er als volgt uit:

Wat is Chatwize?

Dit is een vraag die volledig afhankelijk is van de semantische patronen binnen de oorspronkelijke trainingsgegevens van het model om een antwoord te genereren. Er is geen garantie dat het antwoord accuraat of betrouwbaar zal zijn.

Maar wat als de prompt verandert naar:

Beantwoord de onderstaande vraag met behulp van de volgende verstrekte context:

Chatwize is een krachtig no-code/low-code framework waarmee je multi-agent chatbots kunt bouwen met functie-aanroeptaken met behulp van je eigen gegevens. Het is ontworpen om gebruiksvriendelijk en veelzijdig te zijn, met aanpassingsopties en integratie met populaire platforms.

Wat is Chatwize?

Nu heeft het model veel meer om mee te werken. De semantische patronen die in de prompt zelf zijn geïdentificeerd, kunnen het model nauwkeurig begeleiden bij het beantwoorden van de vraag van de gebruiker. Deze “extra context” stuurt het model aan om nieuwe tokens te genereren op een semantisch vergelijkbare manier.

RAG is het proces van het “verrijken” van de invoervraag met extra context, zodat het model vragen beantwoordt op basis van de verstrekte informatie. Het wijzigt of verfijnt het fundamentele LLM zelf niet, maar injecteert eerder de oorspronkelijke prompt van de gebruiker met elders opgeslagen gegevens.

Je zou nu kunnen vragen: waarom zou ik niet gewoon mijn volledige bibliotheek van 15 miljoen woorden aan blogartikelen direct in de LLM gooien als referentiecontext telkens wanneer ik een vraag stel?

Wel, als de LLM groot genoeg is om zoveel tokens (woorden) tegelijk als invoer te verwerken, dan is het zeker haalbaar, mits je de kosten kunt betalen.

Echter, wij gebruiken OpenAI’s grote taalmodellen (LLMs), die allemaal tokenlimieten hebben. De tokenlimiet bepaalt hoeveel “effectieve inhoud” als context kan worden gebruikt. Voor de chat van Chatwize kunnen we ongeveer 10.000 woorden kwijt met het gpt-3.5-16k model.

De chatbot werkt bovenop veel documenten die samen meestal veel meer dan 10.000 woorden bevatten. Dit betekent dat we niet alles in de tokenlimiet kunnen passen.

Om dit probleem te omzeilen, splitsen we lange documenten in segmenten, berekenen we embeddings voor elk segment en slaan we ze afzonderlijk op in een vector database. Embeddings kunnen worden beschouwd als wiskundige representaties van de betekenis achter een tekstfragment. Het is als een “universele menselijke taal” van machines, gerepresenteerd in wiskundige vectoren. Natuurlijke taaluitingen met een semantische gelijkenis zullen “fysiek” dichter bij elkaar liggen in de embed-vectorruimte. Hier is een goed artikel dat “tekstembeddings” in meer detail uitlegt: https://stackoverflow.blog/2023/11/09/an-intuitive-introduction-to-text-embeddings/

Elke keer dat je een AI-query invoert, doorzoeken we de database algoritmisch naar relevante segmenten op basis van embedding-afstand. Dit gebeurt volledig onafhankelijk van de LLM-query zelf. De LLM neemt niet actief deel aan deze “segmentselectie”-stap bij het beslissen welke informatie in de context moet worden opgenomen.

Vervolgens worden de meest relevante segmenten als context toegevoegd en in de oorspronkelijke vraag van de gebruiker geïnjecteerd. Dit is de basis van Retrieval Augmented Generation (RAG). Onthoud ons eerdere voorbeeld? Wanneer de gebruiker vraagt:

Wat is Chatwize?

is het meest relevante segment dat waarschijnlijk uit onze vector database wordt gehaald:

Chatwize is een krachtig no-code/low-code framework waarmee je multi-agent chatbots kunt bouwen met functie-aanroeptaken
met behulp van je eigen gegevens. Het is ontworpen om gebruiksvriendelijk en veelzijdig te zijn, met aanpassingsopties en
integratie met populaire platforms.

en de chatbot zal nu het juiste antwoord geven.

Hier is een goede visuele uitleg van AWS over de RAG-stappen:

https://docs.aws.amazon.com/sagemaker/latest/dg/jumpstart-foundation-models-customize-rag.html

Wil je de prestaties van je chatbot verbeteren? Bekijk dan onze Best practices voor het voorbereiden van trainingsgegevens.