JAWS-UG近畿・中国レポート 第1回
世界で一番濃いAlexa勉強会がJAWS-UG神戸で開催!
「Pardon?」連発を乗り越えたAlexa AMIMOTO Ninja開発秘話
2016年08月02日 07時00分更新
英語ネイティブじゃない地獄を味わう
とはいえ、ここに至るまでは並大抵ではない苦労があったようだ。Alexa Skills Kitは話者の話した内容をAlexa側が言語解析し、定義済みの意図にあたるかを判別し、意図と変数のセットをLambdaに渡すというフローをとる。「どういう意図で、どういう文脈で、なにが言われたかを判別するようになっている」(澤登さん)。そして、このLambdaの処理結果がレスポンスとなり、Echoデバイスなどから音声として再生されるのだが、これを実現するためにはLambda FunctionのデプロイとAmazon Developer ConsoleでSkillsの登録という2系統の処理が必要になる。
Alexa Skills Kitは意図を表わす「Intent」、意図と自然言語のマッピングである「Utterances」、言語の選択肢をリスト化した「Slot」、意図とスロットの一覧である「Intent Schema」、Alexaごとのやりとりを識別する「Session」などの要素から構成される。たとえば「XXXのジムリーダーは誰?」という質問の場合、Lambdaに渡されるインテントは「リーダーは誰?」、「XXX」が変数と判断される。あとはジムリーダー情報をLambdaが他のAPIに問い合わせ、答えをEchoデバイスを戻すことになる。
このうちIntentは組み込みのものが用意されている。たとえば、キャンセルというIntentには、「Cancel」や「Newer Mind」「forget it」などのUtterancesがひもづけられている。そのため、Forget itと認識すると、Alexa側ではキャンセルの意図と理解するわけだ。Alexa AMIMOTO Ninjaでも特定のIntentに対して数多くのUtterancesを登録しているが、勘所としては「基本小文字で記述する」「シナリオと異なるタイミングで送信されることを念頭に置く」「Utterancesの記述方法を守る」「精度の高いYesIntentとNoIntentを活用する」などがあるという。
一番苦労したのはSlot作り。組み込みのSlotが使える方がよいが、基本的には米国仕様だ。そのため、今回のようなオリジナルシナリオでは、フリーワードを受け取り、独自に定義した質問のリストと突き合わせることにした。これをリスト化をしないと、聞き取った内容をそのまま変数に入れられてしまい、「英語ネイティブではないと、基本的に地獄」(澤登さん)となるという。
とはいえ、この質問作りもまた地獄。ここには英語の発音の壁が立ちはだかる。「日本人が『WordPress』と発音しても、the valkyliesやworth press、was the priceなど、まるで『WordPress』として聞いてくれない」(澤登さん)。そこで、AMIMOTO Ninjaでは別途リストを作り、「the valkiliesもworth pressもwas the priceも全部WordPressと聞こえたことにする」という無理やりな対応で乗り切った。誤認識される言葉のエイリアスを地道に作ったとのことで、英語ネイティブではない苦しみをたっぷり味わったようだ。
「Pardon?」の連発で心が折れないために
一方、レスポンスに関しては、質問に対応したテキスト、応答がないときのテキスト、Webコンソール上に表示するテキストの3つを用意する。ここでの勘所はSSML(Speech Synthesis Markup Language)という発話用のマークアップ言語を用いることで、自然なスピーチを実現できるというノウハウだ。「AMIMOTOってそのまま発音すると聞こえづらいので、発音記号を使った」(澤登さん)とのことで、こちらも微調整を繰り返したという。
また、聞き取れなかったときの対応は優しくというのが基本。「回答とかで『Pardon?』が続くと、本当に心が折れる。なにを言っても『Padron?』になるので、みんなやだーってなった(笑)」(澤登さん)という経験談で、会場はまさに爆笑の渦に包まれる。そのため、AMIMOTO Ninjaでは「Pardon?」ではなく「聞き取れないでごめんなさい」という丁寧な応答を返しつつ、2回以上聞き取れなかった場合は、オススメのサービスを紹介するという母心なユーザーエキスペリエンスを手がけたという。
実際のLambda FunctionはPythonで記述。デバッグがWebの管理画面で行えるほか、Echoデバイスを使えば、そのまま実機テストも可能だ。聞き取った内容がそのままSkillsの管理画面に反映されるため、可能な限りネイティブでテストを実施した方がよいという。また、デプロイに関しては、Skillの定義にまだAPIがないため、Intent Scheme、Custom Slot、UttaranceはおとなしくWebブラウザから入力する。Lambda FunctionのデプロイはLamveryがオススメだという。さらに公開に際しては、ベストプラクティスの遵守が必要になるので、こちらもきちんとチェックしておこう。
まだまだ発展途上のAlexaの開発環境と英語ネイティブではないが故の苦労がたっぷり盛り込まれた涙ぐましいセッション。自然言語というナイーブな素材を扱うだけに、試行錯誤も多かったようだ。しかし、どMなエンジニアたちの好奇心はますます刺激されたようで、会場でもいろんな質問が飛び交っていた。2回目以降も楽しい創作物が生まれそうで、いまから楽しみである。
この連載の記事
-
第2回
デジタル
そんな使い方あかん!やらかした事例満載のJAWS-UG大阪 - この連載の一覧へ