36
©2016 Nippon Information and Communication Corp. Watsonで地図ナビアプリつくってみた - 第2回IBM Watson日本語版ハッカソン参加体験レポート - 日本情報通信(NI+C水津幸太・浜谷貞祐 SoftLayer Bluemix Community Festa 2016

Watsonで地図ナビアプリつくってみた

Embed Size (px)

Citation preview

Page 1: Watsonで地図ナビアプリつくってみた

©2016 Nippon Information and Communication Corp.

Watsonで地図ナビアプリつくってみた

- 第2回IBM Watson日本語版ハッカソン参加体験レポート -

日本情報通信(NI+C)

水津幸太・浜谷貞祐

SoftLayer Bluemix Community Festa 2016

Page 2: Watsonで地図ナビアプリつくってみた

2 ©2016 Nippon Information and Communication Corp.

自己紹介(浜谷)

日本情報通信株式会社 経営管理部 経営企画担当 新ビジネス開発グループ

はまや さだひろ

浜谷 貞祐 [email protected] http://www.NIandC.co.jp/

Page 3: Watsonで地図ナビアプリつくってみた

3 ©2016 Nippon Information and Communication Corp.

自己紹介(水津)

kota.suizu.5

SOA, BPM (IBM WebSphere)を用いた設計開発エンジニア、その後セキュリティソリューション (IBM InfoSphere, Security)エンジニアを経て、現在、アーキテクト兼プロジェクトマネージャーとして様々なプロジェクトを支援しつつ、先進的なソリューションのご提案や仕組みづくりを行っている。

すいず こうた

水津 幸太 (Kota Suizu) ソリューションビジネス本部 先進テクノロジーグループ

Page 4: Watsonで地図ナビアプリつくってみた

4 ©2016 Nippon Information and Communication Corp.

所属会社紹介(日本情報通信)

Plan B ときどき情報発信中♪

NI+Cクラウドインフォメーションサイト SoftLayer技術情報ならココ!

http://www.niandc.co.jp/sol/bluemix/ http://niccloud.niandc.ne.jp/

Page 5: Watsonで地図ナビアプリつくってみた

5 ©2016 Nippon Information and Communication Corp.

SoftLayer Bluemix Community Festaで Watsonの話!?・・・Why? ・・・Why?

Page 6: Watsonで地図ナビアプリつくってみた

6 ©2016 Nippon Information and Communication Corp.

WatsonがBluemixで提供されているからです

Eclipse

バインド 実行環境

サービス

Bluemix

アプリケーション 必要な サービスを 選択

他にも

•実行環境

•Webアプリ

•データベース

•モバイル

•ビッグデータ

•アナリティクス

•IoT

•セキュリティ

•開発支援ツール

•Twitter連携 など

Page 7: Watsonで地図ナビアプリつくってみた

7 ©2016 Nippon Information and Communication Corp.

Watson日本語版ハッカソンでもBluemixの利用が前提

Page 8: Watsonで地図ナビアプリつくってみた

8 ©2016 Nippon Information and Communication Corp.

アイデア

アイデア

常用アプリに 組み込むサービス 音声対話

カーナビ

アイデア

アイデア

アイデア

新発見や 思いがけない 出会いを提案

アイデア

アイデア

アイデア

アイデアをひねり出す

アイデア

常用アプリに 組み込む

音声対話

新発見や 思いがけない

出会い

Page 9: Watsonで地図ナビアプリつくってみた

9 ©2016 Nippon Information and Communication Corp.

Watsonで地図ナビアプリ・・・?

Page 10: Watsonで地図ナビアプリつくってみた

10 ©2016 Nippon Information and Communication Corp.

現在のナビアプリの限界

1時間後に、御茶ノ水駅で待ち合わせ。

57分も余っちゃう・・・

Page 11: Watsonで地図ナビアプリつくってみた

11 ©2016 Nippon Information and Communication Corp.

時間に余裕があるから、 行きたかった書店に寄っては?

りこ なび

もしもナビアプリがコグニティブだったら

1時間後に、御茶ノ水駅で待ち合わせ。

いいね!寄り道するからナビして

Page 12: Watsonで地図ナビアプリつくってみた

12 ©2016 Nippon Information and Communication Corp.

次の予定まで時間に余裕があるようだね。 趣味に合うスポットに寄り道していったら?

『りこなび』 -おりこうナビゲーション-

ナビ ゲーション 寄り道ルート

スポット リコメンド お店・施設

ユーザ インサイト分析

趣味・状態

“思いがけない寄り道”で セレンディピティ体験

× × =

いいね! 寄り道するから

ナビして♪

りこ なび

Page 13: Watsonで地図ナビアプリつくってみた

13 ©2016 Nippon Information and Communication Corp.

ビジネスプラン

成長市場はどっち? 競合プロダクトは何?

将来的な市場はどこ?

ナビ ゲーション

スポット リコメンド

ユーザ インサイト分析

Page 14: Watsonで地図ナビアプリつくってみた

14 ©2016 Nippon Information and Communication Corp.

ビジネスモデル

りこ なび

広告収入

API課金

プレミアム 課金

ナビアプリ

Page 15: Watsonで地図ナビアプリつくってみた

15 ©2016 Nippon Information and Communication Corp.

成長ロードマップ

Page 16: Watsonで地図ナビアプリつくってみた

16 ©2016 Nippon Information and Communication Corp.

つづいて、、、、

りこなびのなかみ

Page 17: Watsonで地図ナビアプリつくってみた

17 ©2016 Nippon Information and Communication Corp.

実現するために何が必要か

■サービス概要 普段の生活や旅行に、ちょっとした発見を。ちょっとした出会いを。 何気ない行き先検索。そこから新たな世界が広がります。 このナビゲーションサービスでは、検索者のTwitter等ソーシャル上の投稿内容や投稿スピード、位置情報、フォローワー等の状況よりその人の状況や性格を判断し、その人に最適な新たな行き先の提案や目的地周辺のおすすめスポット、また近くにいるお友達の紹介を行います。

ステータスや文面から状況を 判断する機能

文面から趣味嗜好を 判断する機能

ユーザとインタラクティブに やり取りする機能

音声UI 位置、趣味、状況から 適切な場所をリコメンドする機能

ルートを 提示する機能

Page 18: Watsonで地図ナビアプリつくってみた

18 ©2016 Nippon Information and Communication Corp.

実現するために何が必要か

NLC (状況判断)

NLC (趣味嗜好判断)

DLG, TTS, STT

RaR (スポットリコメンド)

Google Map (Navi機能)

ステータスや文面から状況を 判断する機能

文面から趣味嗜好を 判断する機能

ユーザとインタラクティブに やり取りする機能、音声UI

位置、趣味、状況から 適切な場所をリコメンドする機能

ルートを 提示する機能

Watson等で実現!

ナビ ゲーション 寄り道ルート

スポット リコメンド お店・施設

ユーザ インサイト分析

趣味・状態

Page 19: Watsonで地図ナビアプリつくってみた

19 ©2016 Nippon Information and Communication Corp.

“りこなび” の概要図(全体)

NLC (状態)

R&R (スポット)

TTS

Insight for Twitter

NLC (趣味嗜好)

表示画面

UI層 (Node.js)

サービスロジック層 (Node-RED等)

会話ロジック層 (Node-RED)

状態 コーパス

趣味 コーパス

スポット Docs

Node-R

ED

Flo

w

Cloudant (スポット)

ナビ ゲーション 寄り道ルート

スポット リコメンド お店・施設

ユーザ インサイト分析

趣味・状態

Page 20: Watsonで地図ナビアプリつくってみた

20 ©2016 Nippon Information and Communication Corp.

NLCとは?

Natural Language Classifier

質問を入力

結果を返却

鉄道大好きです。そして実は阪急好き!また青春18切符を使って各地を鉄道に乗って巡ったりもしてます!主に関西で活動しています!鉄分補充とメイド萌えを一気に味わえるところが大好きです。

乗り鉄 97%、鉄道 70%、アニメ 15%

自然言語を理解し、予め(短いテキストで)定義されたクラス(意味)に分類、その分類されたクラス候補に確度をつけて返却する

ユーザ インサイト分析

趣味・状態

Page 21: Watsonで地図ナビアプリつくってみた

21 ©2016 Nippon Information and Communication Corp.

NLCとは?

Natural Language Classifier

質問を入力

結果を返却

鉄道大好きです。そして実は阪急好き!また青春18切符を使って各地を鉄道に乗って巡ったりもしてます!主に関西で活動しています!鉄分補充とメイド萌えを一気に味わえるところが大好きです。

乗り鉄 97%、鉄道 70%、アニメ 15%

自然言語を理解し、予め(短いテキストで)定義されたクラス(意味)に分類、その分類されたクラス候補に確度をつけて返却する

文章を読解し、ジャンル分けをしてくれる

分類器API

ユーザ インサイト分析

趣味・状態

Page 22: Watsonで地図ナビアプリつくってみた

22 ©2016 Nippon Information and Communication Corp.

NLCに必要なデータは?

Natural Language Classifier

学習データ形式 CSV形式(クラス説明文章, クラス名) 最小5~最大15000レコード クラス説明文章は、最大1024文字

より良い学習をさせるために、、、 クラス説明文章は、60単語未満にする クラス数は多くても数百に抑える

学習データ

ユーザ インサイト分析

趣味・状態

Page 23: Watsonで地図ナビアプリつくってみた

23 ©2016 Nippon Information and Communication Corp.

RaRとは?

Retrieve and Rank

質問を入力

結果を返却

上野駅、乗り鉄、暇

鉄道居酒屋 1、模型専門店 2、

検索と機械学習アルゴリズムのコンビネーションにより、ユーザーが検索による関連情報を見つけ出す事を助け、その結果を機械学習モデルに基づいてランクを付けて返却

スポット リコメンド お店・施設

Page 24: Watsonで地図ナビアプリつくってみた

24 ©2016 Nippon Information and Communication Corp.

RaRとは?

Retrieve and Rank

質問を入力

結果を返却

上野駅、乗り鉄、暇

鉄道居酒屋 1、模型専門店 2、

検索と機械学習アルゴリズムのコンビネーションにより、ユーザーが検索による関連情報を見つけ出す事を助け、その結果を機械学習モデルに基づいてランクを付けて返却

利用者の関心の高い回答を導き出す

ランキング検索API

スポット リコメンド お店・施設

Page 25: Watsonで地図ナビアプリつくってみた

25 ©2016 Nippon Information and Communication Corp.

RaRに必要なデータは?

Retrieve and Rank

文書データ

文書データ形式 定義したスキーマ形式のJSONデータ Watson解釈させたいテキストフィールドはWatsonTextField

クラスを用いる

ランカー学習データ形式 CSV形式(質問文, 文書ID, 関連度, 文書ID...) 最大300MB 49以上のユニークな質問が必要 定義フィールド数×5のレコードが必要 関連度は1(やや関連する)~4(完全一致)で定義する 関連度0は使用しない

学習データ

スポット リコメンド お店・施設

Page 26: Watsonで地図ナビアプリつくってみた

26 ©2016 Nippon Information and Communication Corp.

“りこなび” の概要図(全体)

NLC (状態)

R&R (スポット)

TTS

Insight for Twitter

NLC (趣味嗜好)

表示画面

UI層 (Node.js)

サービスロジック層 (Node-RED等)

会話ロジック層 (Node-RED)

状態 コーパス

趣味 コーパス

スポット Docs

Node-R

ED

Flo

w

Cloudant (スポット)

ナビ ゲーション 寄り道ルート

スポット リコメンド お店・施設

ユーザ インサイト分析

趣味・状態

Page 27: Watsonで地図ナビアプリつくってみた

27 ©2016 Nippon Information and Communication Corp.

“りこなび” の概要図(りこなびAPI提供)

NLC (状態)

R&R (スポット)

Insight for Twitter

NLC (趣味嗜好)

サービスロジック層 (Node-RED等)

会話ロジック層 (Node-RED)

状態 コーパス

趣味 コーパス

スポット Docs

Node-R

ED

Flo

w

Cloudant (スポット)

りこ なび

エンジン

API提供

ナビ ゲーション 寄り道ルート

スポット リコメンド お店・施設

ユーザ インサイト分析

趣味・状態

Page 28: Watsonで地図ナビアプリつくってみた

28 ©2016 Nippon Information and Communication Corp.

“りこなび” の概要図(部品API提供)

NLC (状態)

R&R (スポット)

Insight for Twitter

NLC (趣味嗜好)

サービスロジック層 (Node-RED等)

状態 コーパス

趣味 コーパス

スポット Docs

Cloudant (スポット)

状態判定API提供

趣味判定API提供

リコメンドスポットAPI提供 スポット リコメンド お店・施設

ユーザ インサイト分析

趣味・状態

ユーザ インサイト分析

趣味・状態

Page 29: Watsonで地図ナビアプリつくってみた

29 ©2016 Nippon Information and Communication Corp.

“りこなび” の概要図(学習データ)

NLC (状態)

R&R (スポット)

NLC (趣味嗜好)

サービスロジック層 (Node-RED等)

状態 コーパス

趣味 コーパス

スポット Docs

スポット Docs

趣味 コーパス

状態 コーパス

Cloudant (スポット)

状態 状態を表す文章 状態クラス

趣味 趣味を表す文章 趣味クラス

スポット 文書タイトル 文書本文 趣味クラス 平均滞在時間 住所 連絡先

連携データ 文書タイトル 文書本文 趣味クラス 平均滞在時間 住所ジオ(緯度経度)

Cloudant (状態)

Cloudant (趣味嗜好)

スポット リコメンド お店・施設

ユーザ インサイト分析

趣味・状態

ユーザ インサイト分析

趣味・状態

Page 30: Watsonで地図ナビアプリつくってみた

30 ©2016 Nippon Information and Communication Corp.

“りこなび” の概要図(学習データ)

NLC (状態)

R&R (スポット)

NLC (趣味嗜好)

サービスロジック層 (Node-RED等)

状態 コーパス

趣味 コーパス

スポット Docs

スポット Docs

趣味 コーパス

状態 コーパス

Cloudant (スポット)

状態 状態を表す文章 状態クラス

趣味 趣味を表す文章 趣味クラス

スポット 文書タイトル 文書本文 趣味クラス 平均滞在時間 住所 連絡先

連携データ 文書タイトル 文書本文 趣味クラス 平均滞在時間 住所ジオ(緯度経度)

Cloudant (状態)

Cloudant (趣味嗜好) データの更新は 「Blue Green Deployment」

の考え方で!!

スポット リコメンド お店・施設

ユーザ インサイト分析

趣味・状態

ユーザ インサイト分析

趣味・状態

Page 31: Watsonで地図ナビアプリつくってみた

31 ©2016 Nippon Information and Communication Corp.

“りこなび” RaR スキーマ(抜粋)

R&R (スポット)

スポット Docs

スポット Docs

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> <field name="title" type="watson_text_ja" indexed="true" stored="false" required="false" multiValued="false" /> <field name="body" type="watson_text_ja" indexed="true" stored="false" required="false" multiValued="true" /> <field name="catclass" type="watson_text_ja" indexed="true" stored="false" required="false" multiValued="true" /> <field name="needtime" type="int" indexed="true" stored="false" required="false" multiValued="false" /> <field name="latlng" type="location" indexed="true" stored="false" required="false" multiValued="false"/>

連携データ 文書タイトル 文書本文 趣味クラス 平均滞在時間 住所ジオ(緯度経度) Cloudant (スポット)

スポット リコメンド お店・施設

Page 32: Watsonで地図ナビアプリつくってみた

32 ©2016 Nippon Information and Communication Corp.

“りこなび” RaR スキーマ(抜粋)

R&R (スポット)

スポット Docs

スポット Docs

<fieldType name="watson_text_ja" indexed="true" stored="true" class="com.ibm.watson.hector.plugins.fieldtype.WatsonTextField"> <analyzer type="index"> <tokenizer class="solr.JapaneseTokenizerFactory"/> <filter class="solr.JapaneseBaseFormFilterFactory"/> <filter class="solr.CJKWidthFilterFactory"/> <filter class="solr.JapaneseKatakanaStemFilterFactory" minimumLength="4"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.JapaneseTokenizerFactory"/> <filter class="solr.JapaneseBaseFormFilterFactory"/> <filter class="solr.JapanesePartOfSpeechStopFilterFactory" tags="lang/stoptags_ja.txt"/> <filter class="solr.CJKWidthFilterFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ja.txt"/> <filter class="solr.JapaneseKatakanaStemFilterFactory" minimumLength="4"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType>

Cloudant (スポット)

連携データ 文書タイトル 文書本文 趣味クラス 平均滞在時間 住所ジオ(緯度経度)

スポット リコメンド お店・施設

Page 33: Watsonで地図ナビアプリつくってみた

33 ©2016 Nippon Information and Communication Corp.

まとめ 実装上の考慮点

システム運用やWatsonの学習を効率的に行うために、、、

Watson自体の利用率が上がるようなアーキテクチャーとする (学習効率を向上させる手段を意識する)

マスタデータ、トランザクションデータ、検索データを分けて考える (拡張性、メンテナンス性、負荷を意識する)

検索データを更新する方法を意識する

1

2

3

スポット リコメンド お店・施設

ユーザ インサイト分析

趣味・状態

Page 34: Watsonで地図ナビアプリつくってみた

34 ©2016 Nippon Information and Communication Corp.

まとめ NLCデータの考慮点

分類器として偏りなく判断できるよう学習させるために、、、

定義するクラスに対し偏りのない件数を準備する

クラスを適切に表現する文章を準備する

日本語としてキレイな文章を準備する

ある程度の長さがある文章を準備する

4

5

6

7

ユーザ インサイト分析

趣味・状態

Page 35: Watsonで地図ナビアプリつくってみた

35 ©2016 Nippon Information and Communication Corp.

まとめ RaRデータの考慮点

検索に必要となる情報は、それぞれフィールドを定義する

検索時の条件を意識し、フィールド定義およびデータの準備を行う

趣味項目に入れるデータ値はNLCのクラス名とし、 1レコードに複数の趣味を持たせられるようにする

位置項目は現在地から2Km以内などの位置情報検索ができるよう、 スポットの緯度経度情報を持たせる

状況に合わせたリコメンドができるよう、 スポットに関する平均滞在時間を持たせる

りこなびの場合、位置、趣味、状況をもとに検索し、 適切な場所を提示するために、、、

8

9

10

11

スポット リコメンド お店・施設

Page 36: Watsonで地図ナビアプリつくってみた

©2016 Nippon Information and Communication Corp.

ありがとうございました

りこ なび