Language UnderstandingLanguage Understanding

適用対象: SDK v4APPLIES TO: SDK v4

ボットでは、構造化されたガイドのあるスタイルから、自由形式で制約のないスタイルまで、さまざまな会話のスタイルを使用できます。Bots can use a variety of conversational styles, from the structured and guided to the free-form and open-ended. ボットは、ユーザーの発言に基づいて、会話フローで次に行うことを判断する必要があります。制約のない会話では、ユーザーの応答の幅はさらに広がります。A bot needs to decide what to do next in its conversation flow, based on what the user said, and in an open-ended conversation, there is a wider range of user replies.

ガイドGuided [ファイル]Open
私は旅行ボットです。I'm the travel bot. 次のオプションから 1 つ選択してください: フライトを検索する、ホテルを検索する、レンタカーを検索する。Select one of the following options: find flights, find hotels, find rental car. 旅行の予約のお手伝いができます。I can help you book travel. 何がしたいですか?What would you like to do?
他に必要なことはありますか?Do you need anything else? [はい] または [いいえ] をクリックしてください。Click yes or no. 他に必要なことはありますか?Do you need anything else?

ユーザーとボットとの対話は、自由形式であることが多く、ボットは文脈から自然に言語を理解する必要があります。The interaction between users and bots is often free-form, and bots need to understand language naturally and contextually. この記事では、ユーザーが望むことを判断し、文章内の概念やエンティティを識別し、最終的には適切なアクションでボットが応答できるようにするために、Language Understanding (LUIS) がどのように役立つかについて説明します。This article explains how Language Understanding (LUIS) help you to determine what users want, to identify concepts and entities in sentences, and ultimately to allow your bots to respond with the appropriate action.

意図の認識Recognize intent

LUIS を使用すると、ユーザーが 意図 していることを判断することができます。ユーザーの意図を確認することで、bot が適切に応答できるようになります。LUIS helps you by determining the user's intent, which is what they want to do, from what they say, so your bot can respond appropriately. LUIS は、bot が予測可能な構造や特定のパターンに従わない場合に特に役立ちます。LUIS is especially helpful when what they say to your bot doesn't follow a predictable structure or a specific pattern. ボットにユーザーが話しかけたり応答を入力したりする会話型ユーザー インターフェイスがある場合は、発話 (ユーザーからの音声またはテキストの入力) のバリエーションは無限にあります。If a bot has a conversational user interface, in which the user speaks or types a response, there can be endless variations on utterances, which are the spoken or textual input from the user.

たとえば、旅行ボットのユーザーがフライトの予約を依頼する場合に、多くの言い方があることを考えてみてください。For example, consider the many ways a user of a travel bot can ask to book a flight.

フライトを予約するためのさまざまな異なる形式の発話

これらの発話はさまざまな構造を持つことができ、"フライト" 用のさまざまなシノニムを含むことができます。These utterances can have different structures and contain various synonyms for "flight" that you haven't thought of. ご自分のボットで、すべての発話に一致するロジックを記述し、しかも同じ単語を含む別の意図と区別するのは容易なことではありません。In your bot, it can be challenging to write the logic that matches all the utterances, and still distinguishes them from other intents that contain the same words. さらに、ボットでは、エンティティ (場所や時間などの他の重要な単語) を抽出する必要があります。Additionally, your bot needs to extract entities, which are other important words like locations and times. LUIS は、意図とエンティティを文脈上から識別することで、このプロセスを容易にします。LUIS makes this process easy by contextually identifying intents and entities for you.

自然言語入力用のボットを設計する場合は、ボットが認識する必要がある意図とエンティティを決定し、それらをボットが実行するアクションにどのように結び付けるかについて考えます。When you design your bot for natural language input, you determine what intents and entities your bot needs to recognize, and think about how they'll connect to actions that your bot takes. luis.ai で、カスタムの意図とエンティティを定義し、それぞれの意図に例を提供し、その中のエンティティにラベルを付けることで、それらの動作を指定します。In luis.ai, you define custom intents and entities and you specify their behavior by providing examples for each intent and labeling the entities within them.

ボットは、LUIS で認識される意図を使用して、会話のトピックを判断したり、会話フローを開始します。Your bot uses the intent recognized by LUIS to determine the conversation topic, or begin a conversation flow. たとえば、ユーザーが "フライトを予約したい" と言うと、ボットは BookFlight 意図を検出し、フライトの検索を開始するための会話フローを呼び出します。For example, when a user says "I'd like to book a flight", your bot detects the BookFlight intent and invokes the conversation flow for starting a search for flights. LUIS は、目的地や出発日のようなエンティティを検出します。これらはどちらも意図をトリガーする元の発話と、後の会話フローにあります。LUIS detects entities like the destination city and the departure date, both in the original utterance that triggers the intent and later in the conversation flow. ボットは、必要なすべての情報を得ると、ユーザーの意図を満たすことができます。Once the bot has all the information it needs, it can fulfill the user's intent.

ボットとの会話は BookFlight 意図によってトリガーされます。

一般的なシナリオで意図を認識するRecognize intent in common scenarios

開発時間を節約するため、LUIS には、ボットの一般的なカテゴリの一般的な発話を認識する事前トレーニング済みの言語モデルが用意されています。To save development time, LUIS provides pre-trained language models that recognize common utterances for common categories of bots.

事前作成済みのドメイン は、予定、リマインダー、管理、フィットネス、エンターテインメント、通信、予約などの一般的なシナリオで、組み合わせてうまく機能する、事前トレーニング済みのすぐに使用できる意図とエンティティのコレクションです。Prebuilt domains are pre-trained, ready-to-use collections of intents and entities that work well together for common scenarios like appointments, reminders, management, fitness, entertainment, communication, reservations, and more. ユーティリティ 事前作成済みドメインは、ボットがキャンセル、確認、ヘルプ、繰り返し、停止などの一般的なタスクを処理するのに役立ちます。The Utilities prebuilt domain helps your bot handle common tasks like Cancel, Confirm, Help, Repeat, and Stop. LUIS が提供している事前作成済みのドメインをご覧ください。Take a look at the prebuilt domains that LUIS offers.

事前作成済みエンティティ は、ボットが日付、時刻、数値、温度、通貨、地理、年齢などの一般的な情報の種類を認識するのに役立ちます。Prebuilt entities help your bot recognize common types of information like dates, times, numbers, temperature, currency, geography, and age. LUIS が認識できる型の背景情報については、事前作成済みエンティティの使用に関するページを参照してください。See use prebuilt entities for background on the types that LUIS can recognize.

ボットが LUIS からメッセージを受け取るしくみHow your bot gets messages from LUIS

LUIS の設定と接続が完了すると、ボットから LUIS アプリにメッセージを送信できます。LUIS アプリは意図とエンティティを含む JSON 応答を返します。Once you have set up and connected LUIS, your bot can send the message to your LUIS app, which returns a JSON response that contains the intents and entities. 次に、ボットの "ターン ハンドラー" で ターン コンテキストを使用して、LUIS 応答内の意図に基づいて会話フローをルーティングすることができます。Then, you can use the turn context in your bot's turn handler to route the conversation flow based on the intent in the LUIS response.

意図とエンティティがボットに渡されるしくみ

ボットで LUIS アプリの使用を開始するには、Language Understanding での LUIS の使用に関するページを参照してください。To get started using a LUIS app with your bot, check out using LUIS for language understanding.

Language Understanding のベスト プラクティスBest practices for Language Understanding

ボットの言語モデルを設計する場合は、次のプラクティスを検討してください。Consider the following practices when designing a language model for your bot.

意図の数を検討するConsider the number of intents

LUIS アプリでは、複数のカテゴリのいずれかに発話を分類することによって意図を認識します。LUIS apps recognize intent by classifying an utterance into one of multiple categories. 当然ながら、多数の意図の中から適切なカテゴリを決定すると、それらを区別する LUIS アプリの能力を減らすことができます。A natural result is that determining the correct category from among a large number of intents can reduce a LUIS app's ability to distinguish between them.

意図の数を減らす 1 つの方法として、階層設計の使用があります。One way of reducing the number of intents is to use a hierarchical design. 天気に関連する 3 つの意図、ホーム オートメーションに関連する 3 つの意図、およびその他の 3 つのユーティリティ意図 (ヘルプ、キャンセル、あいさつ) を持つパーソナル アシスタント ボットのケースについて考えてみましょう。Consider the case of a personal assistant bot that has three intents related to weather, three intents related to home automation, and three other utility intents which are Help, Cancel and Greeting. これらの意図をすべて同じ LUIS アプリに配置すると、既に 9 つの意図があることになり、ボットにさらに機能を追加すると、意図の数は最終的に数十になる可能性があります。If you put all the intents in the same LUIS app, you already have 9, and as you add features to the bot, you could end up with dozens. 代わりに、 Bot Framework Orchestrator を使用して、ユーザーの要求が気象、ホームオートメーション、またはユーティリティのいずれであるかを判断し、Orchestrator が決定するカテゴリに対して LUIS アプリを呼び出すことができます。Instead, you can use the Bot Framework Orchestrator to determine whether the user's request is for weather, home automation, or utility, then call the LUIS app for the category that Orchestrator determines. この場合、各 LUIS アプリは 3 つの意図だけで開始することになります。In this case each of the LUIS apps only starts with 3 intents.

None 意図を使用するUse a None intent

ボットのユーザーが、予期しない、または現在の会話フローに無関係なことを言う場合がよくあります。It's often the case that users of your bot will say something unexpected or unrelated to the current conversation flow. そうしたメッセージを処理するために None 意図が用意されています。The None intent is provided for handling those messages.

フォールバック、既定値または "上記のいずれでもない" ケースを処理するための意図をトレーニングしない場合、LUIS アプリではメッセージを定義済みの意図に分類することしかできません。If you don't train an intent for handling the fallback, default or "none of the above" cases, your LUIS app can only classify messages into the intents it has defined. たとえば、HomeAutomation.TurnOnHomeAutomation.TurnOff という 2 つの意図を持つ LUIS アプリがあるとします。So for example, let's say you have a LUIS app with two intents: HomeAutomation.TurnOn and HomeAutomation.TurnOff. 意図がこれらしかなく、入力が "金曜日に予定をスケジュール設定する" のような無関係なものである場合、LUIS アプリにはそのメッセージを HomeAutomation.TurnOn または HomeAutomation.TurnOff のいずれかに分類する以外に選択肢がありません。If those are the only intents, and the input is something unrelated like "schedule an appointment on Friday", your LUIS app has no choice but to classify that message as either HomeAutomation.TurnOn or HomeAutomation.TurnOff. LUIS アプリにいくつかの例を持つ None 意図がある場合、フォールバック ロジックをいくつかボットに提供して、予期しない発話を処理することができます。If your LUIS app has a None intent with a few examples, you can provide some fallback logic in your bot to handle unexpected utterances.

None 意図は、認識結果を向上させるうえで非常に役に立ちます。The None intent is very useful for improving recognition results. このホーム オートメーション シナリオでは、"金曜日に予定をスケジュール設定する" によって、信頼度の低い HomeAutomation.TurnOn 意図が生成される可能性があり、お使いのボットでは、これを拒否する必要があります。In this home automation scenario, "schedule an appointment on Friday" may produce the HomeAutomation.TurnOn intent with a low confidence, and your bot should reject it. このようなフレーズは、ご自身のモデルの None 意図に追加できるため、None に適切に解決されます。You can add such phrases to your model under the None intent, so that they resolve correctly to None.

LUIS アプリが受信する発話を確認するReview the utterances that LUIS app receives

LUIS アプリでは、ユーザーから送信されたメッセージを確認することでアプリのパフォーマンスを向上させる機能が用意されています。LUIS apps provide a feature for improving your app performance, by reviewing messages that users sent to it. 詳しい手順については、推奨される発話に関するページを参照してください。See suggested utterances for a step-by-step walkthrough.

複数の LUIS アプリと QnA サービスを Orchestrator に統合するIntegrate multiple LUIS apps and QnA services with Orchestrator

複数の会話トピックを理解する多目的ボットを作成する場合は、機能ごとにサービスを個別に開発してから、それらを統合することができます。When building a multi-purpose bot that understands multiple conversational topics, you can start to develop services for each function separately, and then integrate them together. これらのサービスには、Language Understanding (LUIS) アプリと QnA Maker サービスを含めることができます。These services can include Language Understanding (LUIS) apps and QnA Maker services. 次に、bot が複数の LUIS アプリ、複数の QnA Maker サービス、またはそれらの組み合わせを組み合わせる可能性があるシナリオの例をいくつか示します。Here are a few example scenarios in which a bot might combine multiple LUIS apps, multiple QnA Maker services, or a combination of the two:

  • パーソナル アシスタント ボットでは、ユーザーはさまざまなコマンドを呼び出すことができます。A personal assistant bot lets the user invoke a variety of commands. コマンドの各カテゴリは、個別に開発できる "スキル" を形成し、各スキルには LUIS アプリがあります。Each category of commands form a "skill" that can be developed separately, and each skill has a LUIS app.
  • ボットは、多くのナレッジ ベースを検索して、よくある質問 (FAQ) への回答を見つけます。A bot searches many knowledge bases to find answers to frequently asked questions (FAQs).
  • ビジネス向けのボットには、顧客アカウントの作成と発注のための LUIS アプリと、その FAQ 用の QnAMaker サービスもあります。A bot for a business has LUIS apps for creating customer accounts and placing orders, and also has a QnAMaker service for its FAQ.

Bot Framework Orchestrator CLIBot Framework Orchestrator CLI

Orchestrator CLI を使用すると、Orchestrator スナップショットファイルを作成することによって、複数の LUIS アプリと QnA Maker サービスを bot と統合できます。 orchestrator スナップショットファイル は、実行時に適切な LUIS サービスと QnAMaker サービスにメッセージをルーティングするために使用されます。The Orchestrator CLI helps you integrate multiple LUIS apps and QnA Maker services with your bot, by creating an Orchestrator snapshot file, which is used at run time to route messages to the appropriate LUIS and QnAMaker services. 複数の LUIS アプリと QnA Maker を1つのボットに結合したステップバイステップチュートリアルについては、 Orchestrator のチュートリアル を参照してください。See the Orchestrator tutorial for a step-by-step tutorial that combines multiple LUIS apps and QnA Maker in one bot.

LUIS を使用して音声認識を向上させるUse LUIS to improve speech recognition

ユーザーが話しかけるボットの場合、LUIS と統合することで、音声をテキストに変換するときに誤解される可能性がある単語をボットが識別するのに役立ちます。For a bot that users will speak to, integrating it with LUIS can help your bot identify words that might be misunderstood when converting speech to text. たとえば、チェスのシナリオで、ユーザーが次のように言ったとします: "Move knight to A 7 (ナイトを A 7 に移動)"。For example, in a chess scenario, a user might say: "Move knight to A 7". そのユーザーの意図に対するコンテキストがなければ、その発話は次のように認識される可能性があります: "Move night 287 (ナイトを 287 に移動)"。Without context for the user's intent, the utterance might be recognized as: "Move night 287". チェスの駒と座標を表すエンティティを作成し、それらを発話でラベル付けすることで、それらを識別するための音声認識のコンテキストを提供します。By creating entities that represent chess pieces and coordinates and labeling them in utterances, you provide context for speech recognition to identify them.

その他のリソースAdditional resources

詳細については、Cognitive Services のドキュメントを参照してください。Refer to Cognitive Services documentation for more information.