読者です 読者をやめる 読者になる 読者になる

音声アシスタント開発ブログ

画期的な音声アシスタントの開発を目指しています

Docomo発話理解APIをRubyで使ってみた

対話システム

発表をされてからは随分と月日が流れてはおりますが、

卒業研究の内容と非常に関わりがあったため、Docomoが提供する「知識理解API」を試しました。Rubyで動かしてみた記事は見当たらなかったため(既にあったらすみません)、ご紹介します。



dev.smt.docomo.ne.jp

知識理解APIはユーザのテキスト(発言)を投げると、ユーザが発した発言の意図を判断し、それに見合った機能名や値を返却するAPIです。

例えば、

つくば駅から渋谷までの乗り換え案内」という文字列を渡すと次のような結果が得られます。(実際はjson出力です。)

                                                    • -

発言:つくば駅から渋谷駅の乗り換え案内
分かち書き:["つくば駅", "から", "渋谷駅", "の", "乗り換え", "案内"]
位置情報:
コマンド:乗換案内
スロット名:stationTo
スロット値:渋谷駅
スロット名:stationFrom
スロット値:つくば駅

                                                    • -

コマンド → 対応する機能
スロット → 対応する機能に用いる情報

得られたコマンドは、他の関数と対応づけるなどして活用ができます。

音声アシスタントアプリのようにユーザの発言から様々な機能を呼び出せるサービスが代表的ですが、他にもかなり幅広い応用が可能だと思います。

得られるコマンドはこちらに詳細が記述されています。

# coding: utf-8
require 'net/http'
require 'uri'
require 'json'

#取得したAPIキー
API_KEY = 'hoge'

URL = "https://api.apigw.smt.docomo.ne.jp/sentenceUnderstanding/v1/task?APIKEY=#{API_KEY}"
uri = URI.parse(URL)

https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
req = Net::HTTP::Post.new(uri.request_uri)
query = gets.chomp!
#リクエストヘッダー
req["Content-Type"] = "application/x-www-form-urlencoded"
#リクエストボディ(JSON形式です)
param = {
     "projectKey" => "OSU",
     "appInfo" => {"appName" => "hoge_app", "appKey" => "hoge_appkey"},
     "clientVer" => "1.0.0",
     "dialogMode" => "off",
     "language" => "ja",
     "userId" => "12 123456 123456 0",
     "location" => {"lat"=> "139.766084","lon"=>"35.681382"},
     "userUtterance" => {"utteranceText" => "#{query}"}
}.to_json

req.body = param
res = https.request(req)
res_parse = JSON.parse(res.body)


#出力
print("発言:",res_parse["userUtterance"]["utteranceText"],"\n")
print("分かち書き:",res_parse["userUtterance"]["utteranceWord"],"\n")
print("位置情報:",res_parse["location"],"\n")
print("コマンド:",res_parse["dialogStatus"]["command"]["commandName"],"\n")
if(res_parse["dialogStatus"]["slotStatus"]!=nil)
	res_parse["dialogStatus"]["slotStatus"].each do |youso|
  		print("スロット名:",youso["slotName"],"\n")
  		print("スロット値:",youso["slotValue"],"\n")
	end
end

会話をする司書ロボットを作ってみた 試作1(動画)

対話システム

前回の記事で紹介した”音声認識を利用した書籍検索”に改良を加え、

会話で動作する司書ロボット

を作ってみました。

テーマは

1 ハンズフリーで本の検索や紹介ができる

2 会話で施設の案内ができる

3 本に関連しないことに対しても発言を返す

 の3つです。

 

今後改良を加えて、もっとアシスタントらしさを出していこうと思います。

デモ動画も撮ってみました。ぜひご覧下さい。


会話をして動作する司書ロボットを作ってみた - YouTube

※現在サービス自体は公開しておりません。

動画の感想やアドバイス等をいただけるとうれしいです!

--------------------------------------------------

基本的に前回紹介した物を改良しただけです。

Book Assist β版

○ 参考にさせていただいたサイト

Webアプリに高機能な音声認識を追加するWeb Speech API - Kesin's diary

[HTML5] Web Speech APIに入門 - YoheiM .NET

○書籍データ

楽天ウェブサービス(RAKUTEN WEBSERVICE)

 

しゃべるだけで書籍を検索できるサイトを作ってみた

Web 対話システム

f:id:androidlife:20140918082406p:plain

図書館や書店に置いてある書籍の検索システムを利用したことのある人は多いと思いますが、本のタイトルや著者名を手入力することはかなり面倒な作業です。

そこで、音声入力によってタイトルや著者名を入力してスムーズに書籍を検索できることを目的としてサイトを作成しました。

そして、現在も試行錯誤を続けている「話して検索」機能は新しい検索方法です。

特に決まったタイトルや著者名を検索するのではない場合、目的を話しかけることによってアプリがおすすめの本をピックアップします。

例えば

ダイエットをしたい」「痩せたい

とアプリに話しかけると、ダイエット関連の本をアプリが探しておすすめの著者を紹介してくれます。

まだ改良すべき点が多く残っているので、今後も修正を加えていこうと思います。

何か良いアイデアやアドバイスがありましたら、コメントでお知らせください。

サイトはこちらです


Book Assist β版

※利用はChromeブラウザのみで可能です

 

○ 参考にさせていただいたサイト

Webアプリに高機能な音声認識を追加するWeb Speech API - Kesin's diary

[HTML5] Web Speech APIに入門 - YoheiM .NET

 

○書籍データ

楽天ウェブサービス(RAKUTEN WEBSERVICE)