Language Understanding (LUIS) から Conversational Language Understanding (CLU) に移行する

Conversational Language Understanding (CLU) は、Azure AI Language におけるクラウドベースの AI オファリングです。 これは最新世代の Language Understanding (LUIS) であり、以前に作成された LUIS アプリケーションとの下位互換性を提供します。 CLU は、最新の機械学習インテリジェンスを採用して、ユーザーが会話の発話における意図とエンティティを予測するためのカスタム自然言語理解モデルを構築できるようにします。

CLU は、LUIS に比べて次の利点を備えています。

  • 最新の機械学習モデルを使用して精度を向上させて、意図の分類とエンティティの抽出を改善しました。 LUIS では、意図とエンティティの特定の概念を一般化するためにより多くの例が必要でしたが、CLU のより高度な機械学習では、必要なデータを大幅に減らすことで顧客の負担が軽減されます。
  • モデルの学習とトレーニングに対する多言語サポート。 1 つの言語でプロジェクトをトレーニングし、96 の言語全体で意図とエンティティをすぐに予測します。
  • オーケストレーション ワークフローを使用したさまざまな CLU とカスタム質問と回答プロジェクトとの容易な統合。
  • デプロイ前のモデル パフォーマンス評価に Language Studio と API を使用して、エクスペリエンス内にテスト データを追加する機能。

開始するには、新しいプロジェクトを作成するか、LUIS アプリケーションを移行することができます。

LUIS と CLU の比較

次の表では、LUIS と CLU の特徴を並べて比較しています。 また、CLU に移行した後の LUIS アプリケーションの変更点が強調表示されています。 変更点の詳細を確認するには、リンクされた概念を選択してください。

LUIS の特徴 CLU の特徴 移行後の処理
機械学習エンティティと構造化された ML エンティティ 学習エンティティ コンポーネント サブエンティティのない機械学習エンティティは、CLU のエンティティとして転送されます。 構造化された ML エンティティは、CLU のエンティティとしてリーフ ノード (独自のサブエンティティを持たない最下位レベルのサブエンティティ) のみを転送します。 CLU のエンティティの名前は、親と連結されたサブエンティティの名前になります。 例: Order.Size
リスト、正規表現、および事前構築済みエンティティ リスト、正規表現、および事前構築済みのエンティティ コンポーネント リスト、正規表現、および事前構築済みのエンティティは、エンティティの種類に基づいて取り込まれたエンティティ コンポーネントと一緒に、CLU のエンティティとして転送されます。
Pattern.Any エンティティ 現在、利用できません Pattern.Any エンティティは削除されます。
アプリケーションごとに 1 つのカルチャ 多言語モデルでは、プロジェクトごとに複数の言語が有効になります。 プロジェクトの主要言語は、LUIS アプリケーション カルチャとして設定されます。 プロジェクトは、さまざまな言語に拡張するようにトレーニングできます。
エンティティのロール ロールは不要になりました。 エンティティのロールはエンティティとして転送されます。
設定: 句読点の正規化、分音記号の正規化、単語形式の正規化、すべてのトレーニング データの使用 設定は不要になりました。 設定は転送されません。
パターンとフレーズ リストの特徴 パターンとフレーズ リストの特徴は不要になりました。 パターンとフレーズ リストの特徴は転送されません。
エンティティの特徴 エンティティ コンポーネント エンティティに特徴として追加されたリスト エンティティまたは事前構築済みエンティティは、そのエンティティに追加されたコンポーネントとして転送されます。 意図に対するエンティティの特徴は転送されません。
意図と発話 意図と発話 すべての意図と発話が転送されます。 発話には、転送されたエンティティというラベルが付けられます。
アプリケーション GUID プロジェクト名 移行アプリケーションごとにアプリケーション名を使用してプロジェクトが作成されます。 アプリケーション名の特殊文字はすべて、CLU で削除されます。
バージョン管理 トレーニングを行うたびに、モデルが作成され、プロジェクトのバージョンとして機能します。 選択されたアプリケーション バージョンに対してプロジェクトが作成されます。
バッチ テストを使用した評価 テスト セットを使用した評価 テスト データセットの追加が必要になります。
LUIS リソースのロールベースのアクセス制御 (RBAC) 言語リソースに使用できるロールベースのアクセス制御 (RBAC) 言語リソースの RBAC は、移行後に手動で追加する必要があります。
単一トレーニング モード 標準および高度なトレーニング モード アプリケーションの移行後にトレーニングが必要になります。
2 つの発行スロットとバージョンの発行 カスタム名前付けを使用する 10 個のデプロイ スロット アプリケーションの移行とトレーニングの後でデプロイが必要になります。
.NET、Python、Java、および Node.js での LUIS オーサリング API と SDK のサポート CLU オーサリング REST API 詳細については、CLU オーサリング API に関するクイック スタートの記事を参照してください。 CLU オーサリング API を使用するには、リファクタリングが必要です。
.NET、Python、Java、および Node.js での LUIS ランタイム API と SDK のサポート CLU ランタイム API.NETPython に対する CLU ランタイム SDK のサポート。 詳細については、API の呼び出し方法に関するページを参照してください。 CLU ランタイム API 応答を使用するには、リファクタリングが必要です。

LUIS アプリケーションを移行する

LUIS ポータルまたは REST API を使用して LUIS アプリケーションを移行するには、次の手順を使用します。

LUIS ポータルを使用して LUIS アプリケーションを移行する

LUIS ポータルを使用して移行を開始するには、以下の手順を実行します。

  1. LUIS ポータルにログインしたら、画面の上部にあるバナーのボタンをクリックして移行ウィザードを起動します。 移行では、選択した LUIS アプリケーションのみが CLU にコピーされます。

    LUIS ポータルの移行バナーを示すスクリーンショット。

    [移行の概要] タブでは、会話言語理解とその利点について簡単に説明しています。 [次へ] をクリックして続行します。

    [移行の概要] ウィンドウを示すスクリーンショット。

  2. LUIS アプリケーションを移行する先の言語リソースを決定します。 言語リソースを既に作成している場合は、Azure サブスクリプションの後に言語リソースを選択し、[次へ] を選択します。 言語リソースがない場合は、新しい言語リソースを作成するリンクをクリックします。 その後、リソースを選択し、[次へ] を選択します。

    リソース選択ウィンドウを示すスクリーンショット。

  3. 移行するすべての LUIS アプリケーションを選択し、それぞれのバージョンを指定します。 [次へ] を選択します。 アプリケーションとバージョンを選択したら、LUIS アプリケーションから引き継がれない特徴を通知するメッセージが表示されます。

    注意

    特殊文字は、会話言語理解ではサポートされません。 選択された LUIS アプリケーション名の特殊文字はすべて、移行された新しいアプリケーションで削除されます。 アプリケーション選択ウィンドウを示すスクリーンショット。

  4. 言語リソースと LUIS アプリケーションの選択内容を確認します。 [完了] をクリックしてアプリケーションを移行します。

  5. ポップアップ ウィンドウで、アプリケーションの移行状態を追跡できます。 移行を開始していないアプリケーションの状態は [未開始] になります。 移行を開始したアプリケーションの状態は [進行中] になり、移行が完了すると、その状態は [成功] になります。 失敗したアプリケーションでは、移行プロセスを繰り返す必要があります。 すべてのアプリケーションの移行が完了したら、[完了] を選択します。

    アプリケーション移行の進行状況ウィンドウを示すスクリーンショット。

  6. アプリケーションが移行したら、次の手順を実行できます。

よく寄せられる質問

どの LUIS JSON バージョンが CLU でサポートされますか?

CLU では、モデル JSON バージョン 7.0.0 がサポートされます。 JSON 形式が古い場合は、最初に LUIS にインポートしてから、最新バージョンの LUIS からエクスポートする必要があります。

CLU でエンティティはどのように異なりますか?

CLU では、1 つのエンティティに、抽出方法が異なる複数のエンティティ コンポーネントを含めることができます。 これらのコンポーネントは、定義できるルールを使用して組み合わされます。 使用可能なコンポーネントは次のとおりです。

  • 学習済み: LUIS の ML エンティティに相当し、提供されたラベルのコンテンツとコンテキストに基づいてエンティティを予測する機械学習モデルをトレーニングするためにラベルが使用されます。
  • リスト: LUIS のリスト エンティティと同様に、リスト コンポーネントは一連のシノニムと完全に一致し、リスト キーと呼ばれる正規化された値にマップします。
  • 事前構築済み: 事前構築済みコンポーネントでは、LUIS と CLU の両方で使用できる一般的な種類の事前構築済みエクストラクターを使用してエンティティを定義できます。
  • 正規表現: 正規表現コンポーネントは、LUIS の正規表現エンティティとまったく同じように、正規表現を使用してカスタム定義パターンをキャプチャします。

LUIS のエンティティは、CLU で同じ名前のエンティティとして転送され、同等のコンポーネントが転送されます。

移行後、構造化された機械学習リーフ ノードと最下位レベルのサブエンティティは新しい CLU モデルに転送されますが、すべての親エンティティと上位レベルのエンティティは無視されます。 エンティティの名前は、親エンティティと連結された最下位レベルのエンティティの名前になります。

例:

LUIS エンティティ:

  • Pizza Order
    • Topping
    • サイズ

CLU へ移行された LUIS エンティティ:

  • Pizza Order.Topping
  • Pizza Order.Size

また、同じ文字範囲に対して CLU で 2 つの異なるエンティティにラベルを付けることはできません。 CLU の学習済みコンポーネントは相互に排他的であり、学習済みコンポーネントのみに対する重複する予測を提供しません。 LUIS アプリケーションを移行する場合、重複したエンティティ ラベルは最長のラベルを保持し、他のラベルを無視しました。

エンティティ コンポーネントの詳細については、「エンティティ コンポーネント」を参照してください。

エンティティのロールはどのように CLU に転送されますか?

ロールは、ラベル付きの発話と一緒に個別のエンティティとして転送されます。 各ロールのエンティティの種類によって、取り込まれるエンティティ コンポーネントが決まります。 たとえば、リスト エンティティ ロールは、ロールと同じ名前のエンティティとして転送され、リスト コンポーネントが取り込まれます。

エンティティの特徴は CLU でどのように転送されますか?

意図の特徴として使用されるエンティティは転送されません。 他のエンティティの特徴として使用されるエンティティは、エンティティの関連するコンポーネントを取り込みます。 たとえば、SizeList という名前のリスト エンティティが Size という名前の機械学習エンティティの特徴として使用された場合、Size エンティティは、リスト コンポーネントに追加された SizeList のリスト値と一緒に CLU に転送されます。 事前構築済みエンティティと正規表現エンティティにも同じことが当てはまります。

CLU でエンティティ信頼度スコアはどのように異なりますか?

抽出されたエンティティには 100% の信頼度スコアがあるため、エンティティ間の決定にはエンティティの信頼度スコアを使用しないでください。

会話言語理解はどのように多言語ですか?

会話言語理解プロジェクトでは、さまざまな言語で発話を受け入れます。 さらに、1 つの言語でモデルをトレーニングし、それを拡張して他の言語で予測することもできます。

例:

トレーニング発話 (英語): How are you?

ラベル付き意図: あいさつ

ランタイム発話 (フランス語): Comment ça va?

予測された意図: あいさつ

CLU の精度は LUIS よりもどのように優れていますか?

CLU では、最新のモデルを使用して、意図の分類とエンティティ抽出のさまざまなモデルの機械学習パフォーマンスを向上させます。

これらのモデルはわずかな違いを認識せず、句読点の正規化分音記号の正規化単語形式の正規化すべてのトレーニング データの使用の設定の必要がなくなります。

さらに、新しいモデルでは、精度を高めるために意味的に類似した単語を提供するためのユーザーからの補足情報が不要になったため、フレーズ リストの特徴はサポートされません。 新しいモデル パラダイムでは必要ないルールベースのマッチング手法を使用して、意図の分類を改善するためにパターンも使用されました。 以下の質問では、これを詳しく説明しています。

LUIS で使用している特徴が存在しなくなった場合はどうすればよいですか?

LUIS には、CLU では使用できなくなった特徴がいくつかあります。 これには、パターンと pattern.any エンティティ、および構造化エンティティを備えた、特徴エンジニアリングを行う機能が含まれます。 LUIS でこれらの特徴に依存していた場合は、次のガイダンスを使用してください。

  • パターン: 正規表現テンプレートの発話を定義することにより意図の分類を支援するために、LUIS にパターンが追加されました。 これには、(発話の例がない) パターンのみの意図を定義する機能が含まれていました。 CLU は、最先端のモデルを利用することで一般化できます。 特定のパターンを CLU の意図と一致させた発話をいくつか指定できます。パターン テンプレートの発話を必要とせずに、さまざまなパターンを最上位の意図として分類する可能性があります。 これにより、LUIS で制限されていたこれらのパターンを作成する要件が簡素化され、意図分類エクスペリエンスが向上します。

  • フレーズ リストの特徴: 特徴を関連付ける機能は、主に、使用する主な要素/特徴を強調表示することで意図の分類を支援するために生じました。 CLU で使用されるディープなモデルには、言語に固有の要素を識別する機能が既に備わっているため、これが不要になりました。 一方、これらの特徴を削除しても、モデルの分類機能には影響ありません。

  • 構造化エンティティ: 構造化エンティティを定義する機能は、主に発話の複数レベルの解析を可能にするためのものでした。 サブエンティティにはさまざまな可能性があるため、LUIS では、エンティティのさまざまな組み合わせをすべて定義し、モデルに例として提示する必要がありました。 CLU では、学習済みコンポーネントの重複がサポートされないため、これらの構造化エンティティはサポートされなくなりました。 これらの構造化された抽出を処理するには、いくつかの方法が考えられます。

    • あいまいでない抽出: ほとんどの場合、リーフ エンティティの検出で、全スパン内の必須項目を十分に理解できます。 たとえば、送信元と送信先 ("ロンドンからニューヨークまで"、または "自宅から職場まで") にわたる "移動" などの構造化されたエンティティは、送信元と送信先について予測される個々のスパンで識別できます。 個々の予測として存在することにより、"移動" エンティティが通知されます。
    • あいまいな抽出: さまざまなサブエンティティの境界があまり明確でない場合。 説明のために、「ペパロニ ピザと追加チーズのベジタリアン ピザを注文する」という例を取り上げます。 さまざまな種類のピザやトッピングの変更を抽出できますが、コンテキストなしの抽出には、チーズが追加される場合にある程度のあいまいさがあります。 この場合、スパンの範囲はコンテキスト ベースであり、これを判断するには ML が必要になります。 あいまいな抽出の場合は、次のいずれかの方法を使用できます。
  1. サブエンティティを同じエンティティ内の異なるエンティティ コンポーネントに結合します。

例:

LUIS の実装:

  • ピザの注文 (エンティティ)
    • サイズ (サブエンティティ)
    • 数量 (サブエンティティ)

CLU の実装:

  • ピザの注文 (エンティティ)
    • サイズ (リスト エンティティ コンポーネント: 小、中、大)
    • 数量 (事前構築済みエンティティ コンポーネント: 数)

CLU では、サイズと数量を含む "ピザの注文" のスパン全体にラベルを付けます。これにより、サイズのリスト キーと、同じエンティティ オブジェクト内の数量の数値と一緒にピザの注文が返されます。

  1. エンティティに複数のレベルの深さが含まれるもっと複雑な問題の場合、エンティティ構造の深さのレベルごとに 1 つのプロジェクトを作成できます。 これにより、次のオプションが提供されます。
  • 発話を各プロジェクトに渡します。
  • 各プロジェクトの分析を CLU を処理するステージで結合します。

この概念の詳細な例については、GitHub で入手できるピザのサンプル プロジェクトを確認してください。

CLU でバージョンを管理するにはどうすればよいですか?

CLU では、モデルのトレーニングに使用されるデータ資産を保存します。 モデルの資産をエクスポートしたり、任意の時点でプロジェクトに読み込むことができます。 したがって、モデルはプロジェクトの別々のバージョンとして機能します。

Language Studio またはプログラムを使用して CLU プロジェクトをエクスポートし、異なるバージョンの資産をローカルに格納できます。

CLU の分類が LUIS と異なるのはなぜですか? None 分類はどのように機能しますか?

CLU では、二項分類ではなく、複数分類を使用して、異なるモデルのトレーニング方法を提示します。 その結果、スコアの解釈が異なり、トレーニング オプションによっても異なります。 より良い結果が得られる可能性がありますが、スコアの違いを観察し、意図の予測を受け入れるための新しいしきい値を決定する必要があります。 プロジェクト設定で None 意図の信頼度スコアしきい値を簡単に追加できます。 これにより、最上位の意図が指定された信頼度スコアしきい値を超えなかった場合、最上位の意図として None が返されます。

CLU モデルには LUIS よりも多くのデータが必要ですか?

新しい CLU モデルでは、LUIS よりも言語のセマンティックの理解が深まり、データを大幅に削減してモデルが一般化するのに役立ちます。 データの量を減らすことを目指すべきではありませんが、LUIS と比較して CLU のバリエーションとシノニムに対するパフォーマンスと回復性の向上が想定されます。

LUIS アプリを移行しない場合、それらのアプリは削除されますか?

既存の LUIS アプリケーションは、2025 年 10 月 1 日まで利用できます。 その後、これらのアプリケーションを使用できなくなります。サービス エンドポイントは機能しなくなり、アプリケーションは完全に削除されます。

.LU ファイルは CLU でサポートされますか?

CLU では JSON 形式のみがサポートされます。 .LU ファイルを LUIS にインポートし、JSON 形式でエクスポートするか、アプリケーションに上記の移行手順を実行できます。

CLU のサービスの制限とは何ですか?

詳細については、サービス制限に関する記事を参照してください。

アプリケーションを LUIS から CLU に移行する場合、コードをリファクタリングする必要がありますか?

CLU アプリケーションの API オブジェクトは LUIS とは異なるため、コードのリファクタリングが必要になります。

LUIS Programmatic API やランタイム API を使用している場合、同等の API に置き換えることができます。

CLU オーサリング API: "発話の追加"、"エンティティの削除"、"意図の名前変更" などの個々のアクションに対する LUIS 固有の CRUD API の代わりに、CLU では、同じ名前を使用してプロジェクトのコンテンツ全体を置き換えるインポート API を提供します。 サービスで LUIS Programmatic API を使用して他の顧客にプラットフォームを提供していた場合は、この新しい設計パラダイムを検討する必要があります。 "プロジェクトのリスト"、"トレーニング"、"デプロイ"、"削除" など、他のすべての API が使用できます。 "インポート" や "デプロイ" などのアクションの API は、LUIS の同期操作ではなく、非同期操作です。

CLU ランタイム API: 新しい API の要求と応答には、"クエリ"、"予測"、"最上位の意図"、"意図"、"エンティティ" とそれらの値など、多くの同じパラメーターが含まれています。 CLU 応答オブジェクトは、より簡単な方法を提供します。 エンティティ予測は発話テキスト内にあるので提供され、解決キーやリスト キーなどの追加情報は、extraInformationresolution と呼ばれる追加のパラメーターで提供されます。

.NET または Python CLU ランタイム SDK を使用して、LUIS ランタイム SDK を置き換えることができます。 現在、CLU で使用できるオーサリング SDK はありません。

CLU でトレーニング時間はどのように異なりますか? 標準トレーニングと高度なトレーニングの違いは何ですか?

CLU では、英語でトレーニングと学習を行う標準的なトレーニングが提供されており、LUIS のトレーニング時間に相当します。 また、高度なトレーニングも提供されます。トレーニングが他のサポートされているすべての言語に拡張されるため、かなり時間が長くなります。 トレーニング API は引き続き非同期プロセスであるため、ソリューションに使用する DevOps プロセスの変更を評価する必要があります。

LUIS と比較して、CLU でエクスペリエンスはどのように変わりましたか? 開発ライフサイクルはどのように違いますか?

LUIS では Build-Train-Test-Publish を行いますが、CLU では Build-Train-Evaluate-Deploy-Test を行います。

  1. ビルド: CLU では、トレーニングの前に意図、エンティティ、発話を定義できます。 さらに、CLU では、モデル評価に使用するアプリケーションをビルドするときに "テスト データ" を指定する機能も用意されています。 評価では、テスト データに対するモデルのパフォーマンスが評価され、精度、再現率、F1 メトリックが提供されます。
  2. トレーニング: トレーニングのたびに名前を持つモデルを作成します。 既にトレーニングされたモデルを上書きできます。 "標準" トレーニングまたは "高度な" トレーニングのいずれかを指定し、テスト データを評価に使用するかどうか、またはトレーニングから除外してテスト データとして使用するトレーニング データの割合を決定できます。 トレーニングが完了したら、モデルが外部でどの程度うまく機能しているかを評価できます。
  3. デプロイ: トレーニングが完了し、名前を持つモデルが完成したら、予測のためにデプロイできます。 デプロイにも名前が付けられ、モデルが割り当てられます。 同じモデルに対して複数のデプロイを行うことができます。 デプロイは別のモデルで上書きすることができ、プロジェクト内の他のデプロイとモデルをスワップすることもできます。
  4. テスト: デプロイが完了したら、デプロイ エンドポイントを通じた予測に使用できます。 [Test deployment] (デプロイのテスト) ページで、スタジオでテストすることもできます。

このプロセスは LUIS とは対照的です。LUIS では、アプリケーション ID がすべてにアタッチされ、ステージング スロットまたは運用スロットにアプリケーションのバージョンをデプロイしました。

これは、使用する DevOps プロセスに影響を与えます。

CLU にはコンテナー サポートがありますか?

ありません。CLU をコンテナーにエクスポートすることはできません。

移行後に CLU で LUIS アプリケーションにどのように名前が付けられますか?

LUIS アプリケーション名の特殊文字はすべて削除されます。 削除された名前の長さが 50 文字を超える場合、余分な文字が削除されます。 特殊文字を削除した後の名前が空の場合 (たとえば、LUIS アプリケーション名が @@ であった場合)、新しい名前は "無題" になります。 同じ名前の会話言語理解プロジェクトが既にある場合は、最初の重複では移行された LUIS アプリケーションに _1 が追加され、重複が追加されるごとに 1 ずつ増えます。 新しい名前の長さが 50 文字で、名前を変更する必要がある場合は、最後の 1 文字または 2 文字を削除して、番号を連結して、引き続き 50 文字の制限内に収まるようにします。

LUIS からの移行に関する Q&A

この記事で未回答の質問がある場合は、Microsoft Q&A スレッドで質問することを検討してください。

次のステップ