De eerste van een serie posts over vragen die ik over GEITje krijg.

Waarom heb je een taalmodel gemaakt?” Die vraag heb ik de afgelopen weken meermaals gekregen. Meestal meteen gevolgd door een vervolgvraag: “ChatGPT bestaat toch al?” Geen gekke vraag, eigenlijk. Hieronder mijn drie belangrijkste redenen:

1. Omdat open modellen nodig zijn

ChatGPT doet het geweldig in het Nederlands. Als je een toepassing hebt waar je een LLM voor wilt proberen, pak vooral ChatGPT of één van de OpenAI APIs. Ze zijn goed en goedkoop, en je hebt in no time een oplossing in elkaar gedraaid. En mocht je een uitdagende usecase hebben: je kunt nu zelfs hun modellen finetunen op jouw data. Maar er zijn ook nadelen.

Ten eerste zijn er altijd gevallen waarin je jouw data niet naar OpenAI wilt, kunt of mag sturen. Zorgvuldig omgaan met gegevens is belangrijk, zeker met het oog op de AVG en de komende AI-Verordening. Daarom ben je al snel gebonden aan modellen die je lokaal op je eigen infrastructuur kunt draaien, om zo je private data privé te houden.

Ten tweede is OpenAI, de steeds ironischer wordende bedrijfsnaam ten spijt, helemaal niet zo open. Ze vertellen je niet op welke bronnen hun modellen getraind zijn, of wat voor soort filtering ze toepassen, of zelfs niet hoe groot hun modellen zijn. Het enige wat je krijgt is een black box op hun servers waar je tegenaan kunt praten, en een technical report zonder betekenisvolle technische rapportages. Als je onderzoek wilt doen naar het model, bijvoorbeeld om te bepalen of er bepaalde biases aanwezig zijn die voor jouw toepassing van belang zijn, dan heb je pech. Het enige wat je kunt doen is tekst naar de black box sturen en de tekst die je terugkrijgt bestuderen, maar alle andere geavanceerdere opties zijn van tafel. Een open model kan je zo uitgebreid bestuderen als je zelf wil.

Tenslotte bieden open modellen een kans om voort te bouwen op elkaars werk, en daar weer iets voor terug te geven. Zo kom je gezamenlijk tot een veel hoger niveau dan waar iedereen in z’n eentje toe in staat is, en daar is iedereen weer bij gebaat.

Open modellen zijn dus nodig, en goed nieuws: ze zijn booming in 2023! Maar het Nederlands bleef helaas achter, aangezien de open source-wereld zich vooral richtte op Engels, Chinees en programmeertalen. Een bekend verhaal voor wie mijn eerdere blogpost over BLOOM heeft gelezen, al waren er deze keer wel al initiatieven die de goede richting op gingen.

2. Omdat het kan

Wat is er dan voor nodig om een Nederlands taalmodel te maken? En is dat mogelijk om als hobby-projectje te doen? Nou, nee, niet als je het vanaf de grond af wilt opbouwen. Meta heeft voor het trainen van Llama 2 7B 184.320 GPU-uur gebruikt, wat ongeveer 74.000 kWh verstookt heeft. Dergelijke budgetten zijn onbereikbaar voor de GPU-poor. En, stel, je weet ergens gratis rekencapaciteit vandaan weten te toveren. Dan moet je nog ergens de 2.000 miljard tokens aan Nederlandstalige tekst vandaan weten te halen om tot hetzelfde de hoeveelheid tekst te komen als Meta voor LLaMA 2 heeft gebruikt. En als je dan een foundation model hebt getraind, dan moet je ook nog eens tienduizenden gesprekken (laten) maken om je foundation model tot een echte chatbot te trainen.

Maar wat als je enkele slimme en praktische keuzes maakt? Wat als je niet begint bij nul? Wat als je voortbouwt op bestaande open source modellen, zoals LLaMA 2 of Mistral? Ondanks dat het waarschijnlijk niet de bedoeling was, is er blijkbaar toch genoeg Nederlandstalige tekst in hun trainingsdata geslopen om een aardig woordje Nederlands te kunnen. Niet genoeg om er een langere coherente conversatie mee te houden, en de kennis over Nederlandse of Vlaamse onderwerpen van die modellen is zeer beperkt, maar het is zeker beter dan beginnen met niets. Het enige wat je op moet geven is wat transparantie. Het is helaas zo dat ook van deze open source modellen weinig bekend is over op welke data ze getraind zijn.

Als je met zo’n voorgetraind model begint, dan heb je ook niet zulke gigantische hoeveelheden tekst nodig om je taalmodel te trainen. GEITje is getraind op 10 miljard tokens Nederlandstalige tekst. Tot een paar honderd miljard tokens is het relatief makkelijk om aan materiaal te komen. Datasets van chatgesprekken om een chatbot op te trainen zijn er nauwelijks voor het Nederlands, maar ze zijn wel overvloedig beschikbaar in het Engels. Door GPT-3.5 als vertaler te gebruiken kan je voor minder dan 100 euro zo tienduizend gesprekken omzetten van het Engels naar het Nederlands.

Dan moet je nog aan GPUs zien te komen. Ja, die zijn extreem duur om te kopen. En ze zijn ook duur om te huren bij gangbare cloudproviders als AWS of Azure. Maar als je gaat voor een cloudprovider die van GPUs zijn specialiteit gemaakt heeft, dan kan het allemaal een stuk goedkoper. Providers als Lambda Labs en RunPod kunnen tot wel 80 % goedkoper zijn. Als je er een GPU te pakken weet te krijgen tenminste, want vaak zijn ze allemaal bezet. Daarover in een latere blogpost meer.

3. Omdat het leuk en leerzaam is

De derde reden is misschien wel de belangrijkste reden. Het is gewoon een ontzettend leuk en leerzaam project!

Taalmodellen hebben al langer mijn interesse, en die is het afgelopen jaar met doorbraak van de LLMs alleen maar gegroeid. Er over lezen is leerzaam, en ze zelf toepassen nog leerzamer. Maar niets geeft je meer inzicht in een model dan het zelf te moeten trainen.

Om GEITje te kunnen maken heb ik me moeten verdiepen in de verschillende foundation models en hun voor- en nadelen. Ik heb me moeten verdiepen in de kwaliteit van datasets, en ik heb beslissingen moeten nemen over het selecteren van data. Ik heb moeten uitzoeken wat de verschillende manieren van evalueren van modellen zijn, en welke van toepassing zijn voor het Nederlands. Ik heb datasets bestaande uit gigantische tekstbestanden moeten parsen en opsplitsen in losse documenten. Ik heb trainingscode moeten schrijven, waardoor ik meer inzicht heb gekregen in de details van 🤗 Hugging Face Transformers, accelerate en Datasets. Ik heb een steeds groter worden README moeten schrijven en onderhouden. Ik heb moeten experimenteren met verschillende manieren van trainen op meerdere GPUs tegelijk, om zo tot de meest kosten-efficiënte methode te komen. Ik heb voor het eerst trainings-grafieken live in de cloud kunnen zien bij Weights & Biases. Ik heb een Gradio-interface aangepast om een live demo van GEITje chat aan te kunnen bieden.

En tenslotte heb ik simpelweg trainingscode moeten debuggen en werkend moeten krijgen in de cloud op gehuurde GPUs. Het is een hele ervaring om een probleem op te lossen terwijl je de minuten niet ziet alleen ziet aftikken op de klok, maar ook direct op je eigen creditcard.