Amazon Alexa ことはじめメモ

Posted by
ぴろり
Posted at
2018/01/29 14:58
Trackbacks
関連記事 (0)
Post Comment
コメントできます
Category
電算室 カテゴリ
カバーイメージ

 去る1月27日(土)、オープン ソース カンファレンス 2018 大阪の 2 日目に参加してきました。その最後、ライトニング トーク後のじゃんけん大会で、アマゾン ジャパン様が Amazon Echo Dot を景品として提供くださったのですが、なんとこれを私がゲットしてしまいましたhappy02.gifheart04.gif*1
 Amazon Alexa や Google Home などスマート スピーカ周りの情報は少し見聞きする程度でしたが、ガジェットを持っていないこともあって実際に手を動かしてみることはありませんでした。果たしてこれはもう触らずにいられようか、いや、触らずにはいられない。アマゾン ジャパン様、ありがとうございます!! というわけで、Amazon Alexa でカスタム スキルを作って動かしてみた覚書き。

このエントリーをはてなブックマークに追加  

Amazon Echo

  • 頂いたのは Amazon Echo(えこー) Dot (以下、Echo という) というコンパクト タイプ。他にも、これに高性能スピーカーが付いた Amazon Echo、更にスマートホームハブが付いた最上位機種の Amazon Echo Plus がある。これらモデル ラインアップはハードウェア機能の違いで、ソフトウェア機能には違いがないっぽい。
  • 無印 Echo 以上の高性能スピーカーは音楽を聞きたい人向け? 本体スピーカーはモノラルっぽいが、本当にキレイに聞きたいなら、LINE 出力端子があるので外部スピーカーにも接続できるが、音声認識の関係からか Echo 本体とスピーカーの位置関係は少し気を使う必要がありそう。説明書にもスピーカーから離せと書いてある。
  • Plus にはスマートホームハブが内蔵されている。照明やエアコン、家電などを制御できるらしい→それってスマートホーム 後付でスマートホームハブ単体を買おうとするとそこそこ高い。音声で家電を制御とか「夢の IoT キタコレ」って感じ。ハブと末端デバイスはどういうプロトコルで制御してるんだろ?→ハブを自作できないかなぁ。お値段高いし。
  • Echo Dot はマイクロ USB で給電。5V1.8A。専用の AC-USB アダプタ(5.2V 1.8A 出力)が付いていた。
  • [アクション]ボタンを長押しでセットアップ モードに移行、[マイク]ボタンと[音量-]ボタンの同時長押しでファクトリ リセット。
  • ネットワークは WiFi 接続のみ。セットアップには、Android/iOS スマホに Alexa アプリをインストールして、このアプリ経由で設定する。手元の Android が古いヤツばかりで、アプリのバージョン制限からインストールできずにいきなり挫折しそうだったが、パソコンからも設定できて解決。セットアップ時、Echoとはアドホックモードで WiFi 接続できる必要がある&インターネット接続も必要なので、有線&無線 LAN 付きのノート PC で行った。
  • あっちこっち移動させるモノでもないけれど、以前に接続したことのあるアクセスポイントは覚えていてくれるっぽい。AP を移動しても接続された。
  • 滑舌の悪い発音や、鼻詰まり声、崩れたイントネーションでもほとんど失敗せずに認識してくれる。Amazon すげー。むしろ、本体周辺の集音を妨げる要素の方が影響大な感じ。

Amazon Alexa

  • 「Amazon Alexa (あれくさ)」というのは、Amazon が運営するこれらサービス全体の名前で、スマート スピーカーなどのマイクから拾った音声を、Amazon のクラウド サーバ上で音声認識して、いろんなサービスを提供するという仕組みのこと(という理解で合ってる?) 「Amazon Echo」は、この Amazon Alexa サービスに対応したスマート スピーカーの具体的商品名のこと。
  • PC や Raspberry Pi なんかに Amazon Alexa のライブラリをインストールすれば、Echo 以外のデバイスでも使えるらしい→AVS; Amazon Voice Service
  • Echo はスピーカー出力しか持っていないけれど、Amazon Fire TV のように画面を持つデバイスなら「あれくさ、映画の○○が見たい」って言えば、映画の再生が始まるのか。
  • 「で、具体的にどういう仕組みなのよ?」ってことを大雑把に説明すると;
    1. 「アレクサ、ラジコで α ステーションをつけて」みたく話しかけると、最初の「アレクサ」の部分(wake word という)で「お、呼ばれた!?」的に反応して聞き取り開始。
    2. 拾った音声データを Amazon のクラウド サーバに送信して音声認識、発声された音声データを文字列データに変換する。ここの音声認識の部分が機械学習だとかビッグデータだとかの Amazon パワーなんだろうね。文字列データに変換できれば後は煮るなり焼くなり好き放題ってこと。
    3. 「ラジコ」という単語に応じて、radiko.jp のサービス(skill という)が選択される。skill は更に「αステーション」という単語に応じて目的の放送局を選択する。
    4. radiko.jp のαステーションのストリーミングURIが帰ってくるので、Echoで再生開始。
  • スマホや PC などに、目的に応じてアプリをインストール/アンインストールできるのと同じに、自分が使いたいスキルを必要に応じて有効/無効にできる。しかし、スマホや PC と違い、スキルのコード一式が Echo 本体ダウンロードされてくるわけではなく、Amazon サーバ側でどのスキルを有効/無効にしたかという管理を行っていて、スキル内部の処理もサーバ側で行っている(と思う)。Echo はマイクで拾った音声をサーバに上げるだけ、サーバからの指示で指定されたリソースを再生するだけ、の機能しかないと思う。
  • 「Alexa アプリ」と言うと、設定用の管理ソフトウェア ツールのことになる。なので、提供される個々のサービスは「Alexa スキル」と言うらしい。スキル=技能、できること。

カスタム スキル

  • でもって、このスキルを自分で作れる=カスタム スキル(本題キター) そして、作ったカスタム スキルを一般公開して、世界中の人に使ってもらう=Alexa アプリから検索して使うことができる。が、これには Amazon の審査が必要。radiko.jp を再生したり、NHK ニュースを読んでくれたり、音楽ストリーミングを再生するような、自社サービスをスキルとして公開してビジネスしたい人はこっち。
  • 一方、学習や自分一人で使うだけなら審査不要でスキルを作れるが、自分のアカウントと紐付いた Echo 上でしか使えない。例えば、「あれくさ、サーバは元気にしているかな?」と尋ねたら、自宅サーバの稼働状況をレポートしてくれるとか。「あれくさ、新しいメールは届いていない?」とか「あれくさ、ルンバで掃除して」とか。
  • 音声コミュニケーション式のマン-マシン-インタフェースで一番難しくてキモな部分が、音声データから文字列データに変換する部分なんだけど、先にも書いたとおり、この一番難しい部分を Amazon がやってくれるので、スキル開発者は音声入力を文字列データとして扱うことができる。
  • Alexa スキルを新規作成、必要な設定情報を入力して…といった一連の作業が AWS みたく開発者サイトから行える。大雑把に説明すると;
    1. 新しいカスタム スキルを新規登録して、まず呼び出し名を決める。例えば「俺スキル」と設定すれば、「アレクサ、俺スキルで○○して」という文言に反応して、自分が作成したスキルが呼ばれるようになる。
    2. 発話モデルとして、サンプル会話とインテント(intent。トリガのようなもの?)の対応を登録する。例えば、ある機能 A を呼び出すインテントを作成する場合、「A して」「A しろ」「A を開始」「A を実行」「よろしく A」「A」など色々な発声パターンが考えられるので、このパターンを登録しておく。実際に使っているシーンを想像しながらパターンを書くと、適当に崩したお願いにも反応してくれるので嬉しい。
    3. また、インテントには変数的に使える slot というものがある。例えば「天気予報で {都市名} の天気が知りたい」というインテントにおいて、slot を活用すれば「大阪の天気が知りたい」「京都の天気が知りたい」というパターンを同じ一つのインテントで受けられる。「天気を答える」というインテントを引数「{都市名}」付きで呼び出す感じ。
    4. 個々のインテントに対して、具体的に何をするのかハンドラ(=ロジック)を書く。「入力(指令)に応じて出力(動作)をする」という点で、ラムダ式との相性が良いらしい。最初にチュートリアルを見ながら試作してみた「俺スキル」でも、AWS Lambda サービスを利用した。
    5. ハンドラで料理した結果が Echo に帰ってくる。
  • ハンドラで this.emit(':tell', '関数 A が呼ばれました'); とかすれば、Echo がそのまま喋ってくれる。音声合成マークアップ言語(SSML)というので、喋り方を修飾できて面白い。
  • 質問待ち状態のある複雑な会話もできる。有限オートマトンの状態遷移図で設計できそう。Voice User Interface の設計も奥が深そうだ。
  • まだ試せていないが、インテント毎に処理を行う部分は、外部サーバでも受けられるっぽい。データは JSON で入出力している? 自宅サーバの稼働状況を返せば「自宅サーバは元気してる?」が実現できるのかな?→可能っぽい @see Amazon Echo Dot+さくらのクラウドでAlexaになんか喋らせる - Qiita
  • 開発者アカウントの作成でハマった。自分の場合、ちょっと変わっていて、Amazon.co.jp と Amazon.com に同じメアドで既にアカウントを持っていて(ただしログインパスワードが異なる)、ログイン時に入力するパスワードを変えると、使われるアカウントが日米で切り替わっていた。でも画面はどちらも同じ日本語で表示されているから、気が付かずに作ったカスタムスキルが Echo で選択できないという罠。ちなみに、英語アカウント(Amazon.com)で作ったカスタムスキルは、Echo を alexa.amazon.com で認証すると選択できるようになるものの、今度は英語言語以外のスキルを使えなくなってズギャーンという罠。
  • でも、AWS Lambda は Amazon.com のアカウントだったよなぁ? ARN で紐付いてるんか? メールアドレスで見てる? んん〜?
  • 開発者コンソール上にテスト シミュレータがあって、Echo 実機がなくても実装とテストまで可能。それでも実際に Echo に話しかけて、期待したとおりに答えてくれると感動がデカい。

ToDo

  • AWS Lambda を自宅サーバに変えてインテントを処理してみる
  • Echo に喋らせるだけでなく、音楽(ストリーミング/静的ファイル)を再生させてみる
  • Rasberry Pi に AVS をインストールしてみる
    • 動画再生や画像表示させてみる
    • GPIO をゴニョってみる
  • 外部トリガで Echo を喋らせる。現状、ちょっとシンドイ感じ。簡単にできると活用法が広がりそうなのに。ファームウェアのアップデートに期待。

最後に

 チュートリアル通りに進めて、入力から処理、出力に至るまでの流れを大筋で理解、これから機能開発するためのの取っ掛かりはできたと思う。あとは、やりたいことや目的に応じてその方面のドキュメントを読み進めればよさそうなんだけど、今までの CUI や GUI とは全く違ったインタラクションゆえ、新しく勉強しなければならないことが多目な感じ。例えば、「電気つけて」「音楽流して」のような「お願いしっぱなし」系のスキルであれば簡単に実装できそうだけれど、ちょっと複雑なことをさせようとすると、スピーカーからの音声出力だけでは情報量が少なすぎて、よくある幾つかのメニューから何か選択させるようなインタラクションはキビシ目。かと言って表示デバイスを取り付けてしまうのは本末転倒な気もするし。こういう点でイキナリ意識変革が必要かも。電話の自動音声案内とプッシュ トーンで手続きできるインターネット バンキングなどのサービスがあるけれど、あのなんとも言えないもどかしさみたいな。
 あと、結構いい加減な発音でもきっちり拾ってくれるのは凄いんだけど、そこに慣れてしまうと、なまじ「ヒト」に近い音声コミュニケーションを入出力チャンネルに採用してしまったがゆえに、些細な会話の不自然さが強烈な違和感として現れてしまうという。「あ、そういう意図で言ったんじゃなくて」的な。もしかしたら、これって音声版「不気味の谷」とも言えるんじゃないかなぁ。

 まぁ、なにはともあれ VUI デバイスとしては最高に面白いし、スキル開発も本当にアイディア次第で可能性は無限大だと思うし、これから面白い活用法がドンドン発明されそうなので、色々触ってみようと思います。アマゾン ジャパン様、面白いオモチャをありがとうございました。

このエントリーをはてなブックマークに追加  

  1. *1 この日に限ってジャンケンの調子がナゼだかすこぶる良かった。まさか 2018 年の幸運を全て使い切ってしまった!?

この記事を読んだ人はこんな記事も読んでいます記事リコメンデーションについて

カバー画像:PIC ことはじめ ~ 外部割り込み

関連記事/トラックバック

関連記事/トラックバックはまだありません

この記事にトラックバックを送るには?

コメントを投稿する

 
 (必須, 匿名可, 公開, トリップが使えます)
 (必須, 匿名可, 非公開, Gravatar に対応しています)
 (必須)
スパム コメント防止のため「投稿確認」欄に ランダムな数字 CAPTCHAについて を入力してから送信してください。お手数ですがご協力のほど宜しくお願いいたします。