Alexa Smart Propertiesスキルに無指名対話を追加する


Alexa Smart Propertiesスキルに無指名対話を追加する

Alexa Smart Propertiesのスキルを作成する際に、無指名対話を追加できます。無指名対話では、スキル名を発話に含めなくても、施設やそのサービスに関する情報をAlexaにたずねることができます。たとえば、ユーザーは、「Alexa, ask {skill name} for the visitor wi-fi password.」(アレクサ、{スキル名}に訪問者用のWi-Fiパスワードを聞いて)と言う代わりに、「Alexa, what's the visitor wi-fi password?」(アレクサ、訪問者用のWi-Fiパスワードは?)と言うことができます。 無指名対話を追加すると、スキルで以下の機能を実行できるようになります。

  • ユーザーに施設固有の情報を提供する - たとえば、次のような質問に対応できるようになります。
    • 「Alexa, what is the Wi-Fi password?」(アレクサ、Wi-Fiパスワードは?)
    • 「Alexa, when is the dining room open?」(アレクサ、ダイニングルームの営業時間は?)
    • 「Alexa, where is the pool?」(アレクサ、プールはどこ?)
  • 施設固有のリクエストをルーティングおよび実行することでスタッフをサポートする - たとえば、次のようなリクエストに対応できるようになります。
    • 「Alexa, my door needs maintenance.」(アレクサ、ドアのメンテナンスが必要)
    • 「Alexa, I need more pillows.」(アレクサ、枕がもっと欲しい)
    • 「Alexa, I lost my mail key.」(アレクサ、メールキーをなくした)

以下のセクションでは、Alexa Smart Propertiesスキルに無指名対話を追加するための要件、ベストプラクティス、手順を説明します。

スキルに無指名対話を追加する手順

スキルに無指名対話を追加するには

  1. スキルが要件を満たしていることを確認する
  2. 無指名対話のユースケースを選択する
  3. 対話モデルを更新する
  4. スキルの無指名対話にアクセスする
  5. 無指名の権限でスキルマニフェストを更新する
  6. 無指名対話のインテントを指定する
  7. (オプション)CanFulfillIntentRequestインターフェースを実装する
  8. 開発中のスキルをテストする
  9. スキルの認定を申請して公開する
  10. 施設で公開中スキルを有効にする
  11. スキルをモニタリングする

ステップ1: スキルが要件を満たしていることを確認する

無指名対話をサポートするには、Alexa Smart Propertiesスキルが以下の要件を満たしている必要があります。

情報 - 対象施設、およびAlexaが扱う特定のドメインセットの一部と関係のない情報(天気など)をスキルで提供することはできません。詳細については、無指名対話のユースケースを選択するを参照してください。

対話モデル - 対話モデルは明確かつ簡潔でなければなりません。詳細については、対話モデルの更新を参照してください。

ロケール - スキルで使用できるのは、Alexa Smart Propertiesでサポートされている言語または言語ペアです。

ステップ2: 無指名対話のユースケースを選択する

スキルに無指名対話を追加する計画の一環として、発話にフォーカスするための包括的なユースケース(メニュー、食事、地域のおすすめ、緊急通知など)を5~10個程度選んでおきます。このセクションでは、各サブスクリプション(Healthcare、Senior Living、Hospitality)の一般的なユースケースの概要と、スキルが無指名対話では提供できないコンテンツに関するガイドラインについて説明します。

スキルのすべての対話が無指名対話である必要はありません。対象となるユースケースを絞り込む前に、以下のベストプラクティスを考慮し、主要な関係者(スタッフなど)と協力して、需要の高い内容を確実に解釈できるようにしてください。

最初に着手する質問

まず、ユーザーが実際に何を求めているのかを考えてみましょう。考えられるリクエストのすべての組み合わせに対応することが重要に思えるかもしれませんが、現実にはユーザーの発話は日常的な同じ発話に偏る傾向があります。たとえば、自立生活施設の入居者が「when is dinner」(夕食はいつ?)や「what is for dinner」(夕食は何?)とたずねることはありますが、「what canapes are on the menu.」(メニューにあるカナッペは何?)とたずねることはめったにありません。 まずは基本的なものから始めて、より詳細なリクエストに取り組むようにしてください。

  • ユーザーがスタッフに求めることは何か? 「When is my physical therapy appointment?」(理学療法の予約はいつ?)
  • ユーザーが通常繰り返し求めることは何か? 「What is on the menu for lunch today?」(今日のランチのメニューは?)
  • 音声で操作しにくい可能性があるAlexa機能は何か? 「I want to book a hair appointment.」(美容院を予約したい)
  • 簡潔で正確な応答が重要になるのはどのようなシナリオか? 「I need help.」(助けて)

関連資料を起点とする

Alexaを利用するユーザー向けに、ルーム内の関連資料やトレーニングコンテンツを用意する必要があります。そのコンテンツで特定されたサンプル発話を起点として、そこから逆算して作業を進めてください。

ブロックされるカテゴリー

スキルで提供できる機能であっても、無指名対話では以下のカテゴリーはブロックされます。これらのカテゴリーに該当するユースケースは選択できません。

  • スマートホーム(「Turn off the lights.」(照明を消して))
  • ミュージック(「Play pop music.」(ポップミュージックをかけて))
  • 天気(「What's the temperature?」(気温を教えて))
  • 時刻(「What time is it?」(今何時))
  • タイマー(「Set a 15-minute timer.」(15分のタイマーをセットして))
  • アラーム(「Set an alarm for 6 AM.」(アラームを午前6時にセットして))
  • 通話(「Call the front desk.」(フロントに電話して))
  • オーディオブック(「Read Harry Potter.」(ハリーポッターを読んで))
  • ビデオ(「Play The Lost City.」(「ザ・ロストシティ」を再生して))
  • 施設に関連のない情報(「What's the news?」(ニュースを教えて))
  • Alexaの意見(「What's your favorite song?」(好きな曲は?))
  • 共通インテント(「Stop」(止めて)、「Pause」(一時停止して)、「Exit」(終了して))

Healthcareのユースケース例

ユースケース 説明 サンプル発話

ナースコール

呼び出しのシナリオや、スタッフに助けを求めるシナリオに対応します。

「I need a nurse.」
「I need help.」

カレンダー

イベントの時間やスケジュールに関するリクエストを行います。

「When is my physical therapy appointment?」
「When is discharge?」

FAQ

施設全般に関する内容です。

「When is the cafeteria open?」
「What is the address?」

メンテナンス/設備に関する問題

サービスリクエストのルーティングや、重要な設備に関する問題の指摘を行います。

「My bed is broken.」
「The monitor is beeping.」

移動のサポート

就寝の準備、トイレの介助、ウォーキングの通知、交通手段の予約をサポートします。

「I need help getting to the bathroom.」
「I need a ride home.」

アイテムのリクエスト

一般的なアイテムのほか、粉ミルクなどの患者固有のニーズに対応する場合があります。デバイスの場所によって異なります。

「I need more toilet paper.」
「I need a pillow.」

食事とメニュー

患者が食事を待っていることをスタッフに知らせたり、カフェテリアについての情報を伝えたりします。

「Im am hungry.」
「What is for dinner?」

落下の連絡/疼痛

ナースコールや投薬依頼と組み合わせることができます。

「I have fallen down.」
「I am in pain.」

Hospitalityのユースケース例

ユースケース 説明 サンプル発話

チェックアウト

チェックアウト時間を説明したり、チェックアウトプロセスをトリガーしたりします。

「Check out.」
「When is checkout?」

アイテムのリクエスト

室内のアメニティをハウスキーピングにリクエストします。

「I forgot my toothbrush.」
「I need more towels.」

FAQ

施設全般に関する内容です。

「Where is the cafe?」
「What is the hotel address?」

メンテナンス/設備に関する問題

サービスリクエストのルーティングを行います。

「My sink is clogged.」
「The fire alarm is beeping.」

交通手段

交通手段の予約や、駐車係への事前連絡を行います。

「Book a ride.」
「Tell the valet I need my car.」

カレンダー

イベントの時間やスケジュールに関するリクエストを行います。

「Book a show.」
「What is happening today?」

食事とメニュー

1つ以上の館内施設での現在および今後のダイニングメニューについて、食事注文のリクエストを行います。

「Order room service.」
「What is on the menu?」

インターネット

Wi-Fiの接続方法に関するチュートリアルや、静的なWi-Fiの名前・パスワードの情報を提供します。

「How do I get connect to the wifi?」
「What is the wifi password?」

Senior Livingのユースケース例

ユースケース 説明 サンプル発話

チェックイン

スキルの毎日のチェックインフローをトリガーします。

「Check in.」
「Good morning.」

カレンダー

イベントの時間やスケジュールに関するリクエストを行います。

「When is my hair appointment?」
「What is happening today?」

FAQ

施設全般に関する内容です。

「Where is yoga?」
「What is the address?」

メンテナンス/設備に関する問題

サービスリクエストのルーティングを行います。

「My sink is clogged.」
「The fire alarm is beeping.」

交通手段

移動や交通手段の予約をサポートします。

「Book a ride.」
「I need a ride to the doctor.」

アイテムのリクエスト

デバイスの場所によって異なります。

「I need more toilet paper.」
「I want the newspaper.」

食事とメニュー

館内施設のメニューに関する質問や、フードデリバリーのリクエストを行います。

「When is dinner?」
「What is on the menu for lunch?」

落下の連絡/疼痛

ナースコールやその他のサポートと組み合わせることができます。

「I have fallen down.」
「I am in pain.」

ステップ3: 対話モデルを更新する

対話モデルの精度を最大限に高めるために、対話モデルをデザインするときは以下のベストプラクティスを考慮してください。

  • スキルの説明はわかりやすいものにします。
  • 説明的なインテント名を使用します。たとえば、BookingIntentよりもCarBookingIntentの方が適しています。
  • インテントの意図を反映したサンプル発話を用意します。
  • 本当の同義語を使用します。たとえば、「rental car」(レンタカー)という名詞は「returning a car」(車を返す)という動作と同じではありません。 新しいワードは、同義語としてではなく、別に新しいスロットを作成してください。
  • 各サンプル発話に含めるスロットは2つ以下にします。たとえば、「Can you tell me about the {amenity}?」「Can you tell me the {info type} of {amenity}?」は問題ありませんが、「{question_type} {verb} {quantifier} {info_type} {amenity}?」などのサンプル発話は避けてください。
  • スロット値が入っている場合も含め、自然な日本語に聞こえる答えをAlexaが返せるようにします。
  • (オプション)意味は異なるが読みは同じ語句(「gray」と「grey」など)に対するサポートを含めます。

スキルに以下の特性が含まれていないことを確認してください。

  • サンプル発話として使用されるスロット値(「{Slot}」など)。
  • 概念が混同するインテント。たとえば、場所(「レストラン」など)とアクティビティ(「夕食を食べる」など)の両方を説明するために、1つのインテントを使用しないようにします。代わりに、場所を表すインテント(「Where can I find {location}?」)と、アクティビティを表すインテント(「Where can I {activity}?」)を別々に作成します。
  • スロット値としてのサンプル発話。たとえば、サンプル発話として「{helpSlot}, where is the {location}?」を作成し、スロット値として「I need some help」を含めるようなことはしないでください。

以下に、ベストプラクティスの対話モデルの例を示します。

重複発話を見つけて削除する

重複発話とは、複数のインテント間でフレーズが重複することを指します。ユーザーの発話が目的のインテントにルーティングされる可能性を高めるために、発話プロファイラーなどのツールを使用して、重複発話や発話のカバー範囲の不足を検出することができます。

例:"a painkiller"

スキルには以下の2つのインテントがあります。

  1. GetMedicineIntent(薬のリクエスト用)
  2. NeedWaterIntent(飲料のリクエスト用)

開発者はAMAZON.Drinkのビルトインスロットを使用して、すべての飲料をカバーしています。ビルトインスロットは、自分でスロットを管理する手間をかけずにフレーズのバリエーションをカバーできるため、活用することをお勧めします。開発者は、薬の種類に応じたカスタムスロットも用意しています。

ところが、開発者が発話プロファイラーツールを使用してインテントとスロットの解決をテストすると、「a painkiller」というフレーズでは両方のインテントが返されます。

これはなぜ重複発話になっているのでしょうか。 発話プロファイラーの出力では、SLOTの下に"Drink: painkiller"という値があり、「painkiller」が飲料として認識されたことが示されています。

正しいインテントは返されているため、開発者はこれらのインテントをそのままにしておくことを選ぶ可能性があります。このフレーズが誤ってルーティングされる危険性よりも、AMAZON.Drinkスロットの有用性の方が上回っているからです。ただし、一部のリクエストはNeedWaterIntentにルーティングされる恐れがあります。

ステップ4: Alexa Smart Propertiesスキルの無指名対話にアクセスする

スキルに無指名対話を追加する前に、開発者アカウントを許可リストに登録して、スキルマニフェストで無指名対話の利用可能状況タイプを有効にする必要があります。

施設用スキルの機能と権限を有効にするを参照してください。

ステップ5: 無指名の権限でスキルマニフェストを更新する

ベンダーIDを許可リストに追加したら、スキルマニフェストを更新して、スキルがAlexa Smart PropertiesユニットからのNFIリクエストをサポートすることを示す必要があります。このステップは、ASK CLIでのみ完了できます。

  • ASK CLIがコンピューターにインストールされていることを確認します。
  • 最新のスキルマニフェストを取得します。
  • 任意のJSONエディターでマニフェストを開きます。
  • カスタムセクションを更新して、"nameFreeInteraction"のavailability権限を以下のように追加します。
"nameFreeInteraction": {
    "availability": ["PREFERRED"]        
}, 
  • 更新したマニフェストを保存してプッシュします。

以下は、無指名対話の利用可能状況タイプを指定したスキルマニフェストの例の一部です。

"custom": {
        "endpoint": {
          "uri": "arn:aws:lambda:us-east-1:040623927470:function:sampleSkill"
        },
        "nameFreeInteraction": {
            "availability": ["PREFERRED"]        
        }, 
}

ステップ6: 無指名対話のインテントを指定する

インテントがNFIの対象であることを示すには、インテント起動フレーズにインテントを追加する必要があります。インテント起動フレーズを更新するには、以下の2つの方法があります。

  1. Alexa開発者コンソール
  2. Alexa Skills Kitコマンドラインインターフェース

Alexaは、モデルのトレーニング中に無指名対話コンテナーを使用して、指定された無指名対話の発話がカスタムスキルにルーティングされる動作を向上させます。

開発者コンソールでのインテントの追加:開発者コンソールで、ビルド>呼び出し>インテント起動フレーズに移動します。マニフェストが正常に更新されると、+ インテントを追加ボタンがクリックできるようになります。NFIの対象となるすべてのインテントを追加してください。追加する必要があるのはインテント名だけです。インテントのサンプル発話を追加する必要はありません。すべてのインテントを追加したら、モデルを保存してビルドします。

スキル対話モデルへのインテントの追加Alexa Skills Kitコマンドラインインターフェースをスキル開発に使用する場合、インテント起動フレーズをスキル対話モデルのJSON(例:skill.json)に直接追加できます。_nameFreeInteractionオブジェクトをinteractionModelオブジェクト内に追加します。完了したら、更新したスキルを保存してデプロイします。

次のJSONは、スキル対話用の無指名対話コンテナーを使用した簡略化された対話モデルを示しています。

(オプション)ステップ7: CanFulfillIntentRequestインターフェースを実装する

CanFulFillIntentRequestを使用すると、スキルで実行するつもりのないリクエストに対して"No"と応答することができます。たとえば、Alexaが処理した方が適切だと考えられるリクエストをスキルが受信した場合にCanFulFillIntentRequestを使用できます。スキルでは、CanFulFillIntentRequest"No"と応答することでインテントを拒否できます。これにより、Alexaはそのリクエストをほかのスキルにルーティングできるようになります。

CanFulFillIntentRequestをスキルに実装する場合、CanFulFillIntentRequestの時間は2秒未満にしてください。そうでない場合、スキルがユーザーのリクエストに応えられない可能性があります。Durationメトリクスの詳細については、AWSのLambda関数のメトリクスの使用を参照してください。持続時間が2秒を超える場合は、Operating Lambda: パフォーマンスの最適化 - Part 1およびOperating Lambda: パフォーマンスの最適化 - Part 2のAWSドキュメント内のガイダンスを参照してください。

ステップ8: 開発中のスキルをテストする

開発中バージョンのスキルをテストするには、Alexa Smart Propertiesの施設内のテストユニットでスキルを有効にします。ユニットでスキルを有効にする前に、必ずスキルを保存してビルドしてください。スキルを有効にするを参照してください。

テストのベストプラクティス

スキル内のインテントごとに、1つ以上のサンプル発話を試します。十分なサンプル発話テストができるように、同じ質問をさまざまなバージョンでAlexaにたずねてみてください。たとえば、質問に「please」や「some」を追加してみましょう。Alexaが目的のスキルを選択しない場合は、サンプル発話を更新してください。問題が発生した場合は、「トラブルシューティング」を参照してください。

スキルに以下の特性があることを確認してください。

  • 質問した後は、常に回答を待ちます。
  • 提供された情報が予想外のものであっても、役立つ回答を提供します。たとえば、数を想定している場面で文字を聞き取った場合、スキルでは、「Hmm, I didn't get that.How many visitors are you expecting?」(よくわかりませんでした。訪問者は何人ですか?)のように応答できます。 それでも数を聞き取れない場合は、「Hmm, I didn't get that.Say 'Alexa, call the front desk' to connect with our staff.」(よくわかりませんでした。「アレクサ、フロントに電話して」と言って、スタッフに連絡してください)という応答も考えられます。
  • その施設や周辺地域に関係のない質問には答えません。
  • 「Exit」などの基本コマンドを常に尊重します。

自動音声認識(ASR)の認識エラーを解決する

自動音声認識は音声をテキストに変換するサービスですが、人同士の会話と同様に、言葉の聞き間違えが起こる場合があります。

たとえば、「b」の文字が「d」に聞こえることがよくあります。

ASRの誤認識は、ユーザーのアクセント、単語同士の相似性(「pear」と「pair」のような同音異義語など)、環境ノイズなど、さまざまな要因によって発生します。これらのエラーを検出するための唯一の方法は、人間の声でテストすることです(AWS Pollyのような合成音声では、ASRのエラーを確実にトリガーすることはできません)。

EchoデバイスまたはAmazon開発者コンソールでテストする

発話が常に失敗していることに気付いた場合、Alexaが聞き取った内容を確認するには、2つの方法があります。最も簡単な方法は、Amazon開発者コンソールのテストセクションを使用することです。これは、入力フィールドのマイクアイコンを押したまま発話を行うだけです。

たとえば、「tell Jillian hello」というフレーズは音声からテキストに正しく変換されますが、「ask Jillian for help」というフレーズでは、「Jillian」という名前が誤って「Julian」と認識されます。

失敗するフレーズがユーザーにとって重要なものである場合は、対象となるインテントのサンプル発話にバリエーションを追加してください。先ほどの例では、スキルの対話モデルに「Jillian」の同義語として「Julian」を追加する必要があります。

ステップ9: スキルの認定を申請して公開する

本番環境の施設で使用できるようにAlexaチームが無指名対話のトレーニングを開始するには、スキルを公開する必要があります。認定を開始するには、担当のAmazonソリューションアーキテクトにお問い合わせください。

ステップ10: 施設で公開中スキルを有効にする

スキルの認定が完了して公開されたら、無指名対話に対応する施設でスキルを有効にすることができます。スキルを有効にするを参照してください。

ステップ11: スキルをモニタリングする

Alexa開発者コンソールを使用して、スキルメトリクスレポートを生成します。

たとえば、開発者コンソールでインテント履歴を確認することができます。このレポートには、目的のスキルにルーティングされた、集計および頻繁な発話(10人以上のゲストが使用した発話など)が表示されます。このデータにより、ユーザーがこのスキルとどのように対話しているかがわかるため、スキルの改善点を見つけることができます。

トラブルシューティング

無指名対話対応スキルのテスト中に問題が発生する場合は、以下のトラブル解決方法を試してみてください。それでも問題が解決しない場合は、Alexaソリューションアーキテクトに連絡してください。

問題: スキルが有効になっていない

現象

スキルが質問に適切に答えません。たとえば、「Alexa, what's the visitor wi-fi password?」(アレクサ、訪問者用のWi-Fiパスワードは?)と話しかけても、Alexaから「{Skill name} can help with that.Only the owner can enable skills on this device.」({スキル名}でお答えできます。このデバイスでスキルを有効にできるのは所有者だけです)という応答が返されます。 このような回答は、スキルがその施設向けに有効になっていないことを意味します。

解決方法

スキルのテストに使用するAlexa搭載デバイスでスキルを有効にします。

問題: スキルの対話モデルに発話が含まれていない、または無指名対話コンテナーにインテントが進入ポイントとして含まれていない

現象

Alexaが目的のスキルを呼び出して無指名発話を処理しません。

解決方法

無指名対話で進入ポイントとして定義されているインテントに、サンプル発話として発話が含まれていることを確認します。

問題: スキルが無指名対話に対応していない

現象

スキル名を指定してスキルを開いた場合にのみ、スキルが質問に応答します。たとえば、「Alexa, help me check out.」(アレクサ、チェックアウトを手伝って)と言ってもスキルは応答しませんが、「Alexa, open {skill name} and help me check out.」(アレクサ、{スキル名}を開いてチェックアウトを手伝って)と言うと応答します。

解決方法

Alexaソリューションアーキテクトに連絡して、スキルの無指名対話を有効にするよう依頼します。

問題: スキルがCanFulfillIntentRequest"No"と応答していない

現象

スキルが施設やローカルサービスとは無関係な質問に回答します。

解決方法

CanFulfillIntentRequestに対するスキルの応答を"No"に更新します。 カスタムスキルの無指名対話を理解するを参照してください。

問題: CanFulfillIntentResponse例外

現象

スキルがCanFulfillIntentResponse例外を受信します。

解決方法

スキルの統合テストを作成します。

問題: 発話にスロット値が含まれていない

現象

スキルがサンプル発話用のトラフィックを受信していません。

解決方法

スロット値とスロットを含むようにサンプル発話を修正します。明瞭なスロット値を使用すれば、Alexaからスキルに質問が送信される可能性が高まります。

問題: スキルのCanFulfillmentResponseの応答に2秒以上かかる

現象

スキルがCanFulfillmentResponse"Yes"と応答しても、Alexaがスキルの呼び出しを行わず、その後の無指名対話の発話を処理しません。

解決方法

スキルでCanFulfillmentResponseリクエストにすばやく応答できるようにして、Alexaがスキルを応答の対象として認識できるようにします。Lambda関数を使用している場合は、Lambdaのコールドスタートの問題を回避するためにProvisioned Concurrencyを使用します。詳細については、Operating Lambda: パフォーマンスの最適化 - Part 1およびOperating Lambda: パフォーマンスの最適化 - Part 2のAWSドキュメント内のガイダンスを参照してください。

問題: 認識された発話のバリエーションがスキルの対話モデルに含まれていない

現象

ほかのすべてのトラブルシューティング方法を試しても、スキルがリクエストを受信しません。

解決方法

聞き取られた発話が対話モードに含まれていることを確認します。「自動音声認識(ASR)の認識エラーを解決する」を参照してください。


このページは役に立ちましたか?

最終更新日: 2024 年 03 月 21 日