ML.NET 教程 - 10 分钟入门
介绍
目标
在 Visual Studio 中使用 ML.NET Model Builder 来训练和使用你的首个机器学习模型。
安装 ML.NET CLI,然后使用 ML.NET 训练并使用第一个机器学习模型。
先决条件
无。
macOS 12.0 或更高版本。
完成时间
10分钟 + 下载/安装时间
方案
可以预测客户评论的文本是负面还是正面情绪的应用。
下载并安装
下载并安装 Visual Studio 2022。
在安装过程中,应选择 .NET 桌面开发工作负载以及可选的 ML.NET Model Builder 组件。使用上面的链接时应预先正确选择所有先决条件,如下图所示:
已有 Visual Studio 2022?
如果已有 Visual Studio 2022,请确保它处于最新状态,并且已安装所需的工作负载:
- 选择 Windows 徽标键,键入 Visual Studio 安装程序,然后按“输入”。
- 如果出现提示,则请允许安装程序进行自我更新。
- If an update for Visual Studio 2022 is available, an Update button will be shown. Select it to update before modifying the installation. We recommend using the latest Visual Studio 2022 version for this tutorial.
- 找到 Visual Studio 2022 安装并选择 修改。
- 选择 .NET 桌面开发 并确保已在右窗格中选择 ML.NET Model Builder。请选择 修改 按钮。
升级到最新版本的 Model Builder
在 Visual Studio中启用 ML.NET Model Builder 后,下载并安装最新版本。
下载后,请双击 .vsix 文件来安装扩展。
检查 Visual Studio 更新
本教程针对最新版本的 Visual Studio 进行了优化。如果已有 Visual Studio 2022,则可以检查更新:
- 选择 Windows 徽标键,键入 Visual Studio 安装程序,然后按“输入”。
- 如果出现提示,则请允许安装程序进行自我更新。
- 如果有可用的更新,则 Visual Studio 2022 安装将具有 更新 按钮。请选择该按钮以进行更新。
安装 .NET SDK
To build .NET apps, you need to download and install the .NET 8 SDK (Software Development Kit).
下载 .NET 8 SDK x64 (Intel)
下载 .NET 8 SDK Arm64 (Apple Silicon)
如果使用的是带有 Apple M1 或 M2 芯片的 Mac,则需要安装 Arm64 版本的 SDK。
安装 ML.NET CLI
ML.NET 命令行接口(CLI),提供用于通过 ML.NET 构建机器学习模型的工具。
Note: Currently, ML.NET CLI is in Preview and only supports the latest LTS version of the .NET SDK (.NET 8).
对于安装步骤,建议使用 Bash 控制台。由于 macOS 的默认值为 zsh 控制台,因此可通过打开新终端并运行下面的命令来创建单个实例。
bash
对于 x64 计算机 - 运行以下命令:
dotnet tool install -g mlnet-linux-x64
对于 ARM64 芯片体系结构 - 改为运行以下命令:
dotnet tool install -g mlnet-linux-arm64
如果工具成功安装,应会看到以下输出消息,其中 [arch]
是芯片体系结构:
You can invoke the tool using the following command: mlnet
Tool 'mlnet-linux-[arch]' (version 'X.X.X') was successfully installed.
dotnet tool install -g mlnet-osx-x64
对于 ARM64 芯片体系结构 - 改为运行以下命令:
dotnet tool install -g mlnet-osx-arm64
如果工具成功安装,则应会看到输出消息,其中 [arch]
是类似于以下内容的芯片体系结构:
You can invoke the tool using the following command: mlnet
Tool 'mlnet-osx-[arch]' (version 'X.X.X') was successfully installed.
注意: 如果正在使用非 Bash 的控制台(例如,zsh - macOS 的新默认设置),则需要授予 mlnet
可执行权限并将mlnet
包含在系统路径中。安装 mlnet (或任何全局工具)时,终端中应显示如何执行此操作的说明。通常,以下命令应适用于大多数系统: chmod +x [PATH-TO-MLNET-CLI-EXECUTABLE]
如果看到与下述类似的说明,请在终端中运行它们。
cat << \EOF >> ~/.zprofile
#Add .NET Core SDK tools
export PATH="$PATH:~/.dotnet/tools"
EOF
或者,可以尝试使用以下命令运行 mlnet 工具:
~/.dotnet/tools/mlnet
如果运行该命令仍出现错误,请使用下面的“我遇到了问题”按钮报告问题并获取解决问题的帮助。
创建应用
打开 Visual Studio 并新建 .NET 控制台应用:
- 从 Visual Studio 2022 开始窗口中选择 新建项目。
- 选择 C# 控制台应用 项目模板。
- 将项目名称更改为
myMLApp
。 - 确保不选中将解决方案和项目置于同一目录中。
- 选择“下一步”按钮。
- 选择 .NET 8.0 (长期支持) 作为 Framework。
- 选择“创建”按钮。Visual Studio 将创建项目并加载
Program.cs
文件。
添加机器学习
右击 解决方案资源管理器 中的
myMLApp
项目,并选择 添加 > 机器学习模型。- 在“添加新项目”对话框中,确保选中“机器学习模型(ML.NET)”。
将“名称”字段更改为
SentimentModel.mbconfig
,然后选择“添加”按钮。
一个名为 SentimentModel.mbconfig
的新文件将添加到你的解决方案中,并且 Model Builder UI 将在 Visual Studio 的新停靠工具窗口中打开。mbconfig 文件只是一个 JSON 文件,用于跟踪 UI 的状态。
Model Builder 将通过以下步骤指导你完成构建机器学习模型的过程。
在终端中,运行以下命令:
mkdir myMLApp
cd myMLApp
mkdir
命令会创建名为 myMLApp
的新目录命令,cd myMLApp
命令会将你放入新创建的应用目录中。
将在接下来的步骤中生成模型训练代码。
选取方案
若要生成模型,首先需要选择机器学习场景。Model Builder 支持多种场景:
Note: If the tutorial screenshots don't match with what you see, you may need to update your version of Model Builder. Go to Extensions > Manage Extensions to make sure that there are no available updates for Model Builder. The version used in this tutorial is 17.18.2.
在这种情况下,将根据客户评价的内容(文字)预测情绪。
-
在“Model Builder 方案”屏幕中,选择数据分类 方案,因为要预测注释属于哪个类别(正或负)。
-
在选择 数据分类方案后,必须选择训练环境。虽然一些方案支持在 Azure 中进行训练,但“分类”目前仅支持本地训练,因此,请保持选择 本地 环境,并继续执行 数据 步骤。
要生成模型,需要选择机器学习方案。
ML.NET CLI 支持多种 ML 场景:
- 分类 - 如果要预测数据属于哪一类别(例如,分析客户评价的情绪是正面的还是负面的),请使用此功能。
- 图像分类 - 需要预测图像属于哪个类别时,请使用此项 (例如,预测图像是猫还是狗)
- 回归(例如,值预测) - 如果想要预测数值,请使用此值(例如,预测房价)。
- 预测–如果要预测时序中的未来值(例如预测季度销售额),请使用此方法。
- 建议–如果要根据历史分级(例如产品建议)向用户推荐项目,请使用此选项。
在这种情况下,你将根据客户评价的内容(文字)来预测情绪,因此你将使用“分类”。
下载并添加数据
下载 UCI 机器学习存储库中的带情绪标签的句子数据集。解压缩 sentiment labelled sentences.zip
并保存 yelp_labelled.txt
文件到 myMLApp
目录。
你的解决方案资源管理器应如下所示:
yelp_labelled.txt
中的每一行代表用户在 Yelp 上对餐厅的不同评论。第一列代表用户留下的评论,第二列代表文本的情绪(0 为负面,1 为正面)。这些列由制表符分隔,并且数据集没有标头。数据如下所示:
Wow... Loved this place. 1
Crust is not good. 0
Not tasty and the texture was just nasty. 0
添加数据
在 Model Builder 中,可以从本地文件添加数据或连接到 SQL Server 数据库。这次你将从文件添加 yelp_labelled.txt
。
选择 文件 作为输入数据源类型。
浏览
yelp_labelled.txt
。选择数据集后,数据预览会显示在 数据预览 部分中。由于数据集没有标头,因此将自动生成标头("col0" 和 "col1")。在“预测列 (标签)”下,选择 "col1"。“标签”是预测内容,在本例中是在数据集的第二列 ("col1") 中发现的情绪。
用于帮助预测标签的列称为“特征”。除“标签”外,数据集中的所有列都将自动选择为“特征”。在这种情况下,审阅评论列(“col0”)是特征列。可以在“高级数据选项”中更新特征列并修改其他数据加载选项,但在本示例中不是必需的。
添加数据后,请转到“训练”步骤。
训练模型
现在,将使用 yelp_labelled.txt
数据集来训练模型。
Model Builder 会根据生成性能最佳模型给定的定型时间,评估多个具有不同算法和设置的模型。
将“训练时间”(即希望 Model Builder 探索各种模型的时间)更改为 60 秒(如果训练后未发现模型,则可以尝试增加此数字)。请注意,对于较大的数据集,训练时间会更长。Model Builder 会根据数据集大小自动调整训练时间。
可更新高级训练选项中使用的优化指标和算法,但在此示例中不必要。
选择开始训练以开始训练过程。训练开始后,可以看到剩余时间。
训练结果
完成训练后,你可以查看训练结果摘要。
- 最佳 MacroAccuracy - 这将向你展示 Model Builder 找到的最佳模型的准确性。准确性越高意味着模型对于测试数据的预测越正确。
- 最佳模型 - 这将显示在 Model Builder 探索期间表现最佳的算法。
- 训练时间 - 显示训练/探索模型所花费的总时间量。
- 已浏览的模型(总计) - 这将显示 Model Builder 在给定时间内浏览的模型总数。
- 生成的代码隐藏 - 这显示为帮助使用模型或训练新模型而生成的文件的名称。
如果需要,可以在“机器学习输出”窗口中查看有关定型会话的详细信息。
模型训练完成后,转到评估步骤。
在终端中,运行以下命令(在 myMLApp
文件夹中):
mlnet classification --dataset "yelp_labelled.txt" --label-col 1 --has-header false --name SentimentModel --train-time 60
这些命令分别代表什么?
mlnet classification
命令使用 AutoML 运行 ML.NET,在给定的训练时间内,通过数据转换、算法和算法选项的不同组合,探索分类模型的多次迭代,然后选择性能最高的模型。
- --dataset: 你选择了
yelp_labelled.txt
作为数据集(在内部,CLI 会将一个数据集拆分为定型数据集和测试数据集)。 - --label-col: 必须指定要预测的目标列(或标签)。这种情况下,需要预测第二列中的情绪(零索引列代表这是列 "1")。
- --has-header: 使用此选项指定数据集是否具有标头。在这种情况下,数据集没有标头,因此它是 false。
- --name: 使用此选项可为机器学习模型和相关资产提供名称。在这种情况下,与此机器学习模型关联的所有资产的名称都具有 SentimentModel。
- --train-time: 还必须指定希望 ML.NET CLI 浏览不同模型的时间量。在这种情况下为 60 秒(如果训练后未找到模型,则可以尝试增加此数字)。请注意,对于较大的数据集,应设置更长的训练时间。
进度
当 ML.NET CLI 探索不同的模型时,将会显示以下数据:
- 开始训练 - 本部分显示每次模型迭代,包括使用的训练器(算法)和该迭代的评估指标。
- 剩余时间 - 此项和进度栏将指示训练过程还剩多少时间(以秒为单位)。
- 最佳算法–这将向你显示到目前为止执行最佳的算法。
- 最佳分数 - 这将向你展示到目前为止最佳模型的性能。准确度越高意味着模型对测试数据的预测更准确。
如果需要,可以在 CLI 生成的日志文件中查看有关训练会话的详细信息。
评估模型
评估步骤显示性能最佳的算法以及最佳准确度,并让你在 UI 中尝试相应模型。
立即试用模型
可以在“试用模型”部分对样本输入进行预测。文本框中预先填充了数据集的第一行数据,但你可以更改输入并选择“预测”按钮来尝试不同的情绪预测。
在这种情况下,0 表示负面情绪,1 表示正面情绪。
注意: 如果模型性能不佳(例如,如果“准确度”低或模型仅预测 '1' 值),则可以尝试添加更多时间并再次训练。这是使用极小数据集的示例;对于生产级模型,需要添加更多的数据和训练时间。
在评估和试用模型后,继续执行“使用”步骤。
ML.NET CLI 选择最佳模型后,将会显示“训练摘要”,其中显示了探索过程的摘要,包括在给定的训练时间内探索的模型数量。
热门模型
ML.NET CLI 为性能最高的模型生成代码的同时,还会在给定的探索时间内,以最高精度显示顶层模型(最多 5 个)。它会显示这些顶部模型的多个评估指标,包括 AUC、AUPRC 和 F1 分数。如需获取更多信息,请参阅 ML.NET 指标。
生成代码
训练完成后,4 个文件将作为代码隐藏自动添加到 SentimentModel.mbconfig
中:
SentimentModel.consumption.cs
: 此文件包含模型输入和输出类以及可用于模型消耗的Predict
方法。SentimentModel.evaluate.cs
: 此文件包含CalculatePFI
方法,该方法使用排列特征重要性(PFI)技术来评估哪些特征对模型预测贡献最大。SentimentModel.mlnet
: 该文件是经过训练的 ML.NET 模型,它是一个序列化的 zip 文件。SentimentModel.training.cs
: 此文件包含用于了解输入列对模型预测的重要性的代码。
在 Model Builder 的 Consume 步骤中,提供了一个代码片段,用于为模型创建样本输入并使用模型对该输入进行预测。
Model Builder 还提供了项目模板,可以选择将其添加到解决方案中。有两个项目模板(一个控制台应用和一个 Web API)使用经过训练的模型。
ML.NET CLI 添加了机器学习模型以及用于训练和使用模型的代码,其中包括以下内容:
-
已创建名为 SentimentModel 的新目录,它包含 .NET 控制台应用,此应用包括以下文件:
Program.cs
: 此文件包含用于运行模型的代码。SentimentModel.consumption.cs
: 此文件包含模型输入和输出类以及可用于模型消耗的Predict
方法。SentimentModel.mbconfig
: 此文件是一个 JSON 文件,用于跟踪训练中的配置和结果。SentimentModel.training.cs
: 此文件包含用于训练最终模型的训练管道(数据转换、算法和算法参数)。SentimentModel.zip
: 该文件是经过训练的 ML.NET 模型,它是一个序列化的 zip 文件。
若要尝试该模型,可以运行控制台应用来使用模型预测单个语句的情绪。
使用模型
最后一步是在最终用户应用程序中使用经过训练的模型。
-
将
myMLApp
项目中的Program.cs
代码替换为以下代码:Program.csusing MyMLApp; // Add input data var sampleData = new SentimentModel.ModelInput() { Col0 = "This restaurant was wonderful." }; // Load model and predict output of sample data var result = SentimentModel.Predict(sampleData); // If Prediction is 1, sentiment is "Positive"; otherwise, sentiment is "Negative" var sentiment = result.PredictedLabel == 1 ? "Positive" : "Negative"; Console.WriteLine($"Text: {sampleData.Col0}\nSentiment: {sentiment}");
-
运行
myMLApp
(选择“Ctrl+F5”或“调试”>“在不调试的情况下启动”)。应看到以下输出,内容为预测输入语句是正的还是负的。
ML.NET CLI 生成了经过训练的模型和代码,因此现在可以按照以下步骤在 .NET 应用程序(例如,SentimentModel
控制台应用)中使用该模型:
- 在命令行中,导航到
consumeModelApp
目录。Command promptcd SentimentModel
-
在任何代码编辑器中打开
Program.cs
然后检查代码。代码应如下所示:Program.csusing System; namespace SentimentModel.ConsoleApp { class Program { static void Main(string[] args) { // Add input data SentimentModel.ModelInput sampleData = new SentimentModel.ModelInput() { Col0 = @"Wow... Loved this place." }; // Make a single prediction on the sample data and print results var predictionResult = SentimentModel.Predict(sampleData); Console.WriteLine("Using model to make single prediction -- Comparing actual Col1 with predicted Col1 from sample data...\n\n"); Console.WriteLine($"Col0: @{"Wow... Loved this place."}"); Console.WriteLine($"Col1: {1F}"); Console.WriteLine($"\n\nPredicted Col1: {predictionResult.PredictedLabel}\n\n"); Console.WriteLine("=============== End of process, hit any key to finish ==============="); Console.ReadKey(); } } }
-
运行
SentimentModel.ConsoleApp
。可以通过在终端中运行以下命令来执行此操作(请确保你位于SentimentModel
中):Command promptdotnet run
输出应如下所示:
Command promptUsing model to make single prediction -- Comparing actual Col1 with predicted Col1 from sample data... Col0: Wow... Loved this place. Col1: 1 Class Score ----- ----- 1 0.9651076 0 0.034892436 =============== End of process, hit any key to finish ===============
后续步骤
恭喜,你已使用 ML.NET Model Builder 构建了首个机器学习模型!
现在你已经掌握了基础知识,请在 Microsoft Learn 上使用自助学习模块继续学习,你将使用传感器数据来检测制造设备是否已损坏。
ML.NET 初学者
Luis 将为你介绍机器学习和 AI 的概念,解释可以使用它做什么,并指导你开始使用 OpenAI、Azure AI 服务和 ML.NET:
你可能还会关注...
恭喜,你已使用 ML.NET CLI 构建了首个机器学习模型!
使用 ML.NET CLI 进行分类(尤其是情绪分析)后,可以尝试其他方案。使用出租车费用数据集试用回归方案(尤其是价格预测),以继续使用 ML.NET CLI 构建 ML.NET 模型。
ML.NET 初学者
Luis 将为你介绍机器学习和 AI 的概念,解释可以使用它做什么,并指导你开始使用 OpenAI、Azure AI 服务和 ML.NET:
你可能还会关注...