Watson on Bluemix でNLCことはじめ (1) の続きです。
今回はアプリケーションからAPI経由で、NLCサービスをつついてみたいと思います。
とは言いつつもアプリケーションは一から手作りせずに、以下の方針で進めます。
- GutHubからアプリを拝借
- 拝借したアプリの設定を変更して、自作のNLCサービスに接続
- アプリから自作のNLCをつついてみる
こんな感じでやってみようと思います。
今回の手順では、Bluemixのクラウド上で全てを済ませることが出来るので、特にクライアント側で準備するものはありません。
もし、UIを変更したり独自の機能を作りこみたい場合、ローカルで作業したくなると思います。その際は、今回拝借するアプリがNode.jsアプリなので、ローカルにNode.jsやnpmを入れたり、Bluemixデプロイ用にCloud Foundry CLIツールを入れたりする必要があります。
1. GitHubからアプリを拝借
今回利用するのは、IBM Watson Developer Cloudで公開されているNLCのデモアプリです。
デモ自体は、天候についての質問をすると「気温」についての質問なのか、「天候状態」についての質問なのか、を分類してくれるとっても興味深いデモです。トレーニングデータも公開されています。
1-1. GitHubから"Deploy to Bluemix"
早速、デモアプリのgithubページからアプリを拝借します。
https://github.com/watson-developer-cloud/natural-language-classifier-nodejs
普通のForkではなく、ページ中段にある「Deploy to Bluemix」ボタンからアプリを持ってくるようにします。
すると、Bluemixにログインするように求められるので、素直にログインします。
デプロイに際しては、アプリ名やデプロイ対象のBluemixスペースなどを設定して、「DEPLOY」ボタンをクリックします。
※ここでは、IBM DevOps Servicesが利用されます。
詳細についてはこちらのチュートリアルがわかりやすいかもしれません。
Gitのホスティングサービス、Web IDE、自動デプロイなどの機能が提供されています。
しばらく待つとデプロイが完了し、以下のような画面になります。
1-2. アプリケーション確認
「VIEW YOUR APP」ボタンをクリックすると、自分のBluemix環境上にデプロイされたデモアプリが開きます。
この段階で、画面上の「Ask」ボタンをクリックしてもNLCが動かないため、Errorとなります。
いったん、Bluemixのダッシュボードに戻ってみると、以下のようにアプリケーションとNLCサービスが作成されていることがわかります。
NLCのサービス名が「natural-language-classifier-standard」となっている方が、DEPLOYによって自動生成されたものです。
今回、自動生成された方のサービスは使わないので、右上の歯車マークから「サービスの削除」をしてしまって良いです。
2. 自作のNLCサービスに接続
ここからは、Gitから取得したアプリ(ソース)に、前回作成した自作のNLCサービスを紐付けて、自作NLCサービスに接続するように設定していきます。
2-1. サービスをバインド
まず、ダッシュボードからアプリケーションを選択し、アプリケーション概要ページで「サービスまたはAPIのバインド」をクリックします。
ポップアップ内に表示される前回作成した自作のNLCサービスを選択し、"追加" ボタンをクリックします。これでアプリケーションに自作のNLCサービスがバインドされました。
バインドが完了すると、"アプリを再ステージングするか" と聞かれますが、どっちみちまだ動かないのでしなくても良いです。
2-2. 資格情報を確認
つぎは、利用するサービスの資格情報を確認し、アプリケーションに設定できるようにメモっておきます。
アプリケーションにサービスをバインドすると、概要ページにサービスのハコが表示されるので、NLCのハコの中にある、"資格情報の表示"をクリックします。
資格情報が表示されるので、"password" と "username" をメモっておきます。
また、NLCのtoolkitを起動し、作成したClassifierの "Classifier ID" もメモっておきます。
2-3. Web IDEでソース編集
続いては、コードを編集して自作NLCを設定します。
アプリケーションの概要ページにある、"コードの編集" をクリックすると、Web IDEが起動し、ソースコードを編集できます。
app.jsとmanifest.ymlが編集対象です。以下のように修正します。
app.js
username と password の箇所を2-2. で確認した資格情報の値で置き換えます。47行目の"classifier-id"を自作NLCのClassifier IDに置き換えます。
// Create the service wrapper
var nlClassifier = watson.natural_language_classifier({
url : 'https://gateway.watsonplatform.net/natural-language-classifier/api',
username : '<username>',
password : '<password>',
version : 'v1'
});
// Call the pre-trained classifier with body.text
// Responses are json
app.post('/api/classify', function(req, res, next) {
var params = {
classifier: process.env.CLASSIFIER_ID || '<classifier-id>', // pre-trained classifier
text: req.body.text
};
manifest.yml
"natural-language-classifier-standard"の箇所を自作NLCの名前に修正します。
---
declared-services:
natural-language-classifier-standard:
label: natural_language_classifier
plan: standard
applications:
- services:
- natural-language-classifier-standard
name: natural-language-classifier-nodejs-xxx
command: npm start
path: .
memory: 512M
host: natural-language-classifier-nodejs-xxx
3. アプリから自作のNLCをつついてみる
ようやく、自分のBluemix上のアプリから、自作NLCをつつきます。
アプリケーションの概要から「経路」のURLから画面を開いて、前回やったような文言をテキストボックスに入力し、「Ask」ボタンクリックしてみます。
Outputが、OK・NG にClassificationされていれば自作NLCが使えています。
お疲れ様でした!
さいごに、、、
今回はアプリから自作NLCをつついてみるという事でしたが、Bluemixの使い方に終始してしまった感があります。。とは言え、これをきっかけにいろいろいじっていければと思う次第です。