ラズパイ+SL+BMでワトソンと話そう
-
Upload
maho-takara -
Category
Internet
-
view
7.003 -
download
0
Transcript of ラズパイ+SL+BMでワトソンと話そう
© 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 ServerAPI-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 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の サーバーで実施(予定)
© 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を利用して、ニューラルネットによる日本語認識精度と処理速
度の向上 • 自動的な学習方法の開拓