在 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 后,下载并安装最新版本。
本教程针对最新版本的 Visual Studio 进行了优化。如果已有 Visual Studio 2022,则可以检查更新:
To build .NET apps, you need to download and install the .NET 6 SDK (Software Development Kit).
Download .NET 6 SDK (64-bit)
Arm64 下载
如果使用的是带有 Apple M1 芯片的 Mac,则需要安装 Arm64 版本的 SDK。
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 6).
Once you've installed the .NET 6 SDK, open a new terminal and run the following command if you're on a x64 machine:
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
If the tool installs successfully, you should see an output message where [arch]
is the chip architecture similar to the following:
You can invoke the tool using the following command: mlnet
Tool 'mlnet-osx-[arch]' (version '16.14.3') was successfully installed.
Note: If you're using a console other than Bash (for example, zsh, which is the new default for macOS), then you'll need to give mlnet
executable permissions and include mlnet
to the system path. Instructions on how to do this should appear in the terminal when you install mlnet (or any global tool). In general, the following command should work for most systems: chmod +x [PATH-TO-MLNET-CLI-EXECUTABLE]
或者,可以尝试使用以下命令运行 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 的更新。本教程中使用的版本为 16.14.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 指标。
训练完成后,三个文件将作为代码隐藏自动添加到 SentimentModel.mbconfig
中:
SentimentModel.zip
: 该文件是经过训练的 ML.NET 模型,它是一个序列化的 zip 文件。SentimentModel.consumption.cs
: 此文件包含模型输入和输出类以及可用于模型消耗的 Predict
方法。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.:
你可能还会关注...