⚖️

ML .NETでテキストに含まれる感情を分析してみた

2023/01/15に公開約6,000字

やること

Microsoftが提供するML .NETを使い、レビューコメントがネガティブなのかポジティブなのかを判定するモデルを作成し、アプリケーションに簡単に組み込むところまでのチュートリアルを試します。

解説動画

https://youtu.be/y4BSJ-gfDgw

ML .NETについて

ML.NET は、無料でオープンソースの、.NET 開発者プラットフォーム向けクロスプラットフォーム機械学習フレームワークです。
ML.NET を使用すると、さまざまな ML シナリオで C# または F# を使用してカスタム機械学習モデルをトレーニング、ビルド、出荷できます。ML.NET には、自動機械学習 (AutoML) などの機能や、ML.NET CLI、ML.NET Model Builder などのツールが含まれます。 機械学習をアプリケーションに簡単に統合できます。

https://dotnet.microsoft.com/ja-jp/learn/ml-dotnet/what-is-mldotnet

Visual Studio のインストール

https://visualstudio.microsoft.com/ja/vs/whatsnew/

ML.NET Model Builderが選択されているのを確認してインストール

インストールされるまで待つ

インストールが終わると起動します

今はスキップする、を選択

好きな配色を選んでVisual Studioの開始

アプリを作成

新しいプロジェクトの作成をクリック

言語をC#、種類をコンソールを選択し、表示されたコンソールアプリを選んで次へをクリック

プロジェクト名をmyMLAppに変更
ソリューションとプロジェクトを同じディレクトリに配置するにチェックが入っていないことを確認して次へをクリック

フレームワークとして.NET 7.0を選択し、作成をクリック

画面が変わり、Program.csを読み込んだ状態になる

機械学習モデルを追加

右にあるソリューションエクスプローラーでmyMLAppプロジェクトを右クリックし、追加>機械学習モデルをクリック

Machine Lerning Model(ML.NET)が選択されていることを確認し、下の名前欄をSentimentModel.mbconfigに変更し、追加をクリック

画面右のソリューションエクスプローラーにSentimentModel.mbconfigというJSONファイルが追加され、左には大きくModel Builderが表示されました。

シナリオを選択

今回は、カスタマーレビューのコンテンツ(テキスト)を用いて、感情を予測してみます。
コメントが、ポジティブに分類されるのか、ネガティブに分類されるのかを予測します。

まず、データ分類シナリオを選択

トレーニング環境の選択画面が出ますが、データ分類シナリオは現時点でローカルのCPUでの学習のみサポートしているので、そのまま次の手順をクリック

次に、データをダウンロードして追加します。

データセットのダウンロードと追加

ここでブラウザを開き、以下のリンクからデータセットをダウンロードします。

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

ダウンロードされたsentiment labelled sentences.zipを解凍します。
Visual Studioに戻って、myMLAppで右クリック、エクスプローラーでフォルダーを開くをクリック

yelp_labelled.txt ファイルを myMLApp ディレクトリに移動します

yelp_labelled.txtを移動した先のフォルダのパスをコピーしておきます。
エクスプローラー上部のパスの空白部分を一度クリックし、同じところで右クリックしてコピーをクリック

これはyelp_labelled.txtの最初の3行です。
各行はYelpという飲食店のレビューサービスで、ユーザーが残したレストランのレビューです。
最初の列(Wow... Loved this place.)はユーザーのコメント、次の列の数字(1)はテキストの感情を示します。
テキストの感情は0がネガティブ、1がポジティブです。

Wow... Loved this place.        1
Crust is not good.        0
Not tasty and the texture was just nasty.        0

データの追加

Visual Studioに戻ります。
データの追加画面で、データソースの種類でファイルを選択し、参照をクリック

開いたウィンドウのパスの空白部分を一度クリック、そして右クリックして貼り付け

yelp_labelled.txtがあるフォルダが開くので、yelp_labelled.txtを選択して開くをクリック

データのプレビュー欄に、yelp_labelled.txtの最初の10行が表示されます。
予測する列(ラベル)でcol1を選択し、次の手順をクリック

ラベルとは予測対象のことで、今回は二つ目の列(col1)にある感情を分析します。
ラベル以外の列はすべて特徴として選択されます。今回は一つ目の列(col0)のレビューコメントが特徴です。

次に、トレーニングに進みます。

モデルの学習

トレーニングする時間に60秒を設定してトレーニングの開始をクリック

トレーニングが進んでいきます

学習成果が出ました。

次の手順をクリック

モデルの評価

ここまでの手順で学習させたモデルが、文章の感情を正しく予測できるか試してみましょう。

col0欄に
I love this placeを入力すると、結果に1(ポジティブ)

I don’t like this placeを入力すると、結果に0(ネガティブ)

と予測した結果が表示されます。
その他、いろいろなレビューコメントを英語で入れてみましょう。

次は、このアプリケーションを実際にコマンドラインツールにしてみましょう。
次の手順をクリック

コードの生成

この章では、This restaurant was wonderful.というレビューの感情を予測する簡単なコードを作ってみます。

次の画面では、アプリケーションに使えるコードスニペットが表示されています。

タブをProgram.csに切り替え、そこにあるコードを全部消して、以下のコードを貼り付けます。

using 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}");

前半は先ほどのコードスニペット、後半はその出力の処理を行っています。

デバッグ>デバッグなしで開始をクリック

新しいウィンドウが表示され、入力されたTextがポジティブかネガティブかを予測して出力します。

これで、ML.NET Model Builderを利用した機械学習モデルを構築し、モデルを利用したアプリケーションを実行できました!

他にもML.NET Model Builderには様々な機能があります。
チュートリアルもたくさんあるので、ぜひ試してみましょう!

https://dotnet.microsoft.com/ja-jp/learn/ml-dotnet

https://dotnet.microsoft.com/ja-jp/learn/ml-dotnet/get-started-tutorial/intro

Discussion

ログインするとコメントできます