ibmワトソン 勉強会 20161121a
TRANSCRIPT
© IBM
Corporation 1
© 2016 IBM Corporation
日本アイ・ビー・エム株式会社高良真穂
IBM Watson Conversationを利用した LINE Chatbot 開発法解説
2016年11月21日
LINE BOT AWARDS
1000万円獲得にチャレンジしよう!
© IBM
Corporation 2
2
お話する人
名前: 高良 真穂 (Takara Maho) 2002年 IBM入社
プロフェッション: エキスパート・テクノロジ・アーキテクト
所属: 日本アイ・ビー・エム株式会社
クラウド事業統括 テクニカル・サービス
連絡先: [email protected]
Facebook https://www.facebook.com/maho.takara
最近のおもちゃ(^o^;)
© IBM
Corporation 3
text
Watson Conversation を使って LINE BOT AWARDSで 1000万円獲得にチャレンジしよう!
このセッションでは、LINE Message API とWatson Conversation を繋げる方法が満載
https://codeiq.jp/magazine/2016/11/47013/?rfop=f70687m5
© IBM
Corporation 4
text
Watson Conversation の話に入る前に
– 東大ロボ君、東大合格を断念
• なかなか力が伸びなかったのは、会話文を完成させる問題や文章を要約する問題など、「複数の文」を組み合わせた問題でした
• 人工知能が自動的に学習することで能力を飛躍的に向上させたディープラーニングと呼ばれる技術も試しましたが、効果はありませんでした。
• 人工知能に言葉を理解させる技術は、自然言語処理と呼ばれていますが、2つ以上の文を理解させることは極めて難しく、世界中の研究者が挑戦しているのが現状です。
– ワトソンなら会話できるの?
• 限られた範囲の会話が可能
• 考えている訳でなくルールベース
http://www3.nhk.or.jp/news/html/20161114/k10010768531000.html
5Page© 2016 IBM Corporation
Watson Dialog からConversation へ進化
© IBM
Corporation 6
text
Conversation とは Dialogの後継として今年夏に登場
– Watson Dialog がWatson Conversation に交代が発表
– 2月に日本語化が、発表されたばかりなのに… それだけ良いこと一杯!
– Watson Conversation は日本語化対応済み
https://www.ibm.com/blogs/bluemix/2016/08/retirement-watson-dialog-service/
© IBM
Corporation 7
text
Watson Dialog / Conversation の機能とは
– ユーザーと対話しながら、取得した情報をJSON形式の情報を取得する
– 話し言葉には、揺らぎがあるので、言い方、癖、短縮など曖昧な話し言葉を許容して、適切に情報を取得で
– 受けたフレーズの類似度を判別して処理するので、典型的なパターンを学習させるだけ
音楽をかけて
実行環境(サーバー)
ジャンルは?
Text data
Text data
BOT
API
BOTUX
ロック
Text data
ロックをプレイします
Text data
会話で取得した情報をJSON形式で提供
Watson
Conversation
© IBM
Corporation 8
text
Watson Conversation のメリット
– Watson Dialog
• 会話のスキームをXMLのファイルを エディタで編集
• 高かった 1コールあたり ¥2.0円/API call
• 文字列の正規表現的なマッチングレベル
– Watson Conversation で改善された点
• ウェブのGUIツールを使って会話のJSONスキームを設計、デバックが可能
• お手頃になった コールあたり ¥0.2625円/API call
• NLCの機能を取り込み
– 典型的な文を与え、意図を掴み取り、対応を決める
– 同じ意味を指す単語(シノニム)を登録しておき、言葉の揺らぎや癖に対応できる
• APIが簡単になり、APIのアウトプットは、リッチに改善
• 上記費用にNLC相当機能のコストが含まれるので、たいへんお得なサービス
9Page© 2016 IBM Corporation
IBM Bluemix
Watson Conversation
オーダー方法
© IBM
Corporation 10
text
Bluemix Watson Conversation オーダーの方法
– カタログ→ サービス→ Watson
© IBM
Corporation 11
text
Bluemix Watson Conversation のオーダー方法
– 価格プランを選択して、作成をクリック
© IBM
Corporation 12
text
Bluemix の Conversation API 利用
– オーダー完了後の画面
© IBM
Corporation 13
text
Bluemix Watson Conversation API 利用
– JSON形式のサービス資格情報が提供されるので、コピペして利用
– このURLを使ってサーバーからRESTでアクセスできる
© IBM
Corporation 14
text
Bluemix Watson Conversation API
– Conversation のチュートリアル、APIの解説が提供
https://www.ibm.com/watson/developercloud/doc/conversation/index.html
https://www.ibm.com/watson/developercloud/conversation/api/v1/
15Page© 2016 IBM Corporation
Watson Conversation
会話設計と機械学習
© IBM
Corporation 16
text
IBM Watson Conversation の設計の基本
–Intents 対話相手の要求を受け取る Intents を明確にする
– 「ライトをつけて」 → スイッチ入
– 「音楽をかけて」 → スイッチ入
– 「音楽をもっと大きく」 → 音量を上げる
–Entities 要求の対象となる Entity を明確にする
– 「ライトをつけて」 → ライト
– 「音楽をかけて」 → 音楽
– 「音楽をもっと大きく」 → 音量
–Dialogs 対話の流れを設計する
– 「音楽をかけて」 → 「音楽のジャンル取得」 → 指定ジャンルの音楽を開始
© IBM
Corporation 17
text
会話設計ツールの概要
ウェブGUIツールを起動して、ワークスペースを作成
「ワークスペース」とは一連の会話のパッケージ例として・ ドライブ・アシスタント・ デリバリ注文受付・質問応対・ 接客応対
© IBM
Corporation 18
text
会話設計ツールの概要
– Intents を作成するために、 Get started をクリック
– Workspace IDは、APIから利用するとき必要
このアイコンは、以前作成したworkspaceをインポートする為
© IBM
Corporation 19
text
Intents(意図) の登録受け取る意図の幅を登録
• 同じ行為を要求するにも、いろいろな言い方がある。 言い方の違いを許容して意図を理解する 例: つけて、オン、いれて、点灯して、かけて、
• 機械学習を利用して、言葉の揺らぎを吸収して、意図を正しく理解する
初期状態
インプットが終わったらCreate をクリック
類似の言葉を「スイッチを入」れると理解する様になる
© IBM
Corporation 20
text
Intents(意図) の登録後のテスト
Watson conversationになってから、意図とおりに認識できるか、ウェブ画面から確認できる様になった。
このアイコンをクリックで会話のテストツールが起動
© IBM
Corporation 21
text
Intents(意図) の登録後のテスト
Intents を Create すると、自動的にトレーニングが開始され、完了するまでは利用できない。 トレーニングには、およそ数分程度要する。
トレーニング進行中
トレーニング完了
数分後
© IBM
Corporation 22
text
Intents(意図) の登録後のテスト1つのIntentsだけでは、正しく動作しない。
Intents が一個しかないWorkspace はこんな状態
どんなテキストをインプットしても全部同じ判定
© IBM
Corporation 23
text
Intents(意図)の登録後のテスト「無関係」というIntentsを登録すると、無関係な言葉は処理できる様になる
© IBM
Corporation 24
text
Intents(意図) の登録無関係な言葉は、適当に色々な単語やフレーズを入れておく
© IBM
Corporation 25
text
Entities (取得対象の情報) の登録
Intents の目的となる対象のEntitiesを登録
• 要求の対象物にも、いろいろな言い方がある。 「音楽をかけて」の表現も
– ミュージック、BGM、ロック、ジャズ… などなど、同じ行為を指すものが複数
• 機械学習を利用して、色々な言い方でも、正しく理解できる様にする
© IBM
Corporation 26
text
Entities (取得対象の情報) の登録
曖昧さを含む話し言葉を、正しく受け取れる様登録
登録完了後に、Intents と同じ様に、数分間のトレーニングが始まるので注意
同意語(慣用的に使う言葉を含む)
対象とするグループを表す言葉
機器の具体的な名前
© IBM
Corporation 27
text
会話(Dialog)の順番を登録
– 要求の意図(Intents)と対象情報(Entities)を統合して、対話の流れをつくる– Dialog を Click して Create で作成開始
© IBM
Corporation 28
text
会話(Dialog)の順番を登録
– 会話の流れ、意思や対象を判別するためのスキーマーを登録する
– どの意図にも合致しない時のため、”Anything else”を設定する
初期状態 スイッチの入と切を設定
意図に対応する応答文
対話相手の意図
意図が一致しなかった場合の対応
© IBM
Corporation 29
text
会話(Dialog)のテスト言い方を変えても、意図を正しく受け取る様になった
でも、何のスイッチを操作するか、情報が足りない
テスト結果
© IBM
Corporation 30
text
対象となるモノの情報を受け取る様に追加する
– 「行為の要求を受け取る」、「対象となるモノの情報を受け取る」ことができました。
エアコン
ライト
#で始まるIntents や@で始まるEntity に登録されていないものがくると「解りませんでした」と答える
会話アイコンのタイミングで、機器の種類を受け取る
追加
© IBM
Corporation 31
text
自然な会話になる様にDialog Nodeを追加する
– 「エアコンをつけて」や「照明をつけて」と言った自然な表現をDialogで表現すると
@機器の名前が該当して、#意図が該当すれば、対応の応答 @機器の名前が該当しない場合の応答
Intent と Entity を同時に評価できる様になる
追加
© IBM
Corporation 32
text
自然な会話になる様にDialog Node追加の方法
– 要求される行為と、対象の機器を、「エアコンつけて」の様な一言で対応するには
メニューを表示して Continue from… を選択 @機器のGo to condition を選択
@機器の名前が該当して、#意図が該当すれば、対応の応答
一致したEntityに置換される
© IBM
Corporation 33
text
自然な会話のエラー処理
– エラー処理を含んだ全体
該当の要求が無い場合の応答
該当の機器Entity が無い場合の応答
初めからやり直し
34Page© 2016 IBM Corporation
Watson Conversation
のAPIプログラミング
© IBM
Corporation 35
text
最小プログラムと実行結果
最小のConversationプログラム
JSON形式のレスポンス
© IBM
Corporation 36
text
最小のConversation API プログラムの解説
最小のConversationプログラム
Watson Conversation
APIユーザー認証
会話のIDを指定して対話開始
JSON形式のアウトプットを表示
workspace
© IBM
Corporation 37
text
Watson Conversation パラメータの入手先
最小のConversationプログラム
認証情報
© IBM
Corporation 38
text
Dialog と JSON出力の関係
– Intents と entities を判別して応答
重要
© IBM
Corporation 39
text
Chatbot に重要な2つのセッション
• セッション1 (会話の前後関係)
• 一問一答ではなく、複数の質問から答えを導く
• 会話の続きを把握して、話の続きを継続する
• セッション2 (マルチユーザー対応)
• たくさんの人と同時に会話する
–人間だと、1度に一人の相手としか会話できない
–チャットボットは、数十人〜と同時に会話
– Watson Conversation は、前者のみをサポート、後者は別途開発する必要がある。
© IBM
Corporation 40
text
セッション1 (会話の前後関係) の例
三回連続正解すれば、勝ちの会話ゲームのDialog
1回目の解答受付 2回目の解答受付 3回目の解答受付
create new conditionの意味で会話の終了、すなわち
最初からやりなおしを意味する。
© IBM
Corporation 41
text
セッション1 (会話の前後関係) の例
2番目の答えが、間違ったので、負け
© IBM
Corporation 42
text
セッション1 (会話の前後関係) の例
再挑戦!
3つ正解で勝ち
© IBM
Corporation 43
text
セッション1 (会話の前後関係)の例
会話の続きかを conversation_id で判別する
会話の開始時にconversation_id
を生成する
応答時にconversation_id
を付与する
応答時にconversation_id
を付与続ける
© IBM
Corporation 44
text
セッション1 (会話の前後関係)の例
Nodeのプログラムで書くとこんな感じ
前の応答 conversation_idをセットして続きを示す。
空の場合は、新規の会話開始と判断して最初からスタート
次の応答のパラメータに付与できる様に、保存しておく
LINE に応答
© IBM
Corporation 45
text
セッション2 (マルチユーザー対応)
複数のLINEクライアントから、自分だけが会話している様に見せる
同時進行で、二つのセッションが独立に進行する様にプログラミングする
スマホ#1 スマホ#2
10:54
10:55
10:56
© IBM
Corporation 46
text
セッション2 (マルチユーザー対応)
– ユーザー・セッション管理は、LINEユーザー単位で、対話の状態を管理する
– 配列users[id] に、LINE User Id 単位にconversation_id も保存して、同時に複数ユーザーに対応させる。
新規
セッション
既存セッション
メッセージ送信者の LINE ID
メッセージ送信者の LINE ID
単位に状態を管理conversation_idもこの中で
LINE ID単位で保持
ユーザーIDごとに応対する部分
© IBM
Corporation 47
text
Conversation 要求の確定の判別方法
– 会話のどの時点で要求が確定したのか、プログラムで判別する方法
– 判別結果をもって、バックエンドシステムの問い合わせ
• R&Rに検索させる
• IoT機器へコマンドを送信する
• Conversation の戻り値だけでは、確定できたか判定が難しい
確定成功のケース 確定失敗のケース
© IBM
Corporation 48
text
Conversation 要求の確定の判別方法
• 要求が確定したという情報は、これまでの設定ではJSONに出力されない!
確定成功のケース 確定失敗のケース
Entities に値がセットされたら注文確定にするには???
© IBM
Corporation 49
text
Conversation 要求の確定の判別方法
• Dialogのcontext 変数を指定することで、Chatbotプログラムへ通知できる
JSONレスポンスの例If (order == true) { で判定してEntities を取得して、IoT機器へリクエストを送信など…
© IBM
Corporation 50
text
Conversation 要求の確定の判別方法
• context 変数は、R&Rや外部の機能を利用する際にも利用できる
watson_rr : true で、判定してインプットテキストを R&R へ与えて、結果を返す
R&Rの利用
R&Rへのテキスト
51Page© 2016 IBM Corporation
Watson Conversation
+ LINE Message API
チャットボット開発
© IBM
Corporation 52
text
LINE Message APIとはRESTサービス、API ライブラリとして Java, PHP, Go, Perl, Ruby, Python
Watson と接続するため便利な Node 版API は、GitHUBに公開
https://business.line.me/ja/companies/1098092/services/bot
Watsonに繋ぐのに便利なNode版が無いので作りました
https://github.com/takara9/line-msg-api
© IBM
Corporation 53
text
LINE Message API のループバック試験用コードWatson と繋がずに折り返し試験、成功したら、Watson Conversation と接続
https://www.npmjs.com/package/line-msg-api
インストール
ループバック試験
のサンプルコード
© IBM
Corporation 54
text
Watson Conversation を利用したチャットボット
Watson Conversation で、最高賞金1000万円の LINE BOT AWARDS にチャレンジしよう!
https://github.com/takara9/line_chatbot
55Page© 2016 IBM Corporation
Watson Conversation
料金
© IBM
Corporation 56
text
Bluemix は、無料プランもあり、使えれば本格利用が可能
Bluemix のサービスを注文する際に、料金が表示されています
この料金は2016年11月現在の料金です。 最新の料金は、Bluemixの各サービス・オーダー画面で、お確かめください。
57Page© 2016 IBM Corporation
Watson Conversation
まとめ
© IBM
Corporation 58
text
まとめ– Watson Conversationは、Dialog の後続として登場
– 日本語対応済み
– コストが下がる 1コールあたり ¥2円→ ¥0.2円台に
– NLC機能の機能を内包
– ウェブGUI ツールで会話を設計できる
– Dialog の会話(Workspace)は、JSON形式で Export / Import 可能
– Dialog の context 変数で、R&R連携など他APIへ飛ばして回答も可能
– LINE Message API の Node API ライブラリ(line-msg-api)は GitHuBに公開
使ってみて判ったこと
– Intents や Entities を変更するとトレーニングが始まり conversationが機能停止
– Workspace スキーマをAPIから変更できない。 →対話から自動学習が厳しい
– Intents の無関係とか的外れといった無駄と思える内容が必須
© IBM
Corporation 59
text
さらに、日本語で学ぶためにオススメのリンク
– IBM developerWorksこみねのメモ– https://www.ibm.com/developerworks/community/wikis/home?lang=ja#!/wiki/%E3%81%93%E3%81%BF
%E3%81%AD%E3%81%AE%E6%8A%80%E8%A1%93%E3%83%A1%E3%83%A2/page/Conversatio
n%20%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9
© IBM
Corporation 60
text
Bluemix 一ヶ月間無料 無制限お試し利用– クレジットカードの登録は不要です
https://www.ibm.com/cloud-computing/jp/ja/bluemix/
© IBM
Corporation 61
+
Bluemix Infrastructure