Watson on Bluemix でNLCことはじめ (1)

巷では人工知能(AI)関連のニュースなどを頻繁に目にします。
そのコンポーネントとして、深層学習(deep learning)や自然言語処理にも注目が集まってますね。既にいろいろとサービスが提供されていたりします。

そんなサービスの1つである、Watson APIのNLC(Natural Language Classifier)を触ってみることにします。

## NLCとは

NLCは、IBMがBluemix上で提供するWatson APIサービスの1つです。
自然言語テキストをクラス分類してくれます。何が嬉しいのかはやりながら見て行くことにします。

Bluemixが提供するサービスのカタログ
https://console.ng.bluemix.net/catalog/
※2016年5月 時点でWatson APIは17種

## カタログからサービス作成

早速、Bluemixにログインして、自分のスペースにNLCを追加します。
カタログから選択して、作成ボタンを押すだけです。

Bluemixアカウントがない場合は、人様の記事を参考にアカウントを作成します。
> IBM Bluemixフリートライアルアカウント作成手順
> http://qiita.com/KenichiSekine/items/6ad49b25167b3f4cdb63

![nlc001_カタログ選択.png](https://qiita-image-store.s3.amazonaws.com/0/119379/e3971b49-57b8-18c6-7c02-62107d357568.png)

![nlc002_サービス作成.png](https://qiita-image-store.s3.amazonaws.com/0/119379/13109c68-a2bd-2a94-005e-a70d93000ba8.png)


## toolkitからNLCを触ってみる

作成されたサービスをクリックすると↓のような画面に遷移します。
手っ取り早くNLCを試してみたいので、"Access the beta toolkit"ボタンをポチっとします。

![nlc003_access_tool.png](https://qiita-image-store.s3.amazonaws.com/0/119379/f29466d4-d8a2-0e38-03bf-0ee697f93d63.png)


何も考えずに"Sign in with Bluemix"をクリック。

![nlc004_BM_login.png](https://qiita-image-store.s3.amazonaws.com/0/119379/3c8a8bb9-fa96-d74f-675c-584342be2b06.png)

許可しないことには進まないので、素直に"確認"ボタンをクリック。

![nlc005_アクセス確認.png](https://qiita-image-store.s3.amazonaws.com/0/119379/3647d22a-38ba-cdcd-e39c-d4135f5c38ee.png)


## トレーニングデータを登録

こんな画面が表示されます。

![nlc006_ツールキット001.png](https://qiita-image-store.s3.amazonaws.com/0/119379/96743530-3e59-12fe-25f2-f6412f31739c.png)

これがtoolkit（beta版）の画面です。
ここから、NLCのクラス分類の機能を試すために、NLCにトレーニングデータを学習させる必要があります。

トレーニングデータは、「テキスト」と「クラス」が対になった構造です。
オフィシャルのイメージを引用すると以下のような構造。

http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/doc/nl-classifier/data_format.shtml
> ![nlc007_トレーニングデータ構造.png](https://qiita-image-store.s3.amazonaws.com/0/119379/8d2d9948-df37-479a-2250-ea42f28ba6aa.png)

今回はデートのお誘いに対する、脈あり/脈なし クラス分類をやってみたいので、以下のようなデータを登録してみます。

| テキスト | クラス | テキスト | クラス |
|:-----|:-----|:-----|:-----|
|このお店に行きたいです|ok|ちょっと忙しい|ng|
|いつなら都合いいですか？|ok|今が一番忙しいんだ|ng|
|飲みに行きたいです|ok|予定がわからない|ng|
|社交辞令じゃないですよね？|ok|他の人も誘っていこう|ng|
|お酒に詳しくないので教えてくれますか|ok|他の人の予定も聞いてみよう|ng|
|来週には落ち着くからまた誘って|ok|最近仕事がバタバタしてる|ng|
|都合がいい日があったら教えて|ok|ちょっと無理そう|ng|
|明日なら早く帰れるよ|ok|もう予定が入ってる|ng|
|来週の金曜はどう？|ok|また今度ね|ng|
|絶対ですよ！約束ですからね|ok|いろいろ落ち着いたらね|ng|
|いいですね！|ok|予定が分かったらこっちから連絡するね|ng|

ということで、"Add training data"からトレーニングデータを以下のように設定していきます。
![nlc008_トレーニングデータ追加.png](https://qiita-image-store.s3.amazonaws.com/0/119379/9c80af3a-dfe0-89d1-477f-afd45d4423ef.png)


データを設定し終わったら、"Create classifier"ボタンでNLCに学習させます。

## クラス分類してみる

トレーニングさせてしばらくすると、Availableになります。NLCの学習完了です。

![nlc009_トレーニングデータ完了.png](https://qiita-image-store.s3.amazonaws.com/0/119379/6fac38ee-4e61-e0c1-f37a-247e6b21694f.png)

矢印→ボタンをクリックして、クラス分類を試してみます。
テキストボックスに適当な文言を入れて、"Classify"ボタンをクリックすると、入力したテキストを確信度とともにクラス分類してくれます。

![nlc010_クラス分類実行.png](https://qiita-image-store.s3.amazonaws.com/0/119379/1e78d711-9825-6a06-6ab3-01374f6c4197.png)

「みなとみらい行きたい！」は、OK (99%), NG (1%)に分類されました。
脈ありと判断してよいでしょう。

ここで注目したいのは、「みなとみらい行きたい！」というそのもののテキストはトレーニングデータにはないということです。

ただし、「マジ無理」という人間の判断では明らかにNGなテキストに対しては、NG (62%), OK (38%)と、ちょっと迷ってる感があります。
このテキストはNGクラスとして、トレーニングデータに追加した方が良さそうです。

次回（があれば）は、アプリからNLCのサービスをつついてみたいと思います。

⇒（2016/07/08）つつきました。[Watson on Bluemix でNLCことはじめ (2)](http://qiita.com/hosoken/items/6049d3d6692e5df4d408)