ML.NETのインストールとAutoMLを用いたテキスト分類

Developers's blog

2019.05.31中村 昴
ML.NETのインストールとAutoMLを用いたテキスト分類

概要

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からインストーラをダウンロードし、インストールする。

Download .NET Core

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)については以下を参照。

学習後、ディレクトリ構成は以下のようになる。

.
├── 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 ===============

参考

お問い合わせはこちらから