4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Watson StudioのJupyter NotebookでNLCの精度検証を行う

Last updated at Posted at 2019-11-04

はじめに

Watson APIのNLC(Natural Language Classifier)は、Watson APIサービスがはじまった当初からサービスを開始して、未だに継続してサービスを提供している息の長い(といっても3,4年程度ですが)APIです。
当初はAPIインターフェイスしか持っていなかったのですが、途中からベータ版のUIツールが提供され、よりUIが改善されたUIツールがWatson Studioの1機能として提供されて今に至っています。
Studio上のUIツールの利用ガイドについては、すでに別記事Watson StudioでNLC学習を行うでご紹介しました。
このツールは簡易テスト機能も持っていて、テストもUIから行うことができるのですが、この場合の課題点は、テストを1件ずつしか行うことができず、対象のテストデータを同時に流して精度を求めるなどのことはできない点にあります。
この部分を補う簡易ツールを作りましたので、ご紹介します。

機能紹介

まず、このツールでどんなことができるのか、簡単にご紹介します。ここで紹介するのに使っている資材一式はすべてGithubにアップしてありますので、皆様の環境でも動作確認は可能です。
NLCは残念ながらライトプランはないのですが、Standardもインスタンス自体は無料で、以下の無料で動作確認できる範囲もありますので、このサンプルの確認をする分には無料の範囲で可能なはずです。

1カ月当たりに1つのNatural Language Classifierが無料
1カ月当たりに1000件のAPI呼び出しが無料
1カ月当たりに4件のトレーニング・イベントが無料

学習

学習については、すでに済んでいるものとします。学習はStudioの機能を使ってやっても、APIを直接呼び出してやっても関係ありません。
今回のサンプルでは、Wikipediaの次のテキストを使って、「日本史(j-hist)」「日本地理(j-geo)」「科学(science)」の3つのジャンル(クラス)の学習をさせました。

スクリーンショット 2019-11-04 10.47.02.png

検証データ

検証データは、次のようなexeclファイルを利用します。

スクリーンショット 2019-11-04 10.34.57.png

EXCELの1行目は列名を意味します。
textという列名の項目は、NLCを呼び出す際に使うテキストデータを意味します。
classは、そのTextに対応する正解クラス名です。
それ以外の項目はテスト実施時には利用しないので、あってもなくても構いません。
今回のサンプルExcelでは便宜上キー項目のtext_idがありますが、このような列はあってもなくても関係ないということになります。

出力データ

テストの結果、できあがる出力データもExcelです。そのサンプルを以下に示します。
(見やすいように見た目は後で細工しています。実際のアウトプットはもっとプレーンな状態です。)

スクリーンショット 2019-11-04 10.34.08.png

最初の3列はテスト用の入力データそのものです。それ以降は、Textをモデルにかけた結果を、
クラス名, 確信度 の順に出力しています。
何項目まで出力するかは、notebook上の変数で設定可能です。この例ではn=3としています。

混同行列

Excelとしての出力は以上のとおりですが、おまけ機能としてNotebook上では次のような混同行列(Confusion Matirx)も表示されます。
これで、どのクラスの精度がどの程度出ているのかも確認することができます。

スクリーンショット 2019-11-04 10.58.30.png

環境

サンプルを動かすために必要な環境を説明します。

クラウド環境

IBM Cloudにアカウントがあり、NLCとWatson Studioがサービスとして利用可能になっている必要があります。残念ながら、NLCに関しては、クレジットカードのアカウントが必要です。
具体的な手順は、以下のリンクを参考として下さい。

IBMクラウドのユーザー登録からJupyter Notebookが使えるまで

クラウドでお手軽Jupyter Notebook - IBM CloudでJupyter Notebookを使えるまでの手順 -

クレジットカードアカウントへのアップグレード

IBM Cloud(旧Bluemix)クレジットアカウントへのアップグレード手順

追加サービス登録手順

以下の記事ではSpark / Watson MLのサービスをStudioと関連づける手順が記載されていますが、同様の手順でNLCの関連づけが行えます。(サービスのグループはWatson ML同様に「AI」です)

Watson Studioで追加サービスの登録を行う

必要資材

サンプルを動かすための必要資材は以下の通りです。

ファイル名 目的 リンク
nlc-test-tool-v1.ipynb 精度検証用スクリプト本体 ダウンロード用 コード確認用
nlc-test-sample.xlsx 検証用Excelサンプル ダウンロード用
nlc-test-sample-output.xlsx 検証結果Excelサンプル ダウンロード用
nlc-train.csv 学習用CSVサンプル ダウンロード用 データ確認用

手順

それでは、実際にサンプルアプリを動かすための手順を説明します。

NLCモデルの学習

今回のサンプルアプリでは、上の nlc-train.csvを学習データとして学習したモデルを使っています。
Watson Studioを利用した学習手順に関しては、別記事 Watson StudioでNLC学習を行う で説明しているので、こちらを参照されて下さい。
学習が終わったら、Watson Studioのアセット管理画面で、作ったモデルのModel IDを確認します。
後で使うので、コピーしてテキストエディタなどで保存して下さい。

スクリーンショット 2019-11-04 11.59.31.png

NLC資格情報の確認

https://cloud.ibm.com/services
から、IBM Cloudのサービス一覧を表示し、NLCのリンクをクリックします。

スクリーンショット 2019-11-04 12.08.10.png

下のような画面になるので、
① サービス資格情報をクリック
② 資格情報の表示をクリック
③ クリップボードアイコンをクリックして、資格情報のコピー
を順に行います。

スクリーンショット 2019-11-04 12.11.34.png

クリップボードの資格情報はテキストエディタなどに張り付けて保存します。この情報も後ほど利用します。

ツールで利用するExcelのアップロード

検証に利用するExcel nlc-test-sample.xlsxをクラウド上にアップロードします。
手順は、次のとおりです。

スクリーンショット 2019-11-04 12.22.44.png

スクリーンショット 2019-11-04 12.22.51.png

  • 下の画面の赤枠にExcelファイルをdrag and drop

スクリーンショット 2019-11-04 12.22.59.png

アップロードが正常に終わると、次の図のように、Data Assetsの中にnlc-test-sample.xlsxが表示されるようになります。

スクリーンショット 2019-11-04 12.33.07.png

NotebookのWatson Studioへの読み込み

事前にダウンロードしたnlc-test-tool-v1.ipynbをWatson StudioのJupyter Notebookに読み込みます。
読み込み手順については、クラウドでお手軽Jupyter Notebook - IBM CloudでJupyter Notebookを使えるまでの手順 - を参照して下さい。

COS資格情報の設定

読み込んだJupyter Notebookは環境に合わせて何カ所か修正する必要があります。
まず、COS資格情報の設定を行います。読み込んだ直後のNotebookは、下の図のようになっているはずなので、画面上部の「+」アイコンをクリックしてセルの挿入を行います。

スクリーンショット 2019-11-04 12.40.55.png

下の図の状態で

① 画面上部のファイルアイコンをクリック
② ファイル一覧から、先ほどアップロードしたnlc-test-sample.xlsxをクリック
③ 出てきたメニューからInsert Credenstailsをクリック

スクリーンショット 2019-11-04 12.40.11.png

先ほどInsertした空セルの中身が下のようになるはずなので、この中でIAM_SRVICE_IDからBUCKETまでをクリップボードにコピーします。

スクリーンショット 2019-11-04 12.53.10.png

コピーした情報はその下にある「COS資格情報」のセルに張り付けます。元のダミーデータの項目は削除します。
最終的に、以下のような感じになるはずです。(一番下の FILE: infileの行だけは元の情報を活かすので注意して下さい。)

スクリーンショット 2019-11-04 12.53.40.png

一連の作業が終わったら、作業用に追加したセルは、セルごと削除します。(消したいセルを選んだ状態でハサミアイコンをクリック)

model_idの設定

次のmodel_idの設定を行います。事前準備してあったmodel_idを、「変数定義」セルのmodel_idの行に張り付けて下さい。文字列はシングルクオートで囲むようにします。

スクリーンショット 2019-11-04 13.03.56.png

NLC資格情報の設定

最後にNLC資格情報の設定を行います。事前準備してあった、NLC資格情報を「NLC資格情報」のセルに張り付けます。余分な括弧や、最初にあったダミー項目行を消して、下の図のような形にして下さい。

スクリーンショット 2019-11-04 13.07.48.png

Notebookの実行

お疲れ様でした。これですべての準備作業は完了です。
Jupyter Notebookではカーソルを処理したいセルに合わせた状態でSHift + Enterキーで該当セルを実行し、選択セルを一つ先に進めてくれます。
選択状態のセルを一番頭のセルに戻して、SHift+Enterを繰り返すと、テストデータによるモデルの評価、Excelの生成、混同行列の表示などを行ってくれるはずです。
どこかのセルでエラーになった場合は、エラーメッセージを見て問題判別を行って下さい。

エラー表示がなく、実行結果が、下の図のようになっていれば、ツールの実行に成功しています。

スクリーンショット 2019-11-04 13.15.41.png

出力EXCELの取得

生成したExcelは、COSに書き戻すところまでは上記のNotebookでできているのですが、このExcelをStudioの画面からダウンロードするには、もう一手間必要になります。その手順を説明します。
(同じファイル名で出力EXCELを作る場合、二回目以降は不要な手順となります)

まず、プロジェクト管理の画面から「Add to project」->「Data」を選択します。
(Excelファイルアップロードで説明した手順)

画面上部のタブを「File」にすると、新たに生成されたnlc-test-sample-output.xlsxファイルが一覧に含まれているはずです。
(一覧に出てこない場合は、いったんPorjectを閉じて再Openしてみて下さい)

スクリーンショット 2019-11-04 13.29.40.png

下の画面で

① このファイルのチェックボックスをクリック
② 点が縦に並んでいるアイコンをクリック
③ メニューから「Add as data aseet」を選択

とします。

スクリーンショット 2019-11-04 13.29.52.png

すると、下の画面のように、Data assetの欄に出力EXCELも表示されるようになります。
Actionsの下のアイコンをクリックし、Downloadをメニューから選択すると、出力用のExcelファイルがダウンロードできます。

スクリーンショット 2019-11-04 13.23.28.png

加工前の素のExcelはこんな感じになります。

スクリーンショット 2019-11-04 13.24.09.png

おまけ

いつの間にか、1枚しかシートのないEXCELはStudioのData Assetとして読み込めるようになったようです。
上記の手順でData Asset側に登録したExcelをStudioから読んだ結果を添付します。

スクリーンショット 2019-11-05 8.11.52.png

スクリーンショット 2019-11-05 8.11.36.png

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?