エンティティ解決



エンティティ解決

Alexaは、エンティティ解決を使ってユーザー発話のスロット値を1つの既知のエンティティに解決します。エンティティは、実在の個人、場所、物を表します。エンティティにはコードで使用できる識別子を持つことができます。同義語は、Alexaがユーザー発話を1つのエンティティに解決するのに役立ちます。

たとえば、国名を収集するスロットに対してユーザーが「ネーデルラント」と言ったとします。エンティティ解決を使って、Alexaは「ネーデルラント」を「オランダ」に解決します。

スロットタイプとエンティティ解決

スロットタイプによってエンティティ解決がそのスロットに対してどう機能するかが決まります。

カスタムスロットタイプの場合、エンティティのセット、その識別子、エンティティに解決する同義語を定義します。これらの要素の定義については、カスタムスロットタイプのエンティティ解決を参照してください。

ビルトインスロットタイプの場合、エンティティ解決はビルトインスロットタイプによって変わります。

  • 一部のビルトインスロットタイプはエンティティ解決とAlexa Entitiesを完全にサポートします。これらのタイプの場合、Alexaはエンティティと識別子をAlexaナレッジグラフに定義します。スキルで使用するこれらのエンティティに関する情報を取得するには、Linked Data APIを使用できます。AlexaナレッジグラフとAlexa Entitiesをサポートするビルトインスロットタイプの詳細については、Alexa Entitiesリファレンスを参照してください。
  • ビルトインスロットタイプを独自の値で拡張する場合、エンティティ解決はカスタム値を使ってエンティティ、識別子、同義語を定義します。ビルトインスロットタイプの拡張については、ビルトインスロットタイプをカスタム値で拡張するを参照してください。
  • ビルトインスロットタイプがエンティティ解決をサポートしておらず、独自の値で拡張していない場合、エンティティ解決は行われません。Alexaはユーザーが言った値を返し、エンティティ解決の結果を返すことはありません。

ビルトインスロットタイプでのエンティティ解決については、ビルトインスロットタイプのエンティティ解決を参照してください。

スキルリクエスト内のエンティティ解決結果

ユーザーがスキルにリクエストを出すと、Alexaは発話内のスロット値をスロットタイプに定義された既知のエンティティに解決しようとします。エンティティ解決が成功すると、スキルはIntentRequestに以下の情報を取得します。

  • ユーザーが言った実際の値。スロット値のslotValue.valueプロパティにあるこの値にアクセスします。
  • 考えられる既知のエンティティの配列を含むオブジェクト。各エンティティには名前とIDが含まれます。結果を含むオブジェクトは、スロット値のslotValue.resolutionsプロパティから取得できます。

    既に述べたように、考えられるエンティティと識別子のソースはスロットタイプによって異なります。

    エンティティ解決が行われない場合、resolutionsプロパティはリクエストに含まれません。

以下は、カスタムスロットタイプListOfActivitiesを使用するスロットのエンティティ解決結果の例です。ユーザーはスロット値に対して「ハイキング」と言いました。Alexaはこの発話を考えられる2つのエンティティに解決しました。1つは「ハイキング」、もう1つは「スノーシューイング」です。それぞれにカスタムIDがあります。簡潔に説明するため、この例ではIntentRequestintentプロパティを示しています。

{
  "intent": {
    "name": "PlanMyTripIntent",
    "confirmationStatus": "NONE",
    "slots": {
      "activity": {
        "name": "activity",
        "value": "ハイキング",
        "resolutions": {
          "resolutionsPerAuthority": [
            {
              "authority": "amzn1.er-authority.echo-sdk.amzn1.ask.skill.1.ListOfActivities",
              "status": {
                "code": "ER_SUCCESS_MATCH"
              },
              "values": [
                {
                  "value": {
                    "name": "ハイキング",
                    "id": "HIKE"
                  }
                },
                {
                  "value": {
                    "name": "スノーシューイング",
                    "id": "SNOWSHOE"
                  }
                }
              ]
            }
          ]
        },
        "confirmationStatus": "NONE",
        "source": "USER",
        "slotValue": {
          "type": "Simple",
          "value": "ハイキング",
          "resolutions": {
            "resolutionsPerAuthority": [
              {
                "authority": "amzn1.er-authority.echo-sdk.amzn1.ask.skill.1.ListOfActivities",
                "status": {
                  "code": "ER_SUCCESS_MATCH"
                },
                "values": [
                  {
                    "value": {
                      "name": "ハイキング",
                      "id": "HIKE"
                    }
                  },
                  {
                    "value": {
                      "name": "スノーシューイング",
                      "id": "SNOWSHOE"
                    }
                  }
                ]
              }
            ]
          }
        }
      },
      "toCity": {
        "name": "toCity",
        "confirmationStatus": "NONE",
        "source": "USER"
      }
    }
  }
}

リクエストで利用できるプロパティに関するすべてのリファレンスについては、IntentRequestを参照してください。

エンティティ解決結果の情報源

resolutionsプロパティ内の結果は、情報源ごとに整理されています。情報源は、そのスロットに提供されるデータのソースを表しています。情報源はスロットタイプによって異なります。

  • カスタムスロットタイプ – 情報源はカスタムスロットタイプの名前です。次の形式で表されます。

    amzn1.er-authority.echo-sdk.<スキルID>.<カスタムスロットタイプ名>

    以下は、スキルIDがamzn1.ask.skill.1のスキル内で使用するカスタムスロットタイプListOfActivitiesの情報源の例です。

    amzn1.er-authority.echo-sdk.amzn1.ask.skill.1.ListOfActivities

  • エンティティ解決をサポートするビルトインスロットタイプ – 情報源は常にAlexaEntitiesです。情報源にはスキルIDやスロットタイプ名は含まれません。

  • 拡張したビルトインスロットタイプ – 情報源はビルトインスロットタイプの名前です。次の形式で表されます。

    amzn1.er-authority.echo-sdk.<スキルID>.<ビルトインスロットタイプ名>

    以下は、スキルIDがamzn1.ask.skill.1のスキル内で使用する拡張スロットタイプAMAZON.Colorの情報源の例です。

    amzn1.er-authority.echo-sdk.amzn1.ask.skill.1.AMAZON.Color

複数の情報源からのエンティティ解決結果

Alexaは、スロットタイプに適用可能なすべての情報源についてエンティティ解決結果を返します。たとえば、エンティティ解決を既にサポートしているビルトインスロットを拡張できます。Alexaは、カスタム値とAlexaナレッジグラフの両方を使ってユーザーの発話を解決しようとします。それぞれのエンティティ解決結果は、リクエストのresolutionsByAuthority配列に格納されます。

たとえば、AMAZON.Cityスロットタイプはエンティティ解決をサポートします。AMAZON.Cityスロットタイプをコードで使用するIDを持った特定の都市名で拡張するとします。

このシナリオでは、Amazonは2つの情報源のエンティティ解決結果を返します。

  • 情報源amzn1.er-authority.echo-sdk.amzn1.ask.skill.1.AMAZON.Cityには、AMAZON.Cityスロットタイプに追加されたカスタム値に基づく結果が含まれます。カスタムスロットタイプが、カスタムIDが「ORD」のカスタム値「Chicago」で拡張されました。
  • 情報源AlexaEntitiesにはAlexaナレッジグラフに基づいた結果が含まれます。Alexaは、ユーザーの発話を複数の考えられるエンティティに解決しました。それぞれIRIを使ってエンティティに関する情報を取得できます。
{
  "intent": {
    "name": "PlanMyTripIntent",
    "confirmationStatus": "NONE",
    "slots": {
      "activity": {
        "name": "activity",
        "confirmationStatus": "NONE",
        "source": "USER"
      },
      "toCity": {
        "name": "toCity",
        "value": "Chicago",
        "resolutions": {
          "resolutionsPerAuthority": [
            {
              "authority": "amzn1.er-authority.echo-sdk.amzn1.ask.skill.1.AMAZON.City",
              "status": {
                "code": "ER_SUCCESS_MATCH"
              },
              "values": [
                {
                  "value": {
                    "name": "chicago",
                    "id": "ORD"
                  }
                }
              ]
            },
            {
              "authority": "AlexaEntities",
              "status": {
                "code": "ER_SUCCESS_MATCH"
              },
              "values": [
                {
                  "value": {
                    "name": "Chicago",
                    "id": "https://ld.amazonalexa.com/entities/v1/1571475417946-62216896272364"
                  }
                },
                {
                  "value": {
                    "name": "Chicago River",
                    "id": "https://ld.amazonalexa.com/entities/v1/1571475417946-36988258397509"
                  }
                },
                {
                  "value": {
                    "name": "Chicago",
                    "id": "https://ld.amazonalexa.com/entities/v1/1571475417946-52020643901674"
                  }
                },
                {
                  "value": {
                    "name": "Chicago",
                    "id": "https://ld.amazonalexa.com/entities/v1/1571475417946-37512244375834"
                  }
                },
                {
                  "value": {
                    "name": "Chicago",
                    "id": "https://ld.amazonalexa.com/entities/v1/1571475417946-5265629940182"
                  }
                }
              ]
            }
          ]
        },
        "confirmationStatus": "NONE",
        "source": "USER",
        "slotValue": {
          "type": "Simple",
          "value": "Chicago",
          "resolutions": {
            "resolutionsPerAuthority": [
              {
                "authority": "amzn1.er-authority.echo-sdk.amzn1.ask.skill.1.AMAZON.City",
                "status": {
                  "code": "ER_SUCCESS_MATCH"
                },
                "values": [
                  {
                    "value": {
                      "name": "chicago",
                      "id": "ORD"
                    }
                  }
                ]
              },
              {
                "authority": "AlexaEntities",
                "status": {
                  "code": "ER_SUCCESS_MATCH"
                },
                "values": [
                  {
                    "value": {
                      "name": "Chicago",
                      "id": "https://ld.amazonalexa.com/entities/v1/1571475417946-62216896272364"
                    }
                  },
                  {
                    "value": {
                      "name": "Chicago River",
                      "id": "https://ld.amazonalexa.com/entities/v1/1571475417946-36988258397509"
                    }
                  },
                  {
                    "value": {
                      "name": "Chicago",
                      "id": "https://ld.amazonalexa.com/entities/v1/1571475417946-52020643901674"
                    }
                  },
                  {
                    "value": {
                      "name": "Chicago",
                      "id": "https://ld.amazonalexa.com/entities/v1/1571475417946-37512244375834"
                    }
                  },
                  {
                    "value": {
                      "name": "Chicago",
                      "id": "https://ld.amazonalexa.com/entities/v1/1571475417946-5265629940182"
                    }
                  }
                ]
              }
            ]
          }
        }
      }
    }
  }
}

エンティティ解決のステータスコード

エンティティ解決結果を取得すると、resolutions.resolutionsPerAuthority[].status.codeプロパティに結果を説明するステータスコードが入ります。

  • ER_SUCCESS_MATCH – 発話された値が正常に既知のエンティティに解決されました。
    • カスタムスロットタイプの場合、これは値がスロットタイプで明示的に定義された少なくとも1つの値または同義語と一致したことを示します。
    • 拡張されたビルトインスロットタイプの場合、追加した拡張値セット内の少なくとも1つの値または同義語に値が一致したことを示します。
    • エンティティ解決をサポートするビルトインスロットタイプの場合、値がAlexaナレッジグラフ内の少なくとも1つのエンティティに解決されたことを示します。
  • ER_SUCCESS_NO_MATCH – 発話された値が既知のエンティティに解決されませんでした。
  • ER_ERROR_TIMEOUT – タイムアウトのためエラーになりました。
  • ER_ERROR_EXCEPTION – 処理中に例外が発生したためエラーになりました。