ML.NET ist ein leistungsfähiges Open-Source-Framework von Microsoft, das es .NET-Entwicklern ermöglicht, maschinelles Lernen in ihre Anwendungen zu integrieren. In diesem Blogpost werden wir ein einfaches Beispiel für die Verwendung von ML.NET in C# durchgehen.
Was ist ML.NET?
ML.NET ist ein Framework für maschinelles Lernen, das speziell für .NET-Entwickler konzipiert wurde. Es ermöglicht die Erstellung und Verwendung von Machine-Learning-Modellen direkt in C#-Anwendungen, ohne dass man auf externe Tools oder Sprachen zurückgreifen muss1.
Unser Beispiel: Sentiment-Analyse
Für dieses Beispiel werden wir eine Sentiment-Analyse durchführen. Wir werden ein Modell trainieren, das die Stimmung (positiv oder negativ) eines gegebenen Textes vorhersagen kann.
Schritt 1: Projekt einrichten
Zuerst erstellen wir ein neues Konsolenprojekt in Visual Studio und fügen das ML.NET NuGet-Paket hinzu
dotnet new console -n SentimentAnalysis
cd SentimentAnalysis
dotnet add package Microsoft.ML
Schritt 2: Datenmodelle definieren
Wir definieren zwei Klassen: eine für die Eingabedaten und eine für die Vorhersage
public class SentimentData
{
[LoadColumn(0)]
public string Text;
[LoadColumn(1), ColumnName("Label")]
public bool Sentiment;
}
public class SentimentPrediction : SentimentData
{
[ColumnName("PredictedLabel")]
public bool Prediction { get; set; }
public float Probability { get; set; }
public float Score { get; set; }
}
Schritt 3: Daten laden und Modell trainieren
Nun laden wir die Trainingsdaten und erstellen unser Modell
var mlContext = new MLContext();
// Daten laden
var dataView = mlContext.Data.LoadFromTextFile<SentimentData>("sentiment_data.txt");
// Daten aufteilen
var splitDataView = mlContext.Data.TrainTestSplit(dataView, testFraction: 0.2);
// Pipeline erstellen
var pipeline = mlContext.Transforms.Text.FeaturizeText(outputColumnName: "Features", inputColumnName: nameof(SentimentData.Text))
.Append(mlContext.BinaryClassification.Trainers.SdcaLogisticRegression(labelColumnName: "Label", featureColumnName: "Features"));
// Modell trainieren
var model = pipeline.Fit(splitDataView.TrainSet);
Schritt 4: Modell evaluieren
Wir evaluieren unser Modell mit den Testdaten
var predictions = model.Transform(splitDataView.TestSet);
var metrics = mlContext.BinaryClassification.Evaluate(predictions);
Console.WriteLine($"Accuracy: {metrics.Accuracy:P2}");
Console.WriteLine($"F1 Score: {metrics.F1Score:P2}");
Schritt 5: Vorhersagen machen
Schließlich können wir unser Modell verwenden, um Vorhersagen zu treffen
var predictionEngine = mlContext.Model.CreatePredictionEngine<SentimentData, SentimentPrediction>(model);
var sampleStatement = new SentimentData
{
Text = "This restaurant was wonderful."
};
var resultPrediction = predictionEngine.Predict(sampleStatement);
Console.WriteLine($"Prediction: {(resultPrediction.Prediction ? "Positive" : "Negative")}");
Console.WriteLine($"Probability: {resultPrediction.Probability:P2}");
Fazit
Dieses einfache Beispiel zeigt, wie man mit ML.NET schnell und einfach ein Sentiment-Analyse-Modell in C# erstellen kann. ML.NET bietet eine Vielzahl von Möglichkeiten für maschinelles Lernen in .NET-Anwendungen, von der Datenverarbeitung über das Training bis hin zur Modellevaluierung und -verwendung.
Mit ML.NET können .NET-Entwickler maschinelles Lernen nahtlos in ihre bestehenden Anwendungen integrieren, ohne zusätzliche Programmiersprachen oder Frameworks erlernen zu müssen. Dies eröffnet neue Möglichkeiten für intelligente Anwendungen in der .NET-Welt.