Technical Blog テクニカルブログ
  1. HOME
  2. テクニカルブログ
  3. 第2回「IBM Watson日本語版ハッカソン」The Final Roundレポート(その2) ~「りこなび」の中はどうなってるの??~

第2回「IBM Watson日本語版ハッカソン」The Final Roundレポート(その2) ~「りこなび」の中はどうなってるの??~

投稿者:ソリューション担当

第2回「IBM Watson日本語版ハッカソン」The Final Roundレポート(その2) ~「りこなび」の中はどうなってるの??~

前回に引き続き、第2回「IBM Watson日本語版ハッカソン」レポートということで、今回はテクノロジー編として、今回使用したWatsonサービスと作成した「りこなび」の全体像についてお伝えします。

前回の記事はこちらをご覧ください

「りこなび」に何が必要か?

利用者のSNS上での投稿内容や投稿スピード、位置情報、フォロワーなどから、その人の状況や性格、趣味を判断し、その人に最適な行き先の提案や目的地周辺のお勧めスポット、近くにいる友人を紹介するパーソナルナイズドされた”おりこうナビゲーション「りこなび」”。このりこなびを実現するためには以下のような機能が必要となります。

  1. ステータスや文面から状況を判断する機能
  2. 文面から趣味嗜好を判断する機能
  3. 位置、趣味、状況から最適な場所をリコメンドする機能
  4. ユーザとインタラクティブにやり取りし情報を収集する機能
  5. ルートを提示する機能

私達はこれら必要な機能について、1と2はNLCを、3はRaRを、4はDLG, STT, TTSを、5はGoogle Mapを利用し実現することを考えました。

「NLC」とは??

NLCとはNatural Language Classifierの略です。このWatsonサービスは、自然言語を理解し、予め(短いテキストで)定義されたクラス(意味)に分類、その分類されたクラス候補に確度をつけて返却することができます。りこなびではこのサービスを用い、利用者の状況判定や趣味の判定を行っています。りこなび趣味判定を例に取りますと動きは以下の様なイメージです。

端的に言うと、NLCは文章を読解しジャンル分けしてくれる「分類器API」と言えるかと思います。

「RaR」とは??

RaRとはRetrieve and Rankの略です。このWatsonサービスは、Apache Solrをベースとした検索機能とWatsonの機械学習アルゴリズムのコンビネーションにより、ユーザが検索による関連情報を見つけ出す事を助け、その結果を機械学習モデルに基づいてランクを付けて返却することができます。りこなびではこのサービスを用い、位置、趣味、状況から最適な場所を提案しています。それを例に取りますと動きは以下の様なイメージです。

端的に言うと、RaRは利用者の関心の高い回答を導き出す「ランキング検索API」と言えるかと思います。

りこなびアプリケーション全体像

りこなびは、NLCやRaRといったWatsonサービスを以下図のように配置し利用しました。ユーザインターフェースを提供するUI層、Watsonサービスをりこなびが必要とする形にサービス化したサービスロジック層、ユーザ要求に従い適切なサービスを呼び出したりユーザ側への回答を行ったりする会話ロジック層の三層構造としてます。会話ロジック層はいわゆるESBやMessaging Hubのようなもので、このようなアーキテクチャとすることにより、変更に強い、新たなサービスの構築にも繋げられることを目指しました。

ちなみに会話ロジック層のNode-RED Flowは以下図のようなフローとなります。(見難いですが、、)

このフローではフローロジックで会話の分岐を行っていますが、この分岐部分をWatsonのDialogに置き換えることにより、より自然な対話を可能にします。また、おすすめスポットリコメンドにユーザの性格を加味したい場合は、新たにWatsonのPersonality Insights への呼び出しを追加することにより、簡単にその機能をりこなびへ反映することができます。

りこなびデータの管理

NLCやRaRのデータは更新することができません。りこなびの場合、NLCについては趣味や状況といったことをSNS本文等をもとにクラス分けしているだけなので更新する必要はあまりないと思いますが、RaRについては、オススメスポットの情報を保持しているため、例えばお店が移転した等が発生した場合はRaR保持情報を更新する必要がでてきます。そこでりこなびでは、以下図のようにデータを管理するデザインとしています。

NLCやRaRに保持させるデータのマスタについては、Cloudantに保持させます。そのデータをNLCのコーパスやRaRのクラスタ(Docs)に配信(デプロイ)します。もしデータに更新が発生した場合は、新たなコーパスやクラスタを作成し、そこに更新を含め全量を再度配信(デプロイ)します。そしてあるタイミングでコーパスやクラスタを新たに作成したものに切り替える、いわゆるBlue Green Deploymentの考え方で管理するシンプルなデザインとしています。

おわりに

今回、ハッカソンを通じ「りこなび」というWatsonを使用したアプリの設計開発を行いました。他のBluemixサービス同様、Watsonサービスも容易に使うことができますが、実際にそれを運用するためには、データの更新をどうするか等、バックグラウンドの設計も重要となってきます。今回の経験を踏まえ、Watsonサービスを実際の業務サービスとして運用できるよう、周辺のデザインについても知見を深めて行きたいと思います。

【執筆者紹介】水津幸太
ソリューションビジネス本部 クラウド・テクニカルセールス部 先進テクノロジーグループ所属。SOA, BPM (IBM WebSphere)を用いた設計開発エンジニア、その後セキュリティソリューション (IBM InfoSphere, Security)エンジニアを経て、現在、アーキテクト兼プロジェクトマネージャーとして様々なプロジェクトを支援しつつ、先進的なソリューションのご提案や仕組みづくりを行っている。ここ最近は、IBM Bluemix, IBM WatsonなどPaaS, SaaSを用いたソリューションを検討中。

ページのトップへ