Från labbet

Shigeru Estamoto

Kan man lära sig Maskininlärning och samtidigt få en second opinion på hur komplex en utvecklingsuppgift är? Att applicera AI på ett dagligt arbetsmoment - för lärandets skull.

Tech used

  • AI
  • Python
  • Tensorflow

Shigeru Estamoto - Lära sig Maskininlärning

Introduktion

Jag har aldrig grävt i Machine Learning eller AI, men det har varit på min lista en längre stund. Vi hade ett gäng olika tankar och idéer kring vad vi ville uppnå under de här dagarna. Allt mellan att generera musikaliska mönster med MIDI-filer som dataset, och att klassifiera en user storys komplexitet baserat på dess attribut. Dock hade vi alla en tanke bakom vad vi själva ville få ut av det, och det var en grundläggande förståelse för vad maskininlärning är och hur man kan applicera det i sina projekt.

Tidiga experiment

Maskininlärning är svårt att greppa. För att få någon form av grundkunskap, så började vi veckan med att försöka knåpa ihop ett par väldigt enkla program. Bland annat saker som att identifiera mönster mellan nummer, och lite mer löjliga saker som att lära en modell att känna igen skillnaden mellan hur folk som pratar låter, och en elektrisk borrmaskin.. Allt för forskningen!

Datainsamling & Klassifiering

Vi använder Pivotal Tracker väldigt mycket i vår utvecklingsprocess. Det är ett redskap, som många andra, som används för att hålla koll på ditt projekts alla olika uppgifter och andra saker som ska göras. Dessa uppgifter, eller stories, brukar ofta tilldelas en grov estimering för hur komplex den är på en fibonacciskala (0, 1, 2, 3, 5, 8 …). Vi tänkte att vi kanske kunde lära en maskin att applicera en rimlig siffra på en story, baserad på dess titel.

Vi exporterade all historisk data vi hade i Pivotal Tracker och genererade ett dataset innehållande en titel på storyn samt dess estimerade nummer. Sedan använde vi oss av Python med Tensorflow för att träna en modell att känna igen ett mönster mellan titeln och numret.

När man håller på med maskininlärning, åtminstone i vårt fall, handlar det mycket om trial and error. Man måste försöka sig fram. Det finns väldigt många parametrar som man kan vrida och vända på för att uppnå ett annorlunda resultat.

A successful estimation of a couple of story titles

Textgenerering

Samtidigt som vi arbetade med att estimera, jobbade vi även med att generera helt nya titlar på uppgifter. Genom att använda så gott som samma process, försökte vi, med en annan modell, träna den att generera uppgifter som lät som uppgifter vi själva skulle kunna ha skrivit för våra projekt i Pivotal Tracker. Tänk om vi kunde skapa en backlog full med uppgifter, och ta fram estimat för alla dem utan att lyfta ett finger? Så mycket ledig tid vi skulle få!

Man skulle kunna säga att de tidiga resultaten var.. blandade:

Not very efficient..

Ett nytt hopp

Vi bestämde oss för att försöka oss på ett litet annat sätt. Jag hade tidigare läst om OpenAI’s Text Generation Model GPT-2, och vi bestämde oss för att ge den ett försök. GPT-2 använder sig av extremt mycket minne, och det dröjde inte länge innan datorn började säga ifrån. Det slutade med att vi fick använda oss av virtuella maskiner på Google Colab, där man kan träna den här typen av modell med publika GPUer. Efter en stund fick vi fram nya resultat, men även dessa var något av en besvikelse:

Better, but still not what we want

Men, efter lite mer inlärning fick vi fram något mycket mer intressant. Nu såg det åtminstone ut som den faktiskt försökte. Det är alltid något, antar jag.

Getting somewhere!

Några sticker så klart ut.. De inre delarna av maskininlärning förblir ett mysterium för oss. Men efter ytterligare 300 epochs (rundor) av inlärning, och ett par fler finjusteringar av modellen, fick vi till slut ut någonting som vi var ganska nöjda med:

Artificial Intelligence!

Sammanfattning

Maskininlärning är fortfarande svårt. Den underliggande matematiken bakom maskininlärning är framtagen av ett gäng fantastiskt intelligenta människor (inte jag), men tack vare dem, finns det ett gäng väldigt användbara plattformar och verktyg som vi kan använda oss av på kreativa sätt i våra projekt.