Machine learning maar dan voor mij (Dutch)

Naast dat ik mij heb verdiept in Async/Await ben ik ook bezig geweest met Machine Learning. In deze post ga ik vertellen wat ik heb gedaan en wat mijn vervolgstappen zijn.

Als begin, visual studio 🌱

Omdat ik nog niet heel veel heb gedaan met machine learning, ben ik eerst begonnen met iets simpelers. Het was voor mij namelijk nog een te grote stap om direct te beginnen met het maken van een prediction model in Python in volledige code zonder hulp van UI. Ik had een keuze uit 2 richtingen, zelf een model maken met behulp van UI of een library gebruiken zoals Tensorflow waarin al een heleboel klaar staat. Omdat ik meer wil leren over hoe machine learning werkt, en wat ik moet doen om zelf ervan gebruik te maken. Heb ik gekozen voor de eerste optie, zelf een model maken met behulp van UI. Dit is waar Visual Studio om de hoek kwam kijken. Visual studio heeft een mooie en overzichtelijke tool om zelf prediction models te maken. Omdat ik zo goed als niks wist over het onderwerp, heb ik een tutorial gebruikt van Microsoft waarin uitgelegd wordt hoe je start met het maken en gebruiken van een model.

In deze tutorial wordt uitgelegd hoe je een dataset, in dit geval een review dataset van yelp, verwerkt tot een prediction model. Deze kan je vervolgens gebruiken om erachter te komen of iets een positieve of negatieve review is.

Datasets

Zoals eerder gezegd gebruikt deze tutorial een dataset van yelp waarin reviews een label krijgen van negatief of positief. Het bestand (een .txt bestand) heeft dus 2 columns, een met de text van de review en 1 met de definitie of het positief of negatief is (0/1). Dit ziet er dan zo uit:

DescriptionValue
Wow... Loved this place1
Not tasty and the texture was just nasty0

Zoals te zien is, heb je hier een positieve (1) en een negatieve (0) reactie. Als je de computer heel veel van deze verschillende reacties geeft, kan je 'm trainen. In het geval van Visual Studio kan je aangeven voor hoelang je de computer wil laten trainen. Als je een goede computer hebt is het voor dit voorbeeld genoeg om rond de 10/20 seconden te zitten. Maar als je computer wat minder is, is het beter om je train tijd langer te maken. Hierdoor geef je je computer meer tijd om berekeningen te maken en met een goed model te komen. Tijdens het trainen gebruikt visual studio verschillende algoritmes om tot een goed model te komen. Hoe langer de computer heeft, hoe beter het resultaat.

Na het trainen geeft de computer een resultaat terug. Je ziet de nauwkeurigheid in percentage, de geselecteerde algoritme voor deze case, de tijd die nodig was om hier tot te komen en het aantal modellen dat is gebruikt. Om zeker te weten dat je model klopt, kan je in de volgende stap een test doen met je eigen tekst. Als dit de juiste resultaten geeft, weet je dat je model goed werkt. (Voor nu dan 😉)

Het gebruiken van je model

Cool, je hebt een model. Maar wat nu, hoe gebruik ik dit en wanneer. In het voorbeeld wordt een console application gebruikt. Vooral omdat het een kleine omgeving is die niet al te veel setup werk nodig heeft. Om gebruik te maken van je model, moet je deze eerst importeren. Visual Studio heeft een extra application toegevoegd aan je workspace die je kan importeren. In mijn geval was dit MyMLAppML.Model. Nu je je model hebt geïmporteerd, is het tijd om deze te gebruiken. Stel je wil een gebruiker een review laten invullen over je restaurant. De klant geeft een stuk tekst over zijn ervaring, deze tekst kan je vervolgens gebruiken in je applicatie. Voordat je een verwachting kan maken over deze ervaring, moet je het eerst omzetten naar iets leesbaars voor de computer. In dit geval heeft de computer een ModelInput nodig.

var input = new ModelInput()
{
    Col0 = "The food was excellent. Loved every bite."
};

Zoals je hierboven misschien ziet, vul ik column 0 met een review string. Dit kan je later veranderen in een input uit bijvoorbeeld een textfield. Column 0 staat gelijk aan de column 0 van je training model. Voor dit voorbeeld is dat dus de beschrijving.

Nu is het tijd voor het leukste gedeelte, een verwachting maken van wat de input wellicht kan zijn. Dit is echt heel erg makkelijk in Visual Studio:

ModelOutput result = ConsumeModel.Predict(input);
string readableResult = result.Prediction == "1" ? "Positive" : "Negative";
Console.WriteLine($"The review: {input.Col0} is: {readableResult}");

Hierboven begin ik eerst met het maken van een verwacht resultaat. Vervolgens zet ik dit om in een voor mens leesbaar resultaat welke in hierna print in de console.

En daarmee heb je je eerste prediction gemaakt. Hoe simpel was dat?

En nu?

Natuurlijk ben ik hier niet een hele week mee bezig geweest. Het is alleen wel het enige "tastbare" wat ik kan laten zien. Ik ben verder namelijk druk bezig geweest met het lezen van het boek Introduction to Machine Learning with Python. Met behulp van dit boek wil ik leren hoe ik zelf de prediction models maak in code, en wat ik nog meer kan doen met machine learning. Want het simpele voorbeeld wat ik hierboven heb laten zien is niet heel spannend.

Conclusie

Het lijkt misschien niet zo spannend. Maar ik heb wel echt bijzonder veel geleerd over Machine Learning deze week. Ik ben naast dit voorbeeld ook nog bezig geweest in Python waarbij ik dus het boek lees en ook veel kijk naar andere voorbeelden die op github staan. Het gebruik van Machine learning is op zoveel lagen te doen. Je kan een API gebruiken zoals Tensorflow, maar dus ook de misschien wel hogere laag van IDE's als Visual Studio en XCode. Wat mij het meeste aantrekt is de nog diepere laag, die van python. Waarom? Omdat het echt een uitdaging is en ieder resultaat voelt als een overwinning 🚀