DEVELOPER’s BLOG

技術ブログ

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

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 ===============

参考

関連記事

Kaggleで役立つAdversarial Validationとは

概要 Adversarial ValidationはTrainデータとTestデータの分布が異なる際に、Testデータに似たValidationデータを作成するのに使われる手法です。 Kaggleなどのデータ分析コンペではTrainデータとTestデータの一部が与えられ、コンペ終了まではこの一部のTestデータに対するスコアのみ知ることができます。一部のTestデータだけを見てモデルを評価していると、全体のテストデータに対しては良いスコアが出ずに最終的に低

記事詳細
Kaggleで役立つAdversarial Validationとは
kaggle 分類 機械学習
判別分析の利用例 (模試の得点で合否判定)

1.判別分析の定義 判別分析とは、統計学上のデータ解析手法の一つである。 特定のグループに分かれているデータを元にどのような基準で判別されているか解析する。 そして、どちらのグループがA群に属され、B群に属されるかを予測する分析のことである。 2.判別分析の成り立ち 1936年にロナルドフィシャーによって線形判別分析が発表され、これを元に分析手法が発達した。 3.判別分析の例 1.医療診断  ・喫煙の有無により癌の発病を予測 ・検査結果から病気の有無の判別

記事詳細
判別分析の利用例 (模試の得点で合否判定)
分類 機械学習
Windows Subsystem for LinuxでOpenCVのカスケード型分類器を動かす

Windows 10でLinux環境を使いたい場合、Windows Subsystem for Linux(WSL)が便利です。WSL以外にもLinux環境を利用する手段はありましたが、以下のような点が不便でした。 Cygwin ・Windows向けにコンパイルされていないものは利用できない ・Windowsのコマンドを利用するときに、パスを変換する必要がある foo.exe $(cygpath -w /path/to/file) 仮想マシン ・仮想マシン

記事詳細
Windows Subsystem for LinuxでOpenCVのカスケード型分類器を動かす
分類

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