ML.NET CLI を使用して分類モデルを作成したあと感情分析する の続きです。今回はASP.NET Coreでアプリを作成して、サーバー上で日本語感情分析のアプリを動作させます。またAPIも公開してみることにします。

以前、Pythonのライブラリを使って日本語文章の感情分析APIを作成しました。

日本語文章の感情分析APIをつくって感情分析する

ところがサーバー上で動かしてみるとけっこうメモリーをドカ食いしてくれます。

そのためサーバー上で公開するのは断念することになりました。ASP.NET Core版だとそんなにひどいことにはなりません。もっともPythonのライブラリとではぜんぜんアルゴリズムが違うので単純な比較はできないのですが・・・。

いつもとほとんどかわりありません。

cshtml部分

それでは作成することにします。名前空間は SentimentAnalysis とします。

まずNuGetでMicrosoft.MLをインストールします。そして前回の記事で生成したSampleClassification.zipというファイルをModelDataフォルダのなかにコピーします。プロパティの出力ディレクトリにコピーを「常にコピーする」に変更します。

Pagesフォルダのなかにsentiment-analysisフォルダをつくります。

Pages\sentiment-analysis\Index.cshtml

ポジティブ、ネガティブ、ニュートラルの要素がどれだけあるかを表示させる部分ですが、Score配列の要素を1,0,2の順で取得しています。

これはトレーニングに使った学習セットの最初の部分がネガティブ、ポジティブ、ニュートラルの順になっていたからです。

C#でコードを書く

Index.cshtml.csにコードを記述します。

ModelInputOutputクラスの定義

最初にSentimentModelInputクラスとSentimentModelOutputクラスを定義します。

Pages\sentiment-analysis\Index.cshtml.cs

感情分析の処理ですが、これは前回の ML.NET CLI を使用して分類モデルを作成したあと感情分析する とほとんど同じです。

Pages\sentiment-analysis\Index.cshtml.cs

日本語感情分析のAPIを公開する

次にAPIを公開して外部から実行できるようにします。ただしセキュリティ上、本当に無制限に利用されては困るので、自分のサイト内からだけリクエストを受け付けるように制限します。

以下はプロジェクトを作成したときに自動生成されるProgram.csに変更を加えたコードです。追加したのは3箇所だけです。

Program.cs

API実装に必要なクラスの定義

SentimentAnalysis.IndexModelクラスにMapPostSentimentAnalysisApiメソッドを追加していますが、その前提として先に必要なクラスを定義しておきます。

Postされたらjsonデータを返す

MapPostSentimentAnalysisApiメソッドをを示します。

HTML部分

次にHTMLファイルを作成してサイト内にアップロードします。

JavaScript部分

クリックされたらエンドポイントにjsonデータを送ります。

app.js

APIからレスポンスが返されたら結果を表示します。< と > はエスケープして改行を反映させるために’\n’は'<br>’に置き換えています。

小数点以下が長々と表示されることがあるので四捨五入して小数点第二位までを表示させるための自作関数です。

[クリア]ボタンがクリックされたらテキストエリアの文字列を消去します。