[Java/Machine Learning] Starten met AI & machine learning

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • wwx
  • Registratie: Februari 2012
  • Laatst online: 20-09 14:57
Ik vind AI en Machine Learning enorm interessant en indrukwekkend.
De learning curve lijkt me echter heel erg snel omhoog te schieten. Ik zou me er graag wat verder in verdiepen en daarom vraag ik hier om wat tips/suggesties en hulp. Aan de hand van een aantal voorbeeldjes kunnen jullie me misschien concreter helpen.

Een voorbeeld van wat ik zou willen maken bij wijze van test:
Ik trek een hele hoop profielfoto's van vrouwen uit facebook, en geef ze allemaal een score op 10. Kan ik een AI dan via Machine Learning leren om andere vrouwen die het nog niet gezien heeft op basis van mijn standards punten te geven? :P

Ander voorbeeld:
Ik heb een hele hoop chat messages van op een Minecraft server. Ik train manueel zelf AI door een hoop messages te classificeren onder een bepaalde categorie. (bijvoorbeeld: compliment, salty, haat, vriendelijk, ...)
Weer opnieuw, kan mijn AI dat dan later zelf ook doen?

Dit zijn enkele voorbeelden die mij niet extreem ingewikkeld lijken voor AI (misschien ben ik hier compleet fout), maar ik heb geen flauw idee waar te beginnen. Is er misschien iemand die me wat op weg kan helpen?

In welke taal? Graag in Java als het kan. Simpelweg omdat ik daar het meeste ervaring mee heb. C# kan ook nog wel door de beugel, maar liefst Java :)

Ik zou al deze dingen lokaal willen doen. Ik weet dat met een cloud service dit waarschijnlijk nog een pak makkelijker is, maar dat is niet mijn intentie. (en het moet ook gratis blijven :) )

Acties:
  • 0 Henk 'm!

  • martijntjuhh
  • Registratie: Juni 2009
  • Laatst online: 02-05 19:15
Ik zou als ik jou was beginnen op Coursera, EDX, Lynda.com of iets vergelijkbaars. Volg eens een machine learning course voor beginners, dan wordt duidelijk met welk probleem je te maken hebt en ken je de terminologie binnen machine learning.

Je zou voor jouw tweede voorbeeld eens specifiek naar (semi-) supervised learning kunnen kijken. En daar binnen weer naar classificatie-algoritmes.

WEKA kun je uiteindelijk vanuit Java-code gebruiken, ik zou echter aanraden om eerst zo'n course te volgen. Ik denk namelijk dat je het een beetje onderschat (geeft niets, gebeurde mij ook :P).

Succes!



EDIT: Waar het op neerkomt is dat je een model gaat genereren a.d.h.v. een dataset. Een voorbeeld van een dataset zou bijvoorbeeld het volgende kunnen zijn:


Berichttype

Bevat scheldwoorden

Bevat 'Alsjeblieft'

Bevat 'Dankjewel'

Aantal woorden
HaatJaNeeNee1
VriendelijkNeeNeeJa3
SaltyNeeNeeNee5


Deze dataset zou je kunnen genereren op basis van een aantal scenario's, in het bovenstaande voorbeeld zijn dat dus de volgende scenario's:
  • Als een bericht scheldwoorden bevat: Haat
  • Als een bericht geen scheldwoorden maar wel het woord dankjewel bevat: Vriendelijk
  • Als een bericht geen scheldwoorden, 'alsjeblieft' of 'dankjewel' bevat en het bericht 5 woorden bevat: Salty
Natuurlijk is dit slechts een heel klein voorbeeld, bij lange na niet genoeg om een model te kunnen maken! Daarvoor heb je denk ik duizenden berichten nodig waarmee je uiteindelijk niet-geclassificeerde berichten op een nauwkeurige manier kunt voorspellen.

Btw, ik wil je niet ontmoedigen, maar besef wel dat het vrij veel werk en tijd gaat kosten als je dit echt goed wil doen. Het is natuurlijk wel supervet als het uiteindelijk werkt! :)

[ Voor 59% gewijzigd door martijntjuhh op 12-01-2017 17:04 ]

Het is bedoening, niet bedoeling


Acties:
  • 0 Henk 'm!

  • wwx
  • Registratie: Februari 2012
  • Laatst online: 20-09 14:57
martijntjuhh schreef op donderdag 12 januari 2017 @ 16:49:
Ik zou als ik jou was beginnen op Coursera, EDX, Lynda.com of iets vergelijkbaars. Volg eens een machine learning course voor beginners, dan wordt duidelijk met welk probleem je te maken hebt en ken je de terminologie binnen machine learning.

Je zou voor jouw tweede voorbeeld eens specifiek naar (semi-) supervised learning kunnen kijken. En daar binnen weer naar classificatie-algoritmes.

WEKA kun je uiteindelijk vanuit Java-code gebruiken, ik zou echter aanraden om eerst zo'n course te volgen. Ik denk namelijk dat je het een beetje onderschat (geeft niets, gebeurde mij ook :P).

Succes!



EDIT: Waar het op neerkomt is dat je een model gaat genereren a.d.h.v. een dataset. Een voorbeeld van een dataset zou bijvoorbeeld het volgende kunnen zijn:


Berichttype

Bevat scheldwoorden

Bevat 'Alsjeblieft'

Bevat 'Dankjewel'

Aantal woorden
HaatJaNeeNee1
VriendelijkNeeNeeJa3
SaltyNeeNeeNee5


Deze dataset zou je kunnen genereren op basis van een aantal scenario's, in het bovenstaande voorbeeld zijn dat dus de volgende scenario's:
  • Als een bericht scheldwoorden bevat: Haat
  • Als een bericht geen scheldwoorden maar wel het woord dankjewel bevat: Vriendelijk
  • Als een bericht geen scheldwoorden, 'alsjeblieft' of 'dankjewel' bevat en het bericht 5 woorden bevat: Salty
Natuurlijk is dit slechts een heel klein voorbeeld, bij lange na niet genoeg om een model te kunnen maken! Daarvoor heb je denk ik duizenden berichten nodig waarmee je uiteindelijk niet-geclassificeerde berichten op een nauwkeurige manier kunt voorspellen.

Btw, ik wil je niet ontmoedigen, maar besef wel dat het vrij veel werk en tijd gaat kosten als je dit echt goed wil doen. Het is natuurlijk wel supervet als het uiteindelijk werkt! :)
Bedankt al voor die info! Ben in het algemeen niet zo'n fan van zo van die websites met courses. Vaak ligt het niveau veel te hoog of veel te laag. Maar ik ga het nog eens proberen. Ondertussen heb ik ook al wat werkend gekregen met Classifier4J. Het werkt niet perfect zoals ik wil, maar ik kan er al mee verder voor tekst. Voor afbeeldingen weet ik echter nog altijd niet wat te gebruiken. Ik heb WEKA geïnstalleerd, maar heb op dit moment nog geen idee hoe ik het zou kunnen gebruiken.

Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 20:22
wwx schreef op donderdag 12 januari 2017 @ 19:40:
[...]
Bedankt al voor die info! Ben in het algemeen niet zo'n fan van zo van die websites met courses. Vaak ligt het niveau veel te hoog of veel te laag. [...]
Is er iets specifieks waar je tegenaan loopt?
Ik kan overigens deze course aanbevelen als je echt net begint: https://www.coursera.org/learn/machine-learning Het is wel een hele opgave om er doorheen te komen (als in je moet er tijd in investeren), echter heb je aan het eind wel een goed idee van hoe je dit soort dingen zou kunnen doen in een willekeurige programmeertaal.

Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 09-10 13:33
Persoonlijk ben ik meer van Python als het gaat om ML, maar de meeste voorbeelden die je noemt heb ik daar wel eens in gebouwd en kun je in korte tijd maken.

Voor ML kun je bij Python prima uit de voeten met het scikit-learn package: http://scikit-learn.org/stable/.

Voorbeeld 1:
Zelf handtekeningherkenning ipv vrouwen gedaan, maar idee is hetzelfde. Eerst moet je de foto's inladen en converteren naar "features". Afhankelijk van het soort plaatjes kun je allerlei features verzinnen, zoals RGB waarden of contrasten. Kijk bijvoorbeeld eens naar Histogram of Gradients (zie scikit-image voor Python).

Als de plaatjes eenmaal geconverteerd zijn naar numerieke features, kun je deze met een classificatie gaan koppelen aan je scores. De klassificatie algoritmes haal je bij Python uit scikit-learn, zie bijvoorbeeld SVM of multiclass naive bayes om wat te noemen.

Voorbeeld 2:
Heb iets dergelijks gemaakt om IMDB reviews als positief of negatief te klassificeren.

Idee is weer om de teksten eerst naar numerieke features te converteren. Versimpeld betekend dit dat je een grote matrix maakt met alle reviews als rijen en als kolommen alle woorden in de reviews (na verwijderen stopwoorden, conversie lowercase, etc). In de cellen van de matrix staat of het woord voorkomt in een review of niet. Zie tfidf vectorizer in scikit-learn voor meer info.

Deze document-term-matrix voer je weer aan een klassificatie algoritme. Door dat algoritme te trainen koppel je de woorden aan de labels positief of negatief. Met de getrainde vectorizer en classifier kun je ook nieuwe teksten klassificeren. Let er wel op dat woorden die niet in de trainingsdata zaten niet meedoen in de klassificatie, zorg dus voor een grote trainingset!

Met kant en klare packages kun je snel resultaat boeken, maar als je er echt in wilt duiken moet je ook weten hoe de algoritmes onder de motorkap werken. De coursera cursus hierboven is dan zeker een zeer goede eerste stap! Je zult zien dat er zelfs bij een eenvoudige lineaire of logistische regressie nog best wat (wiskunde) komt kijken...

[ Voor 41% gewijzigd door Morrar op 13-01-2017 00:52 ]