以前に「ノーツデータベースをまるごと IBM Watson に学習させて、問い合わせを行うサンプルアプリ」を作って紹介しました。なかなかに反響があり、タダで配布しなければよかった、と・・・調子に乗って同様のワードプレス環境向けサンプルを作ってみました。

ワードプレスは世界中で使われているオープンソースの CMS(コンテンツ管理システム)です。ちょっとデータが古いのですが、2014 年時点での 1000万サイトを対象にした調査によると CMS としてのシェアは約60%で、何よりも驚くのは全ウェブページ中の 26.6% がワードプレスを使って作られている、ということです(もう少し新しい情報持ってる人がいたら教えてください):
https://w3techs.com/technologies/overview/content_management/all

2016081201


と、それだけ利用者の多いワードプレスのデータをコグニティブエンジンである IBM Watson に学習させて、かつその学習データを使った問い合わせまでを実現できるようなプラグインを開発しました。 ぶっちゃけ、まだ「動作確認レベル」の段階ですが、このタイミングで一度公開して、多くの人に使ってみていただこうと思っています。


このプラグインを使うには、大きく2つの前提条件が必要です:
1. IBM Bluemix 環境
2. データの入ったワードプレス環境


まず 1. IBM Bluemix 環境です。IBM Bluemix にサインアップし、有効なアカウントを所有している必要があります。IBM Bluemix はアカウント作成から 30 日間は無料で利用することが出来、また有償以降後にもサービスに無料枠が設けられていて、無料または安価に利用することが可能です。

この IBM BLuemix にログインして、Watson の Natural Language Classifier (以下 NLC)サービスを作成します。このサービスを使ってデータの学習および問い合わせを行います:
2016081202


ちなみに NLC サービスの 2016/Aug/12 時点での料金は以下の様になっています。サービスインスタンスを1つだけ作成し、一ヶ月の中で学習機能を4回、問い合わせ機能を 1000 回以内使うぶんには(有償契約移行後であっても)無料枠に収まるので料金はかかりません。これらを越えて利用した場合の料金の目安にしてください:
2016081204


作成したサービスの「サービス資格情報」を確認し、このサービスを利用するためのユーザー名(username)とパスワード(password)を確認します。これらの情報は後で利用するので、このページを残しておくかメモするなりして入力できる状態にしておいてください:
2016081203


次に 2. データの入ったワードプレス環境ですが、ワードプレスの中にある文書とカテゴリを使って学習させるため、それなりの学習データを用意しようとすると、それなりの文書量が必要になります。またそのワードプレス環境にプラグインをインストールする等、管理者アカウントでログインできる権限も必要になります。


実際にプラグインを導入する手順を紹介します。プラグインは GitHub 上に用意しました:
https://github.com/dotnsf/wordpress_watson_nlc

2016081301


上記ページの "clone or download" と書かれた緑のボタンをクリックし、メニューから "Download ZIP" を選択してプラグインの ZIP ファイル(wordpress_watson_nlc-master.zip)をダウンロードします:
2016081302


ダウンロードした ZIP ファイル(wordpress_watson_nlc-master.zip)は、ワードプレスの管理画面の プラグイン - 新規追加 から「プラグインのアップロード」をクリックしてインストールできます:
2016081303


追加するプラグインファイルを指定する画面が表示されたら、ダウンロードした ZIP ファイル(wordpress_watson_nlc-master.zip)を指定して「今すぐインストール」ボタンをクリックします:
2016081304


インストールが成功したら「プラグインを有効化」をクリックして、このプラグインを有効な状態にします:
2016081305


プラグインが有効になると管理メニューの中に「NLC 設定」という項目が追加されます。このページをクリックして表示し、Username と Password に上記の NLC サービス設定時のサービス資格情報ページで取得したユーザー ID とパスワードを入力し、「変更を保存」ボタンをクリックします:
2016081306


Username と Password が設定されました。これで NLC プラグインのインストールと設定が完了です:
2016081307


では実際にこのプラグインを使ってみましょう。このプラグインで出来ることは2つあります:
(1) この(プラグインを導入した)ワードプレス環境内に格納されたデータを IBM Watson に学習させる
(2) (1) で用意した学習データを使って、問い合わせを行い、その返答内容を確認する


それぞれ順に説明します。(1) の学習機能ですが、ワードプレスに格納された投稿データの本文及びタイトルとカテゴリーの情報をもとに学習します。例えば以下の様な内容の投稿データがあったと仮定します:
 
タイトルBLUEMIX 上の SPARK を利用して、ブラウザー内で気象データを分析する
本文Apache Spark は、まったく新しい機能の数々をデータ・サイエンティスト、ビジネス・アナリスト、アプリケーション開発者に初めて利用できるようにする、次世代の分散データ処理エンジンです。Analytics for Apache Spark は IBM Bluemix に用意されている一般的なツールと連動することから、この Analytics for Apache Spark を使用することで、瞬く間にこの Apache Spark の能力をフル活用できるようになります。このチュートリアルでは、Spark API を使用する IPython Notebook を利用して、実際の気象に関するロー・データを分析する方法を紹介します。この例をベースとして使用すれば、Bluemix 上の他のアナリティクスも簡単に利用することができます。
カテゴリーcloud


Watson は初期状態では何も学習していません。そこにこの投稿データのカテゴリーである cloud について学習させたいとします。初期状態では cloud が何なのかを理解していませんが、cloud の例としてこのデータのタイトルと本文の内容を与えて「これが cloud の例だ」という形で学習させます。

これだけですとまだ1データだけですが、実際には cloud カテゴリーに属している投稿データ(のタイトルと本文の内容)を全て「cloud の例」として与えます。すると Watson は与えられた全データから cloud というものによく出てくる単語や言い回しの傾向などを自分で見つけて、「cloud にはどういった特徴があるか」を学習します。

対象のワードプレスデータには他にも色々なカテゴリーのデータが存在していることを想定しています。そして全てのカテゴリーと、そのカテゴリーに属している全レコードを使って、それぞれのカテゴリー内容を学習させます。例えばデータベース内に6つのカテゴリーが設定されている場合は6つのカテゴリーを学習させることになります。

その学習を実行するにはプラグインページの「学習」ボタンをクリックします:
2016081301


このデータベース内の情報を使って学習データを更新する、という確認メッセージが表示されます。更新するとこれまでの学習データが存在している場合も一旦削除されて、新たに現在の全投稿データを使った学習が行われます。「OK」をクリックすると続行します:
2016081302


学習処理が成功すると「データは学習中です」というメッセージが表示されます。これでデータは学習状態になりました。この直後はまだ学習中で問い合わせができない状態になりますが、しばらくすると (2) の問い合わせが可能になります:
2016081303


この学習によって、ワードプレス内に用意された各カテゴリーのキーワードを、そのカテゴリーに紐付けられた投稿データ(のタイトルと本文の内容)を基に学習します。そして学習後の問い合わせでは、与えたテキストの内容が各カテゴリーのどの内容にどの程度近いのか、という分類結果を返してくれるようになります。


では (2) の学習データに対する問い合わせ処理を紹介します。管理画面の NLC 設定ページから Query と書かれたテキストフィールドに何かテキストを入力します。ここで入力する内容は上記で学習させたカテゴリーのいずれかに関する内容となるようにしてみてください。以下の例では「Bluemix は IBM の PaaS プラットフォームです」と入力しました。この内容を Watson に問い合わせてみます。「問い合わせ」ボタンをクリックしてください:
2016081301


先ほど実行した学習処理がまだ完了していない場合、"Training" と表示されます。この場合はもうしばらく(15分~1時間程度)お待ちいただいた上で再度実行してみてください:
2016081302


Watson の学習が完了していれば問い合わせに対する回答とその confidence (自信度)が表形式で以下のように表示されます(この例文に対しては "cloud" と返してほしかったけど、このワードプレス内のデータによると "web" なのだそうだ。まあ間違いではないけど・・・):
2016081401


問い合わせに使った「Bluemix は IBM の PaaS プラットフォームです」という文章には "Web" や "Cloud" という直接的なキーワードは含まれていません。にも関わらず、(学習させたデータを元に)この内容が "Web" や "Cloud" に関係している可能性が高い、と判断できたことになります。


以上がこのプラグインが実装している機能の紹介です。注意事項が2点あります:

このプラグイン内の実装では複数のワードプレスデータには対応していません。同じ Username と Password の組では1つの(最新の)学習データしか持てません。複数のデータを同時に学習させる場合は複数の NLC サービスインスタンスを作成し、それぞれ Username と Password を取得して学習させる必要があります(無料枠内ではなくなります)。

もう1点。この NLC プラグインが不要になった場合は管理画面の「インストール済みプラグイン」の一覧から "Watson NLC" プラグインを探して、停止してください(今後も不要であればプラグインを削除してください)。
2016081403


と、こんなことができるサンプルプラグインです。ワードプレス環境をお持ちで、投稿データにある程度のカテゴリー分類ができている方は是非その環境で試してみていただきたいです。


なお、このプラグインの中で実装している機能は全てここで紹介されている NLC API を使って実装しています。この API を使うと学習させたデータを使った別のカスタマイズを行ったり、(ワードプレス以外の)別のアプリケーションから呼び出したりすることも可能です。興味あるデベロッパーの方は参照して、併せてチャレンジしてみてください:
Natural Language Classifier - API