分解可能な LUIS アプリケーションを構築する
重要
LUIS は 2025 年 10 月 1 日に廃止され、2023 年 4 月 1 日から新しい LUIS リソースを作成できなくなります。 継続的な製品サポートと多言語機能のベネフィットを得るために、LUIS アプリケーションを会話言語理解に移行することをお勧めします。
このチュートリアルでは、さまざまなユーザーの意図を予測できる通信 LUIS アプリケーションを作成できます。 チュートリアルを終えるまでに、ユーザーが提供するテキストに基づいてユーザーの意図を予測できる通信アプリケーションが完成します。
次のようなさまざまなユーザー シナリオ (意図) を扱います。
- 新しい通信回線へのサインアップ
- 既存のレベルの更新
- 請求書の支払い
このチュートリアルで学習する内容は次のとおりです。
- LUIS アプリケーションの作成
- 意図の作成
- 複数エンティティの追加
- 発話の追加
- ラベルの発話の例
- アプリのトレーニング
- アプリを公開します。
- 公開済みエンドポイントからの予測の取得
LUIS アプリケーションの作成
LUIS ポータルにサインインします。
[+ 新しいアプリ] を選択して、新しいアプリケーションを作成します。
表示されるウィンドウで、既定のカルチャである English はそのままで、「Telecom Tutorial」と名前を入力します。 他のフィールドは省略可能です。設定しないでください。 [Done] を選択します。
意図としてのユーザーの意図
[ビルド] セクションに最初に表示されるのは、アプリの意図です。 意図は、ユーザーが実行しようとしているタスクまたはアクションを表します。
通信 LUIS アプリケーションの場合、ユーザーが必要としているのは何でしょうか?
何らかの種類のユーザー アクションを実行するか、サポートを必要としている可能性があります。 別のユーザーは、レベルの更新や請求書の支払いをしようとしている可能性があります。
結果のスキーマは次のようになります。 詳細については、スキーマの計画に関するベスト プラクティスを説明した記事を参照してください。
インテント | 目的 |
---|---|
UserActions | ユーザー アクションを決定します |
ヘルプ | サポートを要求します |
UpdateTier | 現在のレベルを更新します |
PayBill | 未払い請求書を支払います |
なし | LUIS アプリによって回答が想定されていないことをユーザーが質問しているかどうかを判定します。 この意図はアプリの作成の一部として提供され、削除することはできません。 |
新しい意図の作成
意図は、ユーザーの意図に基づいて自然言語のテキストからの決定されるユーザー発話を分類するために使用されます。
発話を分類するには、意図には、その意図で分類される必要のあるユーザー発話の例が必要です。
上部のナビゲーション メニューで [ビルド] を選択してから、画面の左側にある [意図] を選択します [+ Create](+ 作成) を選択して新しい意図を作成します。 新しい意図の名前として「UserAction」を入力し、[完了] を選択します。
UserAction は、多くの意図の 1 つにできます。 たとえば、新しい回線にサインアップしたいユーザーもいれば、情報を取得したいユーザーもいます。
この意図に、ユーザーの質問として予想される発話例をいくつか追加します。
- こんにちは。 新しい回線にサインアップしたいです
- 新しい回線にサインアップできますか?
- こんにちは、新しい回線が必要です
- 回線番号を忘れてしまいました
- 新しい回線番号を取得したいです
意図が PayBill の場合、次のような発話ができます。
- 請求書を支払いたいです
- 請求書を決済して
- 請求書を支払って
- 現在の残高を閉じたい
- どうしたことでしょう。 現在の請求書を支払いたい
発話例を指定することで、この意図に予測される種類の発話を、LUIS にトレーニングできます。 これらは、陽性の例です。 他のすべての意図の発話は、この意図にとっては陰性として扱われます。 理想的には、発話例を追加すればするほど、アプリの予測精度が向上します。
これらの少数の発話は、デモンストレーションのみを目的としたものです。 実際のアプリでは、長さや語順、時制、文法上の正しさ、句読点、文字数などに変化を持たせた 15 から 30 の発話が必要です。
残りの意図の作成
上記の手順を実行して、次の意図をアプリに追加します。
"Help"
- "サポートが必要です"
- "アシスタンスが必要です"
- "助けてください"
- "誰か私をサポートしてくれますか?"
- "困っています。助けてもらえますか"
- "サポートしてもらえますか?"
"UpdateTier"
- "レベルを更新したい"
- "レベルを更新して"
- "VIP レベルに変更したい"
- "サブスクリプションを Standard レベルに変更して"
None 意図の発話例
クライアント アプリケーションは、発話がアプリケーションにとって無意味または不適切なものでないかどうかを把握する必要があります。 "None" 意図は、クライアント アプリケーションが発話に返答すべきでないかどうかを判断するために、作成プロセスの一部として各アプリケーションに追加されます。
LUIS が発話に対して "None" 意図を返した場合、クライアント アプリケーションは、ユーザーが会話の終了を望んでいるかどうかを確認するか、会話を続行するよう追加の指示を出すことができます。
"None" 意図を空のままにした場合、主題の領域の範囲外で予測する必要のある発話は、既存の主題の領域の意図のいずれかで予測されます。 その結果、チャット ボットなどのクライアント アプリケーションでは、正しくない予測に基づいて正しくない操作が実行されます。
左側のパネルから [Intents](意図) を選びます。
None 意図を選択します。 ユーザーが入力する可能性があるが通信アプリには関係のない 3 つの発話を追加します。 これらの例では、レベル、アップグレード、サインアップ、請求など、サブジェクト ドメインで予想する単語を使用することはできません。
- "フライトは何時?"
- "ピザの注文を変更する必要があります"
- "今日の天気は?"
複数エンティティの追加
エンティティは、ユーザーの意図に関連する項目または要素です。 エンティティは、発話から抽出できるデータを定義するものであり、必要なユーザー操作を完了するために不可欠です。
[ビルド] セクションで、[エンティティ] を選択します。
新しいエンティティを追加するには、[+ 作成] を選択します。
この例では、"UpdateTierInfo" というエンティティを機械学習エンティティ型として、"Tier" というエンティティをリスト エンティティ型として作成します。 Luis では別のエンティティ型も作成できます。
表示されるウィンドウに、「UpdateTierInfo」と入力し、使用可能な型から [機械学習] を選択します。 構造体をこのエンティティに追加できるようにするため、[構造体の追加] ボックスを選択します。
[次へ] を選択します。
子サブエンティティを追加するため、"+" 記号を選択し、子の追加を開始します。 "UpdateTierInfo" というエンティティ例には、次の 3 つが必要です。
- OriginalTier
- NewTier
- PhoneNumber
すべてのサブエンティティを追加したら、[作成] を選択します。
"Tier" という名前の別のエンティティも作成しますが、今回はリスト エンティティになります。これには、提供されるすべてのレベル (Standard レベル、Premium レベル、VIP レベル) が含まれます。
これを行うため、[エンティティ] タブに移動し、[+ 作成] を押して、表示された画面で [型] から [リスト] を選択します。
リストに項目を追加します。必要に応じて同意語を追加して、それに言及するすべてのケースが確実に認識されるようにします。
ここで、"UpdateTierInfo" エンティティに戻り、前に作成した "OriginalTier" エンティティと "newTier" エンティティの特徴として "tier" エンティティを追加します。 次のように表示されます。
tier は "originalTier" と "newTier" の両方の特徴として追加されました。"Phonenumber" エンティティも追加されましたが、これは RegEx 型です。 これは、ML エンティティやリスト エンティティを作成したときと同じ方法で作成できます。
これで、意図が正常に作成され、発話例が追加され、エンティティが追加されました。 また、4 つの意図 ("none" 意図の他に) と 3 つのエンティティを作成しました。
ラベルの発話の例
機械学習済みエンティティが作成されると、そのサブエンティティには特徴量が与えられます。 抽出の改善を完了するには、発話の例にサブエンティティでラベルを付ける必要があります。
発話にラベルを付けるには、次の 2 つの方法があります。
ラベル付けツールの使用
- [エンティティ パレット] を開き、コンテキスト ツールバーで "@" 記号を選択します。
- パレットで各エンティティ行を選択してから、パレット カーソルを使用して発話の各例のエンティティを選択します。
カーソルをドラッグしてテキストを強調表示します。 カーソルを使用して、ラベルを付けたいテキストを強調表示します。 次の画像では、"vip - tier" が強調表示され、"NewTier" エンティティが選択されています。
アプリをトレーニングする
LUIS Web サイトの右上にある [Train](トレーニング) ボタンを選択します。
トレーニングの前に、それぞれの意図に対して少なくとも 1 つの発話があることを確認します。
アプリの発行
チャットボットや他のクライアント アプリケーションで LUIS の予測を受け取るには、アプリを予測エンドポイントに公開する必要があります。 公開するには、アプリケーションを最初にトレーニングする必要があります。
右上のナビゲーションで [公開] を選択します。
[運用] スロットを選択し、 [完了] を選択します。
通知の [エンドポイントの URL にアクセス] を選択して [Azure リソース] ページに移動します。 アプリに関連付けられている予測リソースがある場合にのみ、URL が表示されます。 画面の左側にある [管理] をクリックして、[Azure リソース] ページを表示することもできます。
意図の予測を取得する
右上のメニューで [管理] を選択し、左側の [Azure リソース] を選択します。
サンプル クエリの URL をコピーして、新しい Web ブラウザー タブに貼り付けます。
エンドポイント URL の形式は次のとおりです。
https://YOUR-CUSTOM-SUBDOMAIN.api.cognitive.microsoft.com/luis/prediction/v3.0/apps/YOUR-APP-ID/slots/production/predict?subscription-key=YOUR-KEY-ID&verbose=true&show-all-intents=true&log=true&query=YOUR\_QUERY\_HERE
アドレス バーの URL の末尾に移動して、
query=
文字列パラメーターを次で置き換えます。"こんにちは。 新しい番号を探してください。"
この発話クエリが URI で渡されます。 この発話は、発話例のいずれとも同じではないので、LUIS がトップ スコアの意図としてこの UserAction 意図を予測するかどうかを確認するための良いテストになります。
{ "query": "hello! i am looking for a new number please", "prediction": { "topIntent": "UserAction", "intents": { "UserAction": { "score": 0.8607431}, "Help":{ "score": 0.031376917}, "PayBill": { "score": 0.01989629}, "None": { "score": 0.013738701}, "UpdateTier": { "score": 0.012313577} }, "entities": {} } }
この JSON 結果では、トップ スコアの意図が prediction.topIntent プロパティとして識別されています。 すべてのスコアは 0 から 1 の範囲であり、1 に近いほどよいスコアです。
クライアント アプリケーションの次の手順
このチュートリアルでは、LUIS アプリを作成し、意図とエンティティを作成して、各意図に発話例を追加しました。また、None 意図への発話例の追加、トレーニング、公開、およびエンドポイントでのテストを行いました。 これらが、LUIS モデルを構築する基本的な手順です。
LUIS は、ユーザーの発話に対する回答は提供しません。自然言語で、どのような種類の情報が質問されているかを識別するだけです。 会話のフォローアップは、Azure ボットなどのクライアント アプリケーションによって提供されます。
リソースをクリーンアップする
不要になったら、LUIS アプリを削除します。 これを行うには、左上のメニューから [My apps](マイ アプリ) を選択します。 アプリ リストのアプリ名の右にある省略記号 ( ... ) を選択し、[削除] を選択します。 [Delete app?](アプリを削除しますか?) という名前のポップアップ ダイアログで、[OK] を選択します。