DEVELOPER’s BLOG
技術ブログ
ML.NETのインストールとAutoMLを用いたテキスト分類
2019.05.31
中村 昴
分類
機械学習
概要
ML.NETは、Microsoftが開発したクロスプラットフォーム対応の機械学習フレームワークである。 ML.NETで提供されているAutoMLを使うと、アルゴリズムの選択やオプションの設定などが自動で行われ、最も良い結果を出したモデルを得ることができる。 今回は、AutoMLによる文章の二項分類を行った。
環境
- macOS Sierra 10.12.6
- .NET SDK 2.2.107
- ML.NET 0.3.27703.4
手順
.NET SDKのインストール
次のURLからインストーラをダウンロードし、インストールする。
ML.NET CLIのインストール
.NET SDKに含まれる dotnet
コマンドを使用し、ML.NET CLIをインストールする。
$ dotnet tool install -g mlnet
AutoMLを用いたテキスト分類
1. 新規ディレクトリを作成する
$ mkdir myMLApp $ cd myMLApp
2. Wikipedia detoxデータセットをダウンロードする
以下のようにしてデータセットをダウンロードする。
$ curl -O 'https://raw.githubusercontent.com/dotnet/machinelearning/master/test/data/wikipedia-detox-250-line-data.tsv'
wikipedia-detox-250-line-data.tsv
は、文章が否定的(Sentiment=1)か肯定的(Sentiment=0)かがラベル付けされている。
データは以下のような形式になっている。
Sentiment SentimentText 1 ==RUDE== Dude, you are rude upload that carl picture back, or else. 1 == OK! == IM GOING TO VANDALIZE WILD ONES WIKI THEN!!!
0 I hope this helps.
3. 学習をする
与えられた文章に対して、Sentimentで二項分類するように学習する。
下記の mlnet auto-train
コマンドを実行すると、様々なデータ変換、アルゴリズム、アルゴリズムのオプションが組み合わせて試された後、最も結果の良いものが出力される。
$ mlnet auto-train --task binary-classification --dataset "wikipedia-detox-250-line-data.tsv" --label-column-name "Sentiment" --max-exploration-time 10
オプションの意味は以下の通り。
- --task: 機械学習の種類
- --dataset: 使用するデータセット
- --label-column-name: データセットの中で推論したいラベル
- --max-exploration-time: ML.NETがモデルを探索する最大の秒数
実行すると以下のようなログが出力される。
Best Accuracy: 88.24%, Best Algorithm: LinearSvmBinary, Last Algorith...00:00:10 ===============================================Experiment Results================================================= ------------------------------------------------------------------------------------------------------------------ | Summary | ------------------------------------------------------------------------------------------------------------------ |ML Task: binary-classification | |Dataset: wikipedia-detox-250-line-data.tsv | |Label : Sentiment | |Total experiment time : 10.42 Secs | |Total number of models explored: 33 | ------------------------------------------------------------------------------------------------------------------ | Top 5 models explored | ------------------------------------------------------------------------------------------------------------------ | Trainer Accuracy AUC AUPRC F1-score Duration #Iteration | |1 LinearSvmBinary 0.8824 0.7273 0.7848 0.9167 0.2 17 | |2 SgdCalibratedBinary 0.8235 0.7576 0.7857 0.8696 0.2 7 | |3 SgdCalibratedBinary 0.8235 0.7576 0.7857 0.8696 0.2 10 | |4 SgdCalibratedBinary 0.8235 0.7576 0.7857 0.8696 0.2 19 | |5 SgdCalibratedBinary 0.8235 0.7576 0.7857 0.8696 0.2 22 | ------------------------------------------------------------------------------------------------------------------
表の見出しの意味は次の通り。
- Trainer: 学習に使われたアルゴリズム
- Duration: 学習時間
- #Iteration: 学習の反復回数
評価指標(Accuracy、AUC、AUPRC、F1-score)については以下を参照。
- 【ROC曲線とAUC】機械学習の評価指標についての基礎講座 - Np-Urのデータ分析教室
- モデルの評価 | AutoML Natural Language | Google Cloud
- F値に関するメモ - Qiita
学習後、ディレクトリ構成は以下のようになる。
. ├── SampleBinaryClassification │ ├── SampleBinaryClassification.ConsoleApp │ │ ├── ModelBuilder.cs │ │ ├── Program.cs │ │ └── SampleBinaryClassification.ConsoleApp.csproj │ ├── SampleBinaryClassification.Model │ │ ├── DataModels │ │ │ ├── ModelInput.cs │ │ │ └── ModelOutput.cs │ │ ├── MLModel.zip │ │ └── SampleBinaryClassification.Model.csproj │ ├── SampleBinaryClassification.sln │ └── logs │ └── debug_log.txt └── wikipedia-detox-250-line-data.tsv
4. 学習したモデルを使用する
自動生成されるサンプルプロジェクトは、データファイルから一つの文章を取り出して推論をする内容となっている。 サンプルプロジェクトを実行するには以下のようにする。
$ cd SampleBinaryClassification/SampleBinaryClassification.ConsoleApp $ dotnet run
出力結果
Single Prediction --> Actual value: True | Predicted value: True =============== End of process, hit any key to finish ===============