© Droidworker/Shutterstock.com
Teil 1: Machine Learning hält Einzug in .NET mit .NET Core 3

ML einfach mit .NET


Mit .NET Core werden nicht nur WPF und WinForms Teil der neuen quelloffenen Implementierung von .NET, Microsoft möchte nun auch Machine Learning für jedermann einsetzbar machen. Darum hält nunmehr Machine Learning mit dem ML.NET Framework Einzug in .NET Core. In dieser Artikelserie zeigen wir, was ML.NET kann, welche Möglichkeiten es dem Entwickler an die Hand gibt, wie das Tooling und die APIs aussehen und was unter der Haube passiert.

Mit ML.NET (Machine Learning für .NET) veröffentlicht Microsoft ein für die Softwareentwicklung revolutionäres Framework [1]. Möchte man maschinelles Lernen in den eigenen Anwendungen einsetzen, ist es nicht länger notwendig, sich im Detail mit der Mathematik und der Implementierung von z. B. Transformations-, Klassifikations-, Regressions- oder SVM-Algorithmen auszukennen oder sich damit auseinanderzusetzen, denn all das bringt ML.NET mit. Das Tooling um das Framework herum tut sein Übriges: Es war nie einfacher, den richtigen Algorithmus für den gewünschten Anwendungsfall auszusuchen, die eigenen Daten darauf zu trainieren und schließlich in den eigenen Anwendungen einzusetzen. Damit dreht Microsoft den Spieß um: Daten und Anwendungsfall stehen im Vordergrund, nicht länger die Implementierung.

Kurze Rede, schnell zum Sinn: Ein Beispiel sagt mehr als tausend Worte. Starten wir also mit einer praktischen Demo, um das Gesagte zu untermauern.

Los geht’s

Um ein Cross-Plattform-Developer-Tooling anzubieten, bringt ML.NET ein Command Line Interface (CLI) mit [2]. Wir werden später etwas mehr darüber erfahren. Für das erste schnelle Beispiel werden wir jedoch Visual Studio und die Model Builder Extension heranziehen. Die Erweiterung für Visual Studio benutzt unter der Haube ihrerseits das CLI.

Die Extension kann über das Hauptmenü Extensions | Manage Extensions installiert oder alternativ unter [3] heruntergeladen werden. Für diese erste Demo benutzen wir Visual Studio 2019. Nach erfolgreicher Installation beginnen wir mit einer einfachen, leeren .NET-Core-Konsolenanwendung. Im Kontextmenü des Projektknotens im Solution Explorer befindet sich ein neuer Eintrag: Add | Machine Learning. Die Auswahl öffnet den ML.NET Model Builder, wie in Abbildung 1 zu sehen.

sedlaczek_mlnet_1.tif_fmt1.jpgAbb. 1: Model Builder Extension in Visual Studio

Der Model Builder bietet einen einfachen Assistenten, der durch fünf Schritte führt. Zuerst wählen wir das Szenario aus, in diesem Fall Sentiment Analysis. Schritt zwei verlangt von uns die Daten, mit denen das neue Machine Learning Model erstellt und trainiert werden soll. Dazu laden wir unter [4] das Wikipedia Detox Dataset herunter. Dieses enthält Userkommentare und eine Klassifikation, ob der Kommentar positive oder negative Aussagen im Sinne von Emotionalität enthält. Das ML Model soll mit diesen Daten trainiert werden, um zu bestimmen, ob ein beliebiger anderer Kommentar positive oder negative Aussagen enthält. Nach dem Download wählen wir die Datei im zweiten Schritt des Model Builders aus. Eine kleine Vorschau wird angezeigt, und die vorherzusagende Spalte muss ausgewählt werden. Für dieses Beispiel ist das die Spalte Sentiment.

Es folgt Schritt drei – das Trainieren des Models. Ein Klick auf den Button Start training genügt und der Model Builder beginnt sofort damit, verschiedenste ML-Algorithmen zu durchlaufen und den für unser Problem am besten passenden auszuwählen, um anschließend das Model zu trainieren. So viel sei an dieser Stelle verraten: Unter der Haube wird AutoML für die Algorithmenselektion eingesetzt [5]. Eventuell sollte man hier ein wenig mehr Zeit einplanen, als die vorgegebenen 10 Sekunden. Nach 30 Sekunden Trainingszeit findet der Model Builder einen Algorithmus mit einer Genauigkeit von 88,24 Prozent. Das bedeutet, dass das erzeugte Model bei 88,24 Prozent aller Vorhersagen in der Trainingsphase richtig lag.

Schritt vier des Assistenten zeigt uns anschließend eine Zusammenfassung des durchgeführten Prozesses, und ein paar Kennwerte zur Performance des Models. Mehr dazu später in diesem Artikel.

Schließlich werden in Schritt fünf das finale Model und der zugehörige Code in Form von zwei neuen Projekten generiert und der Solution hinzugefügt. Das Codebeispiel in Listing 1 zeigt, wie einfach das Model für Vorhersagen in der eigenen Anwendung benutzt werden kann.

Listing 1

var context = new MLContext(); var model = context.Model.Load(GetAbsolutePath(MODEL_FILEPATH), out DataViewSchema inputSchema); var engine = context.Model.CreatePredictionEngine<ModelInput, ModelOutput>(model); var input = new ModelInput() { Sentiment = false, SentimentText = "This is not correct and very stupid." }; var output = engine.Predict(input); var outputAsText = output.Prediction == true ? "negative" : "positive"; Console.WriteLine($"The sentence '{input.SentimentText}' has a {outputAsText} sentiment with a probability of {output.Score}.");

Führt man den Code aus Listing 1 mit dem trainierten Model aus, lautet die Ausgabe: The sentence 'This is not correct and very stupid.' has a negative sentiment with a probability of 0.7026196. Der eine oder andere Leser wird sicher zustimmen, dass es schon fast gar nicht mehr einfacher geht, Machine Learning in die eigene Anwendung zu integrieren. Eine detaillierte Beschreibung und Guidelines für die Optimierung der erzeugten Models findet man unter [6].

Bevor wir uns nun aber in die Details der Algorithmen, Models, APIs und des Toolings stürzen, soll ein Überblick über ML.NET ein Gesamtbild vermitteln.

Überblick

ML.NET war ursprünglich ein Projekt von Microsoft Research. Laut Microsoft hat sich dieses Projekt seit über einer Dekade bewährt und zunehmend etabliert. Es gewann für viele Bereiche innerhalb von Microsoft an Wichtigkeit und hielt Einzug in bekannte Produkte des Unternehmens (z. B. in Windows, Power BI, Office, Defender, Outlook und Bing). ML.NET soll nunmehr seinen Weg in die breite Öffentlichkeit finden und hält daher Einzug in .NET Core.

Version 1.0 wurde im April 2019 veröffentlicht, seit Jun...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang