在 Visual Studio 中使用 ML.NET Model Builder 来训练和使用你的首个机器学习模型。
安装 ML.NET CLI,然后使用 ML.NET 训练并使用第一个机器学习模型。
无。
macOS 10.15 或更高版本。
10分钟 + 下载/安装时间
可以预测客户评论的文本是负面还是正面情绪的应用。
下载并安装 Visual Studio 2022。
在安装过程中,应选择 .NET 桌面开发工作负载以及可选的 ML.NET Model Builder 组件。使用上面的链接时应预先正确选择所有先决条件,如下图所示:
如果已有 Visual Studio 2022,则可以添加 .NET 桌面开发 工作负载:
在 Visual Studio中启用 ML.NET Model Builder 后,下载并安装最新版本。
下载后,请双击 .vsix 文件来安装扩展。
本教程针对最新版本的 Visual Studio 进行了优化。如果已有 Visual Studio 2022,则可以检查更新:
若要生成 .NET 应用,需要下载并安装 .NET 6 SDK (软件开发工具包)。
如果使用的是带有 Apple M1 或 M2 芯片的 Mac,则需要安装 Arm64 版本的 SDK。
ML.NET 命令行接口(CLI),提供用于通过 ML.NET 构建机器学习模型的工具。
注意:目前,ML.NET CLI 处于预览阶段,仅支持最新 LTS 版本的 .NET SDK (.NET 6)。
对于安装步骤,建议使用 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 '16.13.9') 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 '16.14.3') 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 控制台应用:
myMLApp
。Program.cs
文件。右击 解决方案资源管理器 中的 myMLApp
项目,并选择 添加 > 机器学习模型。
将“名称”字段更改为 SentimentModel.mbconfig
,然后选择“添加”按钮。
一个名为 SentimentModel.mbconfig
的新文件将添加到你的解决方案中,并且 Model Builder UI 将在 Visual Studio 的新停靠工具窗口中打开。mbconfig 文件只是一个 JSON 文件,用于跟踪 UI 的状态。
Model Builder 将通过以下步骤指导你完成构建机器学习模型的过程。
在终端中,运行以下命令:
mkdir myMLApp
cd myMLApp
mkdir
命令会创建名为 myMLApp
的新目录命令,cd myMLApp
命令会将你放入新创建的应用目录中。
将在接下来的步骤中生成模型训练代码。
若要生成模型,首先需要选择机器学习场景。Model Builder 支持多种场景:
注意: 如果本教程屏幕截图与你看到的内容不匹配,则可能需要更新 Model Builder 版本。请转到“扩展”>“管理扩展”,确保没有可用于 Model Builder 的更新。本教程中使用的版本为 17.17.0。
在这种情况下,将根据客户评价的内容(文字)预测情绪。
在“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 会根据数据集大小自动调整训练时间。
可更新高级训练选项中使用的优化指标和算法,但在此示例中不必要。
选择开始训练以开始训练过程。训练开始后,可以看到剩余时间。
完成训练后,你可以查看训练结果摘要。
如果需要,可以在“机器学习输出”窗口中查看有关定型会话的详细信息。
模型训练完成后,转到评估步骤。
在终端中,运行以下命令(在 myMLApp
文件夹中):
mlnet classification --dataset "yelp_labelled.txt" --label-col 1 --has-header false --name SentimentModel --train-time 60
mlnet classification
命令使用 AutoML 运行 ML.NET,在给定的训练时间内,通过数据转换、算法和算法选项的不同组合,探索分类模型的多次迭代,然后选择性能最高的模型。
yelp_labelled.txt
作为数据集(在内部,CLI 会将一个数据集拆分为定型数据集和测试数据集)。当 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
: 此文件包含模型输入和输出类,以及可用于模型消耗的 Predict
方法。SentimentModel.mlnet
: 该文件是经过训练的 ML.NET 模型,它是一个序列化的 zip 文件。SentimentModel.training.cs
: 此文件包含用于了解输入列对模型预测的重要性的代码。在 Model Builder 的 Consume 步骤中,提供了一个代码片段,用于为模型创建样本输入并使用模型对该输入进行预测。
Model Builder 还提供了项目模板,可以选择将其添加到解决方案中。有两个项目模板(一个控制台应用和一个 Web API)使用经过训练的模型。
ML.NET CLI 添加了机器学习模型以及用于训练和使用模型的代码,其中包括以下内容:
Program.cs
: 此文件包含用于运行模型的代码。SentimentModel.consumption.cs
: 此文件包含模型输入和输出类以及可用于模型消耗的 Predict
方法。SentimentModel.mbconfig
: 此文件是一个 JSON 文件,用于跟踪训练中的配置和结果。SentimentModel.training.cs
: 此文件包含用于训练最终模型的训练管道(数据转换、算法和算法参数)。SentimentModel.zip
: 该文件是经过训练的 ML.NET 模型,它是一个序列化的 zip 文件。若要尝试该模型,可以运行控制台应用来使用模型预测单个语句的情绪。
最后一步是在最终用户应用程序中使用经过训练的模型。
将 myMLApp
项目中的 Program.cs
代码替换为以下代码:
using 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
目录。
cd SentimentModel
在任何代码编辑器中打开 Program.cs
然后检查代码。代码应如下所示:
using 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
中):
dotnet run
输出应如下所示:
Using model to make single prediction -- Comparing actual Col1 with predicted Col1 from sample data...
Col0: Wow... Loved this place.
Col1: 1
Predicted Col1: 1
=============== End of process, hit any key to finish ===============
恭喜,你已使用 ML.NET Model Builder 构建了首个机器学习模型!
现在你已经掌握了基础知识,请在 Microsoft Learn 上使用自助学习模块继续学习,你将使用传感器数据来检测制造设备是否已损坏。
让 Pranav 向你介绍机器学习的概念、可使用机器学习实现的操作,以及如何开始使用 ML.NET.:
你可能还会关注...
恭喜,你已使用 ML.NET CLI 构建了首个机器学习模型!
使用 ML.NET CLI 进行分类(尤其是情绪分析)后,可以尝试其他方案。使用出租车费用数据集试用回归方案(尤其是价格预测),以继续使用 ML.NET CLI 构建 ML.NET 模型。
让 Pranav 向你介绍机器学习的概念、可使用机器学习实现的操作,以及如何开始使用 ML.NET.:
你可能还会关注...