Vi snakker jul, julekaker og maskinlæring!
Det nærmer seg jul nok en gang og lukten av nystekte julekaker brer om seg i det ganske land. For et par år siden satt vi i den samme situasjonen og funderte på hva vi skulle bake dette året. Selv om de syv slag er tradisjonsrike julekaker så er det lett å kjenne behov for litt fornying på kakefatet. Vi tok derfor på oss oppgaven ingen hadde gitt oss – å lage det 8. slag til jul.
For ordens skyld (selv om du selvfølgelig husker dem😉) er de originale sju julekakeslagene: Sandkaker, Pepperkaker, Fattigmann, Goro, Berlinerkranser, Krumkaker og Serinakaker. Disse kakene i tillegg til en rekke andre julekaker og «juleaktige» kaker ble datagrunnlaget vi startet med i vår søken etter en ny julekake. Heller enn å stole på egen intuisjon og konditorferdigheter besluttet vi at det enkleste ville være å benytte maskinlæring til jobben.
Desember 2019 ble preget av mer arbeid foran pc’en enn over grytene, men til slutt var det klart for å lage og teste den nye julekaken. Vi regnet den som en gigantisk suksess, men vi rakk ikke å fortelle hele omverdenen om den nye kakens fortreffelighet før 24.desember. Merkelig nok var det ikke så mange som startet julebaksten på selveste julaften, og to år senere har ikke det 8.slag jul fått det store nedslagsfeltet i den norske julekakefolkesjela som vi håpet. Det ønsker vi å gjøre noe med og henter derfor frem hva vi gjorde og hvordan oppskriften ble, slik at du kan bli med oss og lage Norges nyeste og beste julekake!
Planen vår var enkel. Vi baserte oss på julekakeoppskrifter vi kjente fra før og ville bruke maskinlæring til å lage en oppskrift som var både ny og innovativ, men likevel inneholdt kjernen av det som gjør en julekake til nettopp en julekake. Mer presist brukte vi et nevralt nettverk basert på åpen kildekode, textgenrnn. Den kom ferdig trent ut av boksen, og den kjørte i Google Colab, som gjorde det lett å trene den på nytt på våre julekakeoppskrifter.
Vi hopper her lekent over alle detaljene om hvordan et nevralt nettverk virker, men om du er interessert i dette anbefaler vi å lese litt rundt på våre tidligere blogginnlegg. Det viktigste du behøver å få med deg er at modellen ble trent på store mengder generisk tekst fra rundt omkring på Internett. Dette gjorde den i stand til å produsere noe vi kjenner igjen som tekst, og ikke bare en tilfeldig strøm av tegn. Når vi så trente den på våre oppskrifter, bruker den det den allerede har lært om generisk tekst og tilpasser vektene i modellen til våre spesifikke tekster. Slik får vi et nevralt nettverk som ikke bare kan produsere noe som ser ut som tekst – det kan rett og slett produsere julekakeoppskrifter!
Skal en lære modellen hva en julekakeoppskrift er, blir det litt snaut med de vanlige sju slagene. For å få noe mer data å trene på, la vi hodene i bløt og fant fram til 25 forskjellige kaker vi på en eller annen måte anser som juleaktige. Dette er fortsatt ikke all verden med data, men i alle fall betydelig mer enn sju. Selv om mye er ferdig i modellen som den er, måtte vi ty til en del fikling og eksperimentering med parametere for å få et brukbart resultat. Vi skal ikke gå inn på hvorfor vi satte rnn til 256, kjørte 1000 iterasjoner og valgte en modell på ordnivå og ikke tegnnivå. Kortversjonen er at modellen etter hvert begynte å produsere tekst som dette:
Her kan man merke seg temperaturparameteren. Den angir hvor mye tilfeldighet modellen baker inn i resultatet. Et lavt tall gir lite innslag av tilfeldighet, og fører typisk bare til teksten «2 teskjeer kardemomme», eller noe annet som er veldig vanlig i de fleste julekakeoppskrifter.
Etter 1000 iterasjoner begynte resultatet å se nokså lovende ut.
Dokumentasjonen til textgenrnn er tydelig på at man ikke kan forvente perfekt tekst og at det ofte vil være nødvendig med noe manuell justering i etterkant. Vi kjørte derfor modellen 10 ganger og valgte den oppskriften vi hadde mest tro på som et utgangspunkt.
- 300 g mel
- 0,5 dl melk
- 0,5 dl kremfløte
- 150 g rosiner
- 2 ts kardemomme
- 1 sitron
- 175 g sukker
- 100 g smeltet smør
- 2 ss brandy/likør
- 1 egg
Vi valgte denne oppskriften fordi den har en betydelig andel tørre ingredienser (mel og sukker), væske (melk, egg, kremfløte og smør) og interessante smaksingredienser (rosiner, kardemomme, sitron og brandy). Et fantastisk utgangspunkt for en julekake.
Vi bestemte oss for å se hva slags rolle ingrediensene vanligvis har i sine oppskrifter og baserer vår fremgangsmåte på at:
- Mel er vanligvis basen og blandes med resten av de tørre ingrediensene, i dette tilfellet sukker og kardemomme, før væsken tilsettes.
- Smeltet smør blandes gjerne med sukker og avkjøles før det tilsettes blandes med resten.
- Fløte, melk og egg blandes sammen med smør og sukker.
- Sitron tilsettes som regel for sitt smakfulle skall, og tilsettes sammen med melet og de andre tørre ingrediensene.
- Brandy tilsettes sammen med resten av væsken.
Dette gir oss følgende bakeinstruksjoner:
- Smelt smør og bland inn sukker. La blandingen avkjøles.
- Kremfløte, melk, egg og brandy blandes sammen og tilsettes avkjølt smør og sukker.
- Riv skallet til sitronen og bland inn mel, sukker, kardemomme og rosiner.
Dette gav en fast og fin deig som kan formes i ulike figurer om du ønsker det, før de stekes på en langpanne på 200°C til de er gylne. Slik ble resultatet:
Og der har du det!
Det 8.slag julekake. Vi har besluttet å kalle den for Bekkstang, da den garantert knekker i gang julestemningen i heimen! Bak dem gjerne avlange for maksimal innlevelse! Smaken på kakene var helt nydelig, og vi vil si at bruken av sitron og brandy er rett og slett genialt!
Vi håper du har lyst til å prøve denne oppskriften for å friske opp det tradisjonelle julekakefatet. Men først og fremst håper vi at dette innlegget har inspirert deg til å utforske mulighetsrommet som ligger i maskinlæring: Det finnes ingen grenser for hva man kan få til dersom vi bruker fantasien! I dette tilfellet kunne vi i tillegg brukt maskinlæring for å bestemme formen på kakene, fremgangsmåten og navnet på kaken, men vi ønsket også å vise at det ikke krever all verden av jobb å lage noe som er litt morsomt – og i dette tilfellet, veldig smakfullt!
Lykke til med både baking og maskinlæring!