Знакомство с ML.NET: кросс-платформенная, проверенная и открытая структура машинного обучения
Сегодня в // Build 2018 инженеры .NET рады объявить предварительный просмотр ML.NET, кросс-платформенной платформы для машинного обучения с открытым исходным кодом. ML.NET позволит разработчикам .NET разрабатывать свои собственные модели и внедрять пользовательский ML в свои приложения без предварительного опыта в разработке или настройке моделей машинного обучения.
ML.NET был первоначально разработан в Microsoft Research и в течение последнего десятилетия превратился в серьезную структуру; он используется во многих группах продуктов в Microsoft, таких как Windows, Bing, Azure и т. д.
В этом первом предварительном выпуске ML.NET позволяет выполнять ML-задачи, такие как классификация (например, категоризация текста и анализ настроений) и регрессия (например, прогнозирование цен). Наряду с этими возможностями ML, этот первый выпуск ML.NET также предоставляет первый проект .NET API для учебных моделей, используя модели для прогнозов, а также основные компоненты этой структуры, такие как алгоритмы обучения, преобразования и основные структуры данных ML.
ML.NET - это прежде всего инфраструктура, что означает, что ее можно расширить, чтобы добавить популярные ML-библиотеки, такие как TensorFlow, Accord.NET и CNTK. Команда .NET стремится предоставить полный опыт внутренних возможностей ML.NET для ее версии с открытым исходным кодом.
Со временем ML.NET позволит использовать другие сценарии ML, такие как системы рекомендаций, обнаружение аномалий и другие подходы, такие как глубинное обучение, за счет использования популярных библиотек глубинного обучения, таких как TensorFlow, Caffe2 и CNTK, и общих библиотек машинного обучения, таких как Accord.NET.
ML.NET также дополняет опыт, который предоставляет Azure Machine Learning и Cognitive Services, позволяя использовать основанный на кодах подход, поддерживает локальное развертывание приложений и возможность создавать собственные модели.
Остальная часть этого сообщения в блоге содержит более подробную информацию о ML.NET по следующим разделам:
- Основные компоненты ML.NET
- Классификация тональности с помощью ML.NET
- Перспективы
- Помогите создать ML.NET для ваших нужд
Основные компоненты ML.NET
ML.NET запускается как часть .NET Foundation, и сегодня репо содержит API .NET C # для обучения и потребления модели, а также различные преобразования и пособия, необходимые для многих популярных задач ML, таких как регрессия и классификация.
ML.NET нацелен на обеспечение рабочего процесса E2E для вливания ML в приложения .NET при предварительной обработке, разработке функций, моделировании, оценке и внедрении.
ML.NET поставляется с поддержкой типов и времени выполнения, необходимых для всех аспектов машинного обучения, включая основные типы данных, расширяемые конвейеры, высокопроизводительную математику, структуры данных для гетерогенных данных, поддержку инструментальных средств и многое другое.
В приведенной ниже таблице описывается весь список компонентов, которые выпускаются как часть ML.NET 0.1.
.NET стремится сделать общие API-интерфейсы ML.NET такими, что другие платформы, такие как CNTK, Accord.NET, TensorFlow и другие библиотеки, могут стать пригодными для использования через один общий API.
Начало работы по установке
Чтобы начать работу с ML.NET, установите ML.NET NuGet из командной строки, используя:
dotnet add package Microsoft.ML
Из менеджера пакетов:
Install-Package Microsoft.ML
Вы можете создать структуру непосредственно из https://github.com/dotnet/machinelearning.
Классификация тональности с помощью ML.NET
Обучите свою собственную модель
Вот простой фрагмент для обучения модели классификации тональности:
var pipeline = new LearningPipeline();
pipeline.Add(new TextLoader<SentimentData>(dataPath, separator: ","));
pipeline.Add(new TextFeaturizer("Features", "SentimentText"));
pipeline.Add(new FastTreeBinaryClassifier());
pipeline.Add(new PredictedLabelColumnOriginalValueConverter(PredictedLabelColumn = "PredictedLabel"));
var model = pipeline.Train<SentimentData, SentimentPrediction>();
Давайте рассмотрим это чуть подробнее. Мы создаем LearningPipeline, которая будет инкапсулировать загрузку данных, обработку данных / функционирование и алгоритм обучения. Это шаги, необходимые для подготовки модели машинного обучения, которая позволяет нам принимать входные данные и выводить предвычисление.
Первой частью конвейера является TextLoader, который загружает данные из нашего учебного файла в наш конвейер. Затем мы применяем TextFeaturizer для преобразования столбца SentimentText в числовой вектор, называемый функциями, который может использоваться алгоритмом машинного обучения (поскольку он не может принимать текстовый ввод). Это наша стадия предварительной обработки / featurization.
FastTreeBinaryClassifier - это учебник дерева решений, который мы будем использовать в этом конвейере. Как и шаг featurization, испытание других учебников, доступных в ML.NET, и изменить их параметры, может помочь выявить лучшие результаты. PredictedLabelColumnOriginalValueConverter преобразует предсказанные метки модели обратно в исходное значение или формат.
pipe.Train <SentimentData, SentimentPrediction> () тренирует конвейер (загружает данные, тренирует featurizer и обучаемого). Эксперимент не выполняется до тех пор, пока это не произойдет.
Используйте обученную модель для прогнозирования
SentimentData data = new SentimentData
{
SentimentText = "Today is a great day!"
};
SentimentPrediction prediction = model.Predict(data);
Console.WriteLine("prediction: " + prediction.Sentiment);
Чтобы получить прогноз, мы используем model.Predict () для новых данных. Обратите внимание, что входные данные являются строкой, а модель включает в себя featurization, поэтому наш конвейер остается синхронным во время обучения и прогнозирования. Нам не нужно было писать код предварительной обработки / featurization специально для предсказаний.
Для получения дополнительных сценариев сперва обратитесь пожалуйста к изучению документации, детально описывающей анализ тональности и прогнозирование taxi fare.
Перспективы
Команда .NET стремится добавить к ML.NET множество возможностей, но для этого им необходимо понять, что наилучшим образом соответствует вашим потребностям. Текущие изучаемые области:
- Дополнительные задачи и сценарии ML
- Глубокое обучение с помощью TensorFlow и CNTK
- Поддержка ONNX
- Масштабирование на Azure
- Улучшенный графический интерфейс для упрощения задач ML
- Интеграция с VS Tools для AI
- Языковые инновации для .NET
Помогите создать ML.NET для ваших нужд
Возьмите его в оборот, создайте что-нибудь с ним и расскажите команде .NET, что в ML.NET должно быть лучше. Создайте пару вопросов и предложений на GitHub и помогите создатьть ML.NET для ваших нужд.
https://github.com/dotnet/machinelearning