※このブログは、Omkar PhatakのブログをToshimi Hatanakaが日本向けに翻訳し加筆修正したものです。
Alexa開発者コンソールのレポート機能に、インテントの信頼度のレポート機能が追加されました。インテントの信頼度は、インテントに解決された発話の数を、高、中、低の信頼度で表示することにより、対話モデルのパフォーマンスを示します。
ユーザーのスキルの利用回数に対して、ご自身のスキルがどれくらいのパフォーマンスを出しているかが集計期間ごとに分かります。このブログでは、スキルが期待通りのパフォーマ ンスを出せていない場合に、スキルのインテントの信頼度を全体的に向上させるために利用できるいくつかの方法をご紹介します。インテントの信頼度のメトリクスは、開発者コンソ ールのレポートタブからアクセスすることができます。
NLUとAlexa スキル
あなたのスキルのインテントの信頼度を向上させる方法はたくさんあります。膨大な数の語句の組み合わせ、多種多様な用語、曖昧さ、文法的・構造的な複雑さ、文脈に基づく複雑さ、アクセント、方言など、人間の言語が直面する多くの課題を克服することができます。自動音声認識(ASR)(音声をテキストに変換する機能)と自然言語理解(NLU)(テキストから意味を抽出する機能)は、シームレスインテントの信頼度レポートを使用し、スキルの精度を向上させる NLUとAlexaスキルに機能するキーテクノロジーです。 AlexaのNLUテクノロジーは、スキルから正しい応答が返るように、ユーザーのリクエストを適切なインテントやスロットにマッピングします。ユ ーザーが対話モデルとして提供したデータ(インテント、スロット、スロット値、サンプル発話など)は、ユーザーのリクエストをスキルの適切なパーツにルーティングする方法を AlexaのNLUに学習させます。このブログでは、AlexaスキルのNLUの精度を向上させ、その結果、スキルのインテントの信頼度を向上させることについてお話します。
スキルのNLUの精度を高める方法
NLUの精度エラーは、ユーザーが特定のリクエストでスキルを呼び出した際に、不適切な応答を返したり、全くスキルが呼び出されなかった場合に発生します。開発者ポータルのレポートタブ内のインテントの信頼度では、NLUの精度の経過を追跡することができます。ここでは、スキルのNLUエラー率を減らし、スムーズなカスタマーエクスペリエンスを実現するために、開発者がコントロールできることをいくつかご紹介します。
1. よくある呼び出し名の問題を回避する
スキルの呼び出し名は、音声認識とディスカバリティ(検索精度)の観点から、スキルにと って非常に重要です。スキルの呼び出し名は、Alexaスキルストアでのスキルの表示名と必ずしも同じである必要はありません。ここでは、簡単に回避できる呼び出し名の問題をいくつかご紹介します。
2. 実際の会話でありそうなサンプル発話を可能な限りたくさん入力する
ユーザーの発話に対してスキルが正しく応答できるかどうかは、実際のユーザーとの会話のやりとりに近いサンプル発話がどれだけたくさん入力されているかにダイレクトに関係して います。あなたのスキルにあるすべてのインテントや機能から逆算して、そのインテントか らの応答が返されるために、ユーザーはどのようにスキルに問いかけ、要求するのかを全て 洗い出す方法を考えてみましょう。ここでは、堅牢な対話モデルを構築するためのベストプラクティスをいくつか紹介します。
3. カスタムもしくはビルトインスロットとビルトインインテントを使用する
複数のサンプル発話の中に、同一カテゴリの異なる言葉が含まれる場合(星占いのスキルだと、星座カテゴリの乙女座や牡羊座など)、サンプル発話の中のどこにでも使用できるカスタムスロットを追加しておくと便利です。 一方でAmazonは、数字、日付、時間、フレー ズ、アイテムのリストなどを記述する多様なビルトインスロットを用意しています。 これらは、多くのスキルで利用されるであろう最も一般的なユースケースをカバーしています。
ビルトインスロットタイプやビルトインインテントを使用すると、スロット値やサンプル発話のリストはビルド済みの状態で提供されているため、自分で同じリストを用意する必要はありません。
例えば、「星占いリーダー」スキルでは、12星座の名前を含むカスタムスロット「{sign}」 を作成し、サンプル発話には、AMAZON.DATEビルトインスロットを追加します。
「アレクサ、星占いリーダーで、{AMAZON.DATE} の {sign} の運勢を教えて」
AMAZON.DATEは、今日、昨日、明日や八月、7月のように、日付の形式を取り扱うのに便利なスロット値が含まれています。
発話の中に同じカテゴリに属する異なる単語を含む場合(例えば、このスキルの例では「星座」カテゴリに属する乙女座や牡羊座など)、可変となる単語の候補リストを事前に登録しておくカスタムスロットを追加しておくと便利です。また、Amazonには、数字、日付、時間、フレーズ、アイテムのリストなどを記述するための様々な組み込みスロットが用意されています。これらは、スキルに使用される可能性のある最も一般的なユースケースのいくつ かをカバーしています。これらのビルトインスロットタイプのいずれかを使用する場合、ス ロットの値やサンプル発話は事前に構築されて提供されているので、同じものを提供する必要はありません。これらのスロットタイプ(カスタムとビルトイン)はどちらも、スキルに提供する必要のある発話数を自動的に減らします。
ストップやキャンセルのように、一般的なアクションを表す場合には標準ビルトインインテントを使用することができます。 これらの標準ビルトインインテントは、開発者が同じ目的で作成したカスタムインテントよりもNLUの精度が高い傾向にあります。
AMAZON.CancelIntent、AMAZON.StopIntent、およびAMAZON.NoIntentのような標準ビルトインインテントが利用できそうな場合は、できる限りそれを使用してください。標準ビル トインインテントの詳細については、こちらの技術文書を参照してください。
スロットの追加方法についてはこちらの動画をご覧ください。
4. フォールバックインテントを使用して全く関連性のない発話リクエス ストを処理する
ほとんどのシナリオをカバーできる堅牢な対話モデルを作成したにもかかわらず、ユーザー が全く関連性のない発話をすることもあるでしょう(つまり、どのインテントにもマッピン グされていない発話がされた場合)。そのような場合でも、スキルはその要求をしなやかに対処して、そのスキルではユーザーのために何ができるのかを伝え、期待感をもってもらえるような応答メッセージでユーザーを優しく誘導することができるはずです。そのために は、フォールバックインテントを使うと便利です。フォールバックインテントを使うと、どのインテントにもマッピングされていないようなユーザーの発話にもうまく対応することができます。例をみてみましょう。
ユーザー:「アレクサ、星占いリーダーを開いて」
Alexa: 「ようこそ、星占いリーダーへ。あなたの星座はなんですか?」
ユーザー:「ロバート・デ・ニーロは何座なの?」
Alexa: 「星占いリーダースキルではそれについてお答えできませんが、あなたの星座ならば お答えできますよ。あなたの星座を教えていただけますか?」
(スキルの範囲内で答えれるような質問をするように、ユーザーを優しく誘導するような応答を返す)
AMAZON.FallbackIntentの詳細については、こちらのブログも参照してください。
5. インテント履歴を確認する
インテント履歴の機能を利用して、ユーザーとスキルとの実際の会話の履歴データを分析することで、公開スキルや開発中のスキルの解決精度を向上させることができます。インテント履歴は、現在稼働中の対話モデルで、ユーザーの発話がどの程度スキルのインテントやス ロットに正しく解決しているかを信頼度(高、中、低)で表示しています。このツールは、その日のユニークユーザー数が10人以上の場合、任意のスキルロケールの日次データを表示します。ユーザーのすべての発話が含まれるのではなく、選択されたサンプルのみを表示します。
このデータを調べることで、ユーザーの各発話がどの程度の信頼度でインテントに解決されているかを確認することができます。開発者は、そのマッピングを別のインテント/スロッ トに変更するべきか、既存のものを保持するべきかを判断し、いずれかのアクションを取ることができます。データの中に、頻繁に使用されるユーザーの発話リクエストがあります。 現在の対話モデルに含まれていないものがある場合は、精度を向上させるためにそれらを追加します。また、現在の対話モデルに含まれていないキャリアフレーズや共通フレーズのパ ターンを見つけ出し、それらを追加することもできます。
例として、「星占いリーダー」スキルでインテント履歴タブを開いてみると、「星占いについて教えて」という発話が頻繁に使われていることがわかったとします。しかし現在は 「AMAZON.FallbakIntent」がトリガーされてしまっており、どのインテントでも解決されていないことがわかりました。すなわち、「星占いについて教えて」というフレーズが 「HoroscopeIntent」をトリガーできずに、「AMAZON.FallbackIntent」にマッピングされて いたのです。これはスキルが機能していないことを示しています。この問題を修正するには、スキルの「HoroscopeIntent」に先程のフレーズ「星占いについて教えて」をサンプル発話で追加します。
インテント履歴の機能は、下のスクリーンショットのように、開発者コンソールのビルドタ ブの画面の左側パネルからアクセスすることができます。詳しくはこちらのブログ(英語) も参照してください。
6. エンティティ解決を使用してスロット値の冗長性を取り除く
エンティティ解決は、ユーザーが一つのスロット値に対して、同じモノ(もしくはこと)を別の言い方をしたとしても、同一のスロット値として取り扱えるようにするための仕組みです。これによりスロット値のNLU精度を向上させることができます。 エンティティ解決は、開発者がスロット値に対して事前に同義語(シノニム)を定義することによって機能します。つまりスロット値に冗長性があったとしても、エンティティ解決の機能を活用すれば、同義語を同じコードでシンプルに処理することができます。 例えば、あなたのスキルに{drink}という名前のスロットがあり、「コーヒー」、「ホットコ ーヒー」、「ホット」、「ブレンド」などのスロット値を持っているとします。しかし、それらのどの値でもコード側では同じ処理にしたい場合、「コーヒー」をスロットの代表値として定義し、その他の値「ホットコーヒー」、「ホット」、「ブレンド」は同義語として定義します。「コーヒー」には、coffee という固有のIDをつけてエンティティ解決を使用することができます。 同義語に固有のIDを設定しておくと、ユーザーが「ブレンド」と発話した場合でも、スキルのバックエンドでは「ブレンド」をユーザーの発言として取得しつつ、 coffeeを固有のIDとして受け取ることになります。こうすることで、ユーザーの発話内の同義語の値が何であっても、スキルは固有のIDを受け取り、そのスロット値に応じた応答を返すことができます。
詳しくはこちらの技術文書を参照してください。
対話モデルでの同義語(シノニム)の定義方法についてはこちらの動画もご覧ください。
エンティティ解決とエンドポイントでのコードの書き方についてはこちらの動画をご覧くださ い。
7. 発話プロファイラーを使用して、インテントマッピングの精度をテ ストする
発話プロファイラーのデータを見ると、スキルのインテントマッピングの精度を簡単に向上させることができます(発話プロファイラーの機能は、Alexa開発者コンソールのビルドのページで、いずれかのインテントを選択すると、画面右上に「モデルの評価」ボタンが表示されます。このボタンをクリックすると、発話プロファイラーの画面が表示されます)。発話プロファイラーは、スキルのエンドポイントのコードがまだ用意されていなくても、対話モデルさえ作成してあれば、ユーザーの発話が正しくインテントとスロットに解決されるかどうかを事前に確認することができます。コードをデプロイしなくてもいいので、スタンドアロンの状態の対話モデルを初期の段階からテストすることができます。期待通りのインテ ントやスロットに正しく解決されない発話が見つかった場合には、それが正しく解決されるまで、何度も対話モデルを更新することができます。
以下のスクリーンショットは、スキルに対する発話プロファイラーの使用例です。
8. NLU 評価ツールを使う
NLU評価ツールは、対話モデルのNLU精度をバッチでテストするためのスケーラブルな手法です。このツールでは、開発者コンソール上で各発話を手動でテストするのではなく、アノ テーションセットと呼ばれる、ユーザーの発話と、期待されるインテントとスロットのマッピングのセットを作成し利用します。アノテーションセットを複数用意することで、スキルの対話モデルのバッチテストを自動化することができます。
テストの結果は、正しいインテントとスロットが呼び出されたかどうかによって、合格または不合格のマークが付けられます。これにより、テストプロセスが自動化され、リグレッションテストも可能になります。NLU評価ツールの詳細については、こちらの技術文書を参照してください。
NLU評価ツールは、下のスクリーンショットのように、開発者コンソールの「ビルド」タブを開き、いずれかのインテントをクリックすると右上に表示される「モデルの評価」ボタンからアクセスすることができます。
発話プロファイラーおよびNLU評価ツールの使い方については、こちらの動画もあわせてご 覧ください。
9. スロットの認識率を上げるために動的エンティティを使用する
あなたのスキルには、状況によって内容が変化する動的な値のリストを持つスロットがあるかもしれません(例えば「食べ物のアイテム名」など)。静的なスロット値リストでは、動的な値を持つスロットには対応できず、認識精度が低くなる可能性があります。 このような場合、動的エンティティを使用すれば、スキルの実行時にスロット値を変更または置き換え、ユーザーにパーソナライズされた体験を提供することができます。動的エンティティを使用することで、実行時に新たに追加されたスロット値に動的にバイアスをかけることで、 認識率が大幅に改善されます。 例えば、ユーザーが商品を注文するレストランスキルを作成しているとします。動的エンティティを使用すると、事前にビルドされた「静的」モデルに入力されていなくても、実行時に日替わりスロット値を渡すことで、特別なユーザーだけ 「日替わりスペシャル」を注文できるようにすることも可能です(正確に言うと「日替わり スペシャル」という名前の認識率を上げ、解決されたスロット値を正しく受け取ることができます。スロット値として定義されていなくても「日替わりスペシャル」という名前を Alexaが全く認識しないわけではないので注意してください)。 ローカルなレストラン紹介スキルのような、デバイスの位置情報を使用するスキルでは、デバイスの位置情報に基づいて、近くのレストラン名のリストをスロット値として実行時に提供することもできるでしょう。
動的エンティティの実装方法などより詳しい情報については、こちらの技術文書を参照してください。
インテントの信頼度レポートをお試しください。
スキルのインテントの信頼度レポートを研究し、このブログで説明したようなツールを使ってさまざまな課題にも対処しつつ、対話モデルを日々更新し続けることは、時間の経過と共にご自身のスキルの正確性を担保していくための素晴らしい方法です。 このブログで述べた大切なトピックがあなたのさらなる探究心のインテントを呼び出すことを祈っております。