© 2016 IBM Corporation
Watsonを使ってAIアプリを作ってみよう!
2017年7月12日(水)
日本アイ・ビー・エム株式会社
岸田 吉弘
Bluemix ハンズオン
2 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
1. WatsonのAPI、Conversationの使い方がわかる
2. 外部APIの呼び出し方がわかる
3. Watsonと外部APIを組み合わせてWebアプリがつくれる
今日のゴール
3 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
1. WatsonのAPI、Conversationの使い方がわかる
– (ハンズオン1)シンプルなチャットボットをつくる
2. 外部APIの呼び出し方がわかる
– (ハンズオン2)「楽天トラベル空室検索API」を呼び出す
3. Watsonと外部APIを組み合わせてWebアプリがつくれる
– (ハンズオン3)ホテル検索ができるチャットボットをつくる
今日のゴール
4 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
 Watsonと外部APIを組み合わせてWebアプリがつくれる
今日つくるもの
7月12日に東京駅周辺で
1泊したい!
予算は1万円!
「ホテルXX」ってところ
が空いてるよ!
Watson君
(イメージ図)
5 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
1. WatsonのAPI、Conversationの使い方がわかる
– (ハンズオン)シンプルなチャットボットをつくる
2. 外部APIの呼び出し方がわかる
– (ハンズオン)「楽天トラベル空室検索API」を呼び出す
3. Watsonと外部APIを組み合わせてWebアプリがつくれる
– (ハンズオン)ホテル検索ができるチャットボットをつくる
今日のゴール
6 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
まずはWatsonについて
7 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
http://www.ibm.com/smarterplanet/jp/ja/ibmwatson/
 Watsonは、コンピューターでありながら、人と同じように情報から学び、
経験から学習するコグニティブ・テクノロジーです。
 Watson = AI = Augmented Intelligence (拡張知能)
LearningUnderstanding Reasoning
学習により専門知識
を身につける。
ヒトのコミュニケー
ション(言語・音声・
画像)を理解する。
事実から紐付けて
答えを見つけ出す。
(推論する)
Watsonとは?
8 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
Watson API一覧
Personality Insights
テキストから筆者の性格を推定する
Language Translator(一部日本語未対応)
自然言語テキストについて他言語へ翻訳を行う
Conversation
アプリケーションに自然言語インターフェースを追加して
エンドユーザとのやり取りを自動化
Natural Language Understanding(日本語未対応)
自然言語処理を通じてキーワード抽出、エンティティー抽出、
心情分析、感情分析、概念タグ付け、関係抽出、分類法種別、
作成者抽出などを行う
Text to Speech
テキスト文章を音声に変換する
Speech to Text
音声をテキスト文章に変換する
Visual Recognition
画像コンテンツに含まれる意味を検出する
Natural Language Classifier
テキスト文章の分類を行う(質問の意図推定など)
Tone Analyzer(日本語未対応)
テキストの感情、社交性、文体を解析する
Retrieve and Rank
自然言語の質問に対して回答の候補を返す
分析系
音声系
画像系
言語系
Document Conversion
文書を新しい形式に変換する
Discovery(日本語未対応)
認知検索およびコンテンツ分析エンジンをアプリケーションに追加して、優れた意思決定を行うのに役立つ
パターン、傾向、およびアクション可能な洞察を識別する
(2017年7月現在)
9 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
Conversationとは
チャットアプリ
XXさん、おはよう
ございます
10時-12時 お客様
MTG @箱崎
…
19時 新人歓迎会 @
銀座
今日の予定を教えて
Conversation を呼び出す
回答メッセージを受け取る
今日の予定を教えて
10時-12時 お客様MTG...
会話フローに沿って、意図と
目的語に対する応答メッセー
ジを返す
意図:「知りたい」
目的語:「今日」「予定」
 Conversationはチャットボットを実装するためのAPIです
 ユーザの発言の意図を理解し、その意図に応じて応答メッセージを返します
 会話に必要な情報をやりとりをしながら抜き出し、適切な応答を選択します
10 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
Conversationで重要な3つの要素
 Intents(インテント / 意図)
✓対話相手の要求・意図を認識する
- 「ライトをつけて」 → スイッチ入
- 「音楽をかけて」 → スイッチ入
- 「音量をもっと大きく」 → 大きくする
 Entities(エンティティ / 目的語)
✓要求の対象を明確にする
- 「ライトをつけて」 → ライト
- 「音楽をかけて」 → 音楽
- 「音量をもっと大きく」 → 音量
 Dialogs(ダイアログ / 対話)
✓対話の流れを設計する
- 「音楽をかけて」→ 「音楽のジャンル取得」→ 指定ジャンルの音楽を開始
11 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
インテントの登録
 異なる表現や言葉のゆらぎを吸収し、意図を正しく理解するため
 同じ行為を要求したとしても、様々な言い方があるため
 例:食べたい、おなかがすいた、腹減った
同じ意図の文章を複数登録すると、
類似の表現を「食事」に関係が
あると理解するようになる
12 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
エンティティの登録
 インテントの「目的」となる対象物を特定するため
 例:”何を”食べるのか。そば?パスタ?ラーメン?
 同じ意味の単語でも、様々な言い方があるため、シノニム(類義語)も登録する
 例:晩ご飯、夜ご飯、夕飯、夕食、ディナー
”何を”食べるか、を明確にするための
「food」のエンティティ
13 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
ビルトインされているエンティティ
 Conversationには、デフォルトで提供しているエンティティも存在する
種別 認識できるもの 例
sys-time 時間 13時20分、13:20
sys-date 曜日と日付 今日、金曜日、7月12日
sys-currency 通過 20 cents、$20
sys-percentage 割合 15%、10パーセント
sys-number 数値 123、3.1415、百七十
System entities 一覧
14 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
ダイアログとは
 ユーザーの要求(インテントとエンティティ)と、それに応じた回答を
組み合わせていく
 各ノードはコンディション(条件)とレスポンス(対応)で構成される
ご用件は
なんですか
何が食べたい
ですか
近くにおすすめ
の蕎麦屋が
あります
またどうぞ!
お腹が空いた そばがいいな
やっぱ今はいいや
#食事 @そば
15 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
ハンズオン1
 シンプルなチャットボットをつくる
チャットボット
こんにちは!
お元気ですか?
こんにちは
うん、いい感じ!
素晴らしい!
その調子で頑張ってください!
(イメージ図)
やること
・Node-REDの環境構築
・Conversation サービスの作成
・Conversationでのワークスペース作成
16 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
Bluemixへログイン
 ブラウザで「bluemix.net」と入力し、Bluemixへログインします
 地域を「米国南部」に変更してください
17 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
 右上の「カタログ」をクリックし、「ボイラープレート」カテゴリにある
「Node-RED Starter」をクリックします
Node-RED環境の準備
18 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
アプリ名のところに
「noderedapp-名前」と入力
Node-RED環境の準備
 アプリの名前を入力し、右下の「作成」ボタンをクリックします
19 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
Node-RED環境の準備
 アプリが「実行中」になるまで待ちます
 「実行中」になったら、右側の「アプ...」をクリックします
20 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
 Node-REDとは、デバイス、API、オンラインサービスなどの機能を
繋げてアプリケーションを作成していくプラットフォームです
ノード
(カプセル化された機能)
Node-REDとは?
21 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
 Node-REDを最初に使う時には、認証情報の登録が必要です
 Node-REDの編集者を制限し、他人からの改変を防ぐことができます
 右下の「Next」ボタンをクリックし、ユーザー名とパスワードを入力します
Node-REDのセットアップ
任意のユーザー名と
パスワードを入力
(その下のチェックはつけない)
22 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
Node-REDのセットアップ
 その後は何もせず、右下の「Next」、「Finish」をクリックします
23 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
Node-REDのセットアップ
 少し待つと、認証情報が登録され、以下の画面が表示されます
 右下の「Go to your Node-RED flow editor」をクリックし、先ほど登録し
た認証情報を入力。入力を終えたら「ログイン」をクリックします
24 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
 このような画面が表示されます
Node-REDのセットアップ
 Node-REDの環境構築完了です!
 ノードのドラッグ&ドロップでアプリケーションを開発していきます
25 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
Watson APIの追加
 Node-REDのアプリからWatsonを使うためには、Watson APIのサービスを
新たに作成し、Node-REDのアプリと接続する必要があります
 Bluemixの画面に戻り、左側のメニューの「接続」をクリックしてから
右上にある「新規に接続」をクリックします
26 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
Watson APIの追加
 「Watson」カテゴリーにある「Conversation」をクリックします
27 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
Watson APIの追加
 「接続」で先ほど作成したアプリを指定し、右下の「作成」をクリックします
28 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
Watson APIの追加
 アプリの再ステージを行い、「実行中」になるまで再度待ちます
 「実行中」になったら、先ほど追加した「Conversation-XX」をクリックします
29 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
ワークスペースを開く
 サービスの詳細画面が開きます
 「Launch tool」をクリックし、Conversationツールを起動します
30 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
ワークスペースの作成
 新規にチャットボットを作成してみましょう
 「Create」ボタンをクリックし、ワークスペースを作成します
 ワークスペースは一連の会話のパッケージです
ワークスペースの名前を入力
(例:サンプル・チャットボット)
31 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
インテントの作成
 「Create new」ボタンをクリックして、インテントを作成します
 「Import」で既存のインテントをインポートすることも可能です
32 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
 「Intent name」に「#あいさつ」と入力し、インテントを作成してみましょう
 あいさつの文書をいくつか入力します
ここに文章を入力して
例文を登録していく
典型的な文をいくつか入力する
と類似の言葉を「あいさつ」の
話であると理解するようになる
33 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
インテントの作成
 インテントが正しく設定できたか、確認してみましょう
 画面右上のボタンをクリックし、テストツールを開きます
あいさつに関する文章
であることを理解して
いる
34 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
Tips
 インテントやエンティティを作成すると、自動的にWatsonのトレーニングが
開始されます
 トレーニングが完了しないと変更が反映されません
 トレーニングが完了してから、テストツールでの動作確認を行ってください
35 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
エンティティの作成
 エンティティタブをクリックし、中央にある「Create new」ボタンをクリッ
クして、エンティティを作成します
 「Import」で既存のエンティティをインポートすることも可能です
36 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
エンティティの作成
 「yes」と「no」のエンティティを作成します
エンティティ名
言葉の揺らぎや癖に対応できるように同じ
意味を指す単語(シノニム)を登録
37 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
ダイアログの作成
 ダイアログタブをクリックし、中央にある「Create」ボタンをクリックして、
ダイアログを作成します
38 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
作成するシナリオ
チャットボット
こんにちは!
お元気ですか?
こんにちは
うん、いい感じ!
素晴らしい!
その調子で頑張ってください!
(イメージ図)
39 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
ダイアログの作成
 ダイアログには、はじめから「ようこそ」と「その他」ノードが入っています
どのインテント、
エンティティにも属さな
い文章だった時に出す
メッセージ
(エラー処理)
会話が始まった時に
出すメッセージ
40 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
ダイアログの作成
 「Add node」をクリックし、ノードを追加します
 各ノードはcondition(条件)とresponse(対応)で構成されます
<? input.text ?>で、ユーザーの
入力メッセージをオウム返しする
条件:“ユーザの入力が「あいさつ」
に関する文章だった場合”
複数の回答を順番に返したり、
ランダムに返したりできる
ノード名
41 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
ダイアログの作成
 あいさつノードが選択されている状態で、「Add child node」をクリックし、
子ノードを追加します
42 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
ダイアログの作成
 あいさつノードが選択されている状態で、「Add child node」をクリックし、
子ノードを追加します
43 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
ダイアログの作成
 テストツールを起動して、作成したフローの動作確認をしてみましょう
44 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
1. WatsonのAPI、Conversationの使い方がわかる
– (ハンズオン1)シンプルなチャットボットをつくる
2. 外部APIの呼び出し方がわかる
– (ハンズオン2)「楽天トラベル空室検索API」を呼び出す
3. Watsonと外部APIを組み合わせてWebアプリがつくれる
– (ハンズオン3)ホテル検索ができるチャットボットをつくる
今日のゴール
45 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
楽天トラベル
 宿泊予約・航空券予約ができるオンライン総合旅行サイト
https://travel.rakuten.co.jp/
46 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
楽天トラベルAPI
 今回はこの「楽天トラベル空室検索API」を使います!
https://webservice.rakuten.co.jp/document/#travelApi
47 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
APIとは?
〒103−8510
の住所が知りたい
「東京都中央区日本橋箱崎町
日本アイ・ビー・エム 株式
会社 箱崎事業所」だよ
郵便番号 API
 企業が持っているデータを、ネットワークを通じて利用できるようにしたもの
 利用者はAPIを通じて様々なデータを取得し、それらを利用したアプリや
ウェブサイトを開発できる
データ提供事業者
例:郵便番号API
出典:https://webservice.faq.rakuten.co.jp/app/answers/detail/a_id/13774
48 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
APIの使い方
 ベースURLに、パラメータを付加してHTTP(S)リクエストを送信する
➢ 楽天トラベル空室検索APIの場合
• ベースURL: https://app.rakuten.co.jp/services/api/Travel/VacantHotelSearch/20170426
• パラメータ(必須):アプリID、地区情報
• パラメータ(任意):チェックイン日、チェックアウト日、上限金額…
49 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
ハンズオン2
 「楽天トラベル空室検索API」を呼び出す
やること
・楽天ウェブサービスへの登録
・Node-RED上からの楽天API呼び出し
50 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
APIの準備
 楽天ウェブサービス(https://webservice.rakuten.co.jp/) にアクセスし、
「+アプリID発行」をクリックします
 楽天会員でログインしてください
51 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
APIの準備
 アプリ新規作成フォームに必要事項を入力します
アプリ名:任意の名前
(例:Watson-botアプリ)
アプリURL:作成したアプリのURL
(例:https://noderedapp-名前.mybluemix.net)
52 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
APIの準備
 アプリIDが発行されるので、コピーしておいてください
 のちほど、APIコールの時に必要になります
53 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
2. 「api_test.txt」
ファイルを全コピーし、貼り付け
1.右メニューから
[読み込み]→[クリップボード]を選択
3.読み込みボタンをクリック
Node-REDフローのインポート
 APIテスト用のNode-REDフローをインポートします
 ファイルは「api_test.txt」をコピーしてください
54 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
楽天アプリID設定
2. 「XXX…」の部分をメモしておいた
applicationIdで上書きする。
3. デプロイボタンを押す。
 楽天トラベルAPIを利用するためには「楽天アプリID」の設定が必要です
 メモしておいたIDを、URLの末尾に上書きして設定します
 (XXXXXXの部分を上書きしてください)
1. ノードをダブルクリック
55 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
楽天トラベルAPIのテスト
 timestampノードの左横のボタンをクリックして、APIを呼び出します
 パラメータ設定を変更しながら、デバッグタブに何が表示されるか確認しましょう
1.ノードの左横のボタンをクリック
2.デバッグタブに
回答が返ってくるのを確認する。
56 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
1. WatsonのAPI、Conversationの使い方がわかる
– (ハンズオン1)シンプルなチャットボットをつくる
2. 外部APIの呼び出し方がわかる
– (ハンズオン2)「楽天トラベル空室検索API」を呼び出す
3. Watsonと外部APIを組み合わせてWebアプリがつくれる
– (ハンズオン3)ホテル検索ができるチャットボットをつくる
今日のゴール
57 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
ハンズオン3
 ホテル検索ができるチャットボットをつくる
やること
・Conversationでのワークスペース作成
・Node-REDでのアプリ構築
58 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
Webアプリ
Node.js
Conversation
入力
応答
楽天トラベル空室検索API
 Conversationで「宿泊日」、「宿泊日数」、「地域」、「予算」を聞き、
それをパラメータとして楽天トラベルAPIを呼び出す
API呼び出し
1.Conversationで、ユーザに条件を
確認する
(宿泊日、宿泊日数、地域、予算)
2.確認した条件を
アプリ内で保持する 3.条件を元に
楽天トラベルAPIを呼び出す
アプリの構成
59 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
ワークスペースのインポート
 ホテル検索用のワークスペースをインポートします。
 ファイルは「conversation.json」を指定してください
60 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
インテントの作成
 「ホテル検索」というインテントを作成します
 余裕がある方は、正しく登録できたかテストツールで動作確認してみましょう
ホテル検索に関する
文章だと認識されている
61 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
ダイアログにインテントを設定する
#ホテル検索 と入力
 ホテル検索に関するする文章が入力されると会話が続くようにするために、
ダイアログの「ホテル検索」ノードの条件に「#ホテル検索」と入力します
ホテル検索に関する
文章だと、
会話が続いていく
62 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
システムエンティティ
 会話中に日付を認識する「@sys-date」と、数字を認識する
「@sys-number」が有効になっているので、「今日」や「7月12日」のような
表現でもWatsonが認識してくれます
「今日」が
2017−07-12だと
認識している
@sys-dateがオフだと
「今日」が日付だと
認識されない
63 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
ダイアログ
 「地域確認」ノードの子ノードとして、「値段確認」ノードを追加します
ノード名:値段確認
条件:@sys-number
レスポンス:予算は1泊あたり<? @sys-number ?>円ですね。
ではこれより、宿泊可能なホテルを検索します。
64 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
ワークスペースIDの確認
 作成したワークスペースをAPIから利用する場合には「Workspace ID」が
必要になります
 Conversationツールから、Workspace IDをコピーしておきます
workspace_idをコピーして控えておく
65 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
2. 「bot-flow.txt」
ファイルを全コピーし、貼り付け
1.右メニューから
[読み込み]→[クリップボード]を選択
3.読み込みボタンをクリック
Node-REDフローのインポート
 Webアプリ用のNode-REDフローをインポートします
 ファイルは「bot-flow.txt」をコピーしてください
66 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
1.workspace_idを設定する
2.ノードの左横のボタンをクリック
3.デバッグタブに
回答が返ってくるのを確認する。
Node-REDでConversationを動かす
 先ほど作成したConversationのワークスペースが、Node-REDでどのように
動くか確認してみましょう
67 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
workspace_idを設定する
アプリIDを設定する
 workspace_id と 楽天API アプリIDを設定します
資格情報の設定
68 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712
 これでアプリは完成です。お疲れさまでした!
 Node-REDのURLを元に、httpノードで設定したパスを指定してアプリに
アクセスします
 http://noderedapp-名前.mybluemix.net/bot
完成!
69 © 2017 IBM Corporation
資料:
ibm.biz/bmxug0712

Watsonを使ってAIアプリを作ってみよう!-ハンズオン-

  • 1.
    © 2016 IBMCorporation Watsonを使ってAIアプリを作ってみよう! 2017年7月12日(水) 日本アイ・ビー・エム株式会社 岸田 吉弘 Bluemix ハンズオン
  • 2.
    2 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 1. WatsonのAPI、Conversationの使い方がわかる 2. 外部APIの呼び出し方がわかる 3. Watsonと外部APIを組み合わせてWebアプリがつくれる 今日のゴール
  • 3.
    3 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 1. WatsonのAPI、Conversationの使い方がわかる – (ハンズオン1)シンプルなチャットボットをつくる 2. 外部APIの呼び出し方がわかる – (ハンズオン2)「楽天トラベル空室検索API」を呼び出す 3. Watsonと外部APIを組み合わせてWebアプリがつくれる – (ハンズオン3)ホテル検索ができるチャットボットをつくる 今日のゴール
  • 4.
    4 © 2017IBM Corporation 資料: ibm.biz/bmxug0712  Watsonと外部APIを組み合わせてWebアプリがつくれる 今日つくるもの 7月12日に東京駅周辺で 1泊したい! 予算は1万円! 「ホテルXX」ってところ が空いてるよ! Watson君 (イメージ図)
  • 5.
    5 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 1. WatsonのAPI、Conversationの使い方がわかる – (ハンズオン)シンプルなチャットボットをつくる 2. 外部APIの呼び出し方がわかる – (ハンズオン)「楽天トラベル空室検索API」を呼び出す 3. Watsonと外部APIを組み合わせてWebアプリがつくれる – (ハンズオン)ホテル検索ができるチャットボットをつくる 今日のゴール
  • 6.
    6 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 まずはWatsonについて
  • 7.
    7 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 http://www.ibm.com/smarterplanet/jp/ja/ibmwatson/  Watsonは、コンピューターでありながら、人と同じように情報から学び、 経験から学習するコグニティブ・テクノロジーです。  Watson = AI = Augmented Intelligence (拡張知能) LearningUnderstanding Reasoning 学習により専門知識 を身につける。 ヒトのコミュニケー ション(言語・音声・ 画像)を理解する。 事実から紐付けて 答えを見つけ出す。 (推論する) Watsonとは?
  • 8.
    8 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 Watson API一覧 Personality Insights テキストから筆者の性格を推定する Language Translator(一部日本語未対応) 自然言語テキストについて他言語へ翻訳を行う Conversation アプリケーションに自然言語インターフェースを追加して エンドユーザとのやり取りを自動化 Natural Language Understanding(日本語未対応) 自然言語処理を通じてキーワード抽出、エンティティー抽出、 心情分析、感情分析、概念タグ付け、関係抽出、分類法種別、 作成者抽出などを行う Text to Speech テキスト文章を音声に変換する Speech to Text 音声をテキスト文章に変換する Visual Recognition 画像コンテンツに含まれる意味を検出する Natural Language Classifier テキスト文章の分類を行う(質問の意図推定など) Tone Analyzer(日本語未対応) テキストの感情、社交性、文体を解析する Retrieve and Rank 自然言語の質問に対して回答の候補を返す 分析系 音声系 画像系 言語系 Document Conversion 文書を新しい形式に変換する Discovery(日本語未対応) 認知検索およびコンテンツ分析エンジンをアプリケーションに追加して、優れた意思決定を行うのに役立つ パターン、傾向、およびアクション可能な洞察を識別する (2017年7月現在)
  • 9.
    9 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 Conversationとは チャットアプリ XXさん、おはよう ございます 10時-12時 お客様 MTG @箱崎 … 19時 新人歓迎会 @ 銀座 今日の予定を教えて Conversation を呼び出す 回答メッセージを受け取る 今日の予定を教えて 10時-12時 お客様MTG... 会話フローに沿って、意図と 目的語に対する応答メッセー ジを返す 意図:「知りたい」 目的語:「今日」「予定」  Conversationはチャットボットを実装するためのAPIです  ユーザの発言の意図を理解し、その意図に応じて応答メッセージを返します  会話に必要な情報をやりとりをしながら抜き出し、適切な応答を選択します
  • 10.
    10 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 Conversationで重要な3つの要素  Intents(インテント / 意図) ✓対話相手の要求・意図を認識する - 「ライトをつけて」 → スイッチ入 - 「音楽をかけて」 → スイッチ入 - 「音量をもっと大きく」 → 大きくする  Entities(エンティティ / 目的語) ✓要求の対象を明確にする - 「ライトをつけて」 → ライト - 「音楽をかけて」 → 音楽 - 「音量をもっと大きく」 → 音量  Dialogs(ダイアログ / 対話) ✓対話の流れを設計する - 「音楽をかけて」→ 「音楽のジャンル取得」→ 指定ジャンルの音楽を開始
  • 11.
    11 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 インテントの登録  異なる表現や言葉のゆらぎを吸収し、意図を正しく理解するため  同じ行為を要求したとしても、様々な言い方があるため  例:食べたい、おなかがすいた、腹減った 同じ意図の文章を複数登録すると、 類似の表現を「食事」に関係が あると理解するようになる
  • 12.
    12 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 エンティティの登録  インテントの「目的」となる対象物を特定するため  例:”何を”食べるのか。そば?パスタ?ラーメン?  同じ意味の単語でも、様々な言い方があるため、シノニム(類義語)も登録する  例:晩ご飯、夜ご飯、夕飯、夕食、ディナー ”何を”食べるか、を明確にするための 「food」のエンティティ
  • 13.
    13 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 ビルトインされているエンティティ  Conversationには、デフォルトで提供しているエンティティも存在する 種別 認識できるもの 例 sys-time 時間 13時20分、13:20 sys-date 曜日と日付 今日、金曜日、7月12日 sys-currency 通過 20 cents、$20 sys-percentage 割合 15%、10パーセント sys-number 数値 123、3.1415、百七十 System entities 一覧
  • 14.
    14 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 ダイアログとは  ユーザーの要求(インテントとエンティティ)と、それに応じた回答を 組み合わせていく  各ノードはコンディション(条件)とレスポンス(対応)で構成される ご用件は なんですか 何が食べたい ですか 近くにおすすめ の蕎麦屋が あります またどうぞ! お腹が空いた そばがいいな やっぱ今はいいや #食事 @そば
  • 15.
    15 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 ハンズオン1  シンプルなチャットボットをつくる チャットボット こんにちは! お元気ですか? こんにちは うん、いい感じ! 素晴らしい! その調子で頑張ってください! (イメージ図) やること ・Node-REDの環境構築 ・Conversation サービスの作成 ・Conversationでのワークスペース作成
  • 16.
    16 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 Bluemixへログイン  ブラウザで「bluemix.net」と入力し、Bluemixへログインします  地域を「米国南部」に変更してください
  • 17.
    17 © 2017IBM Corporation 資料: ibm.biz/bmxug0712  右上の「カタログ」をクリックし、「ボイラープレート」カテゴリにある 「Node-RED Starter」をクリックします Node-RED環境の準備
  • 18.
    18 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 アプリ名のところに 「noderedapp-名前」と入力 Node-RED環境の準備  アプリの名前を入力し、右下の「作成」ボタンをクリックします
  • 19.
    19 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 Node-RED環境の準備  アプリが「実行中」になるまで待ちます  「実行中」になったら、右側の「アプ...」をクリックします
  • 20.
    20 © 2017IBM Corporation 資料: ibm.biz/bmxug0712  Node-REDとは、デバイス、API、オンラインサービスなどの機能を 繋げてアプリケーションを作成していくプラットフォームです ノード (カプセル化された機能) Node-REDとは?
  • 21.
    21 © 2017IBM Corporation 資料: ibm.biz/bmxug0712  Node-REDを最初に使う時には、認証情報の登録が必要です  Node-REDの編集者を制限し、他人からの改変を防ぐことができます  右下の「Next」ボタンをクリックし、ユーザー名とパスワードを入力します Node-REDのセットアップ 任意のユーザー名と パスワードを入力 (その下のチェックはつけない)
  • 22.
    22 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 Node-REDのセットアップ  その後は何もせず、右下の「Next」、「Finish」をクリックします
  • 23.
    23 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 Node-REDのセットアップ  少し待つと、認証情報が登録され、以下の画面が表示されます  右下の「Go to your Node-RED flow editor」をクリックし、先ほど登録し た認証情報を入力。入力を終えたら「ログイン」をクリックします
  • 24.
    24 © 2017IBM Corporation 資料: ibm.biz/bmxug0712  このような画面が表示されます Node-REDのセットアップ  Node-REDの環境構築完了です!  ノードのドラッグ&ドロップでアプリケーションを開発していきます
  • 25.
    25 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 Watson APIの追加  Node-REDのアプリからWatsonを使うためには、Watson APIのサービスを 新たに作成し、Node-REDのアプリと接続する必要があります  Bluemixの画面に戻り、左側のメニューの「接続」をクリックしてから 右上にある「新規に接続」をクリックします
  • 26.
    26 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 Watson APIの追加  「Watson」カテゴリーにある「Conversation」をクリックします
  • 27.
    27 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 Watson APIの追加  「接続」で先ほど作成したアプリを指定し、右下の「作成」をクリックします
  • 28.
    28 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 Watson APIの追加  アプリの再ステージを行い、「実行中」になるまで再度待ちます  「実行中」になったら、先ほど追加した「Conversation-XX」をクリックします
  • 29.
    29 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 ワークスペースを開く  サービスの詳細画面が開きます  「Launch tool」をクリックし、Conversationツールを起動します
  • 30.
    30 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 ワークスペースの作成  新規にチャットボットを作成してみましょう  「Create」ボタンをクリックし、ワークスペースを作成します  ワークスペースは一連の会話のパッケージです ワークスペースの名前を入力 (例:サンプル・チャットボット)
  • 31.
    31 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 インテントの作成  「Create new」ボタンをクリックして、インテントを作成します  「Import」で既存のインテントをインポートすることも可能です
  • 32.
    32 © 2017IBM Corporation 資料: ibm.biz/bmxug0712  「Intent name」に「#あいさつ」と入力し、インテントを作成してみましょう  あいさつの文書をいくつか入力します ここに文章を入力して 例文を登録していく 典型的な文をいくつか入力する と類似の言葉を「あいさつ」の 話であると理解するようになる
  • 33.
    33 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 インテントの作成  インテントが正しく設定できたか、確認してみましょう  画面右上のボタンをクリックし、テストツールを開きます あいさつに関する文章 であることを理解して いる
  • 34.
    34 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 Tips  インテントやエンティティを作成すると、自動的にWatsonのトレーニングが 開始されます  トレーニングが完了しないと変更が反映されません  トレーニングが完了してから、テストツールでの動作確認を行ってください
  • 35.
    35 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 エンティティの作成  エンティティタブをクリックし、中央にある「Create new」ボタンをクリッ クして、エンティティを作成します  「Import」で既存のエンティティをインポートすることも可能です
  • 36.
    36 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 エンティティの作成  「yes」と「no」のエンティティを作成します エンティティ名 言葉の揺らぎや癖に対応できるように同じ 意味を指す単語(シノニム)を登録
  • 37.
    37 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 ダイアログの作成  ダイアログタブをクリックし、中央にある「Create」ボタンをクリックして、 ダイアログを作成します
  • 38.
    38 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 作成するシナリオ チャットボット こんにちは! お元気ですか? こんにちは うん、いい感じ! 素晴らしい! その調子で頑張ってください! (イメージ図)
  • 39.
    39 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 ダイアログの作成  ダイアログには、はじめから「ようこそ」と「その他」ノードが入っています どのインテント、 エンティティにも属さな い文章だった時に出す メッセージ (エラー処理) 会話が始まった時に 出すメッセージ
  • 40.
    40 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 ダイアログの作成  「Add node」をクリックし、ノードを追加します  各ノードはcondition(条件)とresponse(対応)で構成されます <? input.text ?>で、ユーザーの 入力メッセージをオウム返しする 条件:“ユーザの入力が「あいさつ」 に関する文章だった場合” 複数の回答を順番に返したり、 ランダムに返したりできる ノード名
  • 41.
    41 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 ダイアログの作成  あいさつノードが選択されている状態で、「Add child node」をクリックし、 子ノードを追加します
  • 42.
    42 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 ダイアログの作成  あいさつノードが選択されている状態で、「Add child node」をクリックし、 子ノードを追加します
  • 43.
    43 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 ダイアログの作成  テストツールを起動して、作成したフローの動作確認をしてみましょう
  • 44.
    44 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 1. WatsonのAPI、Conversationの使い方がわかる – (ハンズオン1)シンプルなチャットボットをつくる 2. 外部APIの呼び出し方がわかる – (ハンズオン2)「楽天トラベル空室検索API」を呼び出す 3. Watsonと外部APIを組み合わせてWebアプリがつくれる – (ハンズオン3)ホテル検索ができるチャットボットをつくる 今日のゴール
  • 45.
    45 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 楽天トラベル  宿泊予約・航空券予約ができるオンライン総合旅行サイト https://travel.rakuten.co.jp/
  • 46.
    46 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 楽天トラベルAPI  今回はこの「楽天トラベル空室検索API」を使います! https://webservice.rakuten.co.jp/document/#travelApi
  • 47.
    47 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 APIとは? 〒103−8510 の住所が知りたい 「東京都中央区日本橋箱崎町 日本アイ・ビー・エム 株式 会社 箱崎事業所」だよ 郵便番号 API  企業が持っているデータを、ネットワークを通じて利用できるようにしたもの  利用者はAPIを通じて様々なデータを取得し、それらを利用したアプリや ウェブサイトを開発できる データ提供事業者 例:郵便番号API 出典:https://webservice.faq.rakuten.co.jp/app/answers/detail/a_id/13774
  • 48.
    48 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 APIの使い方  ベースURLに、パラメータを付加してHTTP(S)リクエストを送信する ➢ 楽天トラベル空室検索APIの場合 • ベースURL: https://app.rakuten.co.jp/services/api/Travel/VacantHotelSearch/20170426 • パラメータ(必須):アプリID、地区情報 • パラメータ(任意):チェックイン日、チェックアウト日、上限金額…
  • 49.
    49 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 ハンズオン2  「楽天トラベル空室検索API」を呼び出す やること ・楽天ウェブサービスへの登録 ・Node-RED上からの楽天API呼び出し
  • 50.
    50 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 APIの準備  楽天ウェブサービス(https://webservice.rakuten.co.jp/) にアクセスし、 「+アプリID発行」をクリックします  楽天会員でログインしてください
  • 51.
    51 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 APIの準備  アプリ新規作成フォームに必要事項を入力します アプリ名:任意の名前 (例:Watson-botアプリ) アプリURL:作成したアプリのURL (例:https://noderedapp-名前.mybluemix.net)
  • 52.
    52 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 APIの準備  アプリIDが発行されるので、コピーしておいてください  のちほど、APIコールの時に必要になります
  • 53.
    53 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 2. 「api_test.txt」 ファイルを全コピーし、貼り付け 1.右メニューから [読み込み]→[クリップボード]を選択 3.読み込みボタンをクリック Node-REDフローのインポート  APIテスト用のNode-REDフローをインポートします  ファイルは「api_test.txt」をコピーしてください
  • 54.
    54 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 楽天アプリID設定 2. 「XXX…」の部分をメモしておいた applicationIdで上書きする。 3. デプロイボタンを押す。  楽天トラベルAPIを利用するためには「楽天アプリID」の設定が必要です  メモしておいたIDを、URLの末尾に上書きして設定します  (XXXXXXの部分を上書きしてください) 1. ノードをダブルクリック
  • 55.
    55 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 楽天トラベルAPIのテスト  timestampノードの左横のボタンをクリックして、APIを呼び出します  パラメータ設定を変更しながら、デバッグタブに何が表示されるか確認しましょう 1.ノードの左横のボタンをクリック 2.デバッグタブに 回答が返ってくるのを確認する。
  • 56.
    56 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 1. WatsonのAPI、Conversationの使い方がわかる – (ハンズオン1)シンプルなチャットボットをつくる 2. 外部APIの呼び出し方がわかる – (ハンズオン2)「楽天トラベル空室検索API」を呼び出す 3. Watsonと外部APIを組み合わせてWebアプリがつくれる – (ハンズオン3)ホテル検索ができるチャットボットをつくる 今日のゴール
  • 57.
    57 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 ハンズオン3  ホテル検索ができるチャットボットをつくる やること ・Conversationでのワークスペース作成 ・Node-REDでのアプリ構築
  • 58.
    58 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 Webアプリ Node.js Conversation 入力 応答 楽天トラベル空室検索API  Conversationで「宿泊日」、「宿泊日数」、「地域」、「予算」を聞き、 それをパラメータとして楽天トラベルAPIを呼び出す API呼び出し 1.Conversationで、ユーザに条件を 確認する (宿泊日、宿泊日数、地域、予算) 2.確認した条件を アプリ内で保持する 3.条件を元に 楽天トラベルAPIを呼び出す アプリの構成
  • 59.
    59 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 ワークスペースのインポート  ホテル検索用のワークスペースをインポートします。  ファイルは「conversation.json」を指定してください
  • 60.
    60 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 インテントの作成  「ホテル検索」というインテントを作成します  余裕がある方は、正しく登録できたかテストツールで動作確認してみましょう ホテル検索に関する 文章だと認識されている
  • 61.
    61 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 ダイアログにインテントを設定する #ホテル検索 と入力  ホテル検索に関するする文章が入力されると会話が続くようにするために、 ダイアログの「ホテル検索」ノードの条件に「#ホテル検索」と入力します ホテル検索に関する 文章だと、 会話が続いていく
  • 62.
    62 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 システムエンティティ  会話中に日付を認識する「@sys-date」と、数字を認識する 「@sys-number」が有効になっているので、「今日」や「7月12日」のような 表現でもWatsonが認識してくれます 「今日」が 2017−07-12だと 認識している @sys-dateがオフだと 「今日」が日付だと 認識されない
  • 63.
    63 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 ダイアログ  「地域確認」ノードの子ノードとして、「値段確認」ノードを追加します ノード名:値段確認 条件:@sys-number レスポンス:予算は1泊あたり<? @sys-number ?>円ですね。 ではこれより、宿泊可能なホテルを検索します。
  • 64.
    64 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 ワークスペースIDの確認  作成したワークスペースをAPIから利用する場合には「Workspace ID」が 必要になります  Conversationツールから、Workspace IDをコピーしておきます workspace_idをコピーして控えておく
  • 65.
    65 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 2. 「bot-flow.txt」 ファイルを全コピーし、貼り付け 1.右メニューから [読み込み]→[クリップボード]を選択 3.読み込みボタンをクリック Node-REDフローのインポート  Webアプリ用のNode-REDフローをインポートします  ファイルは「bot-flow.txt」をコピーしてください
  • 66.
    66 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 1.workspace_idを設定する 2.ノードの左横のボタンをクリック 3.デバッグタブに 回答が返ってくるのを確認する。 Node-REDでConversationを動かす  先ほど作成したConversationのワークスペースが、Node-REDでどのように 動くか確認してみましょう
  • 67.
    67 © 2017IBM Corporation 資料: ibm.biz/bmxug0712 workspace_idを設定する アプリIDを設定する  workspace_id と 楽天API アプリIDを設定します 資格情報の設定
  • 68.
    68 © 2017IBM Corporation 資料: ibm.biz/bmxug0712  これでアプリは完成です。お疲れさまでした!  Node-REDのURLを元に、httpノードで設定したパスを指定してアプリに アクセスします  http://noderedapp-名前.mybluemix.net/bot 完成!
  • 69.
    69 © 2017IBM Corporation 資料: ibm.biz/bmxug0712