微软开源 ML.NET:一款跨平台、成熟的机器学习框架
2018-05-09

微软在Build 2018大会上兴奋地宣布了ML.NET的预览版,这是一种跨平台的开源机器学习框架。ML.NET将让广大.NET开发人员可以开发自己的模型,并且将自定义的机器学习融入到其应用程序中,无需之前拥有开发或调整机器学习模型方面的专业知识。


ML.NET最初是在微软研究中心开发而它的,在过去的十年已发展成为一种重要的框架;它用于微软的许多产品组合中,比如Windows、Bing和Azure等。


有了这第一个预览版,ML.NET能够支持诸多机器学习任务,比如说分类(比如文本分类和情绪分析)以及回归(比如趋势预测和价格预测)。除了这些机器学习功能外,ML.NET的这第一个版本还引入了训练模型的.NET API初稿,使用模型用于预测,还包括该框架的核心组件,比如学习算法、转换和核心的机器学习数据结构。


ML.NET首先是一个框架,这意味着它经扩展后可以添加流行的机器学习库,比如TensorFlow、Accord.NET和CNTK。我们致力于将开发ML.NET的内部功能方面的全部经验带给开源界的ML.NET。


综上所述,ML.NET代表了我们致力于通过.NET让机器学习变得很出色。


随着时间的推移,ML.NET将充分利用流行的深度学习库(比如TensorFlow、Caffe2和CNTK)以及一般的机器学习库(比如Accord.NET),从而支持其他机器学习场景,比如推荐系统、异常检测及其他方法(比如深度学习)。


ML.NET还允许采用代码优先的方法,补充了Azure机器学习和认知服务提供的体验,并支持应用程序本地部署以及自行构建模型的功能。


ML.NET核心组件


ML.NET作为.NET Foundation的一部分而发布;今天的代码仓库包含用于模型训练和使用的.NET C# API,以及许多常见的机器学习任务(如回归和分类)所需要的各种转换和学习器。


ML.NET旨在提供E2E工作流程,以便在预处理、特征工程、建模、评估和操作化等过程中将机器学习融入到.NET应用程序中。


ML.NET本身支持机器学习各方面所需要的类型和运行时环境,包括核心数据类型、可扩展流水线、高性能数学、面向异构数据的数据结构和工具支持等。


下面这张表显示了作为ML.NET 0.1的一部分发布的完整组件列表。



我们旨在让ML.NET的API具有通用性,那样CNTK、Accord.NET和TensorFlow等其他框架以及其他库就可以通过单一的共享式API来加以使用。


安装入门


想开始使用ML.NET,请使用下列命令从CLI来安装ML.NETNuGet:



从软件包管理器来安装:



您可以直接从https://github.com/dotnet/machinelearning来构建框架。


借助ML.NET实现情绪分类


训练您自己的模型


这个简单的代码片段用来训练情绪分类模型(完整的代码片段可在此:https://github.com/dotnet/machinelearning/blob/master/test/Microsoft.ML.Tests/Scenarios/Scenario3_SentimentPrediction.cs找到)。



让我们更详细地讨论这个方面。我们创建了一个LearningPipeline,它将负责封装数据加载、数据处理/特征化和学习算法。这些是训练机器学习模型所需要的几个步骤,该模型让我们得以拿来输入数据后输出预测结果。


这条流水线的第一部分是TextLoader,它将来自我们训练文件的数据加载到流水线。然后,我们使用TextFeaturizer将SentimentText列转换成名为Features的数字向量,该数字向量可以被机器学习算法所使用(因为它无法接受文本输入)。这是我们的预处理/特征化步骤。


FastTreeBinaryClassifier是我们将用于该流水线中的决策树学习器。就像特征化步骤那样,尝试ML.NET中不同的学习器并更改其参数有望找到更好的结果。 PredictedLabelColumnOriginalValueConverter将模型的预测标签转换回成原始值/格式。


pipeline.Train<SentimentData,SentimentPrediction>()训练流水线(加载数据、训练特征器和学习器)。直到这一步发生后,才执行试验。


将经过训练的模型用于预测



为了得到预测结果,我们对新数据使用model.Predict()。请注意,输入数据是一个字符串,模型包含特征化,所以我们的流水线在训练和预测期间都保持同步。我们不必编写专门用于预测的预处理/特征化代码。


前方的道路


我们渴望将许多功能添加到ML.NET中,但我们很想了解哪些功能最适合您的要求。目前我们正在探索的领域包括:


  • 另外的机器学习任务和场景

  • 使用TensorFlow和CNTK的深度学习

  • ONNX支持

  • 在Azure上横向扩展

  • 更好的GUI,以简化机器学习任务

  • 与VS工具集成,用于AI

  • 针对.NET的语言创新


原文: https://mp.weixin.qq.com/s/Mp743kVPOSvka0n7gT0EFw