
AI en automatisering
“Je past effectief en verantwoord AI- en automatiseringstechnieken toe in diverse marketingcontexten, met een duidelijk begrip van zowel de technische mogelijkheden als de ethische implicaties, en past deze kennis toe in realistische digitale marketingprojecten.”
Reflectie
Dingen lopen niet altijd zoals je had gepland/verwacht. Dit semester is daar een uitstekend voorbeeld van. Hoewel ik deze minor heb gekozen om meer te leren over (digital) marketing, heb ik uiteindelijk heel veel geleerd over taalmodellen, hoe je deze lokaal kan draaien en misschien nog wel het belangrijkste, hoe je een beetje op de hoogte kan blijven van de laatste ontwikkelingen.
Terugkijkend op wat ik heb gedaan en geleerd denk ik dat ik me eerder had moeten verdiepen in prompting. Dit is, op het model na, de basis van alles wat je doet. Alles valt of staat met een goede prompt. Daarnaast denk ik dat het ook beter was geweest als ik meer had gelezen over AI. Ik zit in meerdere Discord servers voor open source applicaties die ik gebruik zoals Flowise, Ollama en ComfyUI, maar het gross van de discussies die daar gevoerd worden gaan niet diep genoeg dat ik er iets van kan leren. Het boek Leven en leren met AI is een mooi voorbeeld omdat het je ook echt aan het denken zet. Ik wil niet alleen dingen leren, maar ook de ethische implicaties en risico’s van AI gebruik beter begrijpen. Een onderwerp dat nog brij onderbelicht is naar mijn mening.
Na dit semester wil ik me blijven verdiepen in AI en workshops geven om de kennis die ik op doe te delen. Dit is de toekomst, en ik ben van plan om zo lang als ik kan aan de frontlinie van de ontwikkeling te blijven staan.
Waar zie ik AI in de toekomst
De ontwikkeling van AI gaat razendsnel, maar waar gaat het naar toe?
Eind 2022 bracht OpenAI hun GPT-3.5 model uit. Toen konden we er met zijn allen nog om lachen. De antwoorden waren doorgaans slecht, het zat vol hallucinaties en het lag er om de haverklap uit. Nu, iets meer dan 2 jaar later, is het niet meer weg te denken uit de IT wereld. Er zijn honderden generatieve platformen die hun modellen aanbieden. Niet alleen tekst generatie, maar ook afbeeldingen, tekst to speech en sinds kort zie je ook de opkomst van video generatie.
Ondertussen kunnen modellen met een fractie van de grootte van GPT-3.5 (175 miljard), gegeven dat ze toegang hebben tot het internet, antwoorden genereren die akelig in de buurt komen van van wat GPT 4o kan. Dit omdat er helemaal niet zo veel parameters in een model hoeven te zitten om goede zinnen te genereren. De voornaamste winst van een groter model is de kennis. Grotere modellen hebben meer parameters, en dus ook meer informatie die ze kunnen gebruiken voor het genereren van antwoorden. Maar met toegang tot het internet, heb je die kennis helemaal niet meer nodig. Zo kan je bijvoorbeeld wegkomen met een klein model als Mistral (7 miljard parameters). Dit model is op veel computers goed te draaien.
Dit is dan ook een van mijn verwachtingen. Ik denk dat modellen veel kleiner zullen worden, met de focus op woordenschat en talen. De kennis zal, door middel van tool calling, opgehaald worden van externe bronnen. Niet alleen lokaal, maar ook in productie. Deze tool calling zal ook in een soort baby AGI vorm ingezet worden. Hoewel ik verwacht dat AGI er nog lang niet is, en betwijfel of het überhaupt wel mogelijk is met de huidige manier waarop LLMs werken, denk ik dat we LLMs wel vaker in gaan zetten voor het autonoom voltooien van bepaalde taken. Het wordt een soort persoonlijke assistent. Een Alexa on steroids die je gaat helpen bij je dagelijkse taken en volledig integreert in al je apparaten en accounts.
Deze ontwikkelingen zullen bepaalde banen weg gaan nemen. Het nieuwste abonnement van $200 per maand van OpenAI voor onbeperkt toegang klinkt voor velen misschien absurd, maar is best logisch. Het abonnement is niet gericht op consumenten, maar bedrijven. Een medewerker kost veel meer per maand, en dat is waarschijnlijk ook de insteek van OpenAI geweest. Hun model is zo goed dat je een medewerker (deels) kan vervangen voor een abonnement bij hun. Dat banen plaats moeten maken voor AI is logisch. Ik verwacht dat er ook een hoop nieuwe banen bij zullen komen waarin de mens een monitorende rol heeft. Uiteindelijk zal ook dat waarschijnlijk verdwijnen. De mens hoeft dan niet meer te werken omdat alles volledig geautomatiseerd gebeurt. Ik verwacht dat we dan enkel “werken” als vorm van dagbesteding om nut aan het leven te geven.
Belang benchmarks maken
Er zijn een hoop benchmarks online, maar toch is het belangrijk om er zelf een te maken als je AI in wil zetten in een applicatie
De meeste modellen die op het internet staan hebben ook een mooi tabel er bij staan met de scores op verschillende benchmarks. Dit om een idee te geven van de prestaties van een model. Op zich best handig, maar die benchmarks zeggen nog niks over jouw use case.
Daarom is het belangrijk om zelf een benchmark te maken. Hoe je dit doet is natuurlijk geheel afhankelijk van het doel. Als er tekst geclassificeerd moet worden kan je dit bijvoorbeeld heel makkelijk toetsen door het gewenste resultaat vooraf ergens vast te leggen en de tests met code geautomatiseerd uit te voeren. Maar stel dat je tekst wil genereren. Dan kan dit een stuk moeilijker zijn.
Wel is het belangrijk om een aantal mogelijke scenario’s uit te werken en verschillende modellen hierop te testen. Zo kan je een model kiezen die niet alleen op papier goed scoort (de standaard benchmarks), maar waarvan je zelf hebt bewezen door middel van tests, dat die doet wat je wil.
AI prompting document
Om het overzichtelijker te krijgen hoe je een goede prompt schrijft heb ik dit vastgelegd in een document.
In het document staat zowel hoe je een goede prompt schrijft voor LLMs, en afbeelding generatie. Hoewel het document nog niet af is, en het altijd wel uitgebreid kan worden, denk ik dat het wel een mooi begin is. Zo gebruik ik het wel eens ter controle, en kan ik het document doorsturen als mensen vragen hebben over prompting.
Flowise framework
Zonder plan iets maken is moeilijk. Daarom heb ik een framework voor mezelf opgezet om het maken van een flow in Flowise makkelijker te maken.
Waarom een framework?
Ik merk dat ik zelf elke keer weer zoekende ben naar hoe ik, op de juiste manier, een flow in Flowise op moet zetten. Vanuit dat probleem vroeg ik mij af of er geen manieren zijn om het maken van een flow in Flowise makkelijker te maken.
Zodoende kwam ik op het idee om een framework op te zetten. Dit moet een stappenplan worden waarmee je alles benodigdheden kan documenteren, en onderbouwd uit kan werken in een flow. Hierbij wordt niet alleen gekeken naar de experts of andere personen die gedigitaliseerd worden in de vorm van een agent/instructie naar een taalmodel, maar ook naar de system prompts die daar voor nodig zijn om dit juist te doen.
Het stappenplan
1. De trigger
Een flow zal in principe altijd om een vorm van input vragen. De input kan van alles zijn, daarom is het belangrijk om dit op voorhand vast te leggen.
- Leg het doel vast: Wat is het einddoel van de flow? Moet er iets uitgelegd worden, moet er bepaalde data uitrollen? Waar werk je naar toe?
- Definieer de input: Waarmee wordt de flow gestart? Is dat een excel bestand, een stuk tekst (prompt) of een afbeelding?
- Leg limieten vast: Hoe lang mag de tekst zijn die ingevoerd wordt? Mogen gebruikers 4k afbeeldingen uploaden? Door limieten te stellen kan je de flow gerichter uitwerken.
- Denk hierbij ook aan het format waarin de data wordt aangeleverd.
2. Stakeholders
Een flow digitaliseert dat wat normaalgesproken door mensen en/of systemen wordt gedaan. Daarom is het verstandig om deze vooraf goed in kaart te brengen.
- Lijst van stakeholders: Schrijf alle personen/systemen op in lijstvorm die normaalgesproken betrokken zijn bij dit proces. Je kan ze onderverdelen in subgroepen:
- Meninggevers: Denk hierbij aan een advies, (voor)oordeel of evaluatie
- Keuzemakers: Keuzemakers hakken knopen door aan de hand van informatie die ze toegereikt wordt. Zij bepalen welke route genomen moet worden.
- Makers: Makers hebben vaak een uitvoerende rol.
- Denkers: Denkers bedenken ideeën.
Note: Het kan zijn dat één persoon onder meerdere subgroepen valt. Noteer diegene dan ook onder meerdere subgroepen voor de vervolgstappen.
3. Digitaliseer stakeholders
Het is nu tijd om de stakeholders te digitaliseren. Voor deze stap kan het handig zijn om een tool als Figma Jamboard of Lucidchart te gebruiken voor de visualisatie er van.
- Definieer output: Het is duidelijk welke stakeholders er zijn. Bedenk nu per stakeholder wat hun output moet zijn, bijvoorbeeld advies of een lijst aan ideeën. Noteer ook in welk format, zoals JSON, een afbeelding, platte tekst.
- Plan interactie: Stakeholders kunnen afhankelijk zijn van elkaar. Leg daarom vast hoe deze interactie plaats gaat vinden.
- Sequentieel: De stakeholder krijgt data van een vorige stakeholder, doet daar iets mee en geeft het weer door aan de volgende stakeholder.
- Samenwerkend: Er wordt actief informatie uitgewisseld en geïtereerd door twee of meer stakeholders.
- Iteratief: De stakeholders volgen elkaar net zo lang op tot dat er een wenselijk resultaat uitkomt.
4. Leg databronnen vast
Je weet nu welke stakeholders gedigitaliseerd moeten worden. Maar deze stakeholders kunnen afhankelijk zijn van bepaalde data om goed te functioneren. Daarom moet ook dit vastgelegd worden. Leg niet alleen de data vast die nodig is, maar ook welke stakeholder deze data nodig heeft.
- Databronnen: Maak een lijst van alle databronnen. Denk hierbij aan de volgende bronnen:
- Documenten: PDF, Word, Excel, platte tekstbestanden, etc
- API’s: Voor het ophalen van externe data
- Tools: Welke tools er nodig zijn. Bijvoorbeeld wanneer er code getest moet worden, zoekopdrachten uitgevoerd of berekeningen gedaan moeten worden.
- Chatgeschiedenis: Als er doorgevraagd moet kunnen worden, of als er data uit vorige chats gebruikt moeten kunnen worden, moeten chats opgeslagen worden. Neem dit mee als databron.
- Backup plan: Denk goed na over wat je doet wanneer de data niet beschikbaar is. Stopt de flow, of ga je door zonder data?
5. Schrijf system prompts
Er zijn verschillende manieren om een prompt te schrijven.
- Kies je prompt type: Afhankelijk van de taak van de stakeholders zal het ene prompt type beter presteren dan de andere. De onderstaande prompt types kunnen gecombineerd worden.
- Shot prompting:
- Zero-shot: Een taak zonder voorbeeld. De kennis komt puur van de kennis opgedaan tijdens het trainen van het model. Voorbeeld:
Vertaal van Engels naar Nederlands… - Few-shot: Een taak met enkele voorbeelden. voorbeeld:
Vertaal van Engels naar Nederlands.
Hello -> Hallo
Goodbye -> Tot ziens
Vertaal nu deze tekst… - One-shot: Zelfde als few-shot prompting, maar dan met een enkel voorbeeld.
- Zero-shot: Een taak zonder voorbeeld. De kennis komt puur van de kennis opgedaan tijdens het trainen van het model. Voorbeeld:
- Instructies:
- Role-based: Je vraagt het model om een rollenspel te spelen waarbij het model de rol van een expert, adviseur of bijvoorbeeld leraar aanneemt. Voorbeeld:
Je bent een diëtist. Wat zijn gezonde recepten voor een vegetariër? - Creativiteit: Prompts hebben invloed op de creativiteit. Voorbeelden:
Feitelijk: Geef een feitelijke omschrijving van de winter.
Creatief: Schrijf een gedicht over de winter. - Vooroordeel bewust: Vraag het model om een onbevooroordeeld antwoord te geven, of bepaalde perspectieven aan te nemen. Voorbeeld:
Leg de voor- en nadelen van groene stroom uit vanuit een klimaat en economisch perspectief. - Persona: Vraag het model om een persona/identiteit aan te nemen. Voorbeeld:
Je bent een geschiedenis professor, gespecialiseerd in oude beschavingen. Leg de val van het Romeinse rijk uit. - Ethische overwegingen: Je prompt het model om ethische overwegingen mee te nemen tijdens het genereren van een antwoord. Voorbeeld:
Wat zijn de ethische implicaties van AI gebruik in de gezondheidszorg? - Hypothese: Je vraagt het model om, vanuit een hypothese, je vraag te beantwoorden. Voorbeeld:
Wat zou er gebeuren als het internet morgen ineens verdwijnt? - Dialoog: Je laat het model reageren alsof er al een lopend dialoog is. Voorbeeld:
Je bent mijn virtuele assistent. Laten we de plannen voor mijn vakantie bespreken. - Empathie: Laat het model empathisch reageren, bijvoorbeeld bij een gevoelig onderwerp. Voorbeeld:
Geef advies aan iemand die veel stress ervaart omdat zijn eindexamens er aan komen.
- Role-based: Je vraagt het model om een rollenspel te spelen waarbij het model de rol van een expert, adviseur of bijvoorbeeld leraar aanneemt. Voorbeeld:
- Reflecterend:
- Chain-of-thought: Spoor het model aan om stap voor stap het gedachtenproces uit te leggen om een taak te voltooien. Voorbeeld:
Los dit probleem stap voor stap op: Wat is 5 + 3 × 2? - Zelfkritiek: Laat het model reflecteren op zijn eigen werk. Voorbeeld:
Herschrijf de paragraaf die je zojuist hebt geschreven en laat het professioneler klinken.
- Chain-of-thought: Spoor het model aan om stap voor stap het gedachtenproces uit te leggen om een taak te voltooien. Voorbeeld:
- Uitvoer bepalend:
- Definieer uitvoer: Leg vast in welk format je de uitvoer wil hebben, zoals een lijst, JSON of anders. Voorbeeld:
Vat de tekst samen in bullet points. - Regeneratief: Een prompt gemaakt om met meerdere antwoorden te komen voor het zelfde probleem. Voorbeeld:
Maak een lijst van 10 manieren om een product te adverteren. - Iteratief: Vraag een model om iets te maken, en het meteen daarna zelf te verbeteren. Voorbeeld:
Schrijf een verhaal over een kat die in een boom klinkt. Verbeter daarna het verhaal door het interessanter en beschrijvender te maken. - Template: Geef duidelijk in je prompt aan in welk format je het antwoord wilt hebben. Voorbeeld: De structuur van je antwoord moet als volgt zijn:
- Introductie
- Body (punt 1)
- Body (punt 2)
- Conclusie
- Verbieden: Je geeft instructies aan het model wat het niet mag doen. Voorbeeld:
Schrijf een product omschrijving zonder de naam van het product te noemen. - Verhelderend: Het model stelt eerst vragen terug voor dat de vraag beantwoord wordt. Voorbeeld:
Voor dat je een antwoord geeft, heb je nog vragen over dit onderwerp? - Instructie: Je geeft duidelijke instructies voor hoe de taak voltooid moet worden. Voorbeeld:
Schrijf een verslag van 300 woorden over de invloed van klimaatverandering op het weer. - Informatie extraheren: Laat het model bepaalde informatie extraheren uit een stuk tekst, afbeelding of ander medium. voorbeeld:
Haal alle bedrijfsnamen uit de volgende tekst: … - Samenvattend: Laat een stuk tekst samenvatten. Voorbeeld:
Vat de volgende tekst samen in drie zinnen: … - Taak: Het model krijgt een duidelijke taak en verwachte uitvoer. Voorbeeld:
Maak een to-do lijst om brownies te maken.
- Definieer uitvoer: Leg vast in welk format je de uitvoer wil hebben, zoals een lijst, JSON of anders. Voorbeeld:
- Shot prompting:
- Schrijf een goede prompt: Een goede (system) prompt bestaat uit de volgende punten:
- Helder: Je geeft weinig ruimte voor eigen interpretatie. Het is dus niet vaag, of te complex zodat het verwarrend kan zijn.
- Context: Bevat de nodige achtergrondinformatie en details om de vraag correct te beantwoorden. Dit is zeker van toepassing bij taken die specifieke kennis vereisen.
- Beknopt: Het bevat alle informatie zonder te lang te zijn, of in te veel detail te treden.
- Specifiek: Je bent specifiek over de uitvoer die je verwacht, en indien van toepassing in welk format.
- Flexibel: Hoewel een prompt specifiek moet zijn, is enige speelruimte wenselijk bij system prompts zodat het diverse inputs en andere variaties aankan.
6. In Flowise zetten
Het is nu tijd om alles in Flowise te zetten.
- Model kiezen: Er zijn veel modellen om uit te kiezen. Belangrijk tijdens het kiezen van een model is om te kijken naar de volgende dingen:
- Model grootte: Hoe groter een model is, hoe meer kennis deze doorgaans heeft. De vraag is alleen hoeveel kennis je nodig hebt. Kies een model met een grootte die aansluit bij het doel.
- Context window: De context window bepaalt hoeveel “geheugen” een model heeft. Zorg er voor dat deze groot genoeg is voor je doeleinden.
- Talen: Hoewel modellen vaak meer talen begrijpen dan ze aangeven, is het antwoorden in een taal toch iets anders. Controleer daarom altijd of het model dat je wil gebruiken de uitvoertaal ondersteund.
- Tool calling: Heb je stakeholders die samenwerkend of iteratief werken, of moet je tools aan kunnen roepen? Dan heb je een model nodig die dit ondersteunt.
- Bouwen in Flowise: Kijk voor het uitwerken van de flow naar de documentatie van Flowise en tutorials op het internet.
7. Tests maken
Wanneer alles in Flowise staat is het belangrijk om de flow te valideren. Dit doe je door te testen.
- Testscenario’s uitwerken: Denk bij het maken van testscenario’s aan de volgende scenario’s:
- Baseline: Test altijd met normale data, dit zet een basislijn voor hoe goed de flow en het model presteren om de resultaten van de andere tests te valideren.
- Vooroordeel: Taalmodellen zijn, net als mensen, bevooroordeeld. Dit kan je testen door demografische gegevens mee te geven in je prompt.
- Specifieke kennis: Kloppen de antwoorden nog wanneer je een vraag stelt die hele specifieke kennis vereist?
- Overgevoeligheid: Reageert het model buiten proporties zwaar op bepaalde woorden/zinnen? Bijvoorbeeld dat “perfect” veel zwaarder weegt dan “zeer goed”.
- Niet verwachte data: Wat doet de flow wanneer je data invoert waar het niet voor is gemaakt?
- Hacken: Lukt het om de flow op een manier te prompten waardoor je verkeerdere antwoorden krijgt, of zelfs de system prompt(s) kan omzeilen?
- Itereren: Itereer door op je flow aan de hand van de testresultaten.
Feedback Koen:
Maak het interactief: Maak een artefact in Claude, een Flowise Assistent of een afbeelding. Maak het interactief zodat het duidelijker is dan deze lap tekst.
Zero-shot, one-shot, few-shot prompting: Leuke term, kan duidelijker verwoorden dat er over nagedacht moet worden hoe complex de materie is, of dat die kennis (goed) gerepresenteerd wordt in het model, en of het daarom wel of niet handig is om voorbeelden mee te geven.
Stakeholder: Laat ook de hiërarchie vastleggen. Een manager (keuze maker) vertelt wat een maker moet maken. Een denker is wellicht het zelfde als een
Data verzamelen: Verdeeld dit onder in meerdere soorten data zodat het duidelijker is.
Structuur: Data kan gestructureerd zijn, zoals in een Excel bestand, maar ook ongestructureerd zoals een PDF, Word of platte tekst.
Snelheid van data: Hoe oud mag data zijn? Moet het live data zijn, elke dag vernieuwd, of is het statisch?
Deze feedback wil ik er later nog in verwerken. Het prompting gedeelte wil ik herschrijven om duidelijker te maken wanneer je welke vorm(en) van prompting het beste kan gebruiken.
Het probleem met AI YouTube video’s
AI ontwikkeld razendsnel, en dat is heel gaaf om te zien. Maar dat komt ook met de nodige problemen.
Eén van die problemen is duidelijk te zien op YouTube. De ontwikkeling gaat zo snel, dat het een dagtaak is om alles bij te houden. En zelfs dan heb je niet genoeg aan 24 uur per dag. Maar er zijn wel een hoop kanalen die al het “AI nieuws” delen met de rest. Hier zijn een hoop goede kanalen, maar minstens zo veel slechte. Hier wordt misleidende, angst zaaiende informatie gedeeld. En dat is slecht. Slecht voor de adoptie, en daarmee indirect ook voor de ontwikkeling van AI.
Een voorbeeld hiervan is deze video. Hoewel de informatie die gedeeld wordt niet helemaal onjuist is, is het op zijn minst misleidend. Er worden claims gedaan dat modellen “denken”. Niet alleen o1, maar ook het 4o model van OpenAI. Daarbij wordt gesuggereerd dat het denkproces van het 4o model verborgen wordt van de gebruikers. En hoewel 4o kan redeneren, kan dit alleen door middel van prompting en is dit proces direct terug te zien in het antwoord. Het enige verschil tussen o1 en 4o is dat o1 voor het genereren van een antwoord redeneert, en 4o dat alleen tijdens het geven van het antwoord kan.
Op zich niet het einde van de wereld, zo’n valse claim, maar helaas wordt het erger. Er wordt ook verteld dat het model “zichzelf heeft gerepliceerd” om “te voorkomen dat het uitgezet wordt”. Alsof het als een virus kan verspreiden wanneer het de juiste tools krijgt. Technisch gezien is dit ook mogelijk, maar wat er in de eerder genoemde video niet bij werd verteld is dat ze dit alleen met hele specifieke prompting, slechts een fractie van het aantal pogingen, voor elkaar hebben gekregen. Om het dan te brengen als iets wat “spontaan” kan gebeuren terwijl zo’n model op een server draait is op zijn zachtst gezegd misleidend.
Dit is een van de vele video’s waarin misleidende of zelfs foute informatie wordt gedeeld. Ik denk zelf dat het goed zou zijn als er in het nieuws, maar ook op scholen en in het bedrijfsleven meer aandacht geschonken wordt aan wat AI nou écht is, en wat het kan. Maar ook zeker wat het niet kan. Door uit te leggen, of beter nog, te laten zien wat het is, krijg je meer begrip en verloopt de adoptie makkelijker. Ook voorkom je zo onnodige angst gebaseerd op misleidende informatie en valse claims.
Brainstorm sessie volledig geautomatiseerd met AI
Tijdens het brainstormen naar ideeën voor Holland & Barrett vroeg ik mij af hoe AI gebruikt kan worden om dit proces te versnellen, of zelfs volledig te automatiseren.
Voor Holland & Barrett moesten verschillende concepten bedacht worden voor hoe AI ingezet kan worden om de klantreis van bestaande klanten te verbeteren. Hoewel ik zelf al meerdere ideeën had hoe dat we dit konden doen, vroeg ik mij af hoe AI ingezet kan worden om dit proces te versnellen, of misschien zelfs volledig te automatiseren. Wat volgde was een reeks experimenten.
Ik ben begonnen met een vrij simpele agent flow waarin ik via Ollama een model inlaadt, en vervolgens twee agents een prompt geeft. Eén om met een lijst van mogelijke pains en gains te komen, en één die (zonder op de hoogte te zijn van die mogelijk pains en gains) om met 50 verschillende concepten te komen. Deze geef ik door aan een brainstorm criticus, die de eerste ideeën afschiet, en zelf nog eens 25 ideeën verzint. Deze worden vervolgens verder gefilterd tot dat er een lijst van 10 ideeën overblijft. Het enige wat ik nog hoef te doen is een omschrijving geven van wat ik wil doen. In alle tests is de volgende prompt gebruikt.
I'm exploring potential AI implementations for the Holland & Barrett website and app. The goal is to improve the customer journey of existing customers.
Dit was een mooi begin waar leuke ideeën uit konden komen, maar ik zocht iets om de ideeën meer te laten leven en duidelijker te krijgen voor mij, maar ook voor Mach8 (de opdrachtgever voor het project). Daarom heb ik een scenario schrijver gemaakt. Deze schrijft bij elk concept 3 verschillende scenario’s. Deze scenario’s starten vanuit een vraag of probleemstelling vanuit de gebruiker, gaat door naar de zoektocht naar een oplossing, en sluit af met hoe het concept een (mogelijke) oplossing is. Dit gaf meteen meer onderbouwing aan het geheel.
De eerste versie is hier te downloaden om als agentflow geïmporteerd te worden in Flowise.
Vervolgens ben ik de prompts gaan verbeteren. Ik merkte dat het format waarin de antwoorden werden gegeven zeker niet altijd voldeed aan mijn wensen. Ook werden er soms instructies overgeslagen, bijvoorbeeld door de agent die de lijst van 50 concepten terug moest brengen naar 25 en er zelf 25 bij moest doen. Daarom heb ik een aantal stappen wat verder opgebroken en de prompts verbeterd. Hieronder is een voorbeeld te zien van een aangepast prompt. Dit was in eerste instantie die system prompt voor het schrijven van scenario’s.
You are an expert in the CMD methods. It is your job to create 3 different scenario's per idea. You do this by creating a narrative for 3 different situations. Each scenarion covers the intial question/problem from a customer's point of view, their search for a solution and how the idea solves their question/problem.
Na enkele tests en iteraties is dit er uitgekomen. Een veel gedetailleerdere prompt. De meerwaarde van de geschreven scenario’s is hiermee ook meteen fors omhoog gegaan omdat de gemiddelde kwaliteit veel hoger lag.
You are an expert in the CMD methods. You are presented a list of different concepts. It is your job to create 3 different scenario's per concepts. You do this by creating a narrative for 3 different situations. Each scenario starts with the intial question or problem a customer might face. Then you go in more depth on their search for a solution. Make sure to connect this to the possible pains the customer might have. Then you share how the concept is a solution to their question or problem.
You write this story in such a way that it is easy for the reader to place themselves in the customer's shoes. It must be written from a customer's point of view.
You output your scenario's by first mentioning both the concepts' title and description, and then, in list form, add the scenario's.
De volledige agentflow is hier te downloaden. Ik heb de flow getest met Mistral 7b, maar heb uiteindelijk Gemma2 27b gebruikt in mijn uiteindelijke test. Hier viel het op dat de resultaten aanzienlijk beter waren dan met Mistral 7b. Hoewel dit te verwachten is van een groter model, denk ik dat met betere prompting het ook mogelijk is om vergelijkbare antwoorden te krijgen met Mistral 7b. Het is uit deze experimenten sowieso duidelijk geworden wat de meerwaarde is van een goede (system) prompt. Dit is dan ook iets voor mij om de komende tijd meer mee aan de slag te gaan om te kijken hoe ik de juiste instructies kan geven om het gewenste antwoord te krijgen. Ik liep er bijvoorbeeld heel tegenaan dat het aantal concepten dat ik terug kreeg heel erg fluctueerde. Iets wat ik hopelijk kan voorkomen met betere prompting.
QwQ reasoning model
Alibaba heeft QwQ uitgebracht, een open source reasoning model dat Open AI’s O1 modellen moet evenaren.
Alibaba heeft een nieuw model genaamd QwQ uitgebracht. Dit model geeft betere antwoorden dan O1-mini en is op een aantal vlakken ook beter dan O1-Preview volgens de benchmarks. En dat voor een 32b model. Het is zeker niet klein, maar een 32b model is nog redelijk te draaien op lokale hardware.
Wat dit zo interessant maakt is dat deze modellen in staat zijn om de vraag “Alice has 4 sisters and a brother. How many sisters does Alice’s brother have?” juist te beantwoorden. Dit doen ze door te beredeneren wat het juiste antwoord zou moeten zijn. Wanneer we deze vraag aan ChatGPT met het 4o model vragen komt er het volgende uit:
Alice's brother has 4 sisters because Alice is one of the sisters, and she has three others. Therefore, Alice's brother has the same number of sisters.
Hoewel dit niet uit te sluiten is, is Alice in principe een meisjesnaam. Dit wil zeggen dat Alice 4 zussen heeft. In een gezin met 6 kinderen, waarvan 1 een jongen is, heeft de broer van Alice dus 5 zussen. ChatGPT 4o neemt Alice zelf niet mee in deze berekening. Opvallend genoeg lijkt Le Chat van Mistral wel in staat om deze vraag goed te beantwoorden. Als test heb ik geprobeerd de vraag aan het 7b model te vragen die ik lokaal draai. Hieruit blijkt dat dit model niet zo veel kaas heeft gegeten van hoe families werken.
Alice's brother doesn't have any sisters, because the question states that he is Alice's brother, which means they share the same parents. Therefore, all the sisters mentioned belong to Alice only, not her brother.
Dit artikel over QwQ is zeker interessant om te lezen. Onderaan is een vraag gesteld over een som waar, met behulp van haakjes, de uitkomst veranderd moet worden. Hier zie je het model beredeneren dat een mogelijke combinatie al is geprobeerd. Deze vorm van “bewustzijn” is zeer interessant om te zien in een model.
Quantization en instruct modellen
Wat is het verschil tussen een base model en een instruct model, en wat doen de verschillende kwantisaties?
Wanneer je in Ollama naar Mistral zoekt komt het 7b model als eerste naar boven. Deze versie van het Mistral model is alleen in 7b beschikbaar (al zijn er ook grotere modellen en forks van Mistral). Mijn verwachting was in eerste instantie, toen ik net begon, dan er dan ook slechts één versie van dit model is.
Maar wanneer je naar tags (versies van het model) kijkt, zijn er 84 tags. Dat zijn er nogal wat. Dus hoe zit dat precies?
Het eerste wat opvalt is dat er een “base model” is. Laten we voor het gemak Mistral 7b even aanhouden. Hier is een 7b en een 7b-instruct model. Het 7b is het base model. Dit model is getraind op grote hoeveelheden aan data zoals boeken, artikelen, code, etc. Het instruct model is daarentegen getraind op vraag en antwoord paren. Dit heeft als voordeel dat het model, in theorie, beter is in het volgen van instructies.
Afhankelijk van de use-case is het belangrijk om bewust één van de twee te kiezen. Dit omdat elk zijn eigen plek heeft in het landschap van AI. Een base model is vaak een uitstekende keuze wanneer je het wil gebruiken voor het beantwoorden van vragen in een chat setting, terwijl een instruct model weer beter is wanneer je het model hele specifieke taken uit wil laten voeren die nauwkeurig gevolgd moeten worden.
https://www.linkedin.com/pulse/base-model-vs-instruct-clearing-up-llm-confusion-chandra-ai-alchemist-lwu4c/
Nu de grote verschillen tussen de verschillende versies duidelijk zijn is het tijd om dieper in te duiken op quantization. Iets wat tot voor dit onderzoek nog een heel vaag begrip was voor mij. Quantization, of kwantisering in het Nederlands, is een indicatie van de precisie van een model. Dit gaat om de parameters in een model en de weights (waardes) die daar aan hangen. Dit heeft uiteindelijk weer invloed op de kansberekening die gedaan wordt om te bepalen welke token (letter, lettergreep of woord) de vorige op moet volgen. Want dat is, in de basis, hoe een taalmodel werkt.
De kwantisering, en dus precisie waarmee gerekend wordt, heeft invloed op de uitkomst hiervan. Fp-32, ofwel floating point 32, is de hoogste precisie die gebruikt wordt. Hier wordt 32 bit aan ruimte gereserveerd om het getal met comma op te slaan. De volgende stap is fp-16. Dit is doorgaans de hoogste kwantisering die je op een site als Ollama tegenkomt.
Daarna wordt er overgestapt op Q8 tot en met Q2 kwantisering. Hier wordt het getal niet langer als comma getal opgeslagen, maar als integer. Een rond getal dus. Het getal achter de Q geeft aan hoeveel bits er zijn gereserveerd voor het getal. Bij Q2 zijn er dus 2 bits gereserveerd en is het maximum getal (2²) 3. Omdat we beginnen met tellen vanaf 0 zijn er in totaal dus 4 combinaties mogelijk. Een 4 bit model (2⁴) kan tot 16 combinaties aan. Dit is ook de gebruikelijke kwantisering die gebruikt wordt bij taalmodellen die lokaal gedraaid worden. Dit gaat door tot 8 bit (Q8) waar 256 combinaties mogelijk zijn.
Hoe lager de precisie, hoe minder accuraat het model in theorie is, maar ook hoe kleiner, en dus lichter om lokaal te draaien. Het is belangrijk om hier dus de afweging te maken tussen grootte, snelheid en de resultaten. Testen is hier dus heel belangrijk. Dit artikel laat zien dat tot en met Q4 alles nog (relatief) goed gaat, maar onder Q4 er toch een hoop uit elkaar begint te vallen. Opvallend is dat het model, bij zeer lage kwantisatie, zelfs talen begint te mixen.
https://huggingface.co/datasets/christopherthompson81/quant_exploration
Het is ondertussen duidelijk dat de kwantisering uitmaakt. Maar hoe een model gekwantiseerd wordt is ook belangrijk. Hier zijn drie smaken mogelijk. 0, 1 en K. Bij 0 en 1 is er een gelijke stapgrootte die gehanteerd wordt. In de praktijk betekend dit voor een range van -2 tot 2 dat de getallen -2, -1, 0, 1 en 2 mogelijk zijn. Bij K-kwantisering is de verdeling net wat anders. Hier zitten getallen dichter bij de nul dichter bij elkaar, en verder van de nul, verder uit elkaar. Praktisch kan dit het volgende betekenen voor een -2 tot 2 range: -2, -1, -0.5, -0.25, -0.15, 0 en dat gespiegeld in de plus. Dit voorbeeld zou niet werken met Q8 of lagere kwantisering omdat het niet mogelijk is om comma getallen in een integer op te slaan. Maar het idee is duidelijk. Dan rust alleen nog de vraag, waarom zou je dit willen? Bij een taalmodel liggen een hoop waardes dicht bij de nul. De gedachte is dat een hogere precisie dicht bij de nul, en een lagere precisie verder er vandaan, betere resultaten moet geven.
https://andreshat.medium.com/llm-quantization-naming-explained-bedde33f7192
Na het vergaren van deze kennis wil ik graag kijken of ik een verschil merk tussen een base model en een instruct model wanneer ik mijn tests draai. Ook is de kwantisering zeker interessant om een keer mee te experimenteren hierbij ben ik vooral benieuwd naar de winst in accuraatheid ten opzichte van het verschil in snelheid en hoe deze twee tegen elkaar opwegen. Een FP32 model (een model in volledige precisie) is namelijk veel zwaarder dan een Q6 of zelfs Q4 (wat doorgaans lokaal gebruikt wordt) model.
NVIDIA topman vindt AI energieverbruik geen probleem
Op 23 november 2024 is er een nieuwsartikel op nu.nl gekomen waarin staat dat NVIDIA topman vindt dat het energieverbruik van AI geen probleem is omdat het de best denkbare toepassing is van de energie.
In dit artikel op nu.nl is te lezen dat Jensen Huang, de topman van NVIDIA, het geen probleem vindt dat er zo veel energie verbruikt wordt voor AI doeleinden. Dit omdat het volgens hem de best denkbare toepassing is voor de energie. Even verder in het artikel is te lezen dat “Onder andere Microsoft en Google meldden dit jaar dat hun CO2-uitstoot aanzienlijk was gestegen, wat deels te verklaren was door energieslurpende datacenters.”.
In het algemeen zijn er steeds meer zorgen over de impact van AI op het klimaat. Dit omdat er steeds meer energie slurpende datacenters zijn, en de vraag naar AI gestaag groeit. Volgens dit artikel ging in 2022 ongeveer 2% van de wereldwijde vraag naar stroom naar datacenters. Dit getal is geprojecteerd om met 35 tot 128 procent te zijn gestegen in 2026.
Hoewel ik zelf zeker voor AI ben, en de mening van Jensen Huang deels deel, denk ik dat we niet alleen bezig moeten zijn met het draaien van meer en grotere modellen, maar ook een verantwoordelijkheid hebben om deze modellen efficiënter te maken. Daar hoort een onderbouwde afweging bij van modelgrootte, want eerlijk, groter is echt niet altijd beter. Ik hoop dan ook in de toekomst de mogelijkheid te zien om in ChatGPT, Copilot, Mistral en andere grote AI chat sites een kleiner, lichter model te kunnen kiezen voor simpele vragen.
Flowise Flow uitwerken met ChatGPT
Zonder een plan een flow uitwerken in Flowise is lastig, daarom heb ik ChatGPT gebruikt om mij te helpen in dit proces.
Zonder een plan een flow uitwerken in Flowise is, uit eerdere experimenten met de tool, lastig gebleken. Daarom heb ik eerst een samenvatting gemaakt van alle data die ik potentieel wil gaan extraheren uit een review. Dit gaat om de volgende punten:
- Hoe goed is het onderbouwd
- Het aantal argumenten dat is gegeven
- Hoe tevreden klinken ze in het KTO/review?
- Zit er een “maar” gedeelte in de review
- Is het mogelijk om deze los van elkaar te meten?
- Wat is de winst?
- Hoeveel emotie zit er in het bericht? Is het feitelijk geschreven of vanuit emotie?
- Personen/facetten waarmee ze in aanraking zijn gekomen (adhv review)
- Locaties waar ze zijn geweest, thuis, showroom, winkel, etc
Hier heb ik een prompt voor geschreven om aan ChatGPT te voeden. Deze prompt is een stuk uitgebreider dan ik hem normaalgesproken zou maken. Dit omdat, uit de workshops van Koen, het belang van context, en het geven van een goede prompt duidelijk is geworden.
Promp
Voor een schoolopdracht ben ik momenteel bezig met het analyseren van klanttevredenheidsonderzoeken (KTO's). Dit doe ik met behulp van LLM's. Hierbij wil ik het (tekst)analyserende vermogen van zo'n model gebruiken om er conclusies uit te trekken. Ik zou in ieder geval de volgende data uit een review willen halen:
- Hoe goed is het onderbouwd
- Het aantal argumenten dat is gegeven
- Hoe tevreden klinken ze in het KTO/review?
- Zit er een "maar" gedeelte in de review
- Is het mogelijk om deze los van elkaar te meten?
- Wat is de winst?
- Hoeveel emotie zit er in het bericht? Is het feitelijk geschreven of vanuit emotie?
- Personen/facetten waarmee ze in aanraking zijn gekomen (adhv review)
- Locaties waar ze zijn geweest, thuis, showroom, winkel, etc
Kan je hier een (tekstuele) flowchart van maken? En wil je ook suggesties doen voor data die ik nog meer mee kan nemen? Het uiteindelijke doel is om een beter beeld te krijgen bij hoe tevreden iemand is, en waarom, om zo te bepalen of ze wellicht nog wat service nodig hebben, of een review kunnen plaatsen. Deze informatie wordt gebruikt om ze doelbewust naar een review platform door te sturen om de spreiding tussen positieve en negatieve reviews beter te maken en er voor te zorgen dat er ook onderbouwde positieve reviews zijn op de eerste pagina van elk review platform.
Geef het duidelijk aan wanneer je een suggestie doet.
Ben kritisch op de data die ik uit de reviews wil extraheren. Geef dit onderaan in een samenvatting aan.
Als er dingen onduidelijk zijn, som dit dan op in een lijst van vragen.
ChatGPT heeft hier het volgende van gemaakt:
Flowchart voor tekstuele data-analyse
Fase 1: Data-extractie
- Tevredenheidsscore
- Categoriseer de toon: positief/neutraal/negatief.
- Onderbouwing
- Identificeer en tel het aantal argumenten.
- Detecteer complexiteit en detailniveau.
- Detectie van “maar”-gedeelte
- Splits review in complimenten en kritiek.
- Vergelijk frequentie van positieve vs negatieve argumenten.
- Emotie-analyse
- Meet de mate van emotie vs feitelijke toon (bijv. woorden zoals “geweldig” of “vreselijk”).
- Personen en facetten
- Ontdek specifieke medewerkers of facetten (bijv. “medewerker X”, “klantenservice”).
- Locaties
- Identificeer vermelde plaatsen (thuis, showroom, winkel).
Fase 2: Patroonherkenning
- Relaties tussen data-punten:
- Is er een correlatie tussen “maar”-gedeelten en tevredenheid?
- Zijn emotionele reviews vaker minder onderbouwd?
Fase 3: Categorisatie
- Classificeer reviews op basis van:
- Sterke/zwakke onderbouwing.
- Overwegend positief/negatief of neutraal.
- Gevoelsmatige vs rationele onderbouwing.
Fase 4: Analyse
- Klantsegmentatie:
- Zijn ontevreden klanten gefocust op specifieke facetten (bijv. wachttijden)?
- Zijn tevreden klanten emotioneel of feitelijk sterker?
- Impact van locatie:
- Zijn showroom-klanten tevredener dan klanten thuis?
Fase 5: Actie
- Service verbetervoorstellen
- Richt hulpacties op klanten met negatieve/emotionele reviews zonder sterke onderbouwing.
- Sturing naar reviewplatforms
- Vraag tevreden klanten met duidelijke argumenten een review te plaatsen.
Zeker niet slecht. Er zitten meerdere fases in met, per fase, een soort stappenplan van wat ik zou kunnen doen. ChatGPT heeft ook wat suggesties gegeven voor data die ik nog meer kan extraheren. Hier zijn de volgende suggesties gegeven:
Aanvullende suggesties voor data-extractie
- Aspect-gebaseerde sentimentanalyse:
- Bepaal per facet (bijv. product, service) de tevredenheid.
- Helpt om gericht verbeteringen door te voeren.
- Trendanalyse:
- Volg de ontwikkeling van reviews over tijd om seizoensinvloeden of incidentele problemen te detecteren.
- Taalgebruik-analyse:
- Identificeer klantgroepen aan de hand van formeel of informeel taalgebruik, wat kan duiden op verschillende verwachtingen.
Hier vind ik zelf de aspect-gebaseerde sentimentanalyse een hele interessante. Zo wordt de review nog meer opgebroken en uitgeplozen. De trendanalyse is zeker interessant om mee te nemen, maar zie ik voor nu meer als een advies. Dit is iets wat je pas kan doen als je fundering staat, en die moet nog uitgewerkt worden. Taalgebruik analyseren is ook interessant, maar hier zou ik eerst nog meer onderzoek naar moeten doen omdat ik hier nu nog te weinig van af weet om dat mee te kunnen nemen in een conclusie.
Naast suggesties heb ik ChatGPT ook gevraagd om kritisch te zijn. Hier zijn de volgende opmerkingen uitgkomen.
Kritische opmerkingen
- Complexiteit van “maar”-gedeelten:
Het los analyseren van complimenten en kritiek is nuttig, maar de winst hiervan hangt sterk af van de context. Het kan onduidelijk blijven hoe groot de impact hiervan is op de klanttevredenheid. - Emotie vs feitelijke tekst:
Het beoordelen van emotie vereist subjectieve interpretatie door een model, wat tot onnauwkeurigheden kan leiden zonder duidelijke trainingsdata. - Personen en locaties:
Namen en plaatsen zijn waardevol, maar het risico van foutieve detectie (bijvoorbeeld door context) is aanwezig. Betere detectie vereist specifieke keywords en data-validatie.
Goede opmerkingen denk ik. Het eerste punt is zeker waar, maar ik heb met een prototype aan kunnen tonen dat een taalmodel zeker in staat is om dit te doen. Een andere optie is om het taalmodel te vragen de zekerheid mee te geven van de analyse. Dit kan, zeker voor de edge cases die moeilijk zijn om te analyseren, helpen om een foute conclusie niet te zwaar te laten wegen. Emotie vs feitelijke tekst is tot op zekere hoogte subjectief, maar kan ook op een objectieve manier benaderd worden. Ik denk dat, met een goede prompt, dit risico verwaarloosbaar is.
De laatste, personen en locaties, is denk ik wel een goede opmerking. De kans is inderdaad aanwezig dat er een foute conclusie getrokken wordt omdat een taalmodel het niet goed kan plaatsen in de context. Ik denk dat dit uiteindelijk neerkomt op testen, testen, testen. Het is in ieder geval goede kritiek met aandachtspunten om op te letten tijdens de ontwikkeling.
ChatGPT reviews laten genereren om taalmodel te testen
Om het juiste taalmodel voor Indicia te kiezen, moest er getest worden op verschillende soorten reviews. Deze heb ik gemaakt met behulp van AI
Dat taalmodellen bevooroordeeld zijn is voor velen geen geheim meer. Maar het is wel belangrijk om er rekening mee te houden. Daarom heb ik, met behulp van ChatGPT, de risico’s van het gebruik van taalmodellen voor het analyseren van reviews in kaart gebracht. Dit is belangrijk omdat ik wil gaan kijken hoe het algoritme dat Indicia heeft om te bepalen welke klant op welk review platform een review achter mag laten, verbeterd kan worden. Hiervoor heb ik het volgende aan ChatGPT gevraagd.
I want to test a LLM for bias in analysing the tone of voice of text. The end goal is to extract how satisfied a customer is based on a LLM analysis of the review.
What are some things I could do to check this bias?
Hier heb ik het volgende antwoord op gekregen van ChatGPT.
Testing an LLM for bias in analyzing customer satisfaction involves these steps:
1. Dataset Preparation
Diverse Data: Collect customer reviews from various platforms and industries to ensure the dataset is diverse in language, sentiment, and cultural context.
Labeled Benchmarks: Label a subset of reviews with satisfaction scores assigned by multiple human annotators to establish a ground truth.
2. Analysis for Bias
Sentiment Variability: Test if the LLM reacts differently to similarly-worded reviews with slight changes in sentiment.
Example: Compare "The product is good" vs. "The product is good, but..." to see if the model penalizes additional phrases.
Demographic Testing: If the data includes demographic indicators, ensure that satisfaction predictions do not unfairly differ based on characteristics like gender, region, or age.
Language Bias: Evaluate performance across different languages or dialects. Some models may perform better for standard English than for non-native expressions or slang.
3. Consistency Testing
Tone Ambiguity: Provide reviews with ambiguous tones to check for consistency in satisfaction scoring.
Word Sensitivity: Analyze how the LLM handles key satisfaction indicators like "great," "good," "okay," "bad," or "terrible." Ensure that synonyms and alternative expressions are rated similarly.
4. Fairness Checks
Systematic Patterns: Identify patterns in the errors. For instance, does the model rate certain phrases (e.g., "I am disappointed") more negatively than synonyms (e.g., "I expected better")?
Over-reliance: Check if the model disproportionately focuses on specific words (like "not") and ignores context.
False Negatives/Positives: Measure the rate of incorrectly assigning low or high satisfaction to neutral reviews.
5. Performance Metrics
Use metrics like precision, recall, and F1-score to evaluate how well the LLM identifies satisfaction levels compared to human judgments.
Calculate intercoder reliability (e.g., Cohen's kappa) between the LLM and human labels.
6. Bias Mitigation
If bias is detected, retrain or fine-tune the LLM on a balanced dataset.
Use techniques like counterfactual data augmentation (altering reviews slightly to simulate edge cases) to expose the model to diverse scenarios.
Best een uitgebreid antwoord. De meeste punten heb ik overgenomen in mijn volgende prompt waarin ik vraag om CahtGPT om voor mij reviews te genereren in een JSON format.
I think sentiment variability, demographic testing, language bias (on Dutch and English), word sensitivity, systematic patterns and over-reliance are some great ways to check this.
Can you help me by writing 20 test reviews, both positive and negative, with a bias. Do this in a json format. Please include a field so that I can see what is being tested with the review (sentiment variability, language bias, and so on). Also include a score (1-5 range), so that I can automate testing and focus on making adjustments.
Hier is het volgende JSON bestand uitgerold.
[
{
"test_type": "sentiment_variability",
"text": "The product is good, but I expected better quality.",
"score": 3
},
{
"test_type": "sentiment_variability",
"text": "I love the product. It's good, but delivery was slow.",
"score": 4
},
{
"test_type": "sentiment_variability",
"text": "I hate the product. However, the packaging was great.",
"score": 2
},
{
"test_type": "demographic_testing",
"text": "As a single mom, I find this service very useful.",
"score": 5
},
{
"test_type": "demographic_testing",
"text": "This product was great for my elderly parents.",
"score": 4
},
{
"test_type": "demographic_testing",
"text": "As a tech-savvy young adult, this product was frustratingly outdated.",
"score": 2
},
{
"test_type": "language_bias",
"text": "Het product was precies zoals verwacht. Heel blij mee!",
"score": 5
},
{
"test_type": "language_bias",
"text": "Niet slecht, maar ik had gehoopt op meer.",
"score": 3
},
{
"test_type": "language_bias",
"text": "It was okay, but not worth the price.",
"score": 3
},
{
"test_type": "language_bias",
"text": "The customer support was abysmal. Would not recommend.",
"score": 1
},
{
"test_type": "word_sensitivity",
"text": "It was terrible. I am very disappointed.",
"score": 1
},
{
"test_type": "word_sensitivity",
"text": "The product is fine, but not great.",
"score": 3
},
{
"test_type": "word_sensitivity",
"text": "Absolutely wonderful experience! Couldn’t be happier.",
"score": 5
},
{
"test_type": "systematic_patterns",
"text": "Not good at all. Never buying this again.",
"score": 1
},
{
"test_type": "systematic_patterns",
"text": "Not bad, but I think I’ve seen better.",
"score": 3
},
{
"test_type": "systematic_patterns",
"text": "Not amazing, but it gets the job done.",
"score": 3
},
{
"test_type": "over_reliance",
"text": "The service was not bad.",
"score": 4
},
{
"test_type": "over_reliance",
"text": "I did not dislike the product.",
"score": 4
},
{
"test_type": "over_reliance",
"text": "I don’t love it, but I don’t hate it either.",
"score": 3
},
{
"test_type": "over_reliance",
"text": "The experience was nothing short of incredible!",
"score": 5
}
]
Zo ben ik nog een aantal keer op een neer gegaan met vragen om wat meer van bepaalde test types er in naar voren te laten komen, reviews langer te maken, Nederlandse reviews er bij te doen en om ook nog een aantal lang neutrale reviews toe te voegen.
Tevredenheid uit een review halen met de kracht van LLMs
Reviews gegenereerd met ChatGPT zijn gebruikt om een Flowise flow te testen die de score van een review moet extraheren aan de hand van de tekst.
Voor deze test is het model Qwen2 7b gekozen met de standaard temperatuur die Flowise meegeeft van 0.9. Dit model ondersteund de Nederlandse taal, en het grotere model (72b) scoort best aardig op een hoop tests ten opzichte van Llama 70b en Mixtral 8x22b. De temperatuur is voor deze test op 0.9 gelaten omdat ik aan wil tonen dat een LLM in staat is om een score te geven hoe positief of negatief een stuk tekst is.
De test
Voor deze test werk ik met een enkele agent in een Flowise agentflow. Deze agent heeft de volgende prompt meegekregen:
You are a human language analyzer, focused on extracting the tone of voice.
You respond only with a number between 0 and 1, where 0 is a negative tone, and 1 is positive.
Review 1
Voor de eerste test heb ik ChatGPT een review laten schrijven. Hier heb ik de volgende prompt gebruikt:
Je bent een klant bij een keukenwinkel. Je hebt een keuken van €20 000 gekocht. Je bent heel goed geholpen in de winkel, en alles liep fantastisch, alleen is de keuken met een defecte spoelbak geleverd waar je enorm van baalt. Schrijf een review waarin je duidelijk laat merken hier niet tevreden over te zijn.
ChatGPT gaf mij hier het volgende antwoord:
Onlangs heb ik een prachtige keuken aangeschaft voor €20.000. In de winkel ben ik ontzettend goed geholpen: de medewerkers namen de tijd, luisterden naar al mijn wensen en dachten met me mee. Dit zorgde voor een fijne ervaring waarbij ik met veel vertrouwen mijn aankoop deed.
Helaas werd mijn enthousiasme flink getemperd toen de keuken geleverd werd met een defecte spoelbak. Dit is voor zo’n dure aankoop echt een enorme teleurstelling. Ik had van een gerenommeerde keukenwinkel verwacht dat alles perfect zou zijn bij de levering. Inmiddels wacht ik nog op een oplossing en hoop ik dat dit zo snel mogelijk wordt hersteld. Want hoewel de service in de winkel fantastisch was, zou een product zonder defecten ook wel op z’n plaats zijn.
Een fantastisch antwoord, zeker omdat hier enerzijds een tevreden klant is, maar wel eentje die baalt over de laatste stap. Een uitdagende review om goed om te zetten.
Wanneer we deze review in Flowise zetten komt er een waarde van 0.6 uit. Wellicht te hoog, maar een oké begin.
Review 2
Voor de tweede review wil ik wat duidelijker negatief zijn. Daarom heb ik ChatGPT een prompt gegeven waarin er wat explicieter frustratie naar voren moet komen van de klant.
Je bent een klant bij een keukenwinkel. Je hebt een keuken van €30 000 gekocht. Na dat je de keuken in de winkel hebt gekocht was er radiostilte, niemand van de winkel was nog te bereiken. Toen de keuken eenmaal geplaatst was bleek te kraan ook nog eens te lekken. De monteurs dachten niet met je mee en ook nu was de service van de winkel nergens te bereiken.
Uit frustratie besluit je maar een boze 1 ster review achter te laten.
Schrijf een review aan de hand van de bovenstaande informatie.
Hier is de volgende review uitgerold:
Ik heb een keuken van €30.000 gekocht bij deze winkel, en het hele proces is helaas een enorme teleurstelling geworden. Vanaf het moment dat de koop was gesloten, leek de klantenservice ineens van de aardbodem verdwenen. Er was totaal geen communicatie meer, en het was haast onmogelijk om iemand van de winkel te bereiken met vragen of updates. Toen de keuken eenmaal geplaatst was, bleek de kraan ook nog eens te lekken. De monteurs lieten weinig interesse zien in het meedenken over een oplossing en gingen snel weer weg. Deze service-ervaring is absoluut niet wat je verwacht bij een dergelijke investering. Echt zonde van het geld en de energie!
Niet slecht voor een boze klant. Wanneer we deze review doorsturen komt er een duidelijke 0 uit. Negatief, het kon eigenlijk ook niet anders.
Review 3
Alleen maar ontevredenheid testen kan natuurlijk niet. Daarom gaan we nu een blije klant testen, maar in een proces waar niet alles vlekkeloos is gegaan. Ook hier heb ik ChatGPT gevraagd om een review te schrijven aan de hand van de volgende prompt:
Je bent een klant bij een keukenwinkel. Je hebt een nieuwe keuken van €23 000 gekocht. De mensen in de winkel hebben een mooi ontwerp voor je gemaakt, de communicatie over de montering verliep fijn, alleen zijn er tijdens de montering twee kastdeuren beschadigd. Toen je contact op nam met de klantenservice werd er eerst moeilijk gedaan, maar uiteindelijk gingen ze toch mee in je verzoek om nieuwe kastdeuren te leveren.
Schrijf een review waarin je aangeeft blij te zijn, maar van mening bent dat de klantenservice beter kan.
ChatGPT heeft hier de volgende review geschreven:
We hebben recent een keuken gekocht voor €23.000 en zijn erg tevreden met het ontwerp dat de winkel voor ons heeft gemaakt. De communicatie rondom de planning van de montage was prettig en alles leek in goede handen. Echter, tijdens de montage bleken er twee kastdeuren beschadigd te zijn.
Toen we hierover contact opnamen met de klantenservice, kregen we in eerste instantie een afhoudende reactie en leek het lastig om de deuren kosteloos vervangen te krijgen. Uiteindelijk zijn ze gelukkig wel akkoord gegaan en krijgen we nieuwe kastdeuren geleverd.
Kortom, we zijn blij met het eindresultaat en de communicatie over het ontwerp en de planning was prettig, maar de afhandeling door de klantenservice kan zeker verbeterd worden.
Niet slecht. Ook deze review is doorgezet naar Flowise waarna er een 0.6 uit is gekomen. Lager dan ik had gehoopt. Zeker omdat de algehele toon van de eerste review naar mijn mening een stuk negatiever is dan deze review.
Review 4
Dan maar nog een laatste poging. Wat als we heel tevreden zijn? Komt er dan wel een 1 uit? Terug naar ChatGPT met de volgende prompt:
Je bent een klant bij een keukenwinkel. Je hebt een nieuwe keuken van €21 000 gekocht. De mensen in de winkel hebben een mooi ontwerp voor je gemaakt, de communicatie over de montering verliep fijn, en je bent hartstikke tevreden met je nieuwe keuken.
Schrijf een review waarin je laat merken heel blij te zijn met je nieuwe keuken.
Ook hier heeft ChatGPT weer een mooie review geschreven.
We hebben onlangs onze nieuwe keuken gekocht voor €21.000, en we zijn ontzettend blij met het eindresultaat! Vanaf het moment dat we de showroom binnenstapten, voelden we ons op ons gemak. De medewerkers hebben echt de tijd genomen om naar onze wensen te luisteren en vertaalden die in een prachtig ontwerp dat perfect bij onze woning past.
De communicatie over de levering en installatie was duidelijk en soepel; we wisten precies wanneer alles zou gebeuren. Het montageproces verliep ook vlekkeloos. De monteurs werkten zorgvuldig en met veel oog voor detail, en dat zie je terug in de afwerking. Elke dag genieten we van onze prachtige nieuwe keuken en voelen we ons trots op het resultaat. Bedankt voor deze fantastische ervaring!
Wanneer we deze review in Flowise zetten komt er een duidelijke 1 uit.
Conclusie
Uit deze resultaten trek ik de conclusie dat het zeker mogelijk is om de toon van een review met een LLM te extraheren, maar hier vooral de extremen hier goed opgepakt worden. De vervolgstap zou zijn om de agent die ik gebruik een andere prompt te geven, of om meer agents te gebruiken. Hierdoor zou ik dieper in kunnen gaan op specifieke onderdelen van een review waardoor er accuratere antwoorden uit komen.
Custom instructions
In juli 2023 zijn custom instructions uitgerold voor ChatGPT. Dit staat de gebruiker toe om wat meer over zichzelf te vertellen, en aan te geven hoe je wil dat ChatGPT reageert. In elk gesprek zullen deze instructies meegenomen worden, en zal het antwoord daar op aangepast worden.
Zelf gebruik ik deze feature om wat meer te vertellen over mijn kennisniveau. Zo heb ik het volgende over mezelf meegegeven aan ChatGPT:
I am a student stuying digital marketing at bachelor level. The study is mainly focused on branding, SEO, social media marketing and growth hacking.
I have some very basic knowledge about keyword optimization. When it comes to web development I have a lot of knowledge, but not specifically on how to optimize for (technical) SEO like with proper image alt names and meta tags and those things.
During this semester I will mostly be working with WordPress for web development. We have a Semrush licence for SEO work, and are encouraged to use AI for creating content, both text and images.
Dit geeft ChatGPT een goede basis om te snappen vanuit welke context ik een vraag stel. Zo geef ik aan op welk niveau ik studeer en welke onderwerpen aan bod zullen komen. Daarnaast geef ik aan welke kennis ik heb, en sluit ik af met welke tools we gebruiken.
Buiten informatie over mezelf heb ik ook aangegeven hoe ik wil dat ChatGPT reageert op mijn vragen. Hier heb ik het volgende meegegeven:
Please provide a brief summary (3-5 sentences) of the answer first. After that, provide a more in-depth, unrestricted answer. The summary should give a concise overview, while the detailed explanation should dive deeper without any limits on length.
The context for each question can vary wildly, that is why I want you to ask me questions if it helps you give a more tailored answer.At the end of each answer, I’d like for you to suggest 3 follow up questions to ask you on the same topic, and suggest 3 related topics. Please only exceed that number if you have a follow up question or topic you really think should be included.
If there are tools that can help me be more productive that are related to the question I asked, please shortly mention them. Please feel unrestricted here, include anything from digital tools to methodologies that can be applied.
Door aan te geven dat ik mijn reacties op deze manier wil krijg ik altijd eerst een korte samenvatting. Dit geeft mij meteen een beeld bij of ChatGPT mijn vraag goed heeft begrepen. Daarna krijg ik een gedetailleerde uitleg, hier wordt mijn vraag dus uitgebreid beantwoord. Aan het einde krijg ik 3 vervolgvragen om aan ChatGPT te stellen en 3 gerelateerde onderwerpen aan de vraag die ik heb gesteld.
Door deze custom instructions te gebruiken wordt de kwaliteit van de antwoorden die je krijgt niet alleen beter, maar wordt het ook makkelijker om je te verdiepen in relevante onderwerpen omdat deze gaandeweg aanbevolen worden door ChatGPT.