© IBM Corporation 1
Presented by:
ラズパイ+SL+BMで
IBM Watsonと話そう!
2016年4月16日
日本IBM株式会社
クラウド事業統括
テクニカルサービス
高良 真穂本資料は、発表者によって準備された資料であり
IBMの公式の見解を代表するものではありません。	
SoftLayer Bluemix Community Festa 2016
© IBM Corporation 2
text
ソードアートオンライン Beginnings	
– ベータテスト募集200名に対して、10万人が応募!
– これは未来のWatsonをイメージしたもので、
– IBM Watsonと繋げて会話するには…
Watsonの
イメージキャラクタ
“コグ”
© IBM Corporation 3
text
IBM Watson とお話するとは?	
–  CogniToysを作ってみるということ?
•  子供の質問に答えるシステム
–  Apple iPhone の Siri と会話するということ?
•  ウェブ、地図検索の支援機能
–  チャットボットと会話するということ?
•  目的の定まらないチャット、会話からキーワードを記憶、オウム返し
•  星新一のSF短編小説ボッコちゃん
–  SF新スタートレックのデータ少佐
•  知覚(視覚、聴覚、嗅覚、触覚、味覚)を持ち言葉を操り、人間と共に生活し、人間の
活動をサポートする人工知能を持ったアンドロイド
–  ワトソンは、コグニティブ・システム!?
•  目的を持った会話により目的の達成、知識の提供を実現できる	
http://gigazine.net/news/20150218-cognitoys/	
その頭脳はIBMのスーパーコンピュータ「Watson」
です。子どもたちの話しかけた内容は、インターネッ
ト経由でサーバーに送られWatsonが処理し、はじ
き出された「答え」をCogniToysが子どもたちに伝え
るという仕組みです。
© IBM Corporation 4
text
IBM Watson とお話するとは?	
–  チャットボット(人工無能)とは?
© IBM Corporation 5
text
IBM Watson とお話するとは?	
–  対話するアンドロイドに恋するとい短編小説
http://www.showaboston.org/jlc/read_files/4B/Hoshi_02_Bokkochan.htm	続きはこちらから	
何が好き
かしら
何が好きな
んだい?
ジンフィーズ
飲むかい? ジンフィーズ
飲むわ
 見たところでは、そのへんの本物以上
にちがいない。	
 だが、頭はからっぽに近かった。彼も
そこまでは手がまわらない。簡単なうけ
答えができるだけだし、動作のほうも酒
を飲むことだけだった。	
 彼は、それが出来あがると、バーにお
いた。そのバーにはテーブルの席もあっ
たけれど、ロボットはカウンターのなかに
おかれた。ぼろを出しては困るからだっ
た。	
年は? まだ若
いのよ
© IBM Corporation 6
text
IBM Watson とお話するとは?	
–  おしゃべりボットと会話するということ?
•  星新一のSF短編小説ボッコちゃんが、現実に。。。
出典:http://itpro.nikkeibp.co.jp/atcl/column/15/060200138/091700016/?ST=system&P=1
© 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)
アンドロイド データ少佐	
コグニティブの究極の姿!?
© IBM Corporation 8
text
IBM Watson とお話するとは?	
–  IBM Watson は、コグニティブ・システムを目指す
「コグニティブ」は、直訳すると「認知、認識の(できる)」
ということです。
経験を通じてシステムが学習し、相関関係を見つけて
は仮説を立て、記憶し、成果からまた学習していくとい
うように、まさに人間の脳のように考えるシステムのこ
とです。
ジョパティのワトソンは、テキスト・データの解析でした
が、
コグニティブ・システムでは、五感(視覚、聴覚、嗅覚、
触覚、味覚)を利用した解析を目指します。
© IBM Corporation 9
text
IBM Watson とお話するとは?	
–  今どのあたりか? を実感して理解する
•  IBM Watsonが目指したいのはデータ少佐の頭脳
•  進化を続け未来には人間の頭脳を凌駕するだろうが
•  現状は何処まで出来るか?
何が好き
かしら
何が好きな
んだい?
ジンフィーズ
飲むかい? ジンフィーズ
飲むわ
年は? まだ若い
のよ
私は笑うこと
ができません。
ボッコちゃん	
データ少佐
物語中、経験を積み重ね
副長になるまでに成長した
オウム返しによる会話
© IBM Corporation 10
text
どうやってお話するのか?	
–  対話の基本の流れは、これだけ
•  音声認識 テキストへ変換
•  IBM Watson への問合せ処理 (Watson APIの呼び出し)
–  テキストで問合せて、テキストで応答
•  テキストを音声合成で出力
ワトソンとは?	
音声認識 ワトソンとは?
Watson
APIコール
IBMが開発し..音声合成
IBMが開発し…	
マイク	
スピーカ	
IBM
Watson
Text data	
Text data	
Sound	
Sound
© IBM Corporation 11
text
ワトソンが会話するには?	
–  Watsonは、聞いて答えるだけでなく、さらに高度な会話を実現するため 3つ
のサービスを提供している
•  NLC 文または句に最も一致したクラスを識別します
•  R&R     照会に対して最も関連性がある情報を見つけ出します
•  DIALOG 会話を進めながら必要項目を記憶してバックエンドへ渡せます
ワトソンとは?
IBMが開発し..
IBM
Watson
NLC
R&R
Dialog
Watson APIコール	
Siriは一問一答	
言葉の
クラス判別
関連の深さ
会話を進め情報取得
© IBM Corporation 12
text
ワトソン日本語対応発表	
–  Bluemix を 利用して IBM Watson APIが利用可能
© IBM Corporation 13
text
Bluemixで開放されているワトソンの機能は?	
–  このブロックを選ぶだけで、WatsonのAPIが利用可能になる
–  今回は紫マルで囲んだサービスを組み合わせて利用
© IBM Corporation 14
text
BluemixのWatsonで日本語は使えるの?	
–  正式な日本語利用に関するドキュメントは、今後整備の様子
–  今のところ4月12日現在、APIのドキュメントは英語だけ
–  NLC, R&R, Dialog の日本語対応は動作する模様
こんなコグ端末の日本語版の
プロトタイプ作れないかね?	
Unity Game Engine for VR	
Smart Phone	
Raspberry Pi	
候補となるコグ端末のプラットフォーム	
Pepper
© IBM Corporation 15
text
そしたら、使えるもの掻き集めて作っちゃえ!	
–  コグ端末      Raspberry Pi I/O制御 音声認識&音声合成
–  SoftLayer     Node.jsの実行環境、学習データ収集&保管
–  Bluemix Watson API GWとしてエンドポイント & 認証
–  Watson NLC, R&R, Dialog を利用	
Raspberry Pi	 Server	
API-GW
© 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を使
えば、さまざまな機器に簡単に音声合成を
実現できます。
© IBM Corporation 17
text
コグ端末(ロボット、仮想現実キャラ)	
–  音声認識&音声合成のユーザー・インタフェースとして利用
–  インターネットを介してメッセージの送信と受信
Raspberry Pi	 Server	
MQTT	
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の
サーバーで実施(予定)
© IBM Corporation 18
text
SoftLayerの サーバー & ネットワーク 利用	
–  SoftLayer は、サーバーやネットワークを利用できる実行環境 (IaaS)
–  それぞれをSoftLayerグローバルネットワークで結んで連携
Server	
北米西海岸	 北米中部	日本・東京	
SoftLayer グローバルネットワーク	
コグ端末
© IBM Corporation 19
text
Bluemix の Watson API 利用	
–  構築の手間を省き、各種のサービスを利用できる高効率な環境
–  今回利用しているのは、2つの機能
•  IBM Watson の API-GW サービス
•  ユーザー認証&課金 (Bluemix ポータルから全て注文)
注)今回は
Speech to Text
Text to Speech
は利用していません	
ここからWatsonの
サービスを選ぶ
利用中のWatson
サービスのリスト
© IBM Corporation 20
text
Bluemix の Watson API 利用	
–  アイコンにマウスカーソルを合わせると、日本語で解説が表示される
–  アイコンをクリックして次に進む
© IBM Corporation 21
text
Bluemix の Watson API 利用	
–  機能の説明とサービスレベルの選択が表示されるので確認
–  作成をクリックするとAPIアクセスの認証情報が提供される
© IBM Corporation 22
text
Bluemix の Watson API 利用	
–  JSON形式のサービス資格情報が提供されるので、コピペして利用
–  このURLを SoftLayer のサーバーからアクセスする
© IBM Corporation 23
text
Bluemix の Watson API 利用	
–  各サービス単位で、チュートリアル、APIの解説が提供
–  Curl で REST-API、Java、Node(JavaScript)のスニペットが提供
© IBM Corporation 24
text
Bluemix Watson の詳細	
–  三つの機能を組み合わせ方法をご紹介
•  Natural Language Classifier
•  Dialog
•  Retrieve & Rank
ワトソンとは?
IBMが開発し..
IBM
Watson
NLC
R&R
Dialog
Watson APIコール	
言葉の
クラス判別
関連の深さ
会話を進め情報取得
© IBM Corporation 25
text
自然語分類 Natural Language Classifier (NLC) 	
–  文または句に最も一致したクラスを識別します
–  これは事前に、クラスを学習させます
–  入力テキストに対して、クラスを判別します
© 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 (信頼度)の
高い順にソートされて出力
される
© 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	
}	
]	
}	
入力テキスト	
トップのものでも、信頼度が低い
(答えるけど、自信が無いことを表している)
© 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
}
]
}
© 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,' '));
});
暖かいですか?,温度	
冷たいですか?,温度	
どれくらい冷えていますか?,温度	
今日は雨ですか?,天気	
雨が降りましたか?,天気	
雪が降りましたか?,天気	
お日様が見えましたか?,天気	
曇っていますか?,天気	
こんにちは,挨拶	
こんばんは,挨拶	
おはよう,挨拶	
トレーニングデータ(抜粋)
© 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."
}
トレーニングに数分程度かかる
© 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
},
© IBM Corporation 32
text
NLCのまとめ	
学習データ
の準備	
分類機の
作成と学習	
学習済み分類機
への問合せ
結果評価と
学習データ更新
–  以下4つのステップでNLCを作り、育てることできる。
–  対応言語は English, Arabic, French, Italian, Japanese, Portuguese, and Spanish
© IBM Corporation 33
text
Bluemix Watson の Dialog 機能	
–  Dialog は 会話機能
–  対話のフローをXML形式で定義
–  必要な変数項目を取得することができる
–  対話フローは目的に応じて切り替えて利用する
© IBM Corporation 34
text
Dialog の具体例	
–  業務の目的を持った会話を推進する(必要な項目を聞き出す)
–  会話に自由度があり、自然な流れで、必要な項目できる。
–  会話の例
>(こんにちは )
こんにちは、ワトソンのピザ屋です	
最初に住所を教えてください。配達エリアを確認します	
>(東京 都 江東 区 )
はい、配達エリア内です	
ピザの種類を注文してください。ミックスピザ と トマトピザ が選べます	
>(お好み焼き )
ごめんなさい、ミックス か トマト でお答えください	
	
ピザの種類を注文してください。ミックスピザ と トマトピザ が選べます	
>(ミックス )
はい 承りました	
ご注文は、ミックスピザ で、江東区 まで配達ですね。 これで良いですか?
>(はい )
御注文ありがとうございます、約30分で配達します	
またのご来店をお待ちしております	
[ { name: 'PizzaType', value: 'ミックスピザ' },
{ name: 'Address', value: '江東区' },
{ name: 'Complete', value: 'Yes' },
{ name: 'OutOfArea', value: 'No' } ]
------------------- COMPLETE ---	
ニンゲンと
ワトソンの
会話
会話によって取得した情報
バックエンド・システムへ
オーダーを投げるなどを実施
© 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>	
ミックスピザ
トマトピザ
該当なしの場合
インプットを受け取る
ブロック	
ピザの種類を
決める事を促す
© 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">
受け取る言葉を
設定
変数にトマト
ピザを設定
受け取った
内容を確認
私はトマト	
トマトピザ	
えーと、トマト	
私はトマトが好き	
ニンゲンの言葉の
揺らぎに対応する
© 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
実行
© 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へ
テキストを送って
応答をもらう	
コグ端末へ応答を返す	
会話で取得した変数を
取り込む
© IBM Corporation 39
text
まとめ Dialog を利用するための作業	
–  会話の流れ設計は、最終的にXMLの定義体として、Watsonにインプット
–  XMLの中で、NLCの機械学習と連携も可能
–  会話の例
データの準備	 会話の流れ
設計	
実践経験	 最適化と内容追加
の反復	
•  骨子の質問収集
•  利用場面の考慮
•  業務プロセスの考慮
•  業務プロセスを会話に
置き換え
•  パーソナリティの設計
•  Watsonサービスの機
能組み合わせ検討
•  NLC,STT,TTS他
•  ユーザーインタフェース
と接続して公開
•  会話の監視、活動のレ
ビュー
•  実務からの学習
•  顧客ニーズに合わせ既
存コンテンツの調整
•  実践経験に基づき新コ
ンテンツの追加
© IBM Corporation 40
text
Retrieve and Rank	
–  コンテンツを索引付けして蓄積 (質問への回答を索引付けして蓄積)
–  質問内容とコンテンツの関連付けを学習
–  質問内容と検索結果ソート順に反映され、正解率を向上させる
コンテンツの
収集とロード
機械学習
ランクモデル
のトレーニング
 検索の実施と
ランク結果の評価
•  コンテンツ収集
•  Apache Solr 設定ファイ
ル作成と登録
•  コンテンツの登録
•  質問と答えのトレーニン
グデータ作成
•  トレーニング実施
•  本番適用
•  結果の評価とモデル
の改善
© 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 の索引検索の場合	
?!	質問に適切に答えてる
ガンダムは。。。 と返してくる	
ジーブルについて答えてる
ガンダムについて聞いてるのに
© 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の様な順次検
索ではなく、転置索引を利用して検
索する。 この索引の”ガンダム”の
キーワードにヒットしている
	
転置索引では、キーワードの索引
を検索するので、“ガンダ” では
ヒットしない。
© 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質問 ,	 ,	
繰り返し
© 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 特有の処理
© IBM Corporation 45
text
Retrieve and Rankの使い方	
– Watson R&Rの階層構造
•  Apache Solr Cluster
•  Apache Solr Collection
•  Watson Ranker
Cluster	
Collection	
Ranker	
Collection	
Ranker	
回答の集まり	
質問と回答の関連づけ	Ranker
© 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を
指定して検索	
結果取得
© 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 だけの検索
© IBM Corporation 48
text
Retrieve and Rank のまとめ	
–  質問への回答を索引付けして蓄積
–  質問と回答の関連付けを学習
–  関連の深い順にソートされ検索結果を返す
コンテンツの
収集とロード
機械学習
ランクモデル
のトレーニング
 検索の実施と
ランク結果の評価
•  コンテンツ収集
•  Apache Solr 設定ファイ
ル作成と登録
•  コンテンツの登録
•  質問と答えのトレーニン
グデータ作成
•  トレーニング実施
•  本番適用
•  結果の評価とモデル
の改善
© 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でデモをご覧にいただけます
© 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を利用して、ニューラルネットによる日本語認識精度と処理速
度の向上
•  自動的な学習方法の開拓

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

  • 1.
    © IBM Corporation1 Presented by: ラズパイ+SL+BMで IBM Watsonと話そう! 2016年4月16日 日本IBM株式会社 クラウド事業統括 テクニカルサービス 高良 真穂本資料は、発表者によって準備された資料であり IBMの公式の見解を代表するものではありません。 SoftLayer Bluemix Community Festa 2016
  • 2.
    © IBM Corporation2 text ソードアートオンライン Beginnings – ベータテスト募集200名に対して、10万人が応募! – これは未来のWatsonをイメージしたもので、 – IBM Watsonと繋げて会話するには… Watsonの イメージキャラクタ “コグ”
  • 3.
    © IBM Corporation3 text IBM Watson とお話するとは? –  CogniToysを作ってみるということ? •  子供の質問に答えるシステム –  Apple iPhone の Siri と会話するということ? •  ウェブ、地図検索の支援機能 –  チャットボットと会話するということ? •  目的の定まらないチャット、会話からキーワードを記憶、オウム返し •  星新一のSF短編小説ボッコちゃん –  SF新スタートレックのデータ少佐 •  知覚(視覚、聴覚、嗅覚、触覚、味覚)を持ち言葉を操り、人間と共に生活し、人間の 活動をサポートする人工知能を持ったアンドロイド –  ワトソンは、コグニティブ・システム!? •  目的を持った会話により目的の達成、知識の提供を実現できる http://gigazine.net/news/20150218-cognitoys/ その頭脳はIBMのスーパーコンピュータ「Watson」 です。子どもたちの話しかけた内容は、インターネッ ト経由でサーバーに送られWatsonが処理し、はじ き出された「答え」をCogniToysが子どもたちに伝え るという仕組みです。
  • 4.
    © IBM Corporation4 text IBM Watson とお話するとは? –  チャットボット(人工無能)とは?
  • 5.
    © IBM Corporation5 text IBM Watson とお話するとは? –  対話するアンドロイドに恋するとい短編小説 http://www.showaboston.org/jlc/read_files/4B/Hoshi_02_Bokkochan.htm 続きはこちらから 何が好き かしら 何が好きな んだい? ジンフィーズ 飲むかい? ジンフィーズ 飲むわ  見たところでは、そのへんの本物以上 にちがいない。  だが、頭はからっぽに近かった。彼も そこまでは手がまわらない。簡単なうけ 答えができるだけだし、動作のほうも酒 を飲むことだけだった。  彼は、それが出来あがると、バーにお いた。そのバーにはテーブルの席もあっ たけれど、ロボットはカウンターのなかに おかれた。ぼろを出しては困るからだっ た。 年は? まだ若 いのよ
  • 6.
    © IBM Corporation6 text IBM Watson とお話するとは? –  おしゃべりボットと会話するということ? •  星新一のSF短編小説ボッコちゃんが、現実に。。。 出典:http://itpro.nikkeibp.co.jp/atcl/column/15/060200138/091700016/?ST=system&P=1
  • 7.
    © IBM Corporation7 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) アンドロイド データ少佐 コグニティブの究極の姿!?
  • 8.
    © IBM Corporation8 text IBM Watson とお話するとは? –  IBM Watson は、コグニティブ・システムを目指す 「コグニティブ」は、直訳すると「認知、認識の(できる)」 ということです。 経験を通じてシステムが学習し、相関関係を見つけて は仮説を立て、記憶し、成果からまた学習していくとい うように、まさに人間の脳のように考えるシステムのこ とです。 ジョパティのワトソンは、テキスト・データの解析でした が、 コグニティブ・システムでは、五感(視覚、聴覚、嗅覚、 触覚、味覚)を利用した解析を目指します。
  • 9.
    © IBM Corporation9 text IBM Watson とお話するとは? –  今どのあたりか? を実感して理解する •  IBM Watsonが目指したいのはデータ少佐の頭脳 •  進化を続け未来には人間の頭脳を凌駕するだろうが •  現状は何処まで出来るか? 何が好き かしら 何が好きな んだい? ジンフィーズ 飲むかい? ジンフィーズ 飲むわ 年は? まだ若い のよ 私は笑うこと ができません。 ボッコちゃん データ少佐 物語中、経験を積み重ね 副長になるまでに成長した オウム返しによる会話
  • 10.
    © IBM Corporation10 text どうやってお話するのか? –  対話の基本の流れは、これだけ •  音声認識 テキストへ変換 •  IBM Watson への問合せ処理 (Watson APIの呼び出し) –  テキストで問合せて、テキストで応答 •  テキストを音声合成で出力 ワトソンとは? 音声認識 ワトソンとは? Watson APIコール IBMが開発し..音声合成 IBMが開発し… マイク スピーカ IBM Watson Text data Text data Sound Sound
  • 11.
    © IBM Corporation11 text ワトソンが会話するには? –  Watsonは、聞いて答えるだけでなく、さらに高度な会話を実現するため 3つ のサービスを提供している •  NLC 文または句に最も一致したクラスを識別します •  R&R     照会に対して最も関連性がある情報を見つけ出します •  DIALOG 会話を進めながら必要項目を記憶してバックエンドへ渡せます ワトソンとは? IBMが開発し.. IBM Watson NLC R&R Dialog Watson APIコール Siriは一問一答 言葉の クラス判別 関連の深さ 会話を進め情報取得
  • 12.
    © IBM Corporation12 text ワトソン日本語対応発表 –  Bluemix を 利用して IBM Watson APIが利用可能
  • 13.
    © IBM Corporation13 text Bluemixで開放されているワトソンの機能は? –  このブロックを選ぶだけで、WatsonのAPIが利用可能になる –  今回は紫マルで囲んだサービスを組み合わせて利用
  • 14.
    © IBM Corporation14 text BluemixのWatsonで日本語は使えるの? –  正式な日本語利用に関するドキュメントは、今後整備の様子 –  今のところ4月12日現在、APIのドキュメントは英語だけ –  NLC, R&R, Dialog の日本語対応は動作する模様 こんなコグ端末の日本語版の プロトタイプ作れないかね? Unity Game Engine for VR Smart Phone Raspberry Pi 候補となるコグ端末のプラットフォーム Pepper
  • 15.
    © IBM Corporation15 text そしたら、使えるもの掻き集めて作っちゃえ! –  コグ端末      Raspberry Pi I/O制御 音声認識&音声合成 –  SoftLayer     Node.jsの実行環境、学習データ収集&保管 –  Bluemix Watson API GWとしてエンドポイント & 認証 –  Watson NLC, R&R, Dialog を利用 Raspberry Pi Server API-GW
  • 16.
    © IBM Corporation16 text コグ端末(ロボット、仮想現実キャラ) –  音声認識&音声合成のユーザー・インタフェースとして利用 –  インターネットを介してメッセージの送信と受信 Raspberry Pi Server http://julius.osdn.jp/ Julius は,音声認識システムの開発・研究の ためのオープンソースの高性能な汎用大語彙 連続音声認識エンジンです. 数万語彙の連続 音声認識を一般のPCやスマートフォン上でほ ぼ実時間で実行できる軽量さとコンパクトさを 持っています. 音声認識 http://www.a-quest.com/products/aquestalk.html 音声合成 AquesTalk Julius AquesTalkシリーズは、組み込み用途向け に開発された、テキスト情報を音声波形に変 換出力する日本語の規則音声合成ライブラ リです。システムに負担をかけずに簡単に組 み込めることを目指して開発し、桁違いに小 さいサイズで実現しました。AquesTalkを使 えば、さまざまな機器に簡単に音声合成を 実現できます。
  • 17.
    © IBM Corporation17 text コグ端末(ロボット、仮想現実キャラ) –  音声認識&音声合成のユーザー・インタフェースとして利用 –  インターネットを介してメッセージの送信と受信 Raspberry Pi Server MQTT 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の サーバーで実施(予定)
  • 18.
    © IBM Corporation18 text SoftLayerの サーバー & ネットワーク 利用 –  SoftLayer は、サーバーやネットワークを利用できる実行環境 (IaaS) –  それぞれをSoftLayerグローバルネットワークで結んで連携 Server 北米西海岸 北米中部 日本・東京 SoftLayer グローバルネットワーク コグ端末
  • 19.
    © IBM Corporation19 text Bluemix の Watson API 利用 –  構築の手間を省き、各種のサービスを利用できる高効率な環境 –  今回利用しているのは、2つの機能 •  IBM Watson の API-GW サービス •  ユーザー認証&課金 (Bluemix ポータルから全て注文) 注)今回は Speech to Text Text to Speech は利用していません ここからWatsonの サービスを選ぶ 利用中のWatson サービスのリスト
  • 20.
    © IBM Corporation20 text Bluemix の Watson API 利用 –  アイコンにマウスカーソルを合わせると、日本語で解説が表示される –  アイコンをクリックして次に進む
  • 21.
    © IBM Corporation21 text Bluemix の Watson API 利用 –  機能の説明とサービスレベルの選択が表示されるので確認 –  作成をクリックするとAPIアクセスの認証情報が提供される
  • 22.
    © IBM Corporation22 text Bluemix の Watson API 利用 –  JSON形式のサービス資格情報が提供されるので、コピペして利用 –  このURLを SoftLayer のサーバーからアクセスする
  • 23.
    © IBM Corporation23 text Bluemix の Watson API 利用 –  各サービス単位で、チュートリアル、APIの解説が提供 –  Curl で REST-API、Java、Node(JavaScript)のスニペットが提供
  • 24.
    © IBM Corporation24 text Bluemix Watson の詳細 –  三つの機能を組み合わせ方法をご紹介 •  Natural Language Classifier •  Dialog •  Retrieve & Rank ワトソンとは? IBMが開発し.. IBM Watson NLC R&R Dialog Watson APIコール 言葉の クラス判別 関連の深さ 会話を進め情報取得
  • 25.
    © IBM Corporation25 text 自然語分類 Natural Language Classifier (NLC) –  文または句に最も一致したクラスを識別します –  これは事前に、クラスを学習させます –  入力テキストに対して、クラスを判別します
  • 26.
    © IBM Corporation26 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 (信頼度)の 高い順にソートされて出力 される
  • 27.
    © IBM Corporation27 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 } ] } 入力テキスト トップのものでも、信頼度が低い (答えるけど、自信が無いことを表している)
  • 28.
    © IBM Corporation28 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 } ] }
  • 29.
    © IBM Corporation29 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,' ')); }); 暖かいですか?,温度 冷たいですか?,温度 どれくらい冷えていますか?,温度 今日は雨ですか?,天気 雨が降りましたか?,天気 雪が降りましたか?,天気 お日様が見えましたか?,天気 曇っていますか?,天気 こんにちは,挨拶 こんばんは,挨拶 おはよう,挨拶 トレーニングデータ(抜粋)
  • 30.
    © IBM Corporation30 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." } トレーニングに数分程度かかる
  • 31.
    © IBM Corporation31 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 },
  • 32.
    © IBM Corporation32 text NLCのまとめ 学習データ の準備 分類機の 作成と学習 学習済み分類機 への問合せ 結果評価と 学習データ更新 –  以下4つのステップでNLCを作り、育てることできる。 –  対応言語は English, Arabic, French, Italian, Japanese, Portuguese, and Spanish
  • 33.
    © IBM Corporation33 text Bluemix Watson の Dialog 機能 –  Dialog は 会話機能 –  対話のフローをXML形式で定義 –  必要な変数項目を取得することができる –  対話フローは目的に応じて切り替えて利用する
  • 34.
    © IBM Corporation34 text Dialog の具体例 –  業務の目的を持った会話を推進する(必要な項目を聞き出す) –  会話に自由度があり、自然な流れで、必要な項目できる。 –  会話の例 >(こんにちは ) こんにちは、ワトソンのピザ屋です 最初に住所を教えてください。配達エリアを確認します >(東京 都 江東 区 ) はい、配達エリア内です ピザの種類を注文してください。ミックスピザ と トマトピザ が選べます >(お好み焼き ) ごめんなさい、ミックス か トマト でお答えください ピザの種類を注文してください。ミックスピザ と トマトピザ が選べます >(ミックス ) はい 承りました ご注文は、ミックスピザ で、江東区 まで配達ですね。 これで良いですか? >(はい ) 御注文ありがとうございます、約30分で配達します またのご来店をお待ちしております [ { name: 'PizzaType', value: 'ミックスピザ' }, { name: 'Address', value: '江東区' }, { name: 'Complete', value: 'Yes' }, { name: 'OutOfArea', value: 'No' } ] ------------------- COMPLETE --- ニンゲンと ワトソンの 会話 会話によって取得した情報 バックエンド・システムへ オーダーを投げるなどを実施
  • 35.
    © IBM Corporation35 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> ミックスピザ トマトピザ 該当なしの場合 インプットを受け取る ブロック ピザの種類を 決める事を促す
  • 36.
    © IBM Corporation36 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"> 受け取る言葉を 設定 変数にトマト ピザを設定 受け取った 内容を確認 私はトマト トマトピザ えーと、トマト 私はトマトが好き ニンゲンの言葉の 揺らぎに対応する
  • 37.
    © IBM Corporation37 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 実行
  • 38.
    © IBM Corporation38 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へ テキストを送って 応答をもらう コグ端末へ応答を返す 会話で取得した変数を 取り込む
  • 39.
    © IBM Corporation39 text まとめ Dialog を利用するための作業 –  会話の流れ設計は、最終的にXMLの定義体として、Watsonにインプット –  XMLの中で、NLCの機械学習と連携も可能 –  会話の例 データの準備 会話の流れ 設計 実践経験 最適化と内容追加 の反復 •  骨子の質問収集 •  利用場面の考慮 •  業務プロセスの考慮 •  業務プロセスを会話に 置き換え •  パーソナリティの設計 •  Watsonサービスの機 能組み合わせ検討 •  NLC,STT,TTS他 •  ユーザーインタフェース と接続して公開 •  会話の監視、活動のレ ビュー •  実務からの学習 •  顧客ニーズに合わせ既 存コンテンツの調整 •  実践経験に基づき新コ ンテンツの追加
  • 40.
    © IBM Corporation40 text Retrieve and Rank –  コンテンツを索引付けして蓄積 (質問への回答を索引付けして蓄積) –  質問内容とコンテンツの関連付けを学習 –  質問内容と検索結果ソート順に反映され、正解率を向上させる コンテンツの 収集とロード 機械学習 ランクモデル のトレーニング  検索の実施と ランク結果の評価 •  コンテンツ収集 •  Apache Solr 設定ファイ ル作成と登録 •  コンテンツの登録 •  質問と答えのトレーニン グデータ作成 •  トレーニング実施 •  本番適用 •  結果の評価とモデル の改善
  • 41.
    © IBM Corporation41 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 の索引検索の場合 ?! 質問に適切に答えてる ガンダムは。。。 と返してくる ジーブルについて答えてる ガンダムについて聞いてるのに
  • 42.
    © IBM Corporation42 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の様な順次検 索ではなく、転置索引を利用して検 索する。 この索引の”ガンダム”の キーワードにヒットしている 転置索引では、キーワードの索引 を検索するので、“ガンダ” では ヒットしない。
  • 43.
    © IBM Corporation43 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質問 , , 繰り返し
  • 44.
    © IBM Corporation44 text Retrieve and Rankの使い方 – Watson APIの実行順序 •  Apache Solr Cluster を作成 •  Apache Solr の設定をアップロード •  Apache Solr Collection を作成 •  ランカー作成とコンテンツ(回答集)を登録 – この段階でApache Solr の検索が利用できる •  トレーニング実行 – 質問と回答をアップロード – Watson内でトレーニング実行 (数分〜 – トレーニング完了すると、質問受付可能になる •  質問と回答 実行 Apache Solrのセットアップ Watson R&R API 特有の処理
  • 45.
    © IBM Corporation45 text Retrieve and Rankの使い方 – Watson R&Rの階層構造 •  Apache Solr Cluster •  Apache Solr Collection •  Watson Ranker Cluster Collection Ranker Collection Ranker 回答の集まり 質問と回答の関連づけ Ranker
  • 46.
    © IBM Corporation46 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を 指定して検索 結果取得
  • 47.
    © IBM Corporation47 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 だけの検索
  • 48.
    © IBM Corporation48 text Retrieve and Rank のまとめ –  質問への回答を索引付けして蓄積 –  質問と回答の関連付けを学習 –  関連の深い順にソートされ検索結果を返す コンテンツの 収集とロード 機械学習 ランクモデル のトレーニング  検索の実施と ランク結果の評価 •  コンテンツ収集 •  Apache Solr 設定ファイ ル作成と登録 •  コンテンツの登録 •  質問と答えのトレーニン グデータ作成 •  トレーニング実施 •  本番適用 •  結果の評価とモデル の改善
  • 49.
    © IBM Corporation49 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でデモをご覧にいただけます
  • 50.
    © IBM Corporation50 text まとめ –  出来る事 •  Bluemix の Watson と日本語で対話することは可能 –  Bluemix をAPIゲートウェイとして、SoftLayerのIaaSから利用可能 –  Bluemix Watson の NLC, Dialog, R&Rで日本語の対話可能 –  日本語の音声認識と音声合成は、OSSと組み合わせる事も可能 –  使ってみて判ったこと •  Bluemix Watsonの日本語対応のドキュメントが未整備 •  日本語処理特有の課題は、Apache Solrの形態素解析、語彙管理などを利用 •  内部処理過程トレースなどチューニングに必要な情報がもっと欲しい •  NodeとMQTTコールバックで、イベントドリブン処理が簡単に組める –  今後 •  ベアメタル&GP-GPUを利用して、ニューラルネットによる日本語認識精度と処理速 度の向上 •  自動的な学習方法の開拓