machinelearning
微软开源的跨平台机器学习框架,让 .NET 开发者无需学 Python 即可在 C# 中完成从数据处
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
微软开源的跨平台机器学习框架,让 .NET 开发者无需学 Python 即可在 C# 中完成从数据处
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一个这样的场景:你是一名经验丰富的 .NET 后端工程师,长期使用 C# 构建企业级应用,代码风格成熟、架构思路清晰。如今公司业务需要引入机器学习能力——文本情感分析、销量预测、图像分类——但学习 Python、TensorFlow 或 PyTorch 的门槛让你望而却步。ML.NET 就是为解决这个痛点而生:让 .NET 开发者无需切换技术栈,在熟悉的 C# 环境中直接使用机器学习。
ML.NET 由微软于 2018 年开源,是 .NET 生态中首个专注于机器学习的框架。历经 6 年迭代(最新稳定版 5.0.0,2025年11月发布;预览版 6.0.0-preview1,2026年3月发布),它已从最初的数据处理工具演变为涵盖传统 ML 和大语言模型(LLM)的完整 AI 开发平台。
ML.NET 的诞生并非偶然。2018年前后,微软正在推行"AI 赋能所有开发者"的战略,Azure AI、VS Code AI 插件等产品线全面铺开。与此同时,.NET 开发者社区对机器学习能力的需求日益强烈,但当时的选项只有调用 Python 微服务或使用 Azure ML 的 REST API,割裂感严重。
微软选择了一条务实的路径:不做全新的 ML 框架,而是将机器学习能力无缝嵌入 .NET 标准库。这一策略使得 ML.NET 可以与现有 .NET 应用天然融合,无需额外部署 Python 运行时或远程服务。所有推理都在本地完成,数据无需离开服务器,对于金融、医疗等对数据隐私有严格要求的场景尤为重要。
2024 年起,ML.NET 启动了大模型(GenAI)战略,新增 Microsoft.ML.GenAI.* 系列包,支持 Phi3、LLaMA、Mistral 等主流开源 LLM 的加载与推理。这标志着 ML.NET 从传统机器学习框架向 .NET 端侧 AI 平台 的战略转型。
ML.NET 采用 NuGet 包分发模式,核心包 Microsoft.ML 约 100+MB,通过 dotnet add package Microsoft.ML 即可引入。根据功能划分为多个专用包:
| 核心包 | 功能 |
|---|---|
Microsoft.ML | 框架核心:MLContext、IDataView、模型训练与推理 |
Microsoft.ML.FastTree | 梯度提升树(GBDT)算法集 |
Microsoft.ML.ImageAnalytics | 图像加载、预处理、转换 |
Microsoft.ML.Vision | 图像分类、目标检测(基于 TorchSharp) |
Microsoft.ML.OnnxTransformer | ONNX 模型加载与推理 |
Microsoft.ML.TensorFlow | TensorFlow 模型集成 |
Microsoft.ML.LightGbm | LightGBM 梯度提升框架 |
Microsoft.ML.TimeSeries | 时间序列预测 |
Microsoft.ML.AutoML | 自动机器学习(AutoML) |
Microsoft.Data.Analysis | DataFrame API,类似 pandas 的数据操作 |
Microsoft.ML.GenAI.Core | LLM 推理核心(CausalLMPipeline) |
Microsoft.ML.GenAI.LLaMA | LLaMA 系列模型支持 |
Microsoft.ML.GenAI.Mistral | Mistral 系列模型支持 |
Microsoft.ML.GenAI.Phi | Phi 系列模型支持 |
所有包均遵循 .NET 标准,跨 Windows / Linux / macOS 运行,支持 x64、ARM64、Apple M1 架构。
ML.NET 的核心数据结构是 IDataView,借鉴了 Microsoft Research 的研究成果。它是一种延迟求值的列式数据表示,类似于 Apache Arrow 或 TensorFlow 的 TFRecord。IDataView 核心特性:
这一设计使得 ML.NET 可以高效处理超出内存容量的大规模数据集。
GenAI 包的核心是 CausalLMPipeline,它封装了分词器(Tokenizer)和因果语言模型,提供统一的文本生成接口:
var tokenizer = LLama2Tokenizer.FromPretrained(pathToModel);
var model = Phi3ForCausalLM.FromPretrained(pathToModel);
var pipeline = new CausalLMPipeline(tokenizer, model);
var output = pipeline.Generate(prompt: "Hello", maxLen: 100, temperature: 0.7f);
Pipeline 还支持与 Semantic Kernel(微软的 AI 应用编排框架)和 AutoGen.NET(多智能体协作框架)集成,使得 .NET 开发者可以复用业界主流的 Agent 开发范式。此外,通过 TorchSharp 后端实现 GPU 加速,并支持 动态加载(Dynamic Loading)技术——在显存受限时将大模型分块加载,实现 1.03X 到 30X+ 的推理加速。
ML.NET 最经典的使用模式。对于文本分类任务,只需 5 行代码:
var mlContext = new MLContext();
var data = mlContext.Data.LoadFromTextFile<SentimentData>("sentiment.csv", hasHeader: true);
var pipeline = mlContext.Transforms.Text.FeaturizeText("Features", "SentimentText")
.Append(mlContext.BinaryClassification.Trainers.FastTree());
var model = pipeline.Fit(data);
var predictionEngine = mlContext.Model.CreatePredictionEngine<SentimentData, SentimentPrediction>(model);
var prediction = predictionEngine.Predict(new SentimentData { SentimentText = "Today is great!" });
内置算法覆盖:二分类(Binary Classification)、多分类(Multiclass Classification)、回归(Regression)、聚类(Clustering)、异常检测(Anomaly Detection)、推荐(Recommendation)、排序(Ranking)等七大门类。
对于不确定该用哪种算法的开发者,AutoML 包提供了"一键优化"能力:
var experiment = mlContext.Auto().CreateExperiment();
experiment.SetTrainingTimeInSeconds(60); // 最多训练60秒
experiment.SetDataset(trainData, "Label");
experiment.SetOutputDirectory("model_output");
var result = await experiment.SubmitAsync();
AutoML 会在给定时间限制内遍历多种算法和超参数组合,自动找到最优模型。
使用 Phi3-mini 构建本地聊天机器人:
var pipeline = new CausalLMPipeline(
new LLama2Tokenizer(modelPath),
new Phi3ForCausalLM(modelPath));
var agent = new Phi3MiniAgent(pipeline, name: "assistant");
var reply = await agent.SendAsync("请用 C# 写一个快速排序");
该场景无需云端 API,数据完全在本地处理,适合企业内网部署。
NuGet 包集成(推荐):
dotnet add package Microsoft.ML
适用于所有 .NET 项目(控制台、Web API、桌面应用、服务端),无额外运行时依赖。
Model Builder(Visual Studio 插件): 通过图形界面拖拽数据文件、选择任务类型、配置参数,插件自动生成训练代码并打包模型。适合 ML 经验较少的开发者。
独立训练工具(CLI):
微软提供的 mlnet CLI 工具,支持从命令行训练模型并导出为 .zip 文件。
局限性:
| 维度 | 评价 |
|---|---|
| 架构设计 | 模块化 NuGet 包体系,核心组件职责清晰,IDataView 设计优秀 |
| 代码质量 | 微软内部代码审查,CodeQL 自动化扫描,codecov 覆盖率高 |
| 文档质量 | 完整的 API 文档 + 教程,dotnet/docs 独立仓库维护 |
| 测试覆盖 | 完整的单元测试 + 性能测试套件,覆盖所有核心算法 |
| 社区活跃度 | GitHub 9331★,年发布节奏稳定(跟随 .NET 大版本),Discord 社区活跃 |
| 跨平台 | 覆盖 Windows / Linux / macOS,x64 / ARM64 / Apple M1 |
ML.NET 的核心价值在于降低 .NET 开发者进入机器学习的门槛,而非在算法性能上与 Python 生态竞争。在企业场景中,当 ML 模型需要深度集成到现有的 .NET 微服务架构中时,ML.NET 是最具性价比的选择。
随着 GenAI 包的上线,ML.NET 的定位进一步扩展:成为 .NET 开发者接入大语言模型能力的官方入口。对于需要在本地/内网部署 LLM、对数据隐私有要求、且团队以 .NET 为主要技术栈的企业,ML.NET 提供了目前最完整的 .NET 原生解决方案。