Alexa Conversationsのデザイン



Alexa Conversationsのデザイン

Alexa Conversationsは、AIベースのダイアログ管理アプローチです。このテクノロジーでは、理想のダイアログパスをトレーニングモデルとして使用し、会話におけるユーザーの応答や想定外のターンを幅広くシミュレートできます。対話モデルを使ったスキルの開発ではインテントベースのダイアログ管理が必要ですが、Alexa ConversationsではAIがダイアログを管理してくれます。AIは、会話のコンテキストを管理し、ダイアログターンにまたがってコンテキストを継承し、ユーザーによる選択や訂正にも対応します。好きな順序で好きなフレーズを使ってより自然な会話パターンを実現できるため、ユーザーは人間と対話するのと同じようにAlexaと対話できます。以下のセクションでは、Alexa Conversationsを使ったスキル開発におけるデザインのベストプラクティスを紹介します。

Alexa Conversationsのメリット

人の会話はフローチャートのようには進みません。2人以上で交わされる会話は、微妙に変化し、シナリオがなく、トピックも多岐にわたります。ユーザーがスキルに対して選択すると考えられる多くのパスを手動でデザインすることは、とても手間のかかるプロセスです。Alexa Conversationsを使うと、フレーズ、コンテキスト、訂正のさまざまなバリエーションをAlexaのAIが判断してくれます。このため、開発者はスキルダイアログの基礎をデザインすることに集中できます。

Alexa Conversationsとインテントベースのモデル

  • Alexa Conversations — 会話がさまざまな方向に展開する可能性のあるスキルに適しています。Alexa Conversationsを使うことで、ユーザーは好きなフレーズを使ってより自然にAlexaと対話できます。想定されるすべての会話エクスペリエンスを手動でデザインして開発するのではなく、サンプルダイアログと、呼び出すアプリケーションプログラムインターフェース(API)を指定することでAIをトレーニングし、AIがそうしたバリエーションに対応できるようにします。Alexa Conversationsは、会話の自然な流れを維持しながらタスクの実行に必要な情報を収集し、会話のコンテキストをモニタリングします。

  • インテントベースのモデル — 厳密な指示のもと、決められた順序で進むマルチターンスキルに適しています。これらのスキルでは、ユーザーがゴールに到達するために特定の手順を踏む必要があります。たとえば、順序の決まっているゲームの場合、ユーザーはまずランタンを見つけ、北に向かい、ドラゴンを倒さなければ報酬を得られません。ランタンが見つからなければドラゴンを探しに行けないのです。インテントベースのモデルは、すべてのターンを制御するスキルに適しています。ゴールに到達するために物語の流れに沿って進める必要がある場合は、このモデルを選択してください。

  • ハイブリッドモデル - 特定のリクエストに対して、インテントベースのモデルとAlexa Conversationsの両方を併用するアプローチです。既存のスキルにAlexa Conversationsを追加する場合は、このモデルを検討してください。ハイブリッドモデルは双方向に機能します。つまり、リクエストをAlexa Conversationsからインテントベースモデルに送ることも、その逆も可能です。たとえば、ピザの注文スキルでは、ユーザーはあらかじめ設定されたスペシャルピザのメニューから選ぶことも、ピザをカスタマイズすることもできます。定番メニューの場合はあいまいさがほとんどないため、インテントベースのモデルが十分に機能します。注文をカスタマイズする場合、ユーザーが提示する可能性のあるシナリオが多数あり、間違える可能性も高いため、Alexa Conversationsのほうが効果的に管理できます。

コンテキストのキャリーオーバーと代名詞

人は話すときに、話題が飛躍したり、前に話した話題に戻ったりすることがよくあります。会話を続ける中で、「それ」や「あれ」などの代名詞を使い、繰り返しを避けながら前のトピックに言及することもあります。一連のダイアログでAlexa Conversationsをトレーニングすると、AIはダイアログを自然な流れで続けられるようにコンテキストを推測します。以下は、ピザの注文スキルのコンテキスト切り替えと代名詞使用の例です。

ユーザー: ピザのミディアムでトッピングを2つお願い。
Alexa: ミディアムでトッピング2つですね。わかりました。生地の種類はどうしますか?
ユーザー: それ何人分なの?
Alexa: ミディアムは通常、大人約2人分です。
ユーザー: じゃ、それ、ラージにして。
Alexa: ラージでトッピング2つですね、わかりました。生地の種類は何がいいですか?

音声インターフェースでナビゲーションやブラウズを行うと、会話がぎこちなく不自然になる場合があります。目的を達成するために、ユーザーは、具体的で形式に沿った正しい質問を改めて考えなければいけないからです。Alexa Conversationsは、ユーザーに代わって段階的なフィルター検索を行って結果を絞り込んでいくため、ユーザーは質問やリクエストを繰り返す必要がありません。以下は、観たい映画を決めるのを手伝ってくれるスキルの例です。

ユーザー: アドベンチャー映画はどんなのがある?
Alexa: こんなアドベンチャー映画があります。 『アドリフト 41日間の漂流』、『ジュマンジ/ ウェルカム・トゥ・ジャングル』、『ブラックパンサー』などです。
ユーザー: レーティングがPG-13の映画はどれ?
Alexa: レーティングがPG-13の映画は 『ジュマンジ/ ウェルカム・トゥ・ジャングル』と『ブラックパンサー』です。
ユーザー: ザ・ロックが出てるのはどれ?
Alexa: ザ・ロックは、『ジュマンジ/ ウェルカム・トゥ・ジャングル』に出演しています。

この例では、Alexa Conversationsが前回の検索結果(『アドリフト 41日間の漂流』、『ジュマンジ/ ウェルカム・トゥ・ジャングル』、『ブラックパンサー』)を記憶し、レーティング(ユーザーは「PG-13」を指定)やキャスト(「ザ・ロック」)などのフィルターを適用して結果を絞り込んでいます。

過不足のある回答の処理

多くのユーザーが、音声エクスペリエンスは会話の1ターンで1つのトピックや質問しか言えない柔軟性に欠けるものだと思っています。そして、音声エクスペリエンスには時間がかかり、フラストレーションがたまるという印象を持ってしまうこともあります。ユーザーがもっと情報を提供したい、もっと関連性の高い質問をしてほしいと考えているからです。Alexa Conversationsでは、1度に複数スロットの情報を取得できるため、過不足のあるユーザーの回答を処理できます。ユーザーからの情報で前のスロットが埋められるので、Alexaは次の論理的な質問やプロンプトに移ることができます。以下は、ピザ注文スキルが情報過多な回答を処理する例です。このケースでは、スキルがサイズをたずねているにもかかわらず、ユーザーはそれ以外の情報(サイズとトッピング)も答えています。Alexa Conversationsでは、受け取ったユーザーインプットを次に必要になる情報として収集して会話を続けます。

Alexa: ピザのサイズはどうしますか?
ユーザー: ペパロニ、マッシュルーム、追加チーズのラージピザをお願い。
Alexa: ラージサイズで、ペパロニ、マッシュルーム、追加チーズのトッピングですね。わかりました。厚い生地と薄い生地のどちらにしますか?

やり直し不要の訂正

Alexa Conversationsはコンテキストに基づいて記憶するため、ユーザーは会話の流れの中で訂正ができます。どの部分かを指定しなくても、訂正はワンステップで行われます。以下は、予約スキルでの訂正の例です。

Alexa: 火曜日の午後1時30分にホテルにチェックインする必要があります。送迎は必要ですか?
ユーザー: やっぱり、朝の9時にして。
Alexa: 火曜日の午前9時にホテルにチェックインする必要があります。送迎は必要ですか?

Alexa Conversationsのデザイン方法

Alexa Conversationsでは自然な会話をデザインできるため、開発者は、エクスペリエンスの中でより価値の高い部分に集中できます。ここでは、ワークフローのデザイン、ダイアログの記述、ユーザーの期待値の設定に役立つAlexa Conversationsのベストプラクティスとデザイン方法をいくつか紹介します。

スキルの機能を定義する

まず、スキルのコアとなる特性をいくつか定義します。これをロードマップとして開発を進めます。たとえば、次のような特性を定義します。

  1. スキルの目的は何か? 目的は、ダイアログの方向を示す原則で、これを基にAIをトレーニングします。たとえば、ピザ注文スキルは、ユーザーが家でくつろぎながらカスタムのピザを注文し、届けてもらうようにすることが目的です。

  2. ユーザーが到達したいゴールは何か? このエクスペリエンスからユーザーは何を得られるでしょうか? ゴールが決まると、必要なAPIがわかります。たとえば、ピザ注文スキルの場合だと、ユーザーがあらかじめ決められたオプションからピザを注文することや、好みのピザをカスタマイズすることがゴールです。

  3. ユーザーがスキルで実行できるアクションは何か? これらのアクションが決まると、必要なスロットとスロットタイプを定義できます。たとえば、ユーザーはあらかじめセットになった組み合わせを選ぶことも、ピザの枚数をカスタマイズすることもできます。サイズ、生地、トッピングも選べます。

こうして定義した目的やアクションを基に、主要なユースケースに集中します。このユースケースには、ハッピーパス(最もスタンダードなパス)といくつかの代替パスが含まれます。すべての順列とエッジケース(極端なケース)を特定する必要はありません。

柔軟なフローをデザインする

フローをデザインする際には、会話の中でユーザーがたどるパスを十分に検討します。成功パターン、つまりハッピーパスのダイアログやユーザーの目的に重点を置きます。ダイアログによって、エクスペリエンスにどんな発話と応答が含まれるかが決まります。ユーザーの目的に応じて、呼び出すべきAPI、APIのリクエストを実行する条件やスロットを定義します。Alexa Conversationsは、コンテキスト切り替えや訂正を処理できるため、スキルはさまざまな状況に柔軟に対応できます。しかし、ユーザーがハッピーパスから外れたときに、最適なエクスペリエンスに戻す方法も考えておく必要があります。フローを作成する場合の考慮事項は、次の通りです。

  • ユーザーがハッピーパスから外れてしまうケースとして、デザイン(およびAIトレーニング)が必要なシナリオは何か?
  • ユーザーが想定と逆の回答をした場合はどうするか(「はい」ではなく「いいえ」と言った場合など)?
  • APIがゴールに到達できない方法で応答した場合はどうするか?
  • ユーザーがプロンプトに答えなかった場合はどうするか? セッションが終了する前にスキルが再プロンプトを促すにはどうするか?

ダイアログ作成のヒント

良い例

スキルのコアエクスペリエンスに対応するダイアログを作成する
考えられるバリエーションをすべて書き出す必要はありません。ダイアログはユーザーがどう言えばAIを効果的にトレーニングできるかを示すサンプルとなります。よいダイアログを作成することで、AIはコンテキストをスムーズに切り替え、より自然で柔軟な会話を実現できるようになります。AIが開発者に代わってバリエーションを考えます。

悪い例

エクスペリエンス全体にわたってすべてをコントロールする
多くのユーザーは、音声エクスペリエンスを制約的で順序に従って会話するものだと考えています。たとえば、20もの質問に答えないとゴールに到達できないゲームのようなものと考えています。その予想を裏切りましょう。自由回答形式の質問をしてください。

良い例

Alexa Conversationsが機能するようトレーニングする
スキルの基盤となるダイアログのデザインに時間をかけてください。それがAIをトレーニングします。ダイアログを追加したらテストし、それを繰り返します。

悪い例

訂正やコンテキスト切り替えをデザインする
トレーニング用のサンプルを提供すると、AIがこれらの要素を処理します。問題が発生したら、AIトレーニングに使用するコアダイアログに戻って修正します。

良い例

プロンプトを質問の形で終える
このテクニックを使うと、ユーザーに自分が話すターンであることを知らせることができ、同時に、スキルの目的に向かってユーザーをガイドできます。

Alexa: 「生地の種類にはプレーン、全粒粉、ガーリックがあります。どの生地にしますか?」

悪い例

ユーザーが選べるオプションを提供してプロンプトを終える
ユーザーはAlexaがオプションをすべて読み上げる前に割り込む可能性があります。

Alexa: 「ピザ生地の種類はどれにしますか? プレーン、全粒粉、ガーリック。」

良い例

リストの選択肢は4つまでにする
人間のワーキングメモリーは、物事を平均で一度に4つまでしか記憶できないと言われています。

Alexa: 「ピザのトッピングは何にしますか?」

ユーザー: 「ペパロニ、ソーセージ、オリーブにして。」

Alexa: 「ブラックオリーブとグリーンオリーブはどちらがいいですか?」

ユーザー: 「ブラックオリーブでお願い。」

Alexa: 「わかりました。薄い生地のピザで、ペパロニ、ソーセージ、ブラックオリーブのトッピングですね。ほかに何かありますか?」

悪い例

たくさんのオプションでユーザーをうんざりさせる
すべてを覚えておこうとするとユーザーは疲れてしまいます。

Alexa: 「どんなトッピングがいいですか? トッピングには、ペパロニ、ソーセージ、追加チーズ、アンチョビ、オニオン、追加ガーリック、ハム、ホワイトマッシュルーム、ブラウンマッシュルーム、ピーマン、ハラペーニョ、パイン、ブロッコリー、ほうれん草、グリーンオリーブ、ブラックオリーブがあります。」

ユーザー: 「えーっと...何だっけ?」

良い例

常にリクエストを明示的に確認する
ユーザーは自分のリクエストが聞き取ってもらえたかを知る必要があります。

Alexa: 「フライトは神戸空港を午前7時30分に出発します。リマインダーを設定しますか?」

ユーザー: 「神戸空港から神戸市内まではどのくらい離れてる?」

Alexa: 「神戸市内まではおよそ8キロです。」

悪い例

Alexaのリクエスト確認では代名詞を使用しないようにする
Alexa Conversationsでは、ユーザーの発話では代名詞を使えますが、Alexaのターンでは代名詞の使用を控えてください。

Alexa: 「わかりました。ブルックリンピザとファミリーサイズのシーザーサラダですね。ほかに何かありますか?」

ユーザー: 「ファミリーサイズはいくら?」

Alexa: 「それは1,500円です。別のにしますか?」

良い例

ユーザーが新しい機能を見つけられるようにする
ユーザーに何ができるかを教え、より自然な会話パターンをユーザーが見つけられるようにします。初めて使うユーザーがサポートを必要としていたり、新しい機能が追加されたりしたときには、ヒントを提供します。

Alexa: 「都市名はいつでも変更できます。」

悪い例

言うべき発話を正確に指示する
どう言えばいいか特定の方法をユーザーに教えないようにしてください。そうすることで、ユーザーはそれがスキルと対話する唯一の方法だと考えるようになります。

Alexa: 「『アレクサ、出発地を都市名に変更して』と言うと出発地を変更できます。」

良い例

ゴールに到達したら先を読んでさらなる機能を提案する
Alexa Conversationsは、ユーザーが自分では見つけられないかもしれない機能について、先回りして紹介することができます。

悪い例

エクスペリエンスの中で何かを勧める
うるさく言われるのは誰だっていやなものです。ユーザーが目的に向かって行動しているときに、物事をややこしくすることは避けましょう。

Video: Best practices for VUI design in Alexa Conversations(英語)

適切な期待値を設定する

Alexa Conversationsには、ユーザーがまだ気付いていないさまざまな新しいメリットや機能があります。期待値を高めたり、ユーザーがこうした新しい機能と対話する方法を提案してください。

  • それとなくヒントをほのめかす - ユーザーが初めてワンステップの訂正、代名詞、トピックの変更などの機能を使ったと想定してフローをデザインします。初めて使うユーザーには少し案内が必要かもしれません。エクスペリエンスのヒントか、ダイアログの一部を提供しましょう。ここでは、ヒント部分を「」で囲んでいます。

    ユーザー: アレクサ、ピザを頼みたいんだけど。
    Alexa: わかりました。トッピングをいくつか選びましょう。「トッピングを言ってくだされば追加できます。たとえば、『ソーセージ、ペパロニ、マッシュルームが欲しい』などのようにです。」 何をトッピングしますか?

    Alexa: 目的地をマウイに設定しました。「目的地はいつでも変更できます。」 では、どのホテルにしますか?

  • 期待値を設定し直す - 既存のスキルにAlexa Conversationsを追加する場合、スキルの機能に対するユーザーの期待値はあらかじめ決まっている可能性があります。新しい機能について簡単に説明することで期待値を再設定しましょう。たとえば、おすすめの映画を紹介するスキルでは、今までと変わった点についてさりげなくヒントをほのめかすことができます。

    Alexa: お帰りなさい。これからは、もっとすばやくおすすめ映画を紹介できるようになりますよ。

  • 初回と2回目以降のエクスペリエンスに変化を付ける - 初めてのユーザーにはスキルの目的と機能を説明する必要があります。ユーザーがシステムを理解したら、もう説明を繰り返す必要はありません。リピーターにはシステムを説明するダイアログのヒントやスニペットは不要です。そのようなコンテンツは音声に費やす時間や画面スペースの無駄になります。やり取りは簡潔に、現在の状況に関連のあるものだけに留めます。

まず単純な応答を使う

最初に、ユーザーの発話とAlexaの応答を単純なテキストで開発者ポータルに直接書き出します。ダイアログはエクスペリエンスのコアとなります。BGMを追加したり、声の高さを変えたりするなど、Alexa Presentation Language(APL)for Audioのあらゆる機能を使おうとするのではなく、実装のしやすいところから始めるとよいでしょう。ダイアログのような価値の高いエクスペリエンスに関する試行錯誤が完了してから、よりリッチなオーディオを使ったダイアログの調整に入ります。詳細については、APL for Audioリファレンスを参照してください。

デザインから作成まで

以下の表は、Alexa Conversationsを構成する一連のコンポーネントを示しています。これらのコンポーネントでスキルのしくみをAIに教えることで、Alexa Conversationsが開発者に代わってギャップを埋められるようになります。

コンポーネント 説明

ダイアログ

ターンのやり取りが記載されたユーザーとAlexaの一連の会話です。それぞれの会話ターンはユーザーから開始され、Alexaで終了します。詳細については、Alexa Conversations用のダイアログの作成を参照してください。

発話セット

ユーザーがスキルにリクエストするさまざまな方法の概要です。たとえば、天気予報についてたずねるユーザーは「神戸市の天気を教えて」「神戸市の天気を教えてくれる?」、 または「神戸市の天気はどう?」などと言うことができます。 発話セットには、ユーザーがリクエストや回答で言う可能性のあるさまざまなバリエーションを含めてください。同じセットのすべての発話には、同じスロットを含める(またはまったく含めない)必要があります。前の例では、発話セットのすべての発話にcityスロットを使用しています。詳細については、Alexa Conversations用の発話セットの追加を参照してください。

応答

Alexaからユーザーに出力されるオーディオ応答です。TTS、SSML、およびオーディオファイルとTTSを組み合わせたマルチレイヤーのオーディオを認識するAPL for Audioを使ってこれらの応答を作成します。デバイス上の視覚やタッチの応答は、Alexa応答をトリガーするAlexa Presentation Language(APL)を使って指定します。詳細については、Alexa Conversations用のAlexaからの応答の定義を参照してください。

スロットとスロットタイプ

会話内で特定のデータ要素を収集するには、それらをスロットとして設定します。たとえば、ユーザーが「神戸市の明日の天気を教えて」とたずねたとします。 スキルは2つのスロットを認識します。 「神戸市」と「明日」が、それぞれcitydateのスロットタイプにマッピングされます。定義済みのスロットタイプを選択するか、スキルで独自のカスタムタイプを作成することができます。たとえば、ピザ注文スキルでは、注文可能な食材のリストを設定するToppingというカスタムスロットタイプや、あらかじめセットされた組み合わせのリストを設定するPremadeスロットタイプがあります。詳細については、Alexa Conversationsでのスロットタイプの使用を参照してください。

API定義

スキルがアプリケーションプログラムインターフェース(API)を呼び出してデータを取得する場合、エクスペリエンスでどのようなリクエストを処理できるかを定義する必要があります。APIは、ユーザーがスキルで実行できるアクションにマッピングされます。APIの入力と出力のスロットを定義する必要があります。たとえば、ピザ注文スキルでは、ピザを注文し、その日のおすすめや割引を提供するAPIを定義する必要があります。たとえばOrderPizzaという名前のAPIリクエストを定義します。このリクエストはサイズ、生地、トッピングのスロットへの入力を必要とします。ただし、GiveDailyDealsとして定義するAPIリクエストはスロットを必要としません。ただ情報を提供するだけです。詳細については、Alexa Conversations用のAPIの定義を参照してください。

すべてをまとめる

デザインの概要が完成したら、Alexa Conversationsの開発をすぐに開始できます。

  1. サンプルダイアログをいくつか書いて、ユーザーとAlexaの間のダイアログパスのバリエーションをいくつか作成します。
  2. Alexaが情報をたずねるとき、ユーザーが情報を提供するとき、Alexa ConversationsがAPIを呼び出すときに、ダイアログまたは最初のターンにアノテーションを付けます。
    1. ダイアログを発話セットと応答に分割します。
    2. ダイアログでスロットとスロットタイプを識別します。
    3. スロットに値が入ったときにスキルが呼び出すAPIを定義します。

詳細については、チュートリアル: Alexa Conversationsのダイアログにアノテーションを付ける方法を参照してください。

Alexa ConversationのAIは、開発者に代わってそこからフレーズのバリエーションと対応するダイアログパスを引き継ぎます。AIはエッジケースに対応できます。ダイアログの状態、コンテキストの管理とキャリーオーバー、リストの管理、訂正の処理、APIの呼び出しといったタスクも行います。

Video: Getting started with Alexa Conversations dialog annotation(英語)

Alexa Conversationsを使用して開発を始める

Alexa Conversationsのチュートリアルで演習を行うか、GitHubでAlexa Conversationsのスキルコードを確認してみましょう。Alexa Conversationsを使ったスキルを作成したり、既存のスキルを変更してAlexa Conversationsを追加したりするには、Alexa開発者コンソールを開いてAlexa Conversationsを有効にし、en_USロケールでスキルを公開します。