音声合成エンジニアのオクダです。今回のテーマは「Alexaスキルのデザイン・開発・公開」です。(アレクサ)はアマゾンエコーの実装技術の名前です。最近は音声認識技術が向上し、応用開発が現実的になってきました。Alexaと応用開発Alexaは、以下のような仕掛けになっています。Dotが受信した音声は、アマゾンのAlexaに送信されます。Lambdaなどの機能を呼び出すというのが基本的な流れです。最初に決めなければならないのがinvocationNameです。ウェイクワードとも呼ばれ、Alexaを自分のスキルに向かすための言葉となります。英数字は使用できないことです(漢数字はOK)。登録されているinvocationNameは使用できません。認識されにくい言葉も使用できない(弊社名「フレクト」はfreakedと誤認される)。助詞「に」「は」を含むinvocationNameも使用できません。invocationNameが検知されたら、以後ユーザーが話した内容がコールバックされてきますが、そのままテキストで通知されるわけではありません。事前に拾いたい文書表現をIntentとSlotという形で登録しておき、これに該当するものだけが処理対象になります。図示すると以下のようになります。この図ではPostCodeSearchという名前のIntentが定義され、「の郵便番号を」の周辺に4つの{}書きされたSlotが定義されています。Alexaはこの文法構造に該当する発話を捉え、Lambda関数をコールバックしてきます。intent名に使用できるのは英字大文字小文字とアンダースコアのみで、数字は使用できません。Slotsの作成Alexaでいうslotとは、Synonym(同義語)を含んだ単語群の総称です。カスタムslotだけでなく、標準slotも利用可能です。他にも「日付」を表すAMAZON.DATE、「数字」を表すAMAZON.NUMBERなどがあります。intent同様、slot名に使用できるのは英字大文字小文字とアンダースコアのみで、数字は使用できません。intent名との重複も許可されていません。ValuesとSynonymの定義Slotに含まれる実単語をvaluesと呼びます。ひとつのslotに複数のvalueを指定することができます。valuesには、Synonym(同義語)も登録出来ます。ConsoleのEndpointをLambdaに登録する必要があります。Consoleに登録する必要もあります。handlerである、lambda_handlerにeventが送られてきます。type情報やintent情報)が含まれています。outさせたい言葉をtextで指定します。outさせる言葉を決定することも可能です。次に具体的にスキルの開発方法について説明します。スキル「全国の郵便番号検索」(https://www.amazon.co.jp/dp/B07PBXH5Y9)日本郵政が公開している住所と郵便番号の対応表を使って、住所に対応する郵便番号や、その逆を答えてくれるスキルです。Lambda関数からS3にアクセスする必要がありますので、AWSLambdaBasicExecutionRoleとAmazonS3FullAccessをLambda関数のRoleとして設定します。Lambda関数内の処理では、intentの特徴より、住所から郵便番号を読み上げるか、郵便番号から住所を読み上げるかを決定します。(https://www.amazon.co.jp/dp/B07PYQ3Z94)西暦から元号を、または元号から西暦を答えてくれるスキルです。日本人のみなさんなら、特に公文書記述でよく必要となる暦の変換です。このスキルを開発している途中で、新元号「令和」が発表されました。Alexaが事前に知るはずもない、完全に新しい単語ということですが、このような場合はSlotにValueを登録することで認識を改善することができます。Valueに「令和」が登録されていない場合、Alexaは既知単語のどれかに当てはめようとし、失敗します。Valueに「令和」を登録することで、このValueへと単語認識を誘導することができます。このノウハウは活用シーンがいろいろあるのではないでしょうか。スキル「よく当たるタロット占い」(https://www.amazon.co.jp/dp/B07PPN25MT)このスキルでタロット占いをお願いすると、本日のタロットカードを1枚引いてくれます。Spotなど、Amazon製のディスプレイ付きスマートスピーカーは、音声に加えて映像を表示させることができます。(ただし、ディスプレイがあってもiPhoneやAndroidには画像を表示することが出来ません。language」を使用します。Dotからイベントが送られ、そのコンテキストのsupportedInterfacesが空になっています。Spotからイベントが送られ、そのコンテキストのsupportedInterfacesにAlexa.Presentation.APL属性が含まれています。Alexaに送信します。Spotで表示するという仕掛けになっています。この場合はAlexaに通知するパスが無認証でアクセスできるように配慮する必要があります。開発が完了したスキルを公開するには、アマゾンによる審査を受けなければなりません。ここでは筆者が経験した代表的な指摘事項とその対応方法について記載します。呼び出し名が一般的である。呼び出し名がAmazonが指定するフォーマットに合っていない、スキルの呼び出し名に、助詞や接続詞を使用できないなどがある。呼び出し名をAmazonが指定するフォーマットに変更する。スキルの説明スキルの説明には、ユーザーがスキルを使用する際に十分に理解できるように説明しなければならない。Alexa標準機能と混同するような説明を記載してはいけないなどがある。対応方法Amazonからの指示通りに、スキルの説明文を修正。サンプルフレーズサンプルフレーズ1番目には「アレクサ、...を開いて」にしなければならない。言い回しの異なるサンプル発話が不足している。サンプル発話に記載したフレーズは必ずIntentに登録しなければならない。Amazonの指示通りに、サンプルフレーズに使用している言い回しをSlotに追加したりして対応した。Slot関連Slotに使用できない記号、Slotに使用できるが正しく認識できない記号などがあります。記号「(」、「)」や「〜」や「−」をSlotに使用することはできません。Textではスペースは文字として変換されません。対応方法Intentから記号を全て削除しました。標準Intent関連AMAZON.CancelIntentには、開発者には見えない既存のSlotが含まれています。そのSlotをAMAZON.StopIntentに登録してはいけません。typeとして使用している状態で、特定の言葉を話すとスキルがエラーを返します。valueが複数の標準Intentに使用されないようにする。AMAZON.DATEとして認識して欲しくない場合は、別途カスタムSlotを定義したり、スキルがエラーを返さないようにLambdaを修正しなければならない。終了処理スキルがタスクを完了した後、ユーザーへのプロンプトが提示されていないにもかかわらずセッションが開いたままになっている。ユーザーが2回連続無言だとエラーになる。対応方法スキルがリクエストを完了した後、ユーザーの入力を求めるプロンプトを提示していない場合はセッションをクローズします。Lambdaでイベントのリクエストタイプが"SessionEndedRequest"の時、終了処理を入れてあげます。教えて下さい」から「調べたい年月日を教えて下さい」に変更して対応しました。著作権Amazonにとって知的財産権の保護は非常に重要です。コンテンツの内容を使用する権利を持っていることを示す文書を提示してください。コンテンツ変更により、著作物を使用を諦めました。著作物の商用利用が可能な場合、著作元URLをスキルの詳細説明欄に貼り付けました。Alexaを使用して、Alexaスキルの開発・公開を行いましたが、開発する苦労を改めて実感しました。音声アシスト分野の利用はこれから需要が見込まれるので、引き続き、調査・開発に取り組んでいきたいと考えています。専門知識に合格しました新年明けまして、おめでとうございます。EventBridgeにトラスト構想の夢を見るこんにちは、遠藤@Cariot事業部です。(12/4)みなさんこんにちは。技術開発室の岡田です。3はじめまして、CI事業部の金子です。〜黄金の風〜こんにちは。Cariot事業部の遠藤です。専門知識に合格しました月別アーカイブはてなブログをはじめよう!flect_techさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。