Even doorbijten: intro taalmodellen

Om te wennen aan de begrippen die in deze wereld gebruikt worden werk ik een voorbeeld uit.
Laten we eens uitgaan van een klein fictief taalmodel dat is getraind over een Nederlandstalig corpus. We willen dat het model een voorspelling kan doen over het volgende woord in een zin. We beperken ons daarbij tot een subset van 6 woorden: “een”, “de”, “rode”, “hond”, “kater” en “.”.

In dit bericht komen de concepten taalmodel, training, corpus, voorspelling, prompt, context window voor. Die worden in volgende berichten verder uitgewerkt.

Een ‘officiële’ definitie van taalmodel is: een waarschijnlijkheidsverdeling over een volgorde van woorden. Zie het lemma in de Engelstalige(*) wikipedia en de uitwerking in het artikel dat ik als inspiratie voor het onderstaande voorbeeld gebruik.

Het taalmodel geeft per woord de waarschijnlijkheid (de kans) om in een zin W voor te komen die uit de woorden w1, w2, …, wn bestaat. Wiskundig afgekort schrijven we voor deze kansen P(w1), P(w2), …, P(wn) (de P komt van probabiliteit). Voor de zin als geheel schrijven we de waarschijnlijkheid als P(W).
Als de kans om in een zin voor te komen per woord onafhankelijk zou zijn van de plaats van dat woord in de zin, dan zouden we P(W) berekenen door de afzonderlijke woordkansen met elkaar te vermenigvuldigen: P(W) = P(w1)*(P(w2)*…*P(wn). Die afzonderlijke woordkansen zou je dan kunnen bepalen door in een grote verzameling Nederlandstalige teksten, bijvoorbeeld alle teksten op Nederlandstalige websites bij elkaar (waarom niet), de frequentie per woord te tellen.

Helaas staat er in de vorige alinea nogal vaak “zou”…
Wil een taalmodel bruikbaar zijn dan moet het zoveel mogelijk aansluiten op de werkelijke wereld. Daar is de kans dat een woord in een zin voorkomt mede afhankelijk van het woord dat er aan voorafgaat, en zelfs van meerdere woorden die er al staan. De kansen waarmee we moeten rekenen zijn dus voorwaardelijke kansen.
Als voorbeeld: de kans dat er na “de” het woord “rode” komt. We schrijven dat als P(“rode” | “de”). In het algemeen P(w2 | “de”) voor elk van de woorden in de subset. En zo door, voor een langere zin: P(“hond” | “de rode”) en zelfs P(“.” | “de rode hond”).

De waarschijnlijkheid van de hele zin “de rode hond.” ofwel P(“de rode hond.”) is dan te berekenen door de woordkansen met elkaar te vermenigvuldigen: P(“de”) x P(“rode” | “de”) x P(“hond” | “de rode”) x P(“.” | ” de rode hond”). Zo kunnen we ook de de waarschijnlijkheden van alle andere mogelijke zinnen met woorden uit onze subset berekenen, ook van nonsense zinnen. In het Nederlands zijn zinnen waarin 2x achter elkaar “de” voorkomt zeldzaam, P(“de” | “de”) is zo goed als nul.

In AI gebruiken we taalmodellen om vraag/antwoord gesprekken op te zetten. En ‘vraag’ is hierbij een te specifiek begrip, in het jargon wordt de algemenere term prompt gebruikt. Met de prompt zet je het model als het ware aan en gaat het reageren met — woord voor woord — de zinnen met de beste waarschijnlijkheid.

Wat de beste waarschijnlijkheid is, is niet alleen afhankelijk van het voorkomen van woorden in een taal en de voorwaardelijkheid van de volgordes maar ook van de context die door de prompt wordt opgeroepen. Men spreekt hier van het context window.
In ons fictieve geval kun je je voorstellen dat in de meeste contexten P(“de rode hond.”) en P(“de rode kater.”) wel ongeveer gelijk zijn. Dat is echter totaal anders als er –bij wijze van voorbeeld– in het context window sprake is van stripverhalen van Jan Kruis (daar komt de rode kater…) of juist van infectieziekten die gevaarlijk zijn voor zwangere vrouwen (pas op voor de rode hond…).

Nu hebben we aardig zicht op de volledige complexiteit. Niet alleen de voorwaardelijke waarschijnlijkheden gebaseerd op de aanwezigheid van eerdere woorden in een te vormen zin zijn van belang, maar ook voorwaardelijkheden die te maken hebben met context, met betekenis. Daar gaat het ook om waarschijnlijkheden, maar conceptueel gezien van een totaal andere orde. Op dat vlak zijn de afgelopen jaren de grote klappers gemaakt die de technologie zo veel verder hebben gebracht.

(*) In de Nederlandstalige versie is ingevoegd dat een taalmodel een ‘kunstmatig-intelligente tekstgenerator zou zijn die de waarschijnlijkheidsverdeling opmaakt, maar volgens mij wordt daarmee de wagen voor het paard gespannen.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *