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 をダウンロードする
ダウンロード後、.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
FOR x64 MACHINES - 次のコマンドを実行します。
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 以外の本体 (macOS の新しい既定値である zsh など) を使用している場合は、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 ファイルは、UI の状態を追跡するための単なる JSON ファイルです。
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 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 は、データセットのサイズに基づいてトレーニング時間を自動的に調整します。
Advanced トレーニング オプションで使用される最適化メトリックとアルゴリズムを更新できますが、この例では必要ありません。
[トレーニングの開始] を選択して、トレーニング プロセスを開始します。 トレーニングが始まると、残り時間を確認できます。
学習が終了したら、学習結果の概要を確認できます。
必要に応じて、[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 メトリクス を参照してください。
トレーニングが完了すると、次の 4 つのファイルがコードビハインドとして SentimentModel.mbconfig
に自動的に追加されます。
SentimentModel.consumption.cs
: このファイルには、モデルの入力クラスと出力クラス、およびモデルの使用に使用できる Predict
メソッドが含まれています。SentimentModel.evaluate.cs
: このファイルには、モデルの入力クラスと出力クラス、およびモデルの使用に使用できる Predict
メソッドが含まれています。SentimentModel.mlnet
: このファイルは、ML.NET モデルで、シリアル化された zip ファイルです。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 とともに始める方法について紹介します。:
あなたは下記にもご興味がおありかもしれません...