ML.NET, Quesaquo ?
L'actualité de la plateforme d'IA de Microsoft est riche et à ce propos, nous souhaitions revenir l'espace d'un billet sur une annonce récente, celle de ML.NET.
Je tiens à remercier Pierre Lataillade actuellement en stage de fin d'étude au sein de Microsoft France pour cette contribution.
Qu'est-ce que ML.NET ?
Annoncé lors de la conférence //Build 2018 en mai dernier, ML.NET est un nouveau Framework d'apprentissage automatique ou Machine Learning créé à destination des développeurs .NET.
Dans la pratique, ce Framework permet donc de créer, paramétriser, tester et intégrer nativement des modèles de Machine Learning personnalisés au sein de ses applications .NET Core. Autrement dit, ML.NET permet ainsi d'analyser des sentiments, de prédire des prix, de détecter des fraudes, etc. dans le contexte spécifique de votre application .NET Core.
ML.NET se positionne en complément des services (ou APIs) cognitifs Cognitive Services et des services Azure Machine Learning (auxquels nous avons consacrés toutes une série de billets sur ce blog) disponibles sur la plateforme Microsoft Azure et ce, en proposant une approche centrée autour du code, permettant de construire son propre modèle et de le déployer localement sur son application.
ML.NET est en open source et multi-plateforme (Windows, Linux et MacOs). ML.NET est amené à rapidement progresser et évoluer pour toujours proposer de nouvelles fonctionnalités et connections avec d'autres solutions.
Mise à jour : A ce propos, ML.NET vient de passer en version 0.3 au mois de juillet dernier.
Pourquoi ML.NET ?
ML.NET était originalement développé en interne au sein de Microsoft Research (MSR) pour être utilisé dans des produits et services Microsoft comme Windows, Bing ou Azure pour n'en citer que quelques-uns. Désormais, avec cette version préliminaire publique, tout un chacun peut utiliser la puissance du Machine Learning pour de la classification, du clustering ou de la régression dans des applications .NET.
Dans les faits, ML.NET reste un Framework simple d'utilisation basé comme beaucoup de Frameworks et de bibliothèques de Machine Learning autour de pipelines d'apprentissage.
A titre d'illustration, l'extrait de code ci-dessous donne une idée de la méthode requise pour créer un modèle de reconnaissance de sentiment et l'entrainer.
var pipeline = new
LearningPipeline();
//Pour charger les données sous format texte
pipeline.Add(new
TextLoader(dataPath).CreateFrom<SentimentData>(separator: ','));
//Pour passer de format texte à format "numérique" sur lequel l'algorithme peut fonctionner
pipeline.Add(new
TextFeaturizer("Features", "SentimentText"));
//Classificateur à proprement parler à entrainer
pipeline.Add(new
FastTreeBinaryClassifier());
//Entrainement
var model = pipeline.Train<SentimentData, SentimentPrediction>();
Pour obtenir la prédiction d'un modèle sur une nouvelle donnée, un simple appel de méthode suffit ! :-)
//Générer une donnée à traiter
SentimentData data = new SentimentData
{
SentimentText = "Today is a great day!"
};
//Prédiction du sentiment dans cette donnée
SentimentPrediction prediction = model.Predict(data);
Console.WriteLine("prediction: " + prediction.Sentiment);
Comme mentionné ci-avant, ML.NET est un projet récent et dû à son caractère Open Source, le Framework est amené à grandement évoluer et progresser dans le futur proche, notamment en ajoutant des fonctionnalités et des extensions (vers d'autres Frameworks et plateformes de Machine Learning par exemple).
Les composants disponibles avec la version 0.1 de ML.NET sont les suivants.
La version 0.2 ajoute des capacités de clustering au Framework, ainsi que des améliorations sur les méthodes de validations des modèles (partition entrainement-test, validation croisée, et.) et au-delà dans de nombreux autres domaines. Dans tous ces cas, les composants sont accessibles à partir une API simple et générique qui a pour but de se généraliser aux appels d'autre Frameworks.
Mise à jour : La nouvelle version 0.3 du mois de juillet propose à la clé de nombreuses nouvelles fonctionnalités : tout d'abord la capacité d'exporter certains modèles sous format ONNX pour plus d'inter-compatibilité, mais aussi de nouveau classifieurs (tels le LightGBM) et de nouveaux éléments de transformation (comme la possibilité d'utiliser des méthodes d'ensemble ou des méthodes « Un contre Tous » avec des classifieurs existants).
Nous vous donnons rendez-vous sur les liens suivants pour un récapitulatif plus complet sur l'historique des évolutions apportées :
Comment commencer avec ML.NET ?
Pour se familiariser avec les bases de l'apprentissage automatique, ce lien fournit quelques ressources essentielles.
Pour commencer avec ML.NET, il convient avant tout de s'assurer d'avoir installé .NET Core 2.0 (ou une version plus récente).
Il faut ensuite installer le paquet NuGet ML.NET depuis une ligne de commande :
dotnet add package Microsoft.ML
Quelques didacticiels en anglais sont disponibles dès aujourd'hui pour commencer à se familiariser avec ML.NET.
Il est assez facile de commencer avec la prédiction de pétales d'iris, un exemple classique dans le domaine du Machine Learning qui s'est trouvé repris par quelques billets de ce même blog.
Une liste de tutoriels sur le sujet donne quelques exemples supplémentaires qui permettent de mieux comprendre le fonctionnement de ML.NET sur des cas d'application plus complexes.
Pour aller plus loin
Sur cette page du repo GitHub consacré au projet, d'autre exemples sont (encore) disponibles, allant d'échantillons basiques jusqu'à des applications complètes.
La documentation de ML.NET sur docs.microsoft.com permet aussi de trouver des informations intéressantes sur le sujet.
Si vous êtes intéressés pour faire progresser ML.NET en suggérant de nouvelles fonctionnalités ou en corrigeant des problèmes, n'hésitez pas à vous rendre sur la page GitHub principale du projet.
Enfin, une communauté Gitter active permet d'échanger et d'interroger les membres actifs qui développent et travaillent avec ML.NET pour rester au plus proche des nouveautés et des avantages que proposent le Framework.