Независимо от того, являетесь ли вы разработчиком .NET, который только начинает работать с машинным обучением, или экспертом, пытающимся определить лучшую модель машинного обучения для вашего варианта использования - эта статья для вас!

В этой статье мы обсудим, что такое ML.NET. Насколько легко добавить машинное обучение к вашим сервисам и приложениям с помощью ML.NET в .NET5.

Мы также увидим, как создавать, обучать, оценивать и использовать модель машинного обучения с помощью AutoML. В качестве примера мы создадим API для анализа отзывов клиентов и автоматического определения настроений.

Итак, без дальнейших выплат, давайте приступим!

Что такое ML.NET?

Когда дело доходит до машинного обучения и науки о данных, Python считается популярным языком из-за его простоты и доступа к отличным библиотекам и фреймворкам.

Специалисты по данным любят обучать свои модели на Python, используя различные фреймворки машинного обучения, такие как TensorFlow, Scikit Learn и т. Д .; В то время как разработчики приложений часто используют другие языки программирования для интеграции и использования этих моделей, таких как C #, Java и т. Д.

Поэтому для многих организаций стало проблемой беспрепятственно доставлять модели машинного обучения в производство (из-за несоответствий между технологиями и фреймворками).

ML.NET - это ответ Microsoft на эту проблему. Это кроссплатформенная среда машинного обучения с открытым исходным кодом, которая позволяет разработчикам .NET создавать, обучать и использовать свои собственные модели машинного обучения, оставаясь в экосистеме .NET.

С ML.NET вы можете запустить свою собственную модель машинного обучения в производство в кратчайшие сроки.

Что вы можете делать с ML.NET

ML.NET позволяет создавать модели и приложения искусственного интеллекта мирового класса на основе различных сценариев использования. Небо - это предел. Загляните в этот репозиторий, который содержит множество примеров, таких как:

  • Анализ настроений
  • Обнаружение спама
  • Обнаружение мошенничества
  • Рекомендация продукта / фильма
  • Прогноз цен
  • Прогноз продаж
  • Обнаружение аномалий (мошенничество с кредитными картами)
  • Обучение классификации изображений
  • Обнаружение объекта

Что такого особенного в ML.NET?

ML.NET содержит мощный инструментальный механизм, называемый Построителем моделей. Он упрощает процесс построения модели с помощью автоматизированного машинного обучения (или AutoML), позволяя разработчикам очень легко запускать свои модели, просто загружая данные. AutoML берет на себя остальную часть процесса построения модели, включая генерацию кода для использования этих моделей.

Он также позволяет вам использовать популярные библиотеки машинного обучения, такие как TensorFlow, ONNX, и использовать эти модели в .NET с помощью ML.NET.

Как это сочетается со структурами машинного обучения?

Между ML.NET, scikit-learn и H20 проведена интересная оценка, в которой используется огромный (9 ГБ) набор данных обзоров Amazon.

Вот основные выводы:

  • Scikit-learn и H20 не смогли завершить процесс для полного набора данных и столкнулись с ошибками памяти.
  • ML.NET превзошел обе платформы с точки зрения точности и времени выполнения для меньшего подмножества (900 МБ).

Как начать работу с ML.NET?

Конструктор моделей ML.NET в настоящее время является предварительной функцией, поэтому вам необходимо включить ее в Visual Studio.

Для этого требуется Visual Studio 2019 16.6.1 или новее.

  • Перейдите в Инструменты → Параметры → Среда → Функции предварительного просмотра.
  • Обязательно установите флажок «Включить построитель моделей ML.NET», как показано ниже.

Если вы не видите конструктор моделей ML.NET в списке «Предварительные возможности», вам необходимо запустить установщик Visual Studio и установить компонент Построитель моделей ML.NET, который можно найти в разделе «Кроссплатформенность .NET Core». рабочая нагрузка на разработку.

Теперь мы можем создать новый проект веб-API ASP.NET с помощью Visual Studio.

Давайте добавим API-контроллер. API будет принимать один параметр - CustomerFeedback и будет выполнять анализ настроений с использованием машинного обучения и на основе прогнозируемой оценки как для положительных, так и для отрицательных настроений. Он также вернет сообщение на основе предсказанного намерения.

Мы вернемся к части API позже. Давайте добавим в этот проект поддержку машинного обучения.

Добавить поддержку машинного обучения

Щелкните правой кнопкой мыши проект и выберите Добавить → Машинное обучение.

2. Выберите сценарий

Это откроет построитель моделей в новом окне, как показано ниже:

Поскольку мы создаем службу анализа настроений, мы выберем сценарий «Классификация текста».

3. Выберите среду обучения

Обучающая среда - это то место, где наша модель будет обучаться. В случае сценария классификации текста это наш локальный компьютер. Поэтому мы просто переходим к следующему шагу, щелкнув «Данные».

4. Добавить данные

Для построения модели нам понадобится набор данных. Мы будем использовать Репозиторий машинного обучения UC Irvine, который содержит более 588 наборов данных, которые можно использовать для различных целей.

Для анализа настроений мы будем использовать ZIP-файл набора данных с помеченными предложениями UCI.

Этот набор данных содержит файлы TSV, содержащие отзывы клиентов из Amazon, IMDB и Yelp.

Источник входных данных

ML Builder позволяет выбирать источники ввода из файловой базы данных и базы данных SQL Server.

Поскольку у нас есть файлы TSV, мы выберем File в качестве источника входных данных.

У нас есть три файла в нашем наборе данных, в этом примере мы выберем набор данных yelp i-e: yelp_labelled.txt

  • Столбец для прогнозирования → Мы выбираем «col1», который содержит выходные значения, например 0 или 1, которые мы хотим прогнозировать.
  • Столбцы ввода → Это столбцы, которые содержат функции, которые можно использовать для прогнозирования, в нашем случае это col0.

Теперь мы готовы обучить нашу модель → Нажмите «Обучить», чтобы перейти к следующему шагу.

ModelBuilder использует AutoML, который исследует несколько моделей, а затем выбирает наиболее эффективную. По умолчанию 10 секунд. Однако, если вы позволите ему тренироваться в течение более длительного периода, AutoML будет исследовать больше моделей с более широким диапазоном настроек. В нашем примере давайте обучим модель 120 секунд.

Нажмите «Начать тренировку» - как только она начнется, вы увидите прогресс тренировки в «Окне вывода», как показано ниже:

Когда обучение будет завершено, вы сможете увидеть полное резюме.

Вы можете видеть, что он исследовал различные модели и автоматически выбрал лучшую модель с точностью 84%.

Следующим шагом является оценка модели для различных входных выборок.

Давайте оставим негативный отзыв и посмотрим, сможет ли модель определить намерение.

Мы видим, что результаты содержат 0 (с 88%) шансом быть отрицательным и показывают 12% -ный шанс быть положительным.

В приведенном выше примере мы предоставляем положительный отзыв, и модель показывает 97% -ный шанс быть положительным.

Модель работает нормально, поэтому мы готовы сгенерировать код и интегрировать его с нашим веб-API. При нажатии на «Код» будут созданы необходимые проекты для использования модели машинного обучения.

Также было создано консольное приложение, которое можно использовать для тестирования модели.

Давайте изучим файл Program.cs:

ModelInput sampleData = new ModelInput()
{
Col0 = @"This is horrible!",
};
// Make a single prediction on the sample data and print results
var predictionResult = ConsumeModel.Predict(sampleData);
Console.WriteLine("Using model to make single prediction -- Comparing actual Col1 with predicted Col1 from sample data...\n\n");
Console.WriteLine($"Col0: {sampleData.Col0}");
Console.WriteLine($"\n\nPredicted Col1 value {predictionResult.Prediction} \nPredicted Col1 scores: [{String.Join(",", predictionResult.Score)}]\n\n");
Console.WriteLine("=============== End of process, hit any key to finish ===============");
Console.ReadKey();

Мы можем увидеть, насколько легко использовать модель, просто вызвав метод Predict ConsumeModel.

Что под капотом?

Давайте изучим автоматически созданный проект → ML.Model

Проект содержит следующие файлы:

  1. ModelInput.cs и ModelOutput.cs, которые являются простыми классами моделей для наших входных и выходных данных.

3. MLModel.ZIP

Этот Zip-файл содержит все необходимые файлы для нашей обученной модели машинного обучения.

4. ConsumeModel.cs

public class ConsumeModel
{
private static Lazy<PredictionEngine<ModelInput, ModelOutput>> PredictionEngine = new Lazy<PredictionEngine<ModelInput, ModelOutput>>(CreatePredictionEngine);
// For more info on consuming ML.NET models, visit https://aka.ms/mlnet-consume
// Method for consuming model in your app
public static ModelOutput Predict(ModelInput input)
{
ModelOutput result = PredictionEngine.Value.Predict(input);
return result;
}
public static PredictionEngine<ModelInput, ModelOutput> CreatePredictionEngine()
{
// Create new MLContext
MLContext mlContext = new MLContext();
// Load model & create prediction engine
string modelPath = @"[Root_Path]\MLModel.zip";
ITransformer mlModel = mlContext.Model.Load(modelPath, out var modelInputSchema);
var predEngine = mlContext.Model.CreatePredictionEngine<ModelInput, ModelOutput>(mlModel);
return predEngine;
}

В этом файле AutoML просто создал необходимые методы для использования нашей модели машинного обучения. (Возможно, вам потребуется изменить переменную modelPath, в которой находится файл MLModel.zip). Он использует класс PredictionEngine, который используется для создания единственного прогноза на предварительно обученных моделях.

Пришло время представить этого функционера как API, поэтому мы изменим нашу службу SentimentAnalysis, как показано ниже:

[HttpGet]
public JsonResult  AnalyzeFeedback(string feedback)
{
      try
     {
      ModelInput _data = new();
      _data.Col0 = feedback;
      var predictionResult = ConsumeModel.Predict(_data);
      return Json(new  { Prediction = predictionResult.Prediction,
     Score = predictionResult.Score  }); 
}
catch (Exception ex) {return Json(new
{
    Error="Unable to Consume Model" });
}
}

Создадим проект и запустим API. Мы протестируем API с отрицательными и положительными отзывами и посмотрим, сможет ли наш сервис предсказать настроение.

Это оно! Вы успешно создали API, который выполняет анализ настроений с помощью машинного обучения для прогнозирования намерений клиентов.

Может быть много бизнес-кейсов, в которых анализ настроений может принести большую пользу. Такие, как указано ниже:

  • Обратная связь с клиентами
  • Служба поддержки
  • Мониторинг социальных сетей
  • Анализ продукции
  • Исследования рынка

Примечание: вы можете скачать полный исходный код, использованный в этом посте, из репозитория Github.

Заключение

Это было введение в ML.NET. Как мы видели, создавать приложения для машинного обучения с использованием ML.NET и C # очень просто. С помощью этой структуры Microsoft упростила разработчикам .NET, которые не решаются изучать Python, для создания приложений машинного обучения - вы можете повторно использовать свои существующие навыки и библиотеки, которые у вас есть как у разработчика .NET.

При этом ML.NET не пытается увести от себя любителей Python и специалистов по обработке данных. Фактически, он позволяет разработчикам приложений интегрировать предварительно обученные модели из Python (например, вы можете обучить модель с помощью PyTorch и экспортировать ее в формат ONNX, который затем можно использовать в .NET с помощью ML.NET).

Спасибо за чтение и следите за обновлениями части II (где будут обсуждаться более сложные сценарии и бизнес-кейсы).