Amazon Echoの正体を暴く

こんにちは。
今回の記事作成は主に2人で行ったので、連名での投稿となります。

記事作成者

  • エンジニア3年目 藤田
  • エンジニア2年目 杉本

どちらも music.jp というプロダクトの開発を担当しています。

【この記事を読んでほしい人はどんな感じの人か】  

  • AWSはなんとなくわかる人

  • Echo興味あるけどちょっとよくわかんない人

  • Echo買おうかどうか悩んでいる人

実際にEchoを使って開発をしたりした過程で感じたことなどをまとめてみました。

個人的な意見も含まれていますので、参考程度に読んでいただければと思います。

【Echoの仕組み】

さっそくですが、Echoが動作する仕組みを図にしてみました。

では、ステップごとに見てみましょう

ステップ①:Echoに話しかける

  • 細かい仕様などは今回の記事で説明するつもりはないですが、決まりにしたがって話しかける必要があります

ステップ②:Echoが声を受け取ってAWSが提供する「Alexa」に声データを送る

  • え?Echoの仕事これだけ??

ステップ③:Alexaが受け取った声データを解釈して実行命令を外部に渡す

  • 実は、すごいのはこいつ
  • 「声」を解釈して命令を作ってくれる

ステップ④:受け取った命令によっていろいろできる

  • Alexaが「声」を「コンピュータが処理できる命令」に変換してくれたのであとは特別なことはしていない
  • Lambdaで関数をつくって処理してAlexaに返すというパターンがメジャー
  • ここは本当にアイデア勝負。別に出力はEchoじゃなくてもいいので、SNSになんか投稿するとかもOK

【そんで、Echoの正体は?】

これまでの説明でEchoに話しかけてからもろもろの処理が終わるまでの大体の流れはわかるかと思います。

あれ、Echoって別にすごくないね?

ということで、「実はすごいのはEchoじゃなくてAlexaなんです」。という話を少しします。

処理に登場するサービスを人間のパーツに例えるとわかりやすいので、まとめてみました。

人間同士の会話    Echoとの会話    
耳  Echo
脳    Alexa
手や足や口 Lambdaやその他の出力

人間同士の会話の場合、誰かの音声を耳で聞いてそれを脳で音声を解釈して行動を決定しますね。 Echoを使った場合は、Echoが音声をキャッチしてAlexaが音声を解釈して行動を決定します。

つまり、対話のようなものを実現してくれているのはAlexaであるといっても過言ではないのです。

【音声を解釈することの難しさ】

先ほど「Alexaが音声を解釈する」と書きましたが、音声を解釈するということはどういうことでしょうか。

例えば、

「今日の和田アキ子のライブの会場を教えて」

と言われたとします。

まず、「きょうのわだあきこのらいぶのかいじょうをおしえて」と正しく入力されるかどうかという問題が発生します。

ここで間違えてしまうと、もうおしまいですね。

ですが、発音が似ている言葉があったとしても間違えずに解釈してもらわなければなりません。

ちょっとぐらい曖昧な言葉も察してくれるような仕組みが必要なのです。

さらに、仮に音声が正しく入力されると仮定したとしても、次のような問題があります。

話し言葉は柔軟でバリエーションに富むため、同じリクエストがさまざまな言い方で表されることがよくあります。

たとえば、ライブの会場を知りたい場合、次のように質問する可能性があります。

今日の和田アキ子のライブの会場を教えて
今日のアッコさんのライブ会場が知りたい
今日の和田のライブってどこ?
○月○日のWKのライブの場所を教えて
今日開催されるアキコのライブの場所は?

これらがすべて「同じ答えを求めている」のだと判断してもらう必要があるのです。

実はAlexaはこれらの問題に立ち向かうために、「サンプル発話」と「カスタムスロット」というものを装備しています。

【サンプル発話とカスタムスロット】

サンプル発話は以下のような感じで定義します。

今日の○○○のライブの会場を教えて
今日の○○○さんのライブ会場が知りたい
今日の○○○のライブってどこ?
○月○日の○○○のライブの場所を教えて
今日開催される○○○のライブの場所は?

「想定される質問の形式」をあらかじめ用意します。

これを用意することによっていろんな質問の仕方に対応できるようになるので、 より自然な対話に近づけることができます。 でも、キリがないし用意するのが非常に面倒くさいです。


カスタムスロットは以下のような感じで定義します。

わだあきこ
わだ
あっこ
あっこさん
WK
わだちゃん

「想定される名詞の呼び方」をあらかじめ用意します。

これを用意することによって「和田アキ子」を指すワードが複数あったり、 似ている発音のワードがあったりしても、それらが和田アキ子を指しているんだとAlexaが解釈してくれやすくなります。 でも、キリがないし用意するのが非常に面倒くさいです。

サンプル発話とカスタムスロットをうまいこと用意して、いろんな形式の質問に対応していくわけです。 しかし、非常に面倒くさいですし、デザインが難しいというのが現状です。

【"スキル"という概念】

ここまでの流れをまとめます。

・Echoの正体はただの音声をAlexaに渡すだけのスピーカー
・Alexaが脳みそとなって音声を解釈しようと頑張っている
・意図通りに解釈してもらうには対話サンプルなどの準備がかなり必要

だいたいこんなかんじでしょうか。

あれ、じゃあ対話サンプルやカスタムスロットが死ぬほどあれば結構イケるのでは?

と思うかもしれませんが、そうはいかないんですね。

Alexaさんはいきなり話しかけられても反応できないのです。

あらかじめ「話題」を宣言しなきゃいけないんです。これが「スキル」と呼ばれるものになります。

サンプル対話やカスタムスロットは「スキル」ごとに作成します。

実際に開発するときはこんな感じの流れになります。

①Alexaと話すときの話題(聞きたいこと)を決める
┗例:ライブの会場とかを聞けるようにしよう
②どんな質問が想定されるか考えてパターンを用意する
┗サンプル発話
③指定した話題で使用されうる単語のパターンを用意する
┗カスタムスロット

この準備があってようやくなんとかAlexaが音声を解釈してくれるということです。

スキルとサンプル発話とカスタムスロットの関係を図にしてみたものが↓です。

「スキル」「サンプル発話」「カスタムスロット」の概念によって、対話の精度を保っているというイメージですね。

【考察】

初めにも書きましたが、Echoはそんなに大したことないものなんじゃないかと思いました。 ただ声を聞き取ってAlexaに送っているだけなので、Echoの代わりになりうるものは山ほどあると思います。

例えば、スマートフォンが声を拾ってそれをAlexaに送ってくれれば別にEchoである必要はないわけです。 さらに言えば、スマートウォッチがEchoの代わりになってくれれば場所を気にせずいつでもどこでもAlexaが使えますね。

そう考えると、Echoが「置き型スピーカー」という姿をしているメリットはあまりないような気がします。

そして、開発してみるとわかるのですがAlexaを人間の代わりとして使うのはまだ非常に難しいです。

とくに難しいのはこのへん↓

「自分の声をAlexaに正しく聞き取ってもらう」
「どんな形式で質問されるかを想定してデザインする」
「質問の際に使用される単語を想定し網羅する」

"察する力"が人間とはまだ差がありすぎる ので、このあたりにすごく気をつかってあげなければなりません。 うまくいったとしても、ちょっと物わかりのいいロボットぐらいの感じでしょうか 。

正しい発音で、決まった形式で、変な単語を使わずに「声」を入力することが求められるので、 これがストレスにならないような使い方をしないと「手」での操作の利便性にどうしても敵いませんね。

VUI(Voice User Interface)はこの先の進歩によってはすごく有用なものになってくると思いますが、 その他のインターフェースと比べるとまだ洗練されていない領域だなというのが正直な感想です。

個人レベルでできることはあまりに地味ですが、Alexaを最高に使いこなせる自信がある方はチャレンジしてみてほしいです。

【参考:作ったもの】

この記事では実装に関することは省略していますが、実装に関する記事も書いています。

手順を追って解説していますので、ぜひ参考にしてみてください。

Alexa のオリジナルスキルを開発したいと思ったときに必要な手順まとめ(アイディアの誕生~お手元の Amazon Echo で遊べるようになるまで)