Visual Studio で ML.NET Model Builder を使用して、ML.NET で初めての機械学習モデルをトレーニングして使用します。
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 を有効にしたら、最新バージョンをダウンロードしてインストールします。
最新バージョンの 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 ファイルは、UI の状態を追跡するための単なる JSON ファイルです。
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 Machine Learning Repository から Sentiment Labelled Sentences データセットをダウンロードします。sentiment labelled sentences.zip
を解凍し、yelp_labelled.txt
ファイルを myMLApp
ディレクトリに保存します。
yelp_labelled.txt
の各行は、Yelp でユーザーが残したレストランのさまざまなレビューを表します。最初の列はユーザーが残したコメントを表し、2 番目の列はテキストの感情を表します (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
を参照します。データセットを選択すると、Data Preview セクションにデータのプレビューが表示されます。データセットにはヘッダーがないため、ヘッダーは自動生成されます ("col0" および "col1")。
[予測 (ラベル) の列 で、"col1" を選択します。ラベル は予測対象のことで、この場合、データセットの 2 番目の列 ("col1") にあるセンチメントです。
ラベルの予測に使用される列は、特徴 と呼ばれます。ラベル以外のデータセット内のすべての列は、自動的に特徴として選択されます。この場合、レビュー コメント列 ("col0") が特徴の列です。特徴の列を更新し、詳細データ オプションで他のデータ読み込みオプションを変更できますが、この例では必要ありません。
データを追加した後、トレーニングの手順に進みます。
ここでは、 yelp_labelled.txt
データセットを使用してモデルをトレーニングします。
Model Builder は、指定された学習時間に基づいて、アルゴリズムや設定を変えた多くのモデルを評価し、ベスト パフォーマンス モデルを構築します。
トレーニングする時間 (すなわち Model Builder が様々なモデルを検索する時間量) を変更してトレーニングして、60 秒に変更します (トレーニング後にモデルが見つからない場合は、この値を大きくすることができます)。大規模なデータセットの場合、トレーニング時間が長くなることに注意してください。Model Builder は、データセットのサイズに基づいてトレーニング時間を自動的に調整します。
[トレーニングの開始] を選択して、トレーニング プロセスを開始します。 トレーニングが始まると、残り時間を確認できます。
学習が終了したら、学習結果の概要を確認できます。
必要に応じて、[Machine Learning Output] ウィンドウでトレーニング セッションに関する詳細を確認することができます。
モデルのトレーニングが終了したら、評価の手順に進みます。
ターミナルで、次のコマンドを実行します (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 が 1 つのデータセットをトレーニングとテストのデータセットに分割します)。ML.NET CLI はさまざまなモデルを探索していますが、次のデータが表示されます。
必要に応じて、CLI で生成されたログ ファイルでトレーニング セッションに関する詳細を確認することができます。
評価 手順では、最高性能の algorithm と最高精度を表示し、そのモデルを UI で試すことができます。
[モデルを試す] セクションで、サンプル入力に関する予測を行うことができます。テキスト ボックスにはデータセットのデータの最初の行が事前に入力されていますが、入力を変更し、[予測] ボタンを選択して、さまざまなセンチメント予測を試すことができます。
この場合、0 は否定的なセンチメントを意味し、1 は肯定的なセンチメントを意味します。
注:モデルが正常に実行されていない場合 (精度が低い場合、またはモデルが "1" を予測する場合など) は、時間とトレーニングをもう一度追加してみてください。これは、非常に小さいデータセットを使用しているサンプルです。運用レベルのモデルの場合、より多くのデータとトレーニング時間を追加する必要があります。
モデルを評価して試してみたら、[使用する] に進んでください。
ML.NET CLI で最適なモデルが選択された後、学習の概要が表示され、指定された学習時間内に探索されたモデル数など、探索プロセスの概要が表示されます。
ML.NET CLI は、最高性能のモデルのコードを生成する一方で、指定された探索時間内に見つかった最高精度の上位モデル (最大 5 つ) を表示します。また,これらの上位モデルについて、AUC、AUPRC、F1 スコアなどの評価指標が表示されます。詳細については、ML.NET メトリクス を参照してください。
トレーニングが完了すると、次の 3 つのファイルがコードビハインドとして SentimentModel.mbconfig
に自動的に追加されます。
SentimentModel.zip
: このファイルは、ML.NET モデルで、シリアル化された zip ファイルです。SentimentModel.consumption.cs
: このファイルには、モデルの入力クラスと出力クラス、およびモデルの使用に使用できる Predict
メソッドが含まれています。SentimentModel.training.cs
: このファイルには、最終的なモデルのトレーニングに使用されるトレーニング パイプライン (データ変換、アルゴリズム、およびアルゴリズム パラメーター) が含まれています。Model Builder のステップを使用する手順では、コード スニペットが用意されており、モデルのサンプル入力を作成し、その入力を予測するためにモデルを使用します。
Model Builder では、オプションでソリューションに追加できる プロジェクト テンプレート も提供されます。2 つのプロジェクト テンプレート (コンソールアプリと Web API) がありますが、どちらもトレーニング済みのモデルを使用しています。
ML.NET CLI は、機械学習モデルと、モデルをトレーニングして使用するためのコードの両方を追加します。次に例を示します。
Program.cs
: このファイルには、モデルを実行するためのコードが含まれています。SentimentModel.consumption.cs
: このファイルには、モデルの入力クラスと出力クラス、およびモデルの使用に使用できる Predict
メソッドが含まれています。SentimentModel.mbconfig
: このファイルは、トレーニングの構成と結果を追跡する JSON ファイルです。SentimentModel.training.cs
: このファイルには、最終的なモデルのトレーニングに使用されるトレーニング パイプライン (データ変換、アルゴリズム、およびアルゴリズム パラメーター) が含まれています。SentimentModel.zip
: このファイルは、ML.NET モデルで、シリアル化された zip ファイルです。モデルを試すには、コンソール アプリを実行して、モデルを使用して 1 つのステートメントのセンチメントを予測できます。
最後の手順は、エンドユーザーアプリケーションでトレーニング済みのモデルを使用することです。
次のコードを使用して 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 の自習型学習モジュールの使用を続行します。ここでは、製造デバイスが壊れていないかどうかを検出するためにセンサー データを使用します。
Microsoft Learn: 予測メンテナンス モデルの学習
Pranav は機械学習の概念、それで何ができるか、そして ML.NET とともに始める方法について紹介します。:
あなたは下記にもご興味がおありかもしれません...
おめでとうございます。ML.NET CLI を使用して、最初の機械学習モデルを構築しました。
分類 (具体的には感情分析) に ML.NET CLI を使用して、他のシナリオを試すことができます。ML.NET CLI を使用して ML.NET モデルをビルドし続けるために、タクシー料金データセットを使用した回帰シナリオ (具体的には価格予測) を試します。
Pranav は機械学習の概念、それで何ができるか、そして ML.NET とともに始める方法について紹介します。:
あなたは下記にもご興味がおありかもしれません...