ラズパイ+SL+BMでワトソンと話そう

50
Presented by: ラズパイ+SL+BMIBM Watsonと話そう! 2016416日本IBM株式会社 クラウド事業統括 テクニカルサービス 高良 真穂 本資料は、発表者によって準備された資料であり IBMの公式の見解を代表するものではありません。 SoftLayer Bluemix Community Festa 2016

Transcript of ラズパイ+SL+BMでワトソンと話そう

Page 1: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 1

Presented by:

ラズパイ+SL+BMで IBM Watsonと話そう! 2016年4月16日

日本IBM株式会社 クラウド事業統括 テクニカルサービス 高良 真穂

本資料は、発表者によって準備された資料であり IBMの公式の見解を代表するものではありません。

SoftLayer Bluemix Community Festa 2016

Page 2: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 2

text

ソードアートオンライン Beginnings

– ベータテスト募集200名に対して、10万人が応募! – これは未来のWatsonをイメージしたもので、 – IBM Watsonと繋げて会話するには…

Watsonの イメージキャラクタ

“コグ”

Page 3: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 3

text

IBM Watson とお話するとは?

– CogniToysを作ってみるということ? •  子供の質問に答えるシステム

– Apple iPhone の Siri と会話するということ? •  ウェブ、地図検索の支援機能

– チャットボットと会話するということ? •  目的の定まらないチャット、会話からキーワードを記憶、オウム返し •  星新一のSF短編小説ボッコちゃん

– SF新スタートレックのデータ少佐 •  知覚(視覚、聴覚、嗅覚、触覚、味覚)を持ち言葉を操り、人間と共に生活し、人間の

活動をサポートする人工知能を持ったアンドロイド – ワトソンは、コグニティブ・システム!?

•  目的を持った会話により目的の達成、知識の提供を実現できる

http://gigazine.net/news/20150218-cognitoys/

その頭脳はIBMのスーパーコンピュータ「Watson」です。子どもたちの話しかけた内容は、インターネット経由でサーバーに送られWatsonが処理し、はじき出された「答え」をCogniToysが子どもたちに伝えるという仕組みです。

Page 4: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 4

text

IBM Watson とお話するとは?

– チャットボット(人工無能)とは?

Page 5: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 5

text

IBM Watson とお話するとは?

– 対話するアンドロイドに恋するとい短編小説

http://www.showaboston.org/jlc/read_files/4B/Hoshi_02_Bokkochan.htm続きはこちらから

何が好きかしら

何が好きなんだい?

ジンフィーズ 飲むかい? ジンフィーズ

飲むわ

 見たところでは、そのへんの本物以上にちがいない。 だが、頭はからっぽに近かった。彼も

そこまでは手がまわらない。簡単なうけ答えができるだけだし、動作のほうも酒

を飲むことだけだった。 彼は、それが出来あがると、バーにおいた。そのバーにはテーブルの席もあっ

たけれど、ロボットはカウンターのなかにおかれた。ぼろを出しては困るからだっ

た。

年は? まだ若いのよ

Page 6: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 6

text

IBM Watson とお話するとは?

– おしゃべりボットと会話するということ? •  星新一のSF短編小説ボッコちゃんが、現実に。。。

出典:http://itpro.nikkeibp.co.jp/atcl/column/15/060200138/091700016/?ST=system&P=1

Page 7: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 7

text

IBM Watson とお話するとは?

– SFの中での人工知能

出典:https://en.wikipedia.org/wiki/Data_%28Star_Trek%29

データの頭脳は、自己学習型で神経網(ニューラルネット)が次第に成長していく仕組みになっている。物理的に頭脳の容量が許す限り、ネットはいくらでも拡張してゆくことが出来る。

出典:http://www.m-nomura.com/st/data.html

人間の様に振る舞い、人間と共に活動し、人間の活動を助ける SFテレビシリーズ Star Trek Next Generation (1987-1994) アンドロイド データ少佐

コグニティブの究極の姿!?

Page 8: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 8

text

IBM Watson とお話するとは?

–  IBM Watson は、コグニティブ・システムを目指す

「コグニティブ」は、直訳すると「認知、認識の(できる)」ということです。 経験を通じてシステムが学習し、相関関係を見つけては仮説を立て、記憶し、成果からまた学習していくというように、まさに人間の脳のように考えるシステムのことです。 ジョパティのワトソンは、テキスト・データの解析でしたが、 コグニティブ・システムでは、五感(視覚、聴覚、嗅覚、触覚、味覚)を利用した解析を目指します。

Page 9: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 9

text

IBM Watson とお話するとは?

– 今どのあたりか? を実感して理解する •  IBM Watsonが目指したいのはデータ少佐の頭脳 •  進化を続け未来には人間の頭脳を凌駕するだろうが •  現状は何処まで出来るか?

何が好きかしら

何が好きなんだい?

ジンフィーズ 飲むかい? ジンフィーズ

飲むわ

年は? まだ若いのよ

私は笑うことができません。

ボッコちゃん

データ少佐

物語中、経験を積み重ね 副長になるまでに成長した

オウム返しによる会話

Page 10: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 10

text

どうやってお話するのか?

– 対話の基本の流れは、これだけ •  音声認識 テキストへ変換 •  IBM Watson への問合せ処理 (Watson APIの呼び出し)

– テキストで問合せて、テキストで応答 •  テキストを音声合成で出力

ワトソンとは?音声認識 ワトソンとは?

Watson APIコール

IBMが開発し.. 音声合成 IBMが開発し…

マイク

スピーカ

IBM Watson

Text data

Text data

Sound

Sound

Page 11: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 11

text

ワトソンが会話するには?

– Watsonは、聞いて答えるだけでなく、さらに高度な会話を実現するため 3つのサービスを提供している • NLC 文または句に も一致したクラスを識別します • R&R     照会に対して も関連性がある情報を見つけ出します • DIALOG 会話を進めながら必要項目を記憶してバックエンドへ渡せます

ワトソンとは?

IBMが開発し..

IBM Watson

NLC

R&R

Dialog

Watson APIコール

Siriは一問一答

言葉の クラス判別

関連の深さ

会話を進め情報取得

Page 12: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 12

text

ワトソン日本語対応発表

– Bluemix を 利用して IBM Watson APIが利用可能

Page 13: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 13

text

Bluemixで開放されているワトソンの機能は?

– このブロックを選ぶだけで、WatsonのAPIが利用可能になる – 今回は紫マルで囲んだサービスを組み合わせて利用

Page 14: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 14

text

BluemixのWatsonで日本語は使えるの?

– 正式な日本語利用に関するドキュメントは、今後整備の様子 – 今のところ4月12日現在、APIのドキュメントは英語だけ – NLC, R&R, Dialog の日本語対応は動作する模様

こんなコグ端末の日本語版の プロトタイプ作れないかね?

Unity Game Engine for VR

Smart Phone

Raspberry Pi

候補となるコグ端末のプラットフォーム

Pepper

Page 15: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 15

text

そしたら、使えるもの掻き集めて作っちゃえ!

– コグ端末      Raspberry Pi I/O制御 音声認識&音声合成 – SoftLayer     Node.jsの実行環境、学習データ収集&保管 – Bluemix Watson API GWとしてエンドポイント & 認証 – Watson NLC, R&R, Dialog を利用

Raspberry Pi ServerAPI-GW

Page 16: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 16

text

コグ端末(ロボット、仮想現実キャラ)

– 音声認識&音声合成のユーザー・インタフェースとして利用 – インターネットを介してメッセージの送信と受信

Raspberry Pi Server

http://julius.osdn.jp/

Julius は,音声認識システムの開発・研究のためのオープンソースの高性能な汎用大語彙連続音声認識エンジンです. 数万語彙の連続音声認識を一般のPCやスマートフォン上でほぼ実時間で実行できる軽量さとコンパクトさを持っています.

音声認識

http://www.a-quest.com/products/aquestalk.html

音声合成

AquesTalk

Julius

AquesTalkシリーズは、組み込み用途向けに開発された、テキスト情報を音声波形に変換出力する日本語の規則音声合成ライブラリです。システムに負担をかけずに簡単に組み込めることを目指して開発し、桁違いに小さいサイズで実現しました。AquesTalkを使えば、さまざまな機器に簡単に音声合成を実現できます。

Page 17: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 17

text

コグ端末(ロボット、仮想現実キャラ)

– 音声認識&音声合成のユーザー・インタフェースとして利用 – インターネットを介してメッセージの送信と受信

Raspberry Pi ServerMQTT

MQTTは1999年にIBM社とEurotech社のメンバーにより考案されたプロトコルで、2014年8月現在における 新のバージョンはMQTT3.1.1です。現在、コンピュータと通信に関する標準化団体であるOASISによって、MQTTの標準化が進められています。

MQTTはM2M (Machine-to-Machine)、すなわち機械と機械が通信ネットワークを介してお互いに情報をやり取りすることや、IoT (Internet of Things)、すなわち家電や自動車など多種多様な「モノ」

がインターネットにつながり、お互いに情報をやり取りすることを実現するのに適したプロトコルです。MQTTでは、あらゆる「マシン」や「モ

ノ」に取り付けた、低帯域でメモリー容量の小さなセンサーやデバイスなどから情報を送ることを想定しています。

MQTT Client

出典: https://sango.shiguredo.jp/mqtt

MQTT Broker

http://mosquitto.org/

Mosquitto出典: https://sango.shiguredo.jp/mqtt

マルチセッション 処理をSoftLayerの サーバーで実施(予定)

Page 18: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 18

text

SoftLayerの サーバー & ネットワーク 利用

– SoftLayer は、サーバーやネットワークを利用できる実行環境 (IaaS) – それぞれをSoftLayerグローバルネットワークで結んで連携

Server

北米西海岸 北米中部日本・東京

SoftLayer グローバルネットワーク

コグ端末

Page 19: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 19

text

Bluemix の Watson API 利用

– 構築の手間を省き、各種のサービスを利用できる高効率な環境 – 今回利用しているのは、2つの機能

•  IBM Watson の API-GW サービス •  ユーザー認証&課金 (Bluemix ポータルから全て注文)

注)今回は Speech to Text Text to Speech は利用していません

ここからWatsonのサービスを選ぶ

利用中のWatson サービスのリスト

Page 20: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 20

text

Bluemix の Watson API 利用

– アイコンにマウスカーソルを合わせると、日本語で解説が表示される – アイコンをクリックして次に進む

Page 21: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 21

text

Bluemix の Watson API 利用

– 機能の説明とサービスレベルの選択が表示されるので確認 – 作成をクリックするとAPIアクセスの認証情報が提供される

Page 22: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 22

text

Bluemix の Watson API 利用

– JSON形式のサービス資格情報が提供されるので、コピペして利用 – このURLを SoftLayer のサーバーからアクセスする

Page 23: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 23

text

Bluemix の Watson API 利用

– 各サービス単位で、チュートリアル、APIの解説が提供 – Curl で REST-API、Java、Node(JavaScript)のスニペットが提供

Page 24: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 24

text

Bluemix Watson の詳細

– 三つの機能を組み合わせ方法をご紹介 •  Natural Language Classifier •  Dialog •  Retrieve & Rank

ワトソンとは?

IBMが開発し..

IBM Watson

NLC

R&R

Dialog

Watson APIコール

言葉の クラス判別

関連の深さ

会話を進め情報取得

Page 25: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 25

text

自然語分類 Natural Language Classifier (NLC)

–  文または句に も一致したクラスを識別します –  これは事前に、クラスを学習させます –  入力テキストに対して、クラスを判別します

Page 26: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 26

text

自然語分類 Natural Language Classifier (NLC)

–  文または句に も一致したクラスを識別します –  これは事前に、4つのクラスを学習済み (挨拶、温度、ガンダム、天気)のプログラム実行

のトレース結果です。 –  “ごきげんよう”の入力テキストに対して、NLCは”挨拶” と判別している

{ "classifier_id": "f15e67x54-nlc-1847", "url": "https://gateway.watsonplatform.net/natural-language-classifier/api/v1/classifiers/f15e67x54-nlc-1847", "text": "ご きげん よう ", "top_class": "挨拶", "classes": [ { "class_name": "挨拶", "confidence": 0.929581559342799 }, { "class_name": "温度", "confidence": 0.03096167550870697 }, { "class_name": "ガンダム", "confidence": 0.02624414644065704 }, { "class_name": "天気", "confidence": 0.013212618707836995 } ] }

入力テキスト

Confidence (信頼度)の 高い順にソートされて出力 される

Page 27: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 27

text

自然語分類 Natural Language Classifier (NLC)

–  事前に学習させていないフレーズを与えるとどうなるか? –  「ラーメン食べたい」と与えると、 { "classifier_id": "f15e67x54-nlc-1847", "url": "https://gateway.watsonplatform.net/natural-language-classifier/api/v1/classifiers/f15e67x54-nlc-1847", "text": "ラーメン 食べ たい 。",

"top_class": "温度", "classes": [ { "class_name": "温度", "confidence": 0.612471857146059 },

{ "class_name": "挨拶", "confidence": 0.33074116640819307 }, {

"class_name": "ガンダム", "confidence": 0.03495327505687803 }, { "class_name": "天気",

"confidence": 0.021833701388869805 } ]}

入力テキスト

トップのものでも、信頼度が低い (答えるけど、自信が無いことを表している)

Page 28: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 28

text

自然語分類 Natural Language Classifier (NLC)

–  事前に学習した内容に関連するフレーズを与えると、高い信頼値と共に、判定結果を返してくる。

{ "classifier_id": "f15e67x54-nlc-1847", "url": "https://gateway.watsonplatform.net/natural-language-classifier/api/v1/classifiers/f15e67x54-nlc-1847", “text”: “ガン タンク と は ", "top_class": "ガンダム", "classes": [ { "class_name": "ガンダム", "confidence": 0.9842017050178034 }, { "class_name": "挨拶", "confidence": 0.009519608761473208 }, { "class_name": "温度", "confidence": 0.0033444039784068357 }, { "class_name": "天気", "confidence": 0.002934282242316585 } ] }

{ "classifier_id": "f15e67x54-nlc-1847", "url": "https://gateway.watsonplatform.net/natural-language-classifier/api/v1/classifiers/f15e67x54-nlc-1847", "text": "今日 は 雨 です か ", "top_class": "天気", "classes": [ { "class_name": "天気", "confidence": 0.985774500213646 }, { "class_name": "温度", "confidence": 0.005709438262784618 }, { "class_name": "挨拶", "confidence": 0.005133201116869337 }, { "class_name": "ガンダム", "confidence": 0.0033828604067000093 } ] }

Page 29: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 29

text

NLCの詳細な使い方

– 学習の方法は? •  文とクラスを列挙したリスト(ファイル)を、APIを使ってWatsonへ与える •  数分程度のトレーニングが完了すると利用可能 (Available)となる

#!/usr/bin/env node var watson = require('watson-developer-cloud'); var fs = require('fs'); var auth = require('watson_nlc_credentials.json'); auth.credentials['version'] = 'v1'; var natural_language_classifier = watson.natural_language_classifier(auth.credentials); var params = { language: 'ja', name: 'Wether_Classifier', training_data: fs.createReadStream(’train.csv') }; natural_language_classifier.create(params, function(err, response) { if (err) console.log(err); else console.log(JSON.stringify(response, null, 2)); fs.writeFile( "classifier_id.json", JSON.stringify(response,null,' ')); });

暖かいですか?,温度冷たいですか?,温度どれくらい冷えていますか?,温度今日は雨ですか?,天気雨が降りましたか?,天気

雪が降りましたか?,天気お日様が見えましたか?,天気曇っていますか?,天気こんにちは,挨拶こんばんは,挨拶おはよう,挨拶

トレーニングデータ(抜粋)

Page 30: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 30

text

NLCの詳細な使い方

– 学習の方法は? •  文とクラスを列挙したリスト(ファイル)を、APIを使ってWatsonへ与える •  数分程度のトレーニングが完了すると利用可能 (Available)となる

tkr@tkr02:~/watson_nlc$ ./get_info_classifier.js { "classifier_id": "f15e67x54-nlc-1847", "name": "Wether_Classifier", "language": "ja", "created": "2016-04-11T04:24:17.580Z", "url": "https://gateway.watsonplatform.net/natural-language-classifier/api/v1/classifiers/f15e67x54-nlc-1847", "status": "Training", "status_description": "The classifier instance is in its training phase, not yet ready to accept classify requests" } tkr@tkr02:~/watson_nlc$ ./get_info_classifier.js { "classifier_id": "f15e67x54-nlc-1847", "name": "Wether_Classifier", "language": "ja", "created": "2016-04-11T04:24:17.580Z", "url": "https://gateway.watsonplatform.net/natural-language-classifier/api/v1/classifiers/f15e67x54-nlc-1847", "status": "Available", "status_description": "The classifier instance is now available and is ready to take classifier requests." }

トレーニングに数分程度かかる

Page 31: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 31

text

NLCの詳細な使い方

– トレーニングが完了した 分類機(classfier_id) に対して、テキスト与えるだけで、分類結果とランキングを返してくれる。

#!/usr/bin/env node var watson = require('watson-developer-cloud'); var auth = require('watson_nlc_credentials.json'); auth.credentials['version'] = 'v1'; var natural_language_classifier = watson.natural_language_classifier(auth.credentials); var nlc = require('classifier_id.json'); nlc.text = '今日は暑くなりますか?'; natural_language_classifier.classify( nlc, function(err, response) { if (err) console.log('error:', err); else console.log(JSON.stringify(response, null, 2)); });

tkr@tkr02:~/watson_nlc$ ./classify2.js { "classifier_id": "f15e67x54-nlc-1847", "url": "https://gateway.watsonplatform.net/natural-language-classifier/api/v1/classifiers/f15e67x54-nlc-1847", "text": "今日は暑くなりますか?", "top_class": "温度", "classes": [ { "class_name": "温度", "confidence": 0.851513681696545 }, { "class_name": "天気", "confidence": 0.12142641351227729 },

Page 32: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 32

text

NLCのまとめ

学習データ の準備

分類機の 作成と学習

学習済み分類機 への問合せ

結果評価と 学習データ更新

– 以下4つのステップでNLCを作り、育てることできる。 – 対応言語は English, Arabic, French, Italian, Japanese, Portuguese, and Spanish

Page 33: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 33

text

Bluemix Watson の Dialog 機能

– Dialog は 会話機能 – 対話のフローをXML形式で定義 – 必要な変数項目を取得することができる – 対話フローは目的に応じて切り替えて利用する

Page 34: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 34

text

Dialog の具体例

– 業務の目的を持った会話を推進する(必要な項目を聞き出す) – 会話に自由度があり、自然な流れで、必要な項目できる。 – 会話の例

>(こんにちは ) こんにちは、ワトソンのピザ屋です

初に住所を教えてください。配達エリアを確認します

>(東京 都 江東 区 ) はい、配達エリア内です

ピザの種類を注文してください。ミックスピザ と トマトピザ が選べます>(お好み焼き ) ごめんなさい、ミックス か トマト でお答えください

ピザの種類を注文してください。ミックスピザ と トマトピザ が選べます

>(ミックス ) はい 承りましたご注文は、ミックスピザ で、江東区 まで配達ですね。 これで良いですか? >(はい ) 御注文ありがとうございます、約30分で配達しますまたのご来店をお待ちしております

[ { name: 'PizzaType', value: 'ミックスピザ' }, { name: 'Address', value: '江東区' }, { name: 'Complete', value: 'Yes' }, { name: 'OutOfArea', value: 'No' } ] ------------------- COMPLETE ---

ニンゲンと ワトソンの

会話

会話によって取得した情報 バックエンド・システムへ オーダーを投げるなどを実施

Page 35: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 35

text

Dialog 会話の流れの例

– XMLの定義体の例 <folder label="Order Taker" id="order_taking_0001"> <output> <prompt selectionType="SEQUENTIAL" > <item>ピザの種類を注文してください。ミックスピザ と トマトピザ が選べます。</item> </prompt> <getUserInput id="getUserInput_0002"> <input> <grammar> <item>ミックスピザ</item> <item>ミックス</item> </grammar> <output> <prompt selectionType="RANDOM"> <item>はい 承りました</item> </prompt> <goto ref="check_order"> <action varName="PizzaType" operator="SET_TO">ミックスピザ</action> </goto> </output> </input> <input> <grammar> <item>トマトピザ</item> <item>トマト</item> </grammar> <output> <prompt selectionType="RANDOM"> <item>はい、承りました</item> </prompt> <goto ref="check_order"> <action varName="PizzaType" operator="SET_TO">トマトピザ</action> </goto> </output> </input> <default> <output> <prompt selectionType="RANDOM"> <item>ごめんなさい、ミックス か トマト でお答えください</item> </prompt> </output> </default> </getUserInput> </output> </folder>

ミックスピザ

トマトピザ

該当なしの場合

インプットを受け取る ブロック

ピザの種類を 決める事を促す

Page 36: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 36

text

Dialog 会話の流れの例

– XMLの定義体の例 

<input> <grammar> <item>トマト</item> <item>トマト*</item> <item>$ トマト</item> <item>$ トマト*</item> </grammar> <output> <prompt selectionType="RANDOM"> <item>はい、承りました</item> </prompt> <goto ref="check_order"> <action varName="PizzaType" operator="SET_TO">トマトピザ</action> </goto> </output> </input>

<folder label="Check Order" id="check_order"> <output> <prompt selectionType="SEQUENTIAL" > <item>ご注文は、{PizzaType} で、{Address} まで配達ですね。 これで良いですか?</item> </prompt> <getUserInput id="getUserInput_0003">

受け取る言葉を 設定

変数にトマト ピザを設定

受け取った 内容を確認

私はトマト

トマトピザ

えーと、トマト

私はトマトが好き

ニンゲンの言葉の揺らぎに対応する

Page 37: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 37

text

会話のフローを登録する

– XMLの定義体を登録する時のAPIプログラム例 – 応答で帰ってきた dialog_id を使って利用する

var fs = require('fs'); var watson = require('watson-developer-cloud'); var auth = require('watson.dialog.auth.json'); auth.dialog[0].credentials['version'] = 'v1'; console.log(auth.dialog[0].credentials); var dialog_service = watson.dialog(auth.dialog[0].credentials); var params = {}; params.name = 'dialog-service1123'; params.file = fs.createReadStream('dialogs/exercise_5.xml'); params.language = 'ja'; dialog_service.createDialog( params, function (err,data) { if (err) { console.log(err); } console.log(data); data.name = params.name; data.language = params.language; fs.writeFile( "dialog_id.json", JSON.stringify(data,null,' ')); });

会話のXML ファイルを指定

日本語を指定

Watson Dialog API 実行

Page 38: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 38

text

Watson Dialog を実行する

– コグ端末からMQTTで通知されたメッセージをWatson Dialogへ与え、応答をMQTTでコグ端末へ返すプログラム例

// 共通 var fs = require('fs'); var watson = require('watson-developer-cloud'); // WATSON DIALOGの初期化 var auth = require('watson.dialog.auth.json'); var dialog = require('dialog_id.json'); auth.dialog[0].credentials['version'] = 'v1'; var dialog_service = watson.dialog(auth.dialog[0].credentials); // MQTTの初期化 var mqtt = require('mqtt'); var client = mqtt.connect('mqtt://localhost'); // 初の接続時 コグ端末からのテキスト受信開始 client.on('connect', function () { console.log("on connect"); client.subscribe('watson/listen'); }); // コグ端末からのメッセージ受信時の処理 client.on('message', function (topic, message) { var text = message.toString(); text = text.replace(/。/g,''); watson_dialog(text); });

// Dialog を利用した会話処理本体 function watson_dialog(text) { dialog.input = text; console.log(">(" + dialog.input + ")"); dialog_service.conversation(dialog, function conv(err,data) { if (err) { console.log(err); } dialog.conversation_id = data.conversation_id; dialog.client_id = data.client_id; // 会話の結果評価 delete dialog['name']; dialog_service.getProfile(dialog, function(err, session) { if (err) { console.log(err); } else { for (var i=0;i < data.response.length; i++) { console.log(data.response[i]); client.publish('watson/speak', data.response[i]); } } }); }); }

Watson Dialogへ テキストを送って

応答をもらう

コグ端末へ応答を返す

会話で取得した変数を 取り込む

Page 39: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 39

text

まとめ Dialog を利用するための作業

– 会話の流れ設計は、 終的にXMLの定義体として、Watsonにインプット – XMLの中で、NLCの機械学習と連携も可能 – 会話の例

データの準備 会話の流れ 設計

実践経験 適化と内容追加 の反復

•  骨子の質問収集

•  利用場面の考慮

•  業務プロセスの考慮

•  業務プロセスを会話に置き換え

•  パーソナリティの設計

•  Watsonサービスの機能組み合わせ検討

•  NLC,STT,TTS他

•  ユーザーインタフェースと接続して公開

•  会話の監視、活動のレビュー

•  実務からの学習

•  顧客ニーズに合わせ既

存コンテンツの調整

•  実践経験に基づき新コンテンツの追加

Page 40: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 40

text

Retrieve and Rank

– コンテンツを索引付けして蓄積 (質問への回答を索引付けして蓄積) – 質問内容とコンテンツの関連付けを学習 – 質問内容と検索結果ソート順に反映され、正解率を向上させる

コンテンツの 収集とロード

機械学習 ランクモデル

のトレーニング

 検索の実施と ランク結果の評価

•  コンテンツ収集

•  Apache Solr 設定ファイ

ル作成と登録

•  コンテンツの登録

•  質問と答えのトレーニングデータ作成

•  トレーニング実施

•  本番適用

•  結果の評価とモデル

の改善

Page 41: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 41

text

Retrieve and Rankの実行例

– Watson R&R を利用することで、質問の意図に沿った検索結果を得られる。

$ ./search_rank.js ニンゲンの質問= “ガンダムとは何ですか” ワトソンの回答= { "id": "32", "body": [ “ガンダムは、ジオン公国軍の主力モビルスーツ ザクII の威力を目の当たりにした地球連邦軍が、これに対抗すべく発動した新兵器開発計画 V作戦 に基づき試作した白兵戦用モビルスーツ。" ]}

$ ./search_solr_std_query_ja.js ニンゲンの質問= “ガンダムとは何ですか”検索エンジンの回答= { "id": "20", "body": [ “ジーブル(G-BULL)は、ジーパーツの前部Aパーツ、ガンダムの上半身Aパーツ及びコア・ファイターをガンダムに格納させて合体させた、重戦車形態で” ]}

Watson R&R を使った場合 Apache Solr の索引検索の場合

?!質問に適切に答えてる ガンダムは。。。 と返してくる

ジーブルについて答えてる ガンダムについて聞いてるのに

Page 42: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 42

text

Retrieve and Rankの実行例

– Watson R&R を利用することで、質問の意図に沿った検索結果を得られる。

$ ./search_solr_std_query_ja.js ニンゲンの質問= “ガンダムとは何ですか”検索エンジンの回答= { "id": "20", "body": [ “ジーブル(G-BULL)は、ジーパーツの前部Aパーツ、ガンダムの上半身Aパーツ及びコア・ファイターをガンダムに格納させて合体させた、重戦車形態で” ]}

Apache Solr の索引検索の場合

?!ジーブルについて答えてる ガンダムについて聞いてるのに

ジーブル(G-BULL)は、ジーパーツの前部Aパーツ、ガンダムの上半身Aパーツ及びコア・ファイターをガンダムに格納させて合体させた、重戦車形態で

ガンダムとは何ですか

Apache Solr は、grepの様な順次検索ではなく、転置索引を利用して検索する。 この索引の”ガンダム”の キーワードにヒットしている

転置索引では、キーワードの索引 を検索するので、“ガンダ” では ヒットしない。

Page 43: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 43

text

Retrieve and Rankの実行例

– Watson R&R を利用することで、質問の意図に沿った検索結果を得られる。

$ ./search_rank.js ニンゲンの質問= “ガンダムとは何ですか” ワトソンの回答= { "id": "32", "body": [ “ガンダムは、ジオン公国軍の主力モビルスーツ ザクII の威力を目の当たりにした地球連邦軍が、これに対抗すべく発動した新兵器開発計画 V作戦 に基づき試作した白兵戦用モビルスーツ。" ]}

Watson R&R を使った場合

質問に適切に答えてる ガンダムは。。。 と返してくる

事前に質問と回答の関係を 学習するトレーニングを実施する

なぜ出来るのか?

"ガンダムとはなんですか","32","4" "ガンダムについて教えてください","32","4","17","2","18","2" "ガンダムとは","32","4"

トレーニングデータの例 質問と答えのID、確度のリスト

4 完璧な答え 3 関連が深い 2 関係あり 1 少し関係あり

回答の 文書ID 質問 , ,

繰り返し

Page 44: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 44

text

Retrieve and Rankの使い方

– Watson APIの実行順序 • Apache Solr Cluster を作成 • Apache Solr の設定をアップロード • Apache Solr Collection を作成 • ランカー作成とコンテンツ(回答集)を登録

– この段階でApache Solr の検索が利用できる • トレーニング実行

– 質問と回答をアップロード – Watson内でトレーニング実行 (数分〜 – トレーニング完了すると、質問受付可能になる

• 質問と回答 実行

Apache Solrのセットアップ

Watson R&R API 特有の処理

Page 45: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 45

text

Retrieve and Rankの使い方

– Watson R&Rの階層構造 • Apache Solr Cluster • Apache Solr Collection • Watson Ranker

Cluster

Collection

Ranker

Collection

Ranker

回答の集まり

質問と回答の関連づけRanker

Page 46: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 46

text

Retrieve and Rank APIを使った問い合わせ

– Watson R&RのAPI var fs = require('fs');

var auth = require('watson.rtrv_rank.auth.json'); auth.credentials['version'] = 'v1'; var watson = require('watson-developer-cloud'); var retrieve_and_rank = watson.retrieve_and_rank(auth.credentials); var params = require('cluster_id.json'); params.config_name = 'example_config'; params.collection_name = 'example_collection'; params.wt = 'json'; solrClient = retrieve_and_rank.createSolrClient(params); var ranker = require('ranker_id.json'); var ranker_id = ranker.ranker_id; var qs = require('qs'); var question = ‘q=ガンダムとは何ですか'; console.log("ニンゲンの質問= " + question); var query = qs.stringify({q: question, ranker_id: ranker_id, fl: 'id,title,body'}); solrClient.get('fcselect', query, function(err, searchResponse) { if(err) { console.log('Error searching for documents: ' + err); } else { console.log(JSON.stringify(searchResponse.response.docs, null, 2)); } });

R&Rサービス へ接続認証

Apache Solr Cluster へ接続

Ranker IDを 指定して検索

結果取得

Page 47: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 47

text

Retrieve and RankのAPI実行結果

– R&Rにより関連の深いものから順に応答

ニンゲンの質問= q=ガンダムとは何ですか[ { "id": "32", "title": [ "ガンダム" ], "body": [ “ガンダムは、ジオン公国軍の主力モビルスーツ ザクII の威力を目の当たりにし

た地球連邦軍が、これに対抗すべく発動した新兵器開発計画 V作戦 に基づき試作した白兵戦用モビルスーツ。" ] }, { "id": "33", "title": [ "ガンキャノン" ], "body": [ “ガンキャノンは、一年戦争のV作戦により開発されたRXシリーズのモビルスー

ツで、同じRXシリーズであるガンダム、ガンタンクと共通規格のコア・ブロック・システムが採用されている。" ] }, { "id": "21", "title": [ "ジースカイおよびジースカイイージー" ], "body": [ "ジースカイ(G-SKY)は、ジーパーツの後部Bパーツ、ガンダムの下半身Bパーツ及び コア ファイターを戦闘機形態のまま合体させた大型戦闘機形態。" ] },

ニンゲンの質問= ガンダムとは何ですかFound 12 documents. [ { "id": "20", "title": [ "ジーブルおよびジーブルイージー" ], "body": [ "ジーブル(G-BULL)は、ジーパーツの前部Aパーツ、ガンダムの上半身Aパーツ及びコア・ファイターをガンダムに格納させて合体させた、重戦車形態である。" ], }, { "id": "32", "title": [ "ガンダム" ], "body": [ "ガンダムは、ジオン公国軍の主力モビルスーツ ザクII の威力を目の当たりにし

た地球連邦軍が、これに対抗すべく発動した新兵器開発計画 V作戦 に基づき試作した白兵戦用モビルスーツ。" ], }, { "id": "17", "title": [ "ジーファイター" ], "body": [ "ジーファイターは、ガンダムを内部に収納して輸送するために開発されたサポートメカニズムである。" ],

Watson R&R を使った検索Apache Solr だけの検索

Page 48: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 48

text

Retrieve and Rank のまとめ

– 質問への回答を索引付けして蓄積 – 質問と回答の関連付けを学習 – 関連の深い順にソートされ検索結果を返す

コンテンツの 収集とロード

機械学習 ランクモデル

のトレーニング

 検索の実施と ランク結果の評価

•  コンテンツ収集

•  Apache Solr 設定ファイ

ル作成と登録

•  コンテンツの登録

•  質問と答えのトレーニングデータ作成

•  トレーニング実施

•  本番適用

•  結果の評価とモデル

の改善

Page 49: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 49

text

NLC,R&R,Dialogを連携させた利用

– ざっくりした質問をNLCで判別して、適切な対応処理を選択することに利用

ガンダムとは?

ガンダムは。。。

NLC

R&R

Dialog

Watson APIコール

言葉の クラス判別

関連の深さ

会話を進め情報取得

NLC "text": "アムロ は 誰 です か ", "top_class": "ガンダム", "class_name": "ガンダム”, "confidence": 0.9873067800097101 "class_name": "挨拶“, "confidence": 0.005703016337320647 "class_name": "天気“, "confidence": 0.003554148139476239 "class_name": "温度“, "confidence": 0.00343605551349304 R&R アムロ・レイは、宇宙世紀0064年父テム・レイと母カマリア・レイの一人息子として生まれる。コンピューターや機械いじり好きの内向的な少年に育ち、サイド7でのガンダムとの出会いが、モビルスーツのパイロットとしての才能の開花に繋がった。 NLC "text": "今日 は 暑い です ね ", "top_class": "温度", "class_name": "温度“, "confidence": 0.9847685922164291 "class_name": "挨拶“, "confidence": 0.009059259268787229 "class_name": "天気“, "confidence": 0.00356944101699477 "class_name": "ガンダム”, "confidence": 0.002602707497788842 インターネットRSS 今日の気温は、20度です。

https://www.youtube.com/watch?v=E5Kd4XLiNYY YouTubeでデモをご覧にいただけます

Page 50: ラズパイ+SL+BMでワトソンと話そう

© IBM Corporation 50

text

まとめ

– 出来る事 •  Bluemix の Watson と日本語で対話することは可能

– Bluemix をAPIゲートウェイとして、SoftLayerのIaaSから利用可能 – Bluemix Watson の NLC, Dialog, R&Rで日本語の対話可能 – 日本語の音声認識と音声合成は、OSSと組み合わせる事も可能

– 使ってみて判ったこと •  Bluemix Watsonの日本語対応のドキュメントが未整備 •  日本語処理特有の課題は、Apache Solrの形態素解析、語彙管理などを利用 •  内部処理過程トレースなどチューニングに必要な情報がもっと欲しい •  NodeとMQTTコールバックで、イベントドリブン処理が簡単に組める

– 今後 •  ベアメタル&GP-GPUを利用して、ニューラルネットによる日本語認識精度と処理速

度の向上 •  自動的な学習方法の開拓