Androidの音声認識の流れ
「虚無ログ」、ひいてはAndroidの音声認識アプリの技術的な話題について触れてみる。
Androidでの音声認識開発はそう難しくない。
APIをコールするだけでよい。
音声入力に1つ、端末からの音声出力にもう1つである(下記参考)。
それで、音声認識の流れは次のようになっている。
- ユーザが音声認識を使う
- 端末はサーバにユーザの音声データを送る
- サーバは音声データを解析し、最適な結果テキストを端末に返す
- 端末は結果テキストを判断して動作を決定する
2番と3番が面倒臭そうだが、そこはGoogle様のAPIがやってくれるので何も問題ない。
ところが、問題は4番である。
乱暴な言い方をすると、虚無ログでもSiriでも音声アシストでも、ここの処理が違うから同じ処理をしない。
一例として「ありがとう」と言った場合を挙げてみよう。
- ユーザが「ありがとう」という言葉を音声認識させる
- 端末はサーバに「ありがとう」という音声データを送る
- サーバは「ありがとう」という音声データを解析し、結果として「ありがとう」というテキストを端末に返す
- 端末は「ありがとう」というテキストを判断して、「どういたしまして」と返事をする
前提として、4番で「ありがとう」というテキストを端末が判断できなければ、プログラムとしては動作しない。
上記で「どういたしまして」と返事をするのは、「ありがとう」という言葉(実際はテキスト)に対する動作をプログラムしていたからである。
もちろん、プログラミング次第で、「どういたしまして」と返事をさせる代わりに「礼にはおよびません」と返事をさせることもできるし、何も返事をさせずになぜかブラウザを起動させることもできる。
要は音声認識の開発において、どのようなテキストを判断させるかが重要なわけだ。
何でもかんでも判断させられれば最善だが、処理性能を考えると現実的でない。
だから一番簡単なのは判断させる言葉を適当に仕込んだ上で、判断できない言葉を無視することである。
次に簡単なのは判断できない言葉がある場合は特定の行動をすることである。Siriなら「私には理解できません。Webで検索します」と動いてくれる。
こうして考えると、Siriも意外と単純なプログラムであることが分かる。英語版はもう少し複雑そうだが……。
なお、テキストの判断、一般にはテキスト解析と呼ばれる分野の話は人工知能やら人工無脳やらが絡んでくる難しい話で、個人開発者が頑張るにはちと厳しいので、必要な機能を任意の言葉で随時盛り込んでいるのが「虚無ログ」の現状である。
一方、それをユーザにやってもらえばいいんじゃないかと考えたのが「音声認識ツクール」である。
ユーザが音声認識でしたいことを、ユーザに登録してもらえば、それが一番なんじゃないかと。
設定の面倒くささがあるけど、ユーザがやりたいことを実現することができる。
ちなみに、アプリ名起動は厳格すぎて融通が利かず個人的に気に入らないので、あくまで自由なキーワードで選びたい派である。
途中から話題がずれた気がしないでもないが、今回はここまで。