意図とエンティティが含まれる発話テキストからデータを抽出する

重要

LUIS は 2025 年 10 月 1 日に廃止され、2023 年 4 月 1 日から新しい LUIS リソースを作成できなくなります。 継続的な製品サポートと多言語機能のベネフィットを得るために、LUIS アプリケーション会話言語理解に移行することをお勧めします。

LUIS を使用すると、ユーザーの自然言語での発話から情報を取得できます。 この情報は、アクションを実行するために、プログラム、アプリケーション、またはチャットボットで使用できるような方法で抽出されます。 以降のセクションで、JSON の例を使用して、意図とエンティティから返されるデータについて説明します。

抽出するのが最も困難なデータは機械学習データです。その理由は、テキストが完全一致ではないためです。 機械学習エンティティのデータ抽出は、期待どおりのデータを受け取っていると確信できるまでは、作成サイクルの一部としておく必要があります。

データの場所とキー使用法

LUIS により、公開されているエンドポイントでのユーザーの発話からデータが抽出されます。 HTTPS 要求 (POST または GET) には、発話と、ステージング環境や運用環境など、オプションの構成がいくつか含まれます。

V2 予測エンドポイントの要求

https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/<appID>?subscription-key=<subscription-key>&verbose=true&timezoneOffset=0&q=book 2 tickets to paris

V3 予測エンドポイントの要求

https://westus.api.cognitive.microsoft.com/luis/v3.0-preview/apps/<appID>/slots/<slot-type>/predict?subscription-key=<subscription-key>&verbose=true&timezoneOffset=0&query=book 2 tickets to paris

appID は、LUIS アプリの [設定] ページで確認できます。また、LUIS アプリの編集時に URL の一部 (/apps/ の後) として確認できます。 subscription-key は、アプリの照会に使用するエンドポイント キーです。 LUIS を学習している間は無料のオーサリング/スターター キーを使用できますが、エンドポイント キーを、想定される LUIS の使用法をサポートするキーに変更することが重要です。 timezoneOffset の単位は分です。

HTTPS 応答には、ステージングまたは運用エンドポイントの現在公開されているモデルに基づいて LUIS によって判別できるすべての意図およびエンティティの情報が含まれています。 エンドポイント URL は LUIS Web サイトの [Manage](管理) セクションの [Keys and endpoints](キーとエンドポイント) ページにあります。

意図からのデータ

プライマリ データは、最上位スコアの意図の名前です。 エンドポイントの応答は次のとおりです。

{
  "query": "when do you open next?",
  "topScoringIntent": {
    "intent": "GetStoreInfo",
    "score": 0.984749258
  },
  "entities": []
}
データ オブジェクト データ型 データの場所
Intent String topScoringIntent.intent "GetStoreInfo"

チャットボットまたは LUIS 呼び出し元アプリが複数の意図のスコアに基づいて決定を行う場合、すべての意図のスコアを返します。

querystring パラメーター verbose=true を設定します。 エンドポイントの応答は次のとおりです。

{
  "query": "when do you open next?",
  "topScoringIntent": {
    "intent": "GetStoreInfo",
    "score": 0.984749258
  },
  "intents": [
    {
      "intent": "GetStoreInfo",
      "score": 0.984749258
    },
    {
      "intent": "None",
      "score": 0.2040639
    }
  ],
  "entities": []
}

意図は、スコアが最も高いものから最も低いものへと並べ替えられます。

データ オブジェクト データ型 データの場所 Score
Intent String intents[0].intent "GetStoreInfo" 0.984749258
Intent String intents[1].intent "None" 0.0168218873

事前構築済みのドメインを追加する場合、意図の名前は、UtiltiesCommunication などのドメインと、意図を表します。

{
  "query": "Turn on the lights next monday at 9am",
  "topScoringIntent": {
    "intent": "Utilities.ShowNext",
    "score": 0.07842206
  },
  "intents": [
    {
      "intent": "Utilities.ShowNext",
      "score": 0.07842206
    },
    {
      "intent": "Communication.StartOver",
      "score": 0.0239675418
    },
    {
      "intent": "None",
      "score": 0.0168218873
    }],
  "entities": []
}
Domain データ オブジェクト データ型 データの場所
Utilities Intent String intents[0].intent "Utilities.ShowNext"
Communication Intent String intents[1].intent Communication.StartOver"
Intent String intents[2].intent "None"

エンティティからのデータ

ほとんどのチャット ボットおよびアプリケーションでは、意図名以外の情報も必要です。 この省略可能な追加データは、発話で検出されたエンティティから取得されます。 エンティティの種類ごとに、一致に関するさまざまな情報が返されます。

発話内の 1 つの単語またはフレーズは、複数のエンティティと一致する可能性があります。 その場合、一致するエンティティごとにそのスコアが返されます。

すべてのエンティティが、エンドポイントから応答のエンティティ配列で返されます

返されるトークン化されたエンティティ

LUIS での トークンのサポートを確認します。

事前構築済みのエンティティ データ

事前構築済みのエンティティは、オープン ソースの Recognizers-Text プロジェクトを使用して、正規表現の一致に基づき検出されます。 事前構築済みのエンティティは、エンティティ配列で返され、builtin:: というプレフィックスが付加された種類の名前が使用されます。

リスト エンティティ データ

リスト エンティティは、固定かつ限定された関連単語セットとそのシノニムを表します。 LUIS では、リスト エンティティの追加の値は検出されません。 現在のリストに基づいて新しい単語の候補を表示するには、 [Recommend] (推奨) 機能を使用します。 同じ値を持つリスト エンティティが複数存在する場合は、エンドポイント クエリに各エンティティが返されます。

正規表現エンティティ データ

正規表現エンティティは、指定された正規表現に基づいてエンティティを抽出します。

名前の抽出

名前は、文字と単語のほぼすべての組み合わせが考えられるため、発話から名前を取得することは困難です。 抽出する名前の種類に応じて、複数のオプションがあります。 次の推奨事項はルールではなく、詳細なガイドラインです。

事前構築済みの PersonName エンティティと GeographyV2 エンティティを追加する

PersonName エンティティと GeographyV2 エンティティは、いくつかの言語カルチャで利用できます。

人の名前

人の名前は、言語およびカルチャに応じて、幾分ある種の形式を持つことがあります。 事前構築済みの personName エンティティ、または氏名のロールが含まれる 簡易エンティティ のどちらかを使用します。

簡易エンティティを使用する場合は、必ず発話のさまざまな部分に姓と名を使用している例を提供してください。また、None 意図を含むあらゆる意図にわたるさまざまな長さの発話で、姓と名を使用している例を提供してください。 エンドポイントの発話を定期的に確認して、適切に予測されていないすべての名前にラベルを付けます。

場所の名前

場所の名前には、市区町村、郡、州、都道府県、国/地域などの既知の名前が設定されています。 位置情報を抽出するには、事前構築済みエンティティ geographyV2 を使用します。

新しい名前

一部のアプリでは、製品や企業などの新しい名前を検索できる必要があります。 これらの種類の名前は、最も困難な種類のデータ抽出です。 簡易エンティティ から始めて、フレーズ リストを追加します。 エンドポイントの発話を定期的に確認して、適切に予測されていないすべての名前にラベルを付けます。

Pattern.any エンティティ データ

Pattern.any は、エンティティの開始位置と終了位置を示すためにパターンのテンプレート発話でのみ使用される、可変長プレースホルダーです。 パターンが適用されるためには、パターンで使用されるエンティティが必要です。

センチメント分析

公開中に感情分析が構成されている場合、LUIS の json 応答には感情分析が含まれます。 センチメント分析の詳細については、言語サービスのドキュメントを参照してください。

キー フレーズ抽出エンティティ データ

キー フレーズ抽出エンティティでは、言語サービスによって提供される、発話内のキー フレーズを返します。

複数のエンティティに一致するデータ

LUIS では、発話内で検出されたすべてのエンティティを返します。 その結果、チャット ボットでは、結果に基づいて決定を行う必要があります。

複数のリスト エンティティに一致するデータ

単語またはフレーズが複数のリスト エンティティに一致すると、エンドポイント クエリからそれぞれのリスト エンティティが返されます。

クエリ when is the best time to go to red rock? の場合、アプリの複数のリストに単語 red があると、LUIS ではすべてのエンティティを認識し、JSON エンドポイントの応答の一部としてエンティティの配列を返します。

次のステップ

エンティティの追加に関するページで、LUIS アプリにエンティティを追加する方法の詳細を確認します。