Les 3b
Opdracht 1: Kies af een toe eens een ander woord Vorige les heb je voorspeld maar die voorspelling werkte niet zo heel goed. Je moet niet altijd het eerste woord kiezen, maar af en toe een ander woord. Kies bijvoorbeeld in 80% van de gevallen het eerste woord, maar in 20% van de gevallen een willekeurig woord uit de lijst. Programmeer dat zelf.
We noemen dit de temperatuur van de voorspelling, in GPT is het ook ongeveer 80%.
(extra) Je kan ook sommige woorden overslaan, bijv woorden die maar 1x voorkomen, of woorden met minder dan 5% kans.
Opdracht 2: Een functie voor voorspellen We gaan nu met de computer tellen of de voorspellingen wel kloppen. Volg deze stappen om je code in orde te krijgen:
Maak een functie, en noem die
voorspel_woord(woord)
Zet de code die je gebruikt om een volgende woord te voorspellen in deze functie. Dat is dus code die op basis van één woord een volgende woord kiest. Die functie heeft als parameter een woord, en return ook een woord. Vergeet dus niet
return woord
in je code te gebruiken!Test de code met de hand een paar keer, bijv weer op het woordje Lion. Komt er het goede woord uit? Probeer nog meer willekeurige woorden!
Opdracht 3: Soms vindt de functie... niks?
Soms krijg je een foutje, een KeyError
bijvoorbeeld bij het woord brainless kan dat gebeuren. Probeer maar eens! Denk eens na hoe dat zou kunnen komen?
Het komt omdat het woord wel als tweede woord voorkomt maar niet als eerste woord. We moeten het dus een klein beetje anders programmeren. In plaats van:
opties = volgende_woord_opzoeker[woord]
moeten we een nieuwe code gebruiken, get
.
Dat doen we zo:
get(woord)
is precies hetzelfde als [woord]
, maar je kan als tweede argument aan Python vertellen wat er terug gegeven moet worden als er niks gevonden is. Doe je dat zoals hierboven, dan krijg je None
terug als er niks gevonden is, in plaats van een fout.
Opdracht 4: Splitsen maar
Nu gaan we de data splitsen:
Maak een variabele aan die
verdeling
heet, en zet die op 0.9.Maak een tweede variabele die aangeeft to waar we inlezen, rond de waarde af, anders wordt het geen integer en krijg je een fout:
grens = round(len(lines)*verdeling)
Met de variabele grens gaan we de data splitsen.
In de lus die je al hebt, ga je nu niet alle dat inlezen, maar maar een stuk: het wordt nu
lines[0:grens]
, van 0 tot grens
Nu gaan we een tweede lus toevoegen waarin je over de data loopt. Die lus gaat van grens tot het einde, zo: lines[grens:]
In de lus gaan we nu de rest van de lijst lines inlezen.
We kijken dan steeds bij een woord of het volgende woord goed voorspeld wordt. Maak de code af op de streepjes. Zet er eerst in woorden bij wat er moet gebeuren, en dan pas code. Tip: Je hebt 3 nieuwe variabele nodig om goed, fout en niks voorspeld te tellen.
Print op het einde van je code de waardes uit. Het wordt ongeveer dit:
Het kan zijn dat jouw getallen een beetje anders zijn, maar het zou wel ongeveer hetzelfde moeten zijn met temperatuur 80 en splitsing 90.
Opdracht 5: Delen (extra)
Als je deze uitvoer hebt, maak het dan wat mooier door door het totaal aantal voorspellingen te delen (goed plus fout plus niks), dan krijg je het aantal keer dat het goed of fout is in percentages uitgedrukt. Dat geeft straks een handiger overzicht. Je krijgt dan ongeveer dit:
Last updated