ML.NET チュートリアル | 概要を 10 分で
イントロ
目的
Visual Studio で ML.NET Model Builder を使用して、ML.NET で初めての機械学習モデルをトレーニングして使用します。
ML.NET CLI をインストールし、ML.NET を使用して最初の機械学習モデルの学習を行い、使用します。
前提条件
ありません。
macOS 12.0 以降のバージョン。
完了までの時間
10分 + ダウンロード/インストール時間
シナリオ
顧客レビューからのテキストが否定的または肯定的な感情であるかどうかを予測できるアプリ。
ダウンロードしてインストール
Visual Studio 2022 をダウンロードしてインストールします。
インストール時に、.NET デスクトップ開発 ワークロードをオプションの ML.NET Model Builder コンポーネントと共に選択する必要があります。次の図に示すように、上記のリンクを使用すると、すべての前提条件が正しく選択する必要があります。
Visual Studio 2022 を既にお使いですか?
Visual Studio 2022 が既に存在する場合は、それが最新の状態であり、必要なワークロードがインストールされていることを確認してください。
- Windows キーを選択し、Visual Studio インストーラー と入力して、Enter キーを押します。
- プロンプトが表示された場合は、インストーラーが自分自身を更新することを許可します。
- Visual Studio 2022 の更新プログラムが利用可能な場合は、[更新] ボタンが表示されます。インストールを変更する前に、それを選択して更新してください。このチュートリアルでは、最新の Visual Studio 2022 バージョンを使用することをお勧めします。
- Visual Studio 2022 のインストールを見つけて、[変更] を選択します。
- .NET デスクトップ開発を選択し、右側のウィンドウで ML.NET Model Builder が選択されていることを確認します。[変更] ボタンを選択します。
Model Builder の最新バージョンにアップグレードする
Visual Studioで ML.NET Model Builder を有効にしたら、最新バージョンをダウンロードしてインストールします。
最新バージョンの Model Builder をダウンロードする
ダウンロード後、.vsix ファイルをダブルクリックして拡張機能をインストールしてください。
Visual Studio の更新プログラムを確認する
このチュートリアルは、最新バージョンの Visual Studio 向けに最適化されています。既に Visual Studio 2022 をお持ちの場合は、更新プログラムを確認してください:
- Windows キーを選択し、Visual Studio インストーラー と入力して、Enter キーを押します。
- プロンプトが表示された場合は、インストーラーが自分自身を更新することを許可します。
- 更新プログラムが利用可能な場合、Visual Studio 2022 のインストールに [更新] ボタンが表示されます。これを選択して更新します。
.NET SDK のインストール
.NET アプリをビルドするには、.NET 8 SDK (ソフトウェア開発キット) をダウンロードしてインストールする必要があります。
.NET 8 SDK x64 (Intel) のダウンロード
.NET 8 SDK Arm64 (Apple Silicon) のダウンロード
Apple M1 または M2 チップを搭載した Mac をお使いの場合は、Arm64 バージョンの SDK をインストールする必要があります。
ML.NET CLI のインストール
ML.NET コマンドライン インターフェイス (CLI) には、ML.NET を使用して機械学習モデルをビルドするためのツールが用意されています。
注: 現在、ML.NET CLI はプレビュー段階にあり、最新の LTS バージョンの .NET SDK (.NET 8) のみをサポートしています。
インストール手順については、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 'X.X.X') 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 'X.X.X') 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 コンソール アプリを作成します:
- Visual Studio 2022 のスタート ウィンドウから [新しいプロジェクトの作成]を選択します。
- C# Console App プロジェクト テンプレートを選択します。
- プロジェクト名を
myMLApp
に変更します。 - [ソリューションとプロジェクトを同じディレクトリに配置する] がオフになっていることを確認してください。
- 次へ のボタンを選択します。
- .NET Framework として .NET 8.0 (長期的なサポート)を選択します。
- [作成] ボタンを選択します。Visual Studio はプロジェクトを作成し、
Program.cs
ファイルを読み込みます。
機械学習を追加する
ソリューション エクスプローラー で
myMLApp
プロジェクトを右クリックし、[追加] > [機械学習] を選択します。- [新しい項目の追加] ダイアログボックスで [機械学習モデル (ML.NET)] が選択されていることを確認します。
名前 フィールドを
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.18.2 です。
この場合、カスタマー レビューのコンテンツ (テキスト) に基づいて感情を予測します。
-
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 トレーニング オプションで使用される最適化メトリックとアルゴリズムを更新できますが、この例では必要ありません。
[トレーニングの開始] を選択して、トレーニング プロセスを開始します。 トレーニングが始まると、残り時間を確認できます。
学習結果
学習が終了したら、学習結果の概要を確認できます。
- 最高のマクロ精度 - Model Builder が検出した最高のモデルの精度を表示します。精度が高いほど、モデルがテスト データをより正しく予測したことを意味します。
- 最適なモデル - これは、Model Builder の探索中に最適なアルゴリズムを示します。
- 学習時間 - これは、モデルの学習または探索に費やされた合計時間を示します。
- 探索済みモデル (合計) - これには、指定した時間内に 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 を実行し、データ変換、アルゴリズム、アルゴリズムオプションのさまざまな組み合わせを使用して、指定された量のトレーニング時間内に分類モデル探索を何度も繰り返してから、最も高いパフォーマンスのモデルを選択します。
- --dataset: データセットとして
yelp_labelled.txt
を選択しました (内部では、CLI が 1 つのデータセットをトレーニングとテストのデータセットに分割します)。 - --label-col: 予測するターゲット列 (またはラベル) を指定する必要があります。この場合は、2 番目の列のセンチメントを予測することにします (インデックスのない列は、これが列 "1" です)。
- --has-header: データセットにヘッダーがあるかどうかを指定するには、このオプションを使用します。この場合、データセットにはヘッダーがないため、false です。
- --name: 機械学習モデルと関連する資産の名前を指定するには、このオプションを使用します。この場合、この機械学習モデルに関連付けられているすべての資産の名前に SentimentModel が含まれます。
- --train-time: ML.NET CLI で異なるモデルを探索する時間も指定する必要があります。この例では、60秒です (トレーニング後にモデルが見つからない場合には、この数を増やすことができます)。大規模なデータセットの場合は、トレーニング時間を長く設定する必要があります。
進行状況
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
: このファイルにはCalculatePFI
メソッドが含まれています。このメソッドは、Permutation Importance Feature (順列の特徴の重容量) (PFI) 手法を使用して、モデル予測に最も寄与する特徴を評価します。SentimentModel.mlnet
: このファイルは、ML.NET モデルで、シリアル化された zip ファイルです。SentimentModel.training.cs
: このファイルには、入力列がモデル予測に与える重要性を理解するためのコードが含まれています。
Model Builder のステップを使用する手順では、コード スニペットが用意されており、モデルのサンプル入力を作成し、その入力を予測するためにモデルを使用します。
Model Builder では、オプションでソリューションに追加できる プロジェクト テンプレート も提供されます。2 つのプロジェクト テンプレート (コンソールアプリと Web API) がありますが、どちらもトレーニング済みのモデルを使用しています。
ML.NET CLI は、機械学習モデルと、モデルをトレーニングして使用するためのコードの両方を追加します。次に例を示します。
-
SentimentModel という名前の新しいディレクトリが作成され、これには次のファイルを含む .NET コンソール アプリが含まれます:
Program.cs
: このファイルには、モデルを実行するためのコードが含まれています。SentimentModel.consumption.cs
: このファイルには、モデルの入力クラスと出力クラス、およびモデルの使用に使用できるPredict
メソッドが含まれています。SentimentModel.mbconfig
: このファイルは、トレーニングの構成と結果を追跡する JSON ファイルです。SentimentModel.training.cs
: このファイルには、最終的なモデルのトレーニングに使用されるトレーニング パイプライン (データ変換、アルゴリズム、およびアルゴリズム パラメーター) が含まれています。SentimentModel.zip
: このファイルは、ML.NET モデルで、シリアル化された zip ファイルです。
モデルを試すには、コンソール アプリを実行して、モデルを使用して 1 つのステートメントのセンチメントを予測できます。
モデルを使用する
最後の手順は、エンドユーザーアプリケーションでトレーニング済みのモデルを使用することです。
-
次のコードを使用して
myMLApp
プロジェクトのProgram.cs
コードを置換します。Program.csusing 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
ディレクトリに移動します。Command promptcd SentimentModel
-
任意のコード エディターで
Program.cs
を開き、コードを確認します。コードは次のようになります。Program.csusing 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
ディレクトリであることを確認してください)。Command promptdotnet run
出力は次のようになります:
Command promptUsing model to make single prediction -- Comparing actual Col1 with predicted Col1 from sample data... Col0: Wow... Loved this place. Col1: 1 Class Score ----- ----- 1 0.9651076 0 0.034892436 =============== End of process, hit any key to finish ===============
次の手順
おめでとうございます。ML.NET Model Builder を使用して、最初の機械学習モデルを構築しました。
基礎を習得したので、Microsoft Learn の自習型学習モジュールの使用を続行します。ここでは、製造デバイスが壊れていないかどうかを検出するためにセンサー データを使用します。
Microsoft Learn: 予測メンテナンス モデルの学習
ML.NET for Beginners
Luis は機械学習と AI の概念を紹介し、それで何ができるかについて説明し、OpenAI、Azure AI サービス、ML.NET とともに始める方法をご案内します。:
あなたは下記にもご興味がおありかもしれません...
おめでとうございます。ML.NET CLI を使用して、最初の機械学習モデルを構築しました。
分類 (具体的には感情分析) に ML.NET CLI を使用して、他のシナリオを試すことができます。ML.NET CLI を使用して ML.NET モデルをビルドし続けるために、タクシー料金データセットを使用した回帰シナリオ (具体的には価格予測) を試します。
ML.NET for Beginners
Luis は機械学習と AI の概念を紹介し、それで何ができるかについて説明し、OpenAI、Azure AI サービス、ML.NET とともに始める方法をご案内します。:
あなたは下記にもご興味がおありかもしれません...