Ml net model builder что это
Перейти к содержимому

Ml net model builder что это

  • автор:

ML.NET Model Builder

Model Builder is a simple UI tool for developers to build, train, and ship custom machine learning models in their .NET applications.

Developers with no ML expertise can use this simple visual interface in Visual Studio to connect to their data stored in files or SQL Server, train the model, and generate code for model training and consumption.

Have a question?

If you have any questions or run into any issues, please file an issue in our GitHub repo.

A Beginner’s Guide to Machine Learning using ML.NET in .NET5 — Part I

Build AI-Powered API to Analyze Customer Feedback In Just 10 Minutes

Hammad Abbasi

Geek Culture

W hether you are a.NET developer who is just getting started with Machine Learning, or an Expert trying to figure out the best machine learning model for your use case — This article is for you!

In this article, we will discuss what ML.NET is all about. How easy is it to add machine learning to your services and apps using ML.NET in .NET5.

We will also see how to build, train, evaluate and consume a machine learning model using AutoML. As an example, we will be creating an API to analyze customer feedback and detect sentiment automatically.

So without further due, let’s dive in!

What is ML.NET?

When it comes to machine learning and data science, Python is considered a go-to language, due to its simplicity and access to great libraries and frameworks.

Data Scientists love to train their models in Python using various ML Frameworks like TensorFlow, Scikit Learn, etc; Whereas the Application Developers will often use other programming languages to integrate and consume those models like C#, Java, etc.

Therefore, It has become a pain point for many organizations to deliver ML Models to production in a seamless manner (due to the discrepancies between the technologies and frameworks).

ML.NET is Microsoft's answer to this problem. It is an open-source and cross-platform machine learning framework that allows.NET developers to build, train and consume their custom machine learning models while staying in the .NET ecosystem.

With ML.NET, you can get your custom ML model into production in no time.

What can you do with ML.NET

ML.NET allows you to build world-class AI models and applications based on various use cases— The Sky is the limit. Check out this repository which contains a variety of samples, such as:

  • Sentiment Analysis
  • Spam Detection
  • Fraud Detection
  • Product/Movie Recommendation
  • Price Prediction
  • Sales Forecasting
  • Anomaly Detection (Credit Card Fraud)
  • Image Classification Training
  • Object Detection

What’s so special about ML.NET?

ML.NET is packed with a powerful tooling mechanism called Model Builder. It simplifies the model building process through Automated ML (or AutoML), making it super easy for developers to get their models up and running by simply loading the data. AutoML takes care of the rest of the model building process including the code generation for consuming those models.

It also allows you to leverage popular ML libraries like TensorFlow, ONNX and consume those models in .NET using ML.NET.

How It Stacks Up Against ML Frameworks?

There’s an interesting evaluation done between ML.NET, scikit-learn, and H20 which uses the huge(9GB) Amazon reviews data set.

Following were the key takeaways:

  • Scikit-learn and H20 couldn't complete the process for a full data set and ran into memory errors.
  • ML.NET outperformed both frameworks in terms of accuracy and runtime for a smaller subset (900MB).

How to Getting Started with ML.NET?

ML.NET Model Builder is currently a preview feature so you need to enable it in Visual Studio.

  • Go to Tools → Options → Environment → Preview Features
  • Make sure to check ‘Enable ML.NET Model Builder’ as shown below

If you don’t see the ML.NET Model Builder in the ‘Preview Features’ list, you need to run the Visual Studio Installer and install the ML.NET Model Builder component, which can be found under the .NET Core Cross-platform development workload.

We can now create a new ASP.NET Web API project using Visual Studio.

Let’s add an API Controller. The API will take a single parameter — CustomerFeedback and will perform sentiment analysis using machine learning and based on the predicted score for both positive and negative sentiments. It will also return the message based on the predicted intent.

We will come back to the API part later. Let’s add machine learning support to this project.

Add Machine Learning Support

Right Click on the project and select Add → Machine Learning.

2. Select a Scenario

This will open the Model Builder in a new window, as shown below:

As we are building a sentiment analysis service so we will choose the ‘Text Classification’ scenario.

3. Select Training Environment

The training environment is where our model will be trained. In the case of the Text classification scenario, it’s our local machine. So we just proceed to the next step by clicking on ‘Data’.

4. Add Data

To build a model, we need a data set. We will use the UC Irvine Machine Learning Repository, which contains over 588 data sets that can be used for a variety of purposes.

This dataset contains TSV files containing customer reviews from Amazon, IMDB, and Yelp.

Input data source

ML Builder allows selecting input sources from File and SQL Server database.

Since we have TSV Files so we will be selecting File as an input data source.

We have three files in our dataset, in this example, we will select the yelp dataset i-e: yelp_labelled.txt

  • Column to predict → We pick ‘col1’ which contains the output values e.g 0 or 1 which we want to predict.
  • Input Columns → These are the columns that contain features to use for prediction in our case it's col0.

Now, we are ready to train our model → Click ‘Train’ to bring up the next step

ModelBuilder uses AutoML which explores multiple models and then selects the best performing model. Default is 10 seconds. However, if you allow it to train for a longer period, AutoML will explore more models with a wider range of settings. For our example, let’s train the model for 120 seconds.

Click on ‘Start Training’ — once it’s started you see the training progress in ‘Output Window’ as shown below:

When the training is completed, you will be able to see the complete summary.

You can see that it has explored various models and selected the best model automatically with an accuracy of 84%.

The next step is to evaluate the model for various sample inputs.

Let’s provide some negative feedback and see if the model is able to detect the intent.

We can see that the results contain a 0 (with 88%) chance of being negative, and shows a 12% chance of being positive.

In the above example, we provide positive feedback and the model shows a 97% chance of being positive.

The model seems to be working fine, so we are ready to generate the code and integrate it with our web API — Clicking on ‘Code’ will create the required projects for consuming the ML model.

It also generated the console app that can be used to test the model.

Let’s explore the Program.cs file:

We can see how easy it is to consume the model by simply invoking the Predict method of ConsumeModel.

What’s Under the Hood?

Let’s explore the auto-generated project → ML.Model

The project contains the following files:

  1. ModelInput.cs and ModelOutput.cs which simple are the model classes for our input and output data.

This Zip file holds all the required files for our ML model that we have trained.

In this file, AutoML simply created the required methods to consume our ML model. (You might need to change modelPath variable where the file is located). It uses PredictionEngine class which is used for making a single prediction on pre-trained models.

It’s time to expose this functionary as API so we will modify our SentimentAnalysis Service as below:

Let’s build the project and run the API. We will test the API with negative and positive feedback and see if our service is able to predict the sentiment.

That’s It! You have successfully created an API that performs sentiment analysis using machine learning to predict customer’s intent.

There can be many business cases where sentiment analysis can add great value. Such as given below:

  • Customer Feedback
  • Customer Support
  • Social Media Monitoring
  • Product Analysis
  • Market Research

Note: You can download the complete source used in this post from this Github repo.


It was an introduction to ML.NET. As we have seen, It’s super easy to build machine-learning apps using ML.NET using C#. With this framework, Microsoft has made it really easy for .NET Developers who are hesitant to learn python to build machine learning apps — you can re-use your existing skills and libraries that you have as a .NET Developer.

With that being said, ML.NET doesn’t try to pull python lovers and data scientists away from it. In fact, it allows application developers to integrate pre-trained models from Python (for instance, you can train the model using PyTorch and export it to ONNX format, which can then be consumed in .NET using ML.NET).

Thank you for reading and stay tuned for Part II (where will discuss more advanced scenarios and business cases).

ML.NET: впечатления от Model Builder и не только

Доброго времени суток и мое почтение, читатели Хабра!


У нас на работе принято обмениваться интересными находками в командах разработки. На очередной встрече, обсуждая будущее .NET и .NET 5 в частности, мы с коллегами заострили внимание на видении унифицированный платформы с этой картинки:
На ней показано, что платформа объединяет DESKTOP, WEB, CLOUD, MOBILE, GAMING, IoT и AI. Мне пришла в голову идея провести беседу в формате небольшого доклада + вопросов/ответов по каждой теме на следующих встречах. Ответственный за ту или иную тему предварительно готовится, вычитывает информацию об основных новшествах, пробует что-то реализовать с помощью выбранной технологии, а затем делится с нами своими мыслями и впечатлениями. В итоге все получают реальный отзыв об инструментарии из проверенного источника из первых уст — очень удобно, учитывая то, что самому попробовать и поштурмить все темы может быть не сподручно, банально руки не дойдут.

Поскольку я некоторое время активно интересуюсь машинным обучением в качестве хобби (и иногда использую для небизнесовых задачек в работе), мне досталась тема AI & ML.NET. В процессе подготовки я наткнулся на замечательные инструменты и материалы, к своему удивлению обнаружил, что про них очень мало информации на Хабре. Ранее в официальном блоге Microsoft писали про релиз ML.Net, и Model Builder в частности. Я бы хотел поделиться тем, как вышел на него и какие получил впечатления от работы с ним. Статья больше про Model Builder, чем про ML в .NET в целом; мы постараемся посмотреть на то, что предлагает MS среднему .NET-разработчику, но глазами подкованного в ML человека. Постараюсь при этом держать баланс между пересказыванием туториала, совсем уж разжевыванием для новичков и описанием деталей для ML-специалистов, которым почему-то потребовалось прийти в .NET.

Основная часть

Итак, беглое гугление про ML в .NET приводит меня на страничку туториала:

Оказывается, есть специальное расширение для Visual Studio под названием Model Builder, которое «позволяет добавить машинное обучение в Ваш проект правой кнопкой мыши» (вольный перевод). Я вкратце пробегусь по основным шагам туториала, которые предлагается проделать, дополню деталями и своими мыслями.

Download and install

Нажимаем кнопку, качаем, устанавливаем. Студию придется перезапустить.

Create your app

Для начала создаем обычное C# приложение. В туториале предлагается создать Core, но и под Framework годится. А дальше, собственно, начинается ML — кликаем правой кнопкой мышки по проекту, затем Add -> Machine Learning. Появившееся окно создания модели мы будем разбирать, ибо именно в нем происходит вся магия.

Pick a scenario

Выбираем «сценарий» своего приложения. На данный момент доступны 5 (туториал немного устарел, там пока 4):

  • Sentiment analysis — анализ тональности, binary classification (бинарная классификация), по тексту определяется его эмоциональный окрас окрас, позитивный или негативный.
  • Issue classification — multiclass classification (многоклассовая классификация), целевая метка для issue (тикета, ошибки, обращения в поддержку и т.д.) может быть выбрана как один из трех взаимоисключающих вариантов
  • Price prediction — regression, классическая задача регрессии, когда выходным результатом является непрерывное число; в примере это оценка квартиры
  • Image classification — multiclass classification (многоклассовая классификация), но уже для изображений
  • Custom scenario — свой сценарий; вынужден огорчить, что ничего нового в этом варианте не будет, просто на более позднем этапе дадут выбрать один из ранее описанных четырех вариантов.

Заметим, что нет multilabel-классификации, когда целевых метод может быть много одновременно (например, высказывание может быть одновременно оскорбительным, расистским и матерным, а может не быть никаким из этого). Для изображений нет возможность выбора задачи сегментации. Я предполагаю, что с помощью фреймворка они в целом решаемы, однако сегодня фокусируемся именно на билдере. Кажется, что масштабирование визарда на расширение количества задач не является трудной задачей, поэтому стоит ожидать в их будущем.

Download and add data

Предлагается скачать датасет. Из необходимости скачивания на свою машину автоматически делаем вывод о том, что обучение будет происходить на нашей локальной машине. У этого есть как плюсы:

  • Вы контролируете все данные, можете подправить, изменить локально и повторить эксперименты.
  • Вы не выгружаете данные в облако, таким образом сохраняя приватность. Ведь не выгружаете, да Microsoft? 🙂
  • Скорость обучения ограничена ресурсами Вашей локальной машины.

Далее предлагается выбрать скачанный датасет в качестве инпута типа «Файл». Так же есть вариант использовать «SQL Server» — потребуется указать необходимые реквизиты сервера, затем выбрать таблицу. Если я правильно понял, пока нельзя указать конкретный скрипт. Ниже я пишу про проблемы, которые у меня возникли с этим вариантом.

Train your model

На этом шаге последовательно обучаются различные модели, для каждой выводится скор, и в конце выбирается лучшая. Ах да, я забыл упомянуть, что это AutoML — т.е. лучший алгоритм и параметры (не уверен, см. ниже) будут выбраны автоматически, так что Вам ничего делать не нужно! Предлагается ограничить максимальное время обучения количеством секунд. Эвристика по определению этого времени: На моей машине за дефолтные 10 секунд учится всего одна модель, так что приходится ставить сильно больше. Запускаем, ожидаем.

Тут очень хочется добавить, что названия моделей лично мне показались немного непривычными, например: AveragedPerceptronBinary, FastTreeOva, SdcaMaximumEntropyMulti. Слово «Perceptron» не так часто используется в эти дни, «Ova» вероятно one-vs-all, а «FastTree» я затрудняюсь сказать что.

Еще из интересного — среди алгоритмов-кандидатом присутствует LightGbmMulti. Если я правильно понимаю, это тот самый LightGBM, движок градиентного бустинга, который вместе с CatBoost сейчас оказывает конкуренцию когда-то единолично правившему XGBoost. Он немного расстраивает своей скоростью в текущем исполнении — на моих данных его обучение заняло больше всего времени (порядка 180 секунд). Хотя входные данные — текст, после векторизации колонок тысячи, больше чем входных примеров — это не лучший кейс для бустинга и деревьев в целом.

Evaluate your model

Собственно, оценка результатов модели. На данном шаге можно посмотреть на то, какие целевые метрики были достигнуты, а так же погонять модель вживую. Про сами метрики можно почитать тут: MS и sklearn.

Меня в первую очередь заинтересовал вопрос — на чем тестировалось-то? Поиск по той же страницу с хелпом дает ответ — разбиение очень консервативное, 80% на 20%. Я не нашел возможности это настроить в UI. На практике хотелось бы это контролировать, ибо когда данных реально много, разбиение может быть даже 99% и 1% (по словам Andrew Ng, сам я с такими данными не работал). Так же полезно было бы иметь возможность задать random seed сэмплинга данных, ибо повторяемость в ходе построения и выбора лучшей модели трудно переоценить. Кажется, что добавить эти опции несложно, для сохранения прозрачности и простоты можно скрыть их за каким-нибудь чекбоксом «Extra options».
В консоль в процессе построения модели выводятся таблички со скорами, код генерации которых можно найти в проектах из следующего шага. Можно сделать вывод, что сгенерированный код реально работает, и выводится его честный вывод, никакой бутафории.

Интересное наблюдение — во время написания статьи я еще раз прошелся по шагам билдера, использовал предлагаемый датасет комментариев с Википедии. Но в качестве задачи я выбрал «Custom», затем многоклассовую классификацию как таргет (хотя классов всего два). В итоге скор получился примерно на 10% хуже (порядка 73% против 83%), чем скор со скриншота с бинарной классификацией. По мне это немного странно, ведь система могла бы и догадаться, что класса всего два. В принципе и классификаторы по типу one-vs-all (а-ля один против всех, когда задача многоклассовой классификации сводится к последовательному решению N-задач бинарной по каждому из N классов) тоже должны были в этой ситуации показывать аналогичный бинарной скор.

Generate code

На этом шаге сгенерируются и добавятся в решение (solution) два проекта. В одном из них есть полноценный пример использования модели, а в другой следует заглядывать только если интересны детали реализации.

Для себя обнаружил то, что весь процесс обучения лаконично формируется в пайплайн (привет пайплайнам из sk-learn):

(чуть-чуть тронул форматирование кода, чтобы уместилось красиво)

Помните, я говорил про параметры? Я не вижу ни одного кастомного параметра, все значения по умолчанию. Кстати по лейблу SentimentText_tf на выходе FeaturizeText можно сделать вывод, что это term frequency (документация говорит, что это n-grams и char-grams текста; интересно, есть ли там IDF, inversed document frequency).

Consume your model

Собственно, пример использования. Могу отметить только то, что Predict делается элементарно.

Ну вот, собственно, и все — мы рассмотрели все шаги билдера и отметили ключевые моменты. Но эта статья была бы неполной без теста на собственных данных, ведь любой, кто хоть раз сталкивался с ML и AutoML, прекрасно знает, что на стандартных задачках, синтетических тестах и датасетах из интернета любой автомл хорош. Поэтому было решено проверить билдер на своих задачах; тут и далее это всегда работа с текстом или текстом + категориальными фичами.

У меня совершенно неслучайно оказался под рукой датасет с некоторыми ошибками/issue/дефектами, зарегистрированными на одном из проектов. В нем 2949 строк, 8 несбалансированных целевых классов, 4мб.

ML.NET (загрузка, преобразования, алгоритмы из списка ниже; заняло 219 секунд)

(ужал пустоты в табличке, чтобы поместилось в Markdown)

Моя версия на Python (загрузка, чистка, преобразования, затем LinearSVC; заняло 41 секунду):

0.80 vs 0.747 Micro и 0.73 vs 0.542 Macro (в определении Макро может быть некоторая неточность, если интересно — в комментариях расскажу).

Я приятно удивлен, всего 5% разницы. На некоторых других датасетах разница была еще меньше, а порой и вовсе не было. Анализируя величину разницы стоит принять во внимание тот факт, что количество сэмплов в датасетах невелико, и, порой, после очередной выгрузки (что-то удаляется, что-то добавляется) я наблюдал подвижки скора на 2-5 процентов.

Пока я самолично экспериментировал, никаких проблем в использовании билдера не возникло. Однако во время презентации коллегам все же встретились несколько косяков:

  • Один из датасетов мы попробовали честно загрузить из таблицы в БД, но наткнулись на неинформативное сообщение об ошибке. Я примерно представлял, какого плана текстовые данные там находятся, и сразу прикинул, что проблема может быть в переводах строк. Что ж, загрузил датасет с помощью pandas.read_csv, почистил от \n \r \t, сохранил в tsv, двинулись дальше.
  • На обучении очередной модели получили исключение, сообщающее о том, что матрица размером

Кстати, из второго пункта можно сделать вывод о том, что количество слов и n-грам при векторизации не особо-то и ограничивается по верхней границе, и «n» вероятно равен двум. Я могу по своему опыту сказать, что 200к явно слишком большое число. Обычно его либо ограничивают наиболее частыми вхождениями, либо применяют поверх разного рода алгоритмы сокращения размерности, например SVD или PCA.


Билдер предлагает на выбор несколько сценариев, в которых я не обнаружил критичных мест, требующих погружения в ML. С этой точки зрения он прекрасно подходит как инструмент «getting started» или решения типичных простых задач здесь и сейчас. Реальные сценарии использования полностью зависят от Вашей фантазии. Можно пойти по предлагаемым MS вариантам:

  • решать задачу оценки тональности (sentiment analysis), допустим, в комментариях к продуктам на сайте
  • классифицировать тикеты по категориям или командам (issue classification)
  • продолжить издеваться над тикетами, но уже с помощью регрессии (price prediction) — оценить временные затраты

А можно вносить что-то свое, например, автоматизировать задачу распределения поступающих ошибок/инцидентов по разработчикам, сведя ее к задаче классификации по тексту (целевая метка — ID/Фамилия разработчика). Или можно порадовать операционистов внутреннего АРМ, которые заполняют поля в карточке с фиксированным набором значений (выпадающий список) по другим полям или текстовому описанию. Для этого понадобится всего лишь подготовить выборку в csv (для экспериментов хватит даже нескольких сотен строк), научить модель прямо из UI Visual Studio и применить ее в своем проекте путем копирования кода из сгенерированного примера. Я веду к тому, что ML.NET по моему мнению вполне пригоден для решения практических, прагматичных, приземленных задач, которые не требуют особой квалификации и попусту отъедают время. Причем применить его можно в самом обычном проекте, который не претендует на инновационность. Автором же такой модели может стать любой .NET-разработчик, который готов освоить новую библиотеку.

У меня немного больше бэкграунд по ML, чем у среднего .NET-разработчика, поэтому для себя я решил так: для картинок наверное нет, для сложных кейсов нет, а для простых табличных задач — однозначно да. На текущий момент мне удобнее сделать любую ML-задачу на более привычном стеке технологий Python/numpy/pandas/sk-learn/keras/pytorch, однако типовой кейс для последующего встраивания в .NET-приложение я бы вполне сделал и с помощью ML.NET.

Кстати приятно, что с текстом фреймворк работает отлично без каких-либо лишних телодвижений и необходимости тюнинга со стороны пользователя. В целом, это не удивительно, ибо на практике на небольших объемах данных старые добрые TfIDF с классификаторами типа SVC/NaiveBayes/LR работают вполне приемлемо. Это обсуждалось на летнем DataFest в докладе от iPavlov — на некотором тестовом наборе word2vec, GloVe, ELMo (вроде) и BERT сравнивались с TfIdf. На тесте удалось достичь превосходства в пару процентов только в одном случае из 7-10 кейсов, хотя объем затраченных ресурсов на обучение совсем не сопоставим.

ML.NET Model Builder

ML.NET Model Builder provides an easy to understand visual interface to build, train, and deploy custom machine learning models. Prior machine learning expertise is not required.

Model Builder supports AutoML, which automatically explores different machine learning algorithms and settings to help you find the one that best suits your scenario.

Connect to files and databases

The current preview of Model Builder can work with csv files, tsv files, and SQL Server databases. As we work toward stable release, we’ll be adding support for more file formats and databases, including non-relational data stores.

Code generation

Model Builder produces a trained model, plus the code you need to load your model and start making predictions. ML.NET models are stored as a .zip file. The code to load and use your model is added as a new project in your solution. Model builder also adds a sample console app you can run to see your model in action.

Model Builder also gives you the code to retrain your model with a new data set, in case you need to retrain from code, without using the Model Builder interface.

Run everything local

Model Builder gives you everything you need on your machine. No need to connect to cloud resources, or other services, to build and consume your model.

In future previews, we’ll be adding the option to train your model in the cloud, to expand beyond the capabilities of a single workstation.

Integration with your existing tools and DevOps

Model Builder is a Visual Studio extension, so you stay working in the development environment you already know.

The code and models that Model Builder produces are all versioned with your existing source control solution and built, tested, and deployed with your existing DevOps workflow.

If you need to automatically retrain your model against the latest data, retraining can be automated as part of your build process.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *