オカンハック

母親目線での「便利!」を備忘録的に書き溜めていこうと思います。

作成したAlexaスキルが審査に通りました。スキルを使って分かったこと。

こんにちは、カーチャンです。

夜なべして作っていたスキルが、Amazon のスキルストアで公開されました。
www.amazon.co.jp
肌トラブルの元になりそうな天気情報をお伝えすることで、
スキンケアの目安にして欲しいという思いで作りました。

スキル作りを通じて思ったことを書きます。

作った経緯

元々、子供が明日の準備を自分でできるようにするために、持っていくものを読み上げるスキルを開発したかったのですが、
思うように登録できないという難問に突き当たっていました。
また、音声でいくも登録するのはちょっと疲れます。

入力は、ウエブサイトサイトからテキスト入力でやったほうがいいんじゃない?

そうすると、アカウント連携がいるから、一歩高度になるよね。
第一、その『手入力するシステム』って、どこで公開するの?サーバー借りるところからってちょっとしんどい。

と、山の高さにビビって二の足を踏んでいました。

その時に、ベータテストに協力してもらっていたまんたんから、
「でも、この『雨降るから傘を持っていきましょう』っていうアナウンスは面白いですね。」
と、意見をいただいて、その部分のみを切り出すことに変更しました。

作り方について

Amazonの開発者専用サイトから作ることができます。
登録も、利用も無料です。
AWSの機能を間借りさせてもらっているらしいですが、AWSとアカウントは別です。
Amazon開発者ポータル

※新規登録の時に10人中9人がハマる罠があるので注意!!
developer.amazon.com

仕組みは、感覚的にWeb系バックエンドとほぼ一緒。
インテント」という、ユーザーの発話とプログラムを結びつけるところを作って、
Node.jsまたはPythonで実装していきます。
プログラムでは、handlerオブジェクトという「誰がいつどのメソッドを実行したか」という情報を受け取って、
Alexaに言わせる言葉を詰めて返します。
Servletを作ったことある人なら楽勝だと思います。

GitHubなどにサンプルコードが公開されているので、
それを参考にしながら作ることもできます。

開発環境もオンライン上でできるので、面倒な設定はほぼなし。
(ただ、プログラミング以外のところで、「税の登録」に関する説明は、誰かに解説して欲しいなと思いました。
スキルで収入を得ると、アメリカに税金を支払わなければならないらしい??)

作ってみた所感

ワンセンテンス、ワンセッションの長さに注意

今まで私が関わってきたお仕事は、「業務系」と呼ばれるものでした。
経理部とか総務部といった、管理部門が使う感じのヤツ?とイメージして下さい。
なので、画面からの入力があっても、入力欄がいっぱい並んでいるとか、エラーメッセージがずらずら並ぶとか、
結構1画面あたりの文字量が多かったと思います。

その調子でAlexaにメッセージを読ませると、冗長に感じます。
文章で見るのと読み上げるのとでは、読み飛ばしができる文章と違って、音声は待たなければならない。
ベラベラ喋られると苦痛。(喋ってる間、聞いてくれない)
情報提供でも、1応答30秒以下に抑えないと使って貰えない(かも)。

人間もそうですが、「話の流れ」でファジーに覚えていることもあるため、
説明で全部話さなくても大丈夫かも?
また、一回でいろいろ言わせようとする、あるいはユーザーに言ってもらうより、
短い会話を往復させたほうがいいかもしれません。

例えば

Alexa、ハンバーガー注文システムで、ハンバーガーを3つとポテトを6個注文して

よりも、

Alexa、ハンバーガー注文システムを開いて

ようこそ、何を注文しますか?

ハンバーガーを3つ

ハンバーガーを3つですね。他に注文はありますか?

ポテトを3つ

ポテトを3つですね。他に注文はありますか?

以上で

ハンバーガー3つとポテトを3つですね。注文を賜りました。

の方が自然ですね

ただ、私だけかもしれませんが、あまり1連のやりとりが長いと何の話か忘れてしまったり、
細かくブツブツ聞かれすぎるのも「はよ答えんかい!」とイライラしてくるので、
「流れるように自然な会話をする」というのが、UIデザインの一つの目標だと思いますが、誤解なく過不足なく伝えるのってノウハウが必要だと思いました。

音声コミュニケーションの方が、ユーザーの感情を強く揺さぶる

元々作ろうとしていたアプリで、完了時に「すごいですね!完璧です。」と言わせようと思っていたのですが、
いざ実装すると、平坦な抑揚で話すので、煽ってるように感じました。

書き言葉と話し言葉の違いとか、ニュアンスとか、なんか文字以外の情報も混じってきてしまって、読むのと聞くので全然印象が違います。
英語音声だと、抑揚で感情を表現する機能が実装されているのですが、(それでも、嬉しい(テンション高い)/ 普通 / ガッカリ(テンション低い)の3つ)
意外と声の調子って大事だし、文章で「バカ」と読むのと「バカ」と言われるのでは、心への響き方が全然違います。

音声コミュニケーションにより、Alexaとユーザーとの関係性はより親密なものになるのですが、
逆に距離感?が難しいと思いました。

公式も、「Alexaのキャラを大切に」と言っていました。

Alexaは、親しみやすくて明るく、面倒見のよい性格です。タスクの妨げになっているものがあれば正直に言いますが、楽しく皆に好かれます。世間話もしますが、決して押し付けがましくならず、不適切な発言もしません。

スキルの話し方やトーンをAlexaのペルソナに近づけるようにしてください。VUIを自然で会話的にするというのも1つの方法です。 「ありがとうございます」や「すみません」など、応答にバリエーションを付けるのもよいでしょう。質問でユーザーの関心を惹きつけるのも、優れたVUIデザインのテクニックです。

Cake Walk: Designing the VUI

デパートの受付嬢とか、CA、ホテルのコンシェルジュさん、あるいはちょっといいレストランのウエイトレスさんとか、
そういうイメージで「Alexaだったらどんな風に話すかな?」とやりとりを想像するのがいいと思います。

なりチャ*1、懐かしいな。

聞き取りについて

音声認識の聞き取りについては、「思ったよりは」精度がいいと思いました。
よく「耳の遠いおばあちゃんか!」と突っ込まれますが、
そもそも人間も、前提知識のない分野での聞いたことのない単語を聞くと、聞き間違いしますよね。

新人に電話応対させたときに、社名・部署名が「どこだよ」ってメモが渡ってきたりしませんか?

Alexaの構造として、
1.音声認識AIが、音声を聞き取って文字に起こす
2.構文処理AIが、文字を解釈して構成要素(英語で習ったSVOCみたいなヤツ)に変換する
3.変換した内容から、キーワードを抽出し、キーワードに紐づくプログラムを実行する。
という流れになっているようです。

なので、
1.音声がうまく聞き取れない(ノイズが多い環境、きつい方言など)
2.音声認識AIの辞書に該当する単語がない(キラキラ人名など)
3.音声認識AIまたは構文解析AIが、単語区切りを間違えている(金太の大冒険
という状況で、うまく聞き取れないようです。

そのため、開発者側でできる対策として、
1.人間が発話しやすい命令にする(長すぎる単語や、早口言葉みたいな単語はNG)
2.Alexaが聞き取りやすいように、平易な単語、短いセンテンスにする。
3.たくさんのサンプル発話(言い方辞書)を作って、AIをチューニングする
というやり方が必要です。

特に、設計の時には文字や図で設計図を書くのですが、それを一回発話して、
できれば録音して聞いてみるのがいいと思います。

「やっぱり言いにくいな」とか「あー。こうやって聞き取っちゃったか。」
と確認しながら、チューニングしていくといいと思います。

「台本」は必要かも

Alexaの機能設計ガイドでも推奨していた通り、
Alexaとの会話をまとめた「台本」は必要だと思いました。
加えて、内部の状態をまとめた「ステートチャート図(状態遷移図)」も大切です。

普通の会話もそうですが、
「ご注文はハンバーガーでよろしいですか?」の返事の「はい」と、
「セットでポテトをおつけしますか?」の返事の「はい」では、
同じ「はい」でも内容(機能)が異なります。

どんな言葉があって、どの状態の時にどんな状態に遷移するか整理しておかないと、ちょっと複雑な機能になった途端、会話のパス(経路)がぐちゃぐちゃになりかねません。

あくまで「情報を引き出す」ことに特化しておいた方が無難

上記の音声認識問題と関連して、なるべくAlexaで登録・削除をする機能は避けておいた方がいいのかな?と思いました。
入力は、確認やら何やらで多くのパラメータが必要ですし、
パラメータが多いということは、会話のパス(経路)や、発話のゆらぎもふえます。

ガッツリ入力したい場合は、どこか別のフォームで文字入力でやっておいて、
それをAlexaでハンズフリーで確認するのが、ユーザーの負担も少ないと思います。

オラに勇気を分けてくれ!

というわけで、1個のスキルをリリースできたことでちょっぴり自信はついたものの、
本丸のスキルを作るには、まだまだ山が大きそうです。

やはりAlexaとの親和性を考えるなら、サーバーはAWSなんでしょうか。
でも「設定をミスって法外な請求が来た」と聞き、ビビっています。

オカンハックのランディングページ?ポートフォリオページ?もおいおい作っていきたいのですが、
AWSはオーバースペックなのでは?という懸念もあります。

どうすればいいですかね。
オラにもう一歩踏み出す勇気を分けてくれ!

*1:なりきりチャット」のこと。漫画やゲームの登場人物になりきって文字チャットを行う遊び。