- A toolkit for making real world machine learning and data analysis applications in C++ Stefan Schweter Masterseminar: Klassifikation und Clustering, Wintersemester 2016/2017, Dozent: Stefan Langer 19122016 Stefan Schweter - A toolkit for making real world machine learning in C++ 1 / 30
Überblick Stefan Schweter - A toolkit for making real world machine learning in C++ 2 / 30
Einführung Stefan Schweter - A toolkit for making real world machine learning in C++ 3 / 30
Stefan Schweter - A toolkit for making real world machine learning in C++ 4 / 30
C++ Bibliothek für maschinelles Lernen Hauptautor: Davis King Entwicklung seit 2002 Intuitive API - Namespace :: Getestet auf MS Windows, Linux, Mac OS X Stefan Schweter - A toolkit for making real world machine learning in C++ 5 / 30
Aktuelle Version 192 Minorrelease alle 2 Monate Boost Software License (GPL kompatibel 1 ) Unterstützung von Office of the Director of National Intelligence (ODNI) und Advanced Research Projects Activity (IARPA) in 2014 1 Siehe https://wwwgnuorg/licenses/license-listdehtml#boost Stefan Schweter - A toolkit for making real world machine learning in C++ 6 / 30
Sehr gute Dokumentation und Beispielprogramme Sehr umfangreiche Testsuite Stefan Schweter - A toolkit for making real world machine learning in C++ 7 / 30
Stefan Schweter - A toolkit for making real world machine learning in C++ 8 / 30
Der (oder auch Truck Number) bezeichnet die Zahl an Projektmitarbeitern, die ausfallen können, ohne das Projekt zu gefährden Stefan Schweter - A toolkit for making real world machine learning in C++ 9 / 30
Faktor 1: Sehr schlecht 46 Prozent von 133 populären Projekte auf GitHub haben einen von 1 2 2 Siehe https://heisede/-2752849 Stefan Schweter - A toolkit for making real world machine learning in C++ 10 / 30
von machine learning Bibliotheken 3 : Projekt Beteiligte Scikit-learn 10 757 Theano 9 270 caffe 4 219 NLTK 2 185 TensorFlow 2 552 Keras 1 313 Torch 1 109 1 47 3 Berechnung siehe https://githubcom/aserg-ufmg/truck-factor Stefan Schweter - A toolkit for making real world machine learning in C++ 11 / 30
Stefan Schweter - A toolkit for making real world machine learning in C++ 12 / 30
Klassifikation: Binäre und Multiklassen Klassifikation mittels Support-Vektor-Maschine (mit diversen Kernel) Clustering k-means Newman Cluster Chinese whispers Regression kernel recursive least squares (KRLS) Support vector regression Deep Learning LeNet (convolutional neural network) Stefan Schweter - A toolkit for making real world machine learning in C++ 13 / 30
Algorithmen aus mehr als 30 wissenschaftlichen Veröffentlichungen implementiert Mehr im Machine learning guide 4 zu finden 4 Siehe http://net/ml_guidesvg Stefan Schweter - A toolkit for making real world machine learning in C++ 14 / 30
Stefan Schweter - A toolkit for making real world machine learning in C++ 15 / 30
Programm zur Informationsextraktion (Named Entity Recognition und Relation extraction) Entwickelt am Massachusetts Institute of Technology (MIT) Verwendet zur Klassifikation Trainierte Modelle für Englisch, Spanisch und Deutsch 5 API für C/C++, Java, MATLAB, Java, Python und R Vergleichbare Ergebnisse 6 für CoNLL 2003 NER shared task zu Systemen wie Stanford NER 5 Siehe https://githubcom/mit-nlp//commit/ f124510782b2054e264f288c65404763fae32b3f 6 Siehe https://githubcom/mit-nlp//wiki/evaluation Stefan Schweter - A toolkit for making real world machine learning in C++ 16 / 30
Demo: Hidden Markov SVM für Namenserkennung Stefan Schweter - A toolkit for making real world machine learning in C++ 17 / 30
Beispiel für Namenserkennung mit Hidden Markov Support Vektor Maschinen 7 7 Siehe http://wwwaaaiorg/papers/icml/2003/icml03-004pdf Stefan Schweter - A toolkit for making real world machine learning in C++ 18 / 30
Stefan Schweter - A toolkit for making real world machine learning in C++ 19 / 30
Dog hipsterizer 8 8 Siehe http://blognet/2016/10/ Stefan Schweter - A toolkit for making real world machine learning in C++ 20 / 30
Stefan Schweter - A toolkit for making real world machine learning in C++ 21 / 30
Erweiterung des am CIS entwickelten Programms zur Satzendeerkennung (EOS) Bisher rein regelbasierte Klassifikation von potentiellen Satzgrenzen Klassifikator soll mittels Support-Vektor-Maschine auf einem großen Korpus für verschiedenen Sprachen trainiert werden Gelernter Klassifikator soll EOS bei der Bewertung von potentiellen Satzgrenzen unterstützen Stefan Schweter - A toolkit for making real world machine learning in C++ 22 / 30
Stefan Schweter - A toolkit for making real world machine learning in C++ 23 / 30
Geschichte EOS ( End of sentence ) wurde seit dem Sommersemester 2009 von mehreren Studenten unter Leitung von Herrn Dr Maximilian Hadersbeck weiterentwickelt: Mitwirkende (Sommersemester 2009): Susanne Peters, Michael Mandl, Daniel Bruder, David Kaumanns und Jonathan Cummings Mitwirkende (Sommersemester 2010): Florian Fink, Susanne Peters, Daniel Bruder, David Kaumanns, Dino Azzano, Estelle Perez und Simon Thum Mitwirkende (Wintersemester 2012/2013): Benno Weck, Jasmin Chebib, Martin Röhrs, Matthias Lindinger, Eamonn Lawlor, Angela Krey und Stefan Schweter Stefan Schweter - A toolkit for making real world machine learning in C++ 24 / 30
Aufbau - Agenten (1) Audhumbla: Markiert potenzielle Satzgrenzen Abbreviation: Abkürzungserkennung via Abkürzungsliste, morphologische Abkürzungserkennung bei unbekannten Abkürzung Cross: Überprüft, ob das Wort nach dem potenziellen Satzende im Text nochmals kleingeschrieben, oder in einer eingebundenen Frequenzliste von häufig kleingeschriebenen Wörtern existiert Trifft eines der beiden Fälle zu, so handelt es sich wahrscheinlich um ein Satzende Stefan Schweter - A toolkit for making real world machine learning in C++ 25 / 30
Aufbau - Agenten (2) Minuscule: Regelbasierter Agent, der überprüft, wie es nach einem potenziellen Satzende im Text weitergeht (zwei Zeilenumbrüche: Satzende, Kleinbuchstabe: Kein Satzende etc) Primus: Überprüft, ob das Wort nach einem potenziellen Satzende in einer Liste von häufigen Satzanfängen steht Regex: Agent kann anhand einer Liste von regulären Ausdrücken potenzielle Satzenden bewerten Auszug: -/(str\)$/i Stefan Schweter - A toolkit for making real world machine learning in C++ 26 / 30
Scoreberechnung Jedes potenzielle Satzende wird von den genannten Agenten bewertet - jeder Agent liefert dafür einen Score zurück, der im Bereich von -127 bis +127 liegt -127 bedeutet: Der Agent vermutet, dass kein Satzende vorliegt +127 bedeutet: Der Agent vermutet, dass ein Satzende vorliegt Nach dem alle Agenten die potenzielle Satzgrenze bewertet haben, werden alle Bewertungen zusammengerechnet Liegt der Wert über einen bestimmten Schwellenwert so liegt ein Satzende vor Stefan Schweter - A toolkit for making real world machine learning in C++ 27 / 30
Demoseite EOS ist unter http://eoscislmude erreichbar Stefan Schweter - A toolkit for making real world machine learning in C++ 28 / 30
API Überblick Die EOS API kann zb per Kommandozeile angesprochen werden: curl -d '{"text":"herr Prof Dr Müller geht heute in die Universität", "language": "de"}' \ apieoscislmude/api/v1 Beispielrückgabe: { } "result" : "Herr Prof Dr Müller geht heute in die Universität</eos>\n" Stefan Schweter - A toolkit for making real world machine learning in C++ 29 / 30
Fragen? Vielen Dank für die Aufmerksamkeit! Folien und Programme sind unter https://gitlabcom/stefan-it/-presentation zu finden Stefan Schweter - A toolkit for making real world machine learning in C++ 30 / 30