by Joche Ojeda | Jan 2, 2024 | A.I
This article demonstrates the process of creating, training, saving, and loading a spam detection AI model using ML.NET, but also emphasizes the reusability of the trained model. By following the steps in the article, you will be able to create a model that can be easily reused and integrated into your .NET applications, allowing you to effectively identify and filter out spam emails.
Prerequisites
- Basic understanding of C#
- Familiarity with ML.NET and machine learning concepts
Code Overview
-
- Import necessary namespaces:
using System;
using System.IO;
using System.Linq;
using Microsoft.ML;
using Microsoft.ML.Data;
-
- Define the
Email
class and its properties:
public class Email
{
public string Content { get; set; }
public bool IsSpam { get; set; }
}
-
- Create a sample dataset for training the model:
var sampleData = new List<Email>
{
new Email { Content = "Buy cheap products now", IsSpam = true },
new Email { Content = "Meeting at 3 PM", IsSpam = false },
};
-
- Initialize a new MLContext, which is the main entry point to ML.NET:
var mlContext = new MLContext();
-
- Load the sample data into an IDataView:
var trainData = mlContext.Data.LoadFromEnumerable(sampleData);
-
- Define the data processing pipeline and the training algorithm (SdcaLogisticRegression):
var pipeline = mlContext.Transforms.Text.FeaturizeText("Features", nameof(Email.Content))
.Append(mlContext.BinaryClassification.Trainers.SdcaLogisticRegression());
-
- Train the model:
var model = pipeline.Fit(trainData);
-
- Save the trained model as a .NET binary:
mlContext.Model.Save(model, trainData.Schema, "model.zip");
-
- Load the saved model:
var newMlContext = new MLContext();
DataViewSchema modelSchema;
ITransformer trainedModel = newMlContext.Model.Load("model.zip", out modelSchema);
-
- Create a prediction engine:
var predictionEngine = mlContext.Model.CreatePredictionEngine<Email, SpamPrediction>(trainedModel);
-
- Test the model with a sample email:
var sampleEmail = new Email { Content = "Special discount, buy now!" };
var prediction = predictionEngine.Predict(sampleEmail);
-
- Output the prediction:
Debug.WriteLine($"Email: '{sampleEmail.Content}' is {(prediction.IsSpam ? "spam" : "not spam")}");
-
- Assert that the prediction is correct:
Assert.IsTrue(prediction.IsSpam);
-
- Verify that the model was saved:
if(File.Exists("model.zip"))
Assert.Pass();
else
Assert.Fail();
Conclusion
In this article, we explained a simple spam detection model in ML.NET and demonstrated how to train and test the model. This code can be extended to build more complex models, and can be used as a starting point for exploring machine learning in .NET.
Github Repo
by Joche Ojeda | Dec 18, 2023 | A.I
ONNX: Revolutionizing Interoperability in Machine Learning
The field of machine learning (ML) and artificial intelligence (AI) has witnessed a groundbreaking innovation in the form of ONNX (Open Neural Network Exchange). This open-source model format is redefining the norms of model sharing and interoperability across various ML frameworks. In this article, we explore the ONNX models, the history of the ONNX format, and the role of the ONNX Runtime in the ONNX ecosystem.
What is an ONNX Model?
ONNX stands as a universal format for representing machine learning models, bridging the gap between different ML frameworks and enabling models to be exported and utilized across diverse platforms.
The Genesis and Evolution of ONNX Format
ONNX emerged from a collaboration between Microsoft and Facebook in 2017, with the aim of overcoming the fragmentation in the ML world. Its adoption by major frameworks like TensorFlow and PyTorch was a key milestone in its evolution.
ONNX Runtime: The Engine Behind ONNX Models
ONNX Runtime is a performance-focused engine for running ONNX models, optimized for a variety of platforms and hardware configurations, from cloud-based servers to edge devices.
Where Does ONNX Runtime Run?
ONNX Runtime is cross-platform, running on operating systems such as Windows, Linux, and macOS, and is adaptable to mobile platforms and IoT devices.
ONNX Today
ONNX stands as a vital tool for developers and researchers, supported by an active open-source community and embodying the collaborative spirit of the AI and ML community.
ONNX and its runtime have reshaped the ML landscape, promoting an environment of enhanced collaboration and accessibility. As we continue to explore new frontiers in AI, ONNX’s role in simplifying model deployment and ensuring compatibility across platforms will be instrumental in advancing the field.
by Joche Ojeda | Dec 17, 2023 | A.I
In the dynamic world of artificial intelligence (AI) and machine learning (ML), diverse models such as ML.NET, BERT, and GPT each play a pivotal role in shaping the landscape of technological advancements. This article embarks on an exploratory journey to compare and contrast these three distinct AI paradigms. Our goal is to provide clarity and insight into their unique functionalities, technological underpinnings, and practical applications, catering to AI practitioners, technology enthusiasts, and the curious alike.
1. Models Created Using ML.NET:
- Purpose and Use Case: Tailored for a wide array of ML tasks, ML.NET is versatile for .NET developers for customized model creation.
- Technology: Supports a range of algorithms, from conventional ML techniques to deep learning models.
- Customization and Flexibility: Offers extensive customization in data processing and algorithm selection.
- Scope: Suited for varied ML tasks within .NET-centric environments.
2. BERT (Bidirectional Encoder Representations from Transformers):
- Purpose and Use Case: Revolutionizes language understanding, impacting search and contextual language processing.
- Technology: Employs the Transformer architecture for holistic word context understanding.
- Pre-trained Model: Extensively pre-trained, fine-tuned for specialized NLP tasks.
- Scope: Used for tasks requiring deep language comprehension and context analysis.
3. GPT (Generative Pre-trained Transformer), such as ChatGPT:
- Purpose and Use Case: Known for advanced text generation, adept at producing coherent and context-aware text.
- Technology: Relies on the Transformer architecture for subsequent word prediction in text.
- Pre-trained Model: Trained on vast text datasets, adaptable for broad and specialized tasks.
- Scope: Ideal for text generation and conversational AI, simulating human-like interactions.
Conclusion:
Each of these AI models – ML.NET, BERT, and GPT – brings unique strengths to the table. ML.NET offers machine learning solutions in .NET frameworks, BERT transforms natural language processing with deep language context understanding, and GPT models lead in text generation, creating human-like text. The choice among these models depends on specific project requirements, be it advanced language processing, custom ML solutions, or seamless text generation. Understanding these models’ distinctions and applications is crucial for innovative solutions and advancements in AI and ML.
by Joche Ojeda | Dec 13, 2023 | A.I
Introduction to Machine Learning in C#: Spam using Binary Classification
This example demonstrates the basics of machine learning in C# using ML.NET, Microsoft’s machine learning framework specifically designed for .NET applications. ML.NET offers a versatile, cross-platform framework that simplifies integrating machine learning into .NET applications, making it accessible for developers familiar with the .NET ecosystem.
Technologies Used
- C#: A modern, object-oriented programming language developed by Microsoft, which is widely used for a variety of applications. In this example, C# is used to define data models, process data, and implement the machine learning pipeline.
- ML.NET: An open-source and cross-platform machine learning framework for .NET. It is used in this example to create a machine learning model for classifying emails as spam or not spam. ML.NET simplifies the process of training, evaluating, and consuming machine learning models in .NET applications.
- .NET Core: A cross-platform version of .NET for building applications that run on Windows, Linux, and macOS. It provides the runtime environment for our C# application.
The example focuses on a simple spam detection system. It utilizes text data processing and binary classification, two common tasks in machine learning, to classify emails into spam and non-spam categories. This is achieved through the use of a logistic regression model, a fundamental algorithm for binary classification problems.
Creating an NUnit Test Project in Visual Studio Code
Setting up NUnit for DecisionTreeDemo
-
-
Install .NET Core SDK
Download and install the .NET Core SDK from the .NET official website.
-
Install Visual Studio Code
Download and install Visual Studio Code (VS Code) from here. Also, install the C# extension for VS Code by Microsoft.
-
Create a New .NET Core Project
Open VS Code, and in the terminal, create a new .NET Core project:
dotnet new console -n DecisionTreeDemo
cd DecisionTreeDemo
-
Add the ML.NET Package
Add the ML.NET package to your project:
dotnet add package Microsoft.ML
-
Create the Test Project
Create a separate directory for your test project, then initialize a new test project:
mkdir DecisionTreeDemo.Tests
cd DecisionTreeDemo.Tests
dotnet new nunit
-
Add Required Packages to Test Project
Add the necessary NUnit and ML.NET packages:
dotnet add package NUnit
dotnet add package Microsoft.NET.Test.Sdk
dotnet add package NUnit3TestAdapter
dotnet add package Microsoft.ML
-
Reference the Main Project
Reference the main project:
dotnet add reference ../DecisionTreeDemo/DecisionTreeDemo.csproj
-
Write Test Cases
Write NUnit test cases within your test project to test different functionalities of your ML.NET application.
Define the Data Model for the Email
Include the content of the email and whether it’s classified as spam.
public class Email
{
[LoadColumn(0)]
public string Content { get; set; }
[LoadColumn(1), ColumnName("Label")]
public bool IsSpam { get; set; }
}
Define the Model for Spam Prediction
This model is used to determine whether an email is spam.
public class SpamPrediction
{
[ColumnName("PredictedLabel")]
public bool IsSpam { get; set; }
}
Write the test case
// Create a new ML context for the application, which is a starting point for ML.NET operations.
var mlContext = new MLContext();
// Example dataset of emails. In a real-world scenario, this would be much larger and possibly loaded from an external source.
var data = new List
{
new Email { Content = "Buy cheap products now", IsSpam = true },
new Email { Content = "Meeting at 3 PM", IsSpam = false },
// Additional data can be added here...
};
// Load the data into the ML.NET data model.
var trainData = mlContext.Data.LoadFromEnumerable(data);
// Define the data processing pipeline. Here we are featurizing the text (i.e., converting text into numeric features) and then applying a logistic regression model.
var pipeline = mlContext.Transforms.Text.FeaturizeText("Features", nameof(Email.Content))
.Append(mlContext.BinaryClassification.Trainers.SdcaLogisticRegression());
// Train the model on the loaded data.
var model = pipeline.Fit(trainData);
// Create a prediction engine for making predictions on individual data samples.
var predictionEngine = mlContext.Model.CreatePredictionEngine<Email, SpamPrediction>(model);
// Create a sample email to test the model.
var sampleEmail = new Email { Content = "Special discount, buy now!" };
var prediction = predictionEngine.Predict(sampleEmail);
// Output the prediction to the console.
Debug.WriteLine($"Email: '{sampleEmail.Content}' is {(prediction.IsSpam ? "spam" : "not spam")}");
Assert.IsTrue(prediction.IsSpam);
-
Running Tests
Run the tests with the following command:
dotnet test
As you can see the test will pass because the sample email contains the word “buy” that was used in the training data and was labeled as spam
You can download the source code for this article here
This article has explored the fundamentals of machine learning in C# using the ML.NET framework. By defining specific data models and utilizing ML.NET’s powerful features, we demonstrated how to build a simple yet effective spam detection system. This example serves as a gateway into the vast world of machine learning, showcasing the potential for integrating AI technologies into .NET applications. The skills and concepts learned here lay the groundwork for further exploration and development in the exciting field of machine learning and artificial intelligence.