或るレールを渡る

そして通り過ぎて行く

ML.netで二項分類のチュートリアルを動かしてみた

www.google.co.jp

いやー、きましたね。
今まで機械学習とかをやろうと思ったらpython一択みたいな感じだったので、少しやってみてすぐに挫折した覚えがあります。
普段C#を使っている(LINQ?何それ?ゼルダ?レベルですが...)ので、これなら取っつきやすいかもと思い、試してみることに。
てことでまずは公式に掲載されている二項分類のサンプルを動かしてみました。
https://docs.microsoft.com/ja-jp/dotnet/machine-learning/tutorials/

NuGetを使用してMLパッケージのインストール

NuGetは.Netに対応しているパッケージマネージャですね。
ここにMLライブラリが公開されているので、ここから適用しましょう。
プロジェクト→NuGetパッケージの追加からMicrosoft.MLを探します。

.NetCoreのバージョンを2.2に上げる

インストールされている.Net Coreのバージョンが古い場合はソリューションを開いたときにエラーが出るため、新しくしましょう。
下記からダウンロードできます。

dotnet.microsoft.com

※これ、もしかしたら必要ないかもしれません。
しかし、今後別のサンプルを動かす時には必須のものもあるので、上げておくことをおすすめします。

サンプルソースのダウンロード

githubに今回使用するサンプルソースが保存されています。

github.com

ダウンロードしたら、その中の「/machine-learning/tutorials/SentimentAnalysis/」に今回のサンプルが格納されています。

データ格納用フォルダ準備

プロジェクトファイルと同じ階層に、「Data」というフォルダを作りましょう。
プログラム内で指定されているため、フォルダ名が違うとエラーになります。
もちろんそこを変更すればなんでも動きます。

学習用データの準備

続いて、分類を学習させるためのデータを用意しましょう。
こちらもダウンロードします。

https://archive.ics.uci.edu/ml/machine-learning-databases/00331/sentiment%20labelled%20sentences.zip

ダウンロードしたら解凍し、中の「yelp_labelled.txt 」ファイルを先程作成した「Data」内にコピーします。

こんな感じの階層になります。

ソリューションを開く

ここまできたらデータの準備は完了です。
ソリューションファイルを開いてみましょう。

学習用データのプロパティを変更

学習用にコピーした「yelp_labeled.txt」のプロパティにて、出力を「新しい場合はコピーする」にしましょう。

実行してみる

プログラムを実行してみましょう。
こんな画面が出たら成功です。
UseModelWithSingleItemメソッドにて単文の解析、UseModelWithBatchItemsメソッドにて複数の文章の解析を行っていますね。

改良案

これで二項分類のソースが動きました。
ただこれ難点があって、日本語を上手いこと認識してくれないんですよね。
試しにyelp_labelled.txtの中身をgoogle翻訳にかけて日本語にしてみましたがダメでした。
ということで、次回はAzureの翻訳APIを使用して日本語を英語に翻訳してから解析してみようと思います。

以上です。
よろしくお願いします。