Voice interaction API for
Android M
Retty株式会社 福井
Agenda
- ご挨拶
- Androidの音声認識技術について
- なぜVoice Interactionなのか
- どのように実装するのか
ご挨拶 (自己紹介)
福井敦子(27)
- 前職はAndroidの組み込み開発業務
- 音声通信、データ通信まわり
- SIP, VoLTE, ViLTE etc..
- 2015年6月 RettyにJoin
- Hello web world!
- Android repository owner
ご挨拶(Rettyの紹介)
Rettyとは
- 「食を通じて世界中の人をHappyに」
- グルメサービスやってます
- Web, iPhone App, Android Appでサービス展開中
本日のテーマ
Android Marshimallow (API 23)から追加されたVoice Interaction機能
- “OK, Google” のアレがアプリレベルで実装できる
- その名の通り音声を用いた対話が可能
Androidの音声認識について
Lollipop以前
- Google Appからアプリ起動が可能
- ただしシステムが用意している特定の種類のアクションのみ
- "Ok Google, set a timer for 10 minutes"
- "Ok Google, search for hotels in Hawaii on TripAdviser"
- search for XXX on YYY の形式で特定のアプリで検索可能
- 一方通行
- ユーザがなげられるクエリが一回だけ
Androidの音声認識について
Marshmallow 以降
- インタラクティブなやりとりが可能
- 対話によってよりよいUXを提供できる
なぜVoice Interactionなのか?
- Rettyのようなグルメサービスの場合、検索の軸が多い
- エリア(最寄駅)
- 料理ジャンル
- ランチ or ディナー
- 価格帯
- 利用シーン
- デートで行きたいお店と女子会で行きたいお店とビジネス利用(会食) で行きたいお店は
違う
なぜVoice Interactionなのか?
友達にオススメのレストランを尋ねる時を考えてみよう
どこか渋谷でいいお店ない?
ランチ?ディナー?
ランチ!
デート?
女子会!
それならここがいいよー
なぜVoice Interactionなのか?
インタラクティブな対話により、より自然な検索体験を提供できる
- 実際に友人に相談しているような新しい検索体験
- 今までの膨大な選択肢から適切なパラメータを選択する必要がなくなる
- 聞かれたことにただ答えるだけでOK
- 現在のグルメアプリの検索画面は(Rettyに限らず)1スクロールに収まらないほど情報量が多い
実装方法
実装方法
Actvitiy.getVioceInteractor() でVoiceInteractorを取得し、RequestとPromptを設定
VoiceInteractor Request
submitRequest()
Prompt
音声を用いてユーザとやり取りす
るためのインターフェイス
ユーザのフィードバックに対しどの
ように振る舞うか要求するクラス
ユーザに何をしてほしいか促すクラス
実装方法 (Request)
Requestは5種類
- PickOptionRequest
- 複数のOptionからユーザに一つを選ばせる
- ConfirmationRequest
- ユーザに確認を求める
- CompleteVoiceRequest
- 実行中のやりとりが完了したことをユーザに知らせる
- AbortVoiceRequest
実装方法
デモアプリ
- 2ターン分のやりとりから検索させるデモ
- あらかじめ定められた検索パラメータからユーザさんに選んでもらいたいの
でPickOptionRequestで実装
実装方法
- まずはTarge SDK versionを23 (marshmallow) に
- PickOptionRequestは期待する解答群をOptioinとして設定できる
実装方法
Optionについて
- 言い方が異なっても同じ選択肢として扱いたい時がある(= シノニム)
- 「はい」、「うん」、「オッケー」
- Option.addSynonym()
- Optionとしては同一のものとして扱われるので、Option.getIndex() でシノニ
ムを気にせず実装可能
実装方法
- 検索条件が揃ったら検索を実行し、結果を表示
- 結果を別Activityで表示する
- この時Intent.FLAG_ACTIVITY_NEW_TASKをセットしないとVoice
Interactionから抜け出せない
Framework読んでみた
- VoiceInteractor.submitRequest() をコールすると抽象クラスの
Request.submit() が呼ばれる
- Requestをextendsした各クラスがsubmit内でVoiceInteractionSessionに対し
要求をスタート
- PickOptionRequestの場合はstartPickOption()
- VoiceInteractionSessionが内部にハンドラを持っており処理を実行
- VoiceInteractionSessionはextendsして独自にカスタマイズ可能
所感
- 端末の音声認識言語設定をEnglish(Primary), 日本語(Secondary) に設定する
とVoice Interactioinが暴走する
- 英語で発話されたpromptに対して答えると、日本語で再度promptが発話されせっかく答えた
ことがなかったことにされる謎挙動
- 日本での実用化はまだ難しいかも?
- 世界展開で英語一本でいくならよさそう
- Googleの発表だと1日1回以上Voice searchを使うteenは55%, adultで41%
(調査対象群は不明)
- OK googleからそのままアプリに来てもらって、その延長でよりよい検索体験をしてもらえそ
う
ありがとうございました

Voice interaction api for android m