ML.NET v2.0 比较低调地在11月发布了,所有 ML.NET 2.0Model Builder 的更新信息在此,可以从中了解到更多细节或实现,本文把值得关注的内容摘要出来。

新版本的 ML.NET 2.0Model Builder 2022 目前都已发布。

Model Builder 中的文本分类场景

几个月前发布的文本分类 API 的预览版,使开发者能够训练对原始文本数据进行分类的自定义模型。它通过将 NAS-BERTTorchSharp 实现集成到 ML.NET 中来实现。文本分类 API 基于此模型的预训练版本,使用数据来微调模型。Model Builder 中的文本分类场景正式由 ML.NET 文本分类 API 提供支持。

借助这个新的支持,可以使用 Model Builder 中微软研究院的最新深度学习技术来训练自定义文本分类模型。

此场景支持在 CPU 和 GPU 上进行本地训练。如果使用 GPU,您需要确保与 CUDA 兼容,建议至少使用 6 GB 的专用内存。有关设置 GPU 的更多详细信息,请参阅 ML.NET GPU 指南

若要开始使用文本分类,请按照情绪分析教程进行操作。

image

句子相似性

在 ML.NET 2.0 中引入了一个新的句子相似性 API。此 API 使用与文本分类 API 相同的底层, 也是 NAS-BERT 模型的 TorchSharp 实现。但主要区别在于,该模型不是预测类别,而是计算一个数值,该数值表示两个短语的相似程度。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// Add using statements
using Microsoft.ML;
using Microsoft.ML.TorchSharp;

// Initialize MLContext
var mlContext = new MLContext();

// (Recommended) Use GPU
mlContext.GpuDeviceId = 0;
mlContext.FallbackToCpu = false;

// Load your data
var phrases = new []
{
    new {Source="ML.NET 2.0 just released", Target="There's a new version of ML.NET", Similarity=5f},
    new {Source="ML.NET 2.0 just released", Target="The rain in Spain stays mainly in the plain", Similarity=1f}
};

var dataView = mlContext.Data.LoadFromEnumerable(phrases);

// Define your training pipeline
var pipeline = 
    mlContext.Regression.Trainers.SentenceSimilarity(
        labelColumnName:"Similarity",
        sentence1ColumnName:"Source",
        sentence2ColumnName:"Target");

// Train the model
var model = pipeline.Fit(dataView);

在此示例中,使用了三个不同的句子进行训练,目的是预测它们的相似性。相似性由“Similarity”列中的值定义,该值是介于 1-5 之间的等级,其中 1 表示最不相似,5 表示最相似。若要训练句子相似性模型,请将句子相似性训练器添加到管道并调用 Fit。训练模型后,开发者可以提供源句子和目标句子,模型将预测它们之间的相似性。

有关句子相似性 API 的更详细示例,请参阅ML.NET 2.0 示例

Tokenizer 支持

为了实现文本分类和句子相似性等自然语言处理方案,开发者需要一种方法来处理文本数据。这通常是使用 tokenization 完成的。目前为 Roberta 模型实现了一个分词器,它使用字节对编码算法来满足 NAS-BERT 模型的要求。

微软的 ML.NET 中发布了 Microsoft.ML.Tokenizers 包。开发者可以使用该包中提供的 API 导入自定义词汇表,并使用 BPE Tokenizer 处理文本数据。

此示例使用来自 HuggingFace GPT-2 存储库的词汇资源。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Add using statements
using Microsoft.ML;
using Microsoft.ML.Tokenizers;

// Initialize MLContext
var mlContext = new MLContext();

// Define vocabulary file paths
var vocabFilePath = @"C:\Tokenizers\vocab.json";
var mergeFilePath = @"C:\Tokenizers\merges.txt";

// Initialize Tokenizer
var tokenizer = new Tokenizer(new Bpe(vocabFilePath, mergeFilePath),RobertaPreTokenizer.Instance);

// Define input for tokenization
var input = "the brown fox jumped over the lazy dog!";

// Encode input
var tokenizerEncodedResult = tokenizer.Encode(input);

// Decode results
tokenizer.Decode(tokenizerEncodedResult.Ids);

编码结果提供的信息包括映射到词汇表中该单词索引的 Id,以及指示每个标记开始和结束位置的偏移量。例如:

Ids Offsets
[ 1169, 0, 33282, 0, 12792, 0, 73, 27073, 0, 2502, 0, 1169, 0, 75, 12582, 0, 9703, 0 ] [ ( 0, 3 ), ( 3, 4 ), ( 4, 9 ), ( 9, 10 ), ( 10, 13 ), ( 13, 14 ), ( 14, 15 ), ( 15, 20 ), ( 20, 21 ), ( 21, 25 ), ( 25, 26 ), ( 26, 29 ), ( 29, 30 ), ( 30, 31 ), ( 31, 34 ), ( 34, 35 ), ( 35, 38 ), ( 38, 39 ) ]

文本数据被 tokenization 后,您可以将其用作模型的输入。在此示例中,用于编码的词汇表适用于GPT-2模型。解码会将它们转换回字符串。

AutoML 改进

自动化机器学习 (AutoML) 可自动执行将机器学习应用于数据的过程。AutoML 支持 Model Builder 和 ML.NET CLI。

去年更新了 Model Builder 和 ML.NET CLI 中使用的 AutoML API 实现,以使用微软研究院的最新技术,例如 FLAML 库中的技术。

今年将 AutoML 的实现引入 dotnet/机器学习存储库,并添加更多功能,为机器学习初学者和有经验的用户提供出色的代码优先体验。

在 ML.NET 2.0 中,您可以:

使用 AutoML 特征器自动执行数据预处理。 使用预配置的 AutoML 管道训练二元分类、多类分类和回归模型,从而更轻松地开始使用机器学习。 选择在培训过程中使用哪些培训师。 自定义并创建开发者自己的搜索空间以从中选择超参数。 选择用于查找最佳超参数的调谐算法。 保留所有 AutoML 运行。 若要开始使用 AutoML API,请参阅 ML.NET 2.0 示例AutoML API 操作指南

Model Builder 中的高级选项

更丰富的 AutoML API 使开发者能够向 Model Builder 和 ML.NET CLI 添加更高级的功能。在此版本的 Model Builder 中引入了高级训练选项,使您能够:

  • 选择训练器

image

  • 选择要优化的评估指标

image

接下来的迭代

以下是明年重点关注的方向,有关更多详细信息,请参阅 ML.NET 路线图

深度学习

  • 继续扩大深度学习场景覆盖面。例如用于以下任务的文本分类和句子相似性 API:
    • 物体检测
    • 命名实体识别
    • 问答
  • 为 ML.NET 开箱即用仍不支持的场景和模型启用与 TorchSharp 的集成。
  • 通过改进批处理支持并更轻松地使用 ONNX 运行时执行提供程序等加速器来加速深度学习工作流。
  • 简化 ML.NET 中的 ONNX 模型使用。

LightGBM

LightGBM 是一个灵活的框架,用于经典机器学习任务,如分类和回归。为了充分利用 LightGBM 提供的功能,接下来将计划:

  • 将 ML.NET 中包含的版本升级到最新的 LightGBM 版本
  • 通过启用本机 LightGBM 格式的保存和加载模型,使与其他框架的互操作性更加容易。

DataFrame

数据处理是任何分析和机器学习工作流程的重要组成部分。此过程通常涉及加载、检查、转换和可视化数据,执行其中一些任务的方法之一是使用 Microsoft.Data.AnalysisIDataView NuGet 包中的 DataFrame API。在过去的一年里,添加了新的列类型(如 DateTime),以实现与 ML.NET 更好的互操作性。明年计划继续专注于以下领域:

  • 通过支持 VBuffer 和 KeyType 列提高 IDataView 互操作性。
  • 改进常见操作(如加载、筛选、合并和联接数据)的稳定性。

AutoML 和工具

计划继续改进 AutoML API,以实现新的场景和自定义类型,从而简化初学者对机器学习工作流程的体验,并将它们引入到 Model Builder 和 ML.NET CLI 工具。

改进文档

随着继续推动 ML.NET 改进和添加新功能,文档和示例是其中的关键部分。在接下来的一年里,将计划投入更多的资源来提供高质量的文档和样品示例。

入门和资源

Microsoft Docs 中了解有关 ML.NET、Model Builder 和 ML.NET CLI 的更多信息。

每隔周的周三上午 10 点(太平洋时间)收听机器学习 .NET 社区站立会