演習 - 意図と自然言語の理解を設定する
このモジュールでは、Azure 音声サービスの意図認識について調べます。 意図認識を使うと、アプリケーションに AI を利用した音声コマンドを装備することができ、ユーザーが不特定の音声コマンドを使っても、システムにその意図を理解させることができます。
シーンを準備する
[ヒエラルキー] ウィンドウで Lunarcom オブジェクトを選んでから、[インスペクター] ウィンドウで [コンポーネントを追加] ボタンを使って、Lunarcom Intent Recognizer (Script) コンポーネントを Lunarcom オブジェクトに追加します。
[プロジェクト] ウィンドウで、Assets>MRTK.Tutorials.GettingStarted>Prefabs>RocketLauncher フォルダーに移動し、RocketLauncher_Complete プレハブを [ヒエラルキー] ウィンドウにドラッグして、カメラの前の適切な場所に配置します。 次に例を示します。
- [変換] の [位置] X = 0、Y = 1、Z = 1.5
- [変換] の [回転] X = 0、Y = 90、Z = 0
[ヒエラルキー] ウィンドウで、Lunarcom オブジェクトをもう一度選び、RocketLauncher_Complete>Buttons オブジェクトを展開して、Buttons オブジェクトの子オブジェクトをそれぞれ対応する [Lunar Launcher Buttons] (月着陸船ランチャー ボタン) フィールドに割り当てます。
Azure 言語サービス リソースを作成する
このセクションでは、次のセクションで作成する会話言語理解 (CLU) アプリ用の Azure 言語サービス リソースを作成します。
Azure portal にサインインし、[リソースの作成] を選んでから、[言語サービス] を見つけて選びます。
[作成] ボタンを選んで、このサービスのインスタンスを作成します。
[言語の作成] ページで、次の値を入力します。
- 試用版のサブスクリプションがある場合は、[サブスクリプション] で [無料試用版] を選びます。 試用版のサブスクリプションがない場合は、お持ちの他のサブスクリプションのいずれかを選びます。
- [リソース グループ] で [新規作成] リンクを選んでから、適切な名前 (例: MRTK-Tutorials) を入力します。 [OK] を選択します。
ヒント
ご自分の Azure アカウントに別の適切なリソース グループが既にある場合は、新しく作成する代わりに、そのリソース グループを使用してもかまいません。
引き続き [作成] ページで、次の値を入力します。
- [名前] に、サービスの適切な名前 (例: MRTK-Tutorials-AzureSpeechServices) を入力します
- [リージョン] で、アプリ ユーザーの物理的な場所に近い場所を選びます ([(米国) 米国東部] など)。
- [価格レベル] には、このチュートリアルでは [F0] (30 日あたり 5,000 件のトランザクション) を選びます
次に、[確認と作成] を選んで詳細を確認した後、ページの下部にある [作成] ボタンを選んで、リソースを作成します (新しいリソース グループを作成するように構成した場合は、それも作成します)。
リソースの作成プロセスが完了すると、[デプロイが完了しました] というメッセージが表示されます。
会話言語理解 (CLU) アプリを作成する
このセクションでは、CLU アプリを作成し、その予測モデルを構成してトレーニングした後、前のステップで作成した Azure 言語リソースにそれを接続します。
具体的には、ユーザーがアクションを実行する必要があると言った場合、ユーザーが参照するボタンに応じて、アプリがシーン内の 3 つの青いボタンのいずれかで PressableButton.OnClicked()
イベントをトリガーするという意図を作成します。
たとえば、ユーザーが go ahead and launch the rocket (さあ、ロケットを打ち上げて) と言っている場合、アプリでは go ahead が何らかのアクションを実行する必要があることを意味し、ターゲットとする PressableButton.OnClicked()
イベントが [launch](打ち上げ) ボタンにあると予測します。
これを実現するには、主に次の手順を実行します。
- CLU アプリを作成する
- 意図の作成
- サンプル発話の作成
- エンティティの作成
- サンプル発話へのエンティティの割り当て
- アプリのトレーニング、テスト、発行
1. CLU アプリを作成する
前のセクションで Azure リソースを作成するときに使用したものと同じユーザー アカウントを使用して、言語スタジオにサインインします。
サインインすると、Azure リソースを選択するように求められます。 Azure 言語サービス リソースの作成時に使った値を選んでから、[完了] を選びます。
Azure リソースを接続した後、[新規作成] > [Conversational Language Understanding] (会話言語理解) を選び、[プロジェクトの作成] ポップアップ ウィンドウで次の値を入力します。
- [名前] には、適切な名前 (MRTK-Tutorials-AzureSpeechServices など) を入力します。 選択した名前を書き留めておいてください。後でチュートリアルで必要になります。
- [発話の第 1 言語] で、言語を選びます。
- [説明] に、必要に応じて適切な説明を入力します。
[次へ] を選択して、プロジェクトの構成を確認します。 [作成] を選択してプロジェクトを作成します。
新しいアプリが作成されると、そのアプリの [スキーマ定義] ページが表示されます。
2.意図の作成
[スキーマ定義] ページで、[追加] を選び、[意図の追加] ポップアップ ウィンドウで次の値を入力します。
- [Intent name](意図名) に「PressButton」と入力します
[意図の追加] を選び、新しい意図を作成します。
注意事項
このチュートリアルでは、Unity プロジェクトでこの意図が名前 (
PressButton
) で参照されます。 意図をまったく同じ名前にすることが非常に重要です。新しい意図が作成されると、[スキーマ定義] ページに戻ります。 [PressButton] という意図が意図の一覧に表示されます。
3.サンプル発話の作成
左側のサイド バーで、[データのラベル付け] ボタンを選びます。 [データのラベル付け] 画面で、[意図の選択] ドロップダウンから PressButton を選びます。
[PressButton] 意図の [Utterances] (発話) の一覧に、次の発話例を追加します。
- activate launch sequence (発射手順を作動)
- show me a placement hint (配置のヒントを表示)
- initiate the launch sequence (発射手順を開始)
- press placement hints button (配置のヒント ボタンを押す)
- give me a hint (ヒントを表示)
- push the launch button (発射ボタンを押す)
- i need a hint (ヒントが必要)
- press the reset button (リセット ボタンを押す)
- time to reset the experience (エクスペリエンスをリセットする時間を計る)
- go ahead and launch the rocket (先へ進めて、ロケットを発射)
すべての発話例を追加すると、[データのラベル付け] ページは次のようになります。
注意
このチュートリアルでは、Unity プロジェクトで "hint"、"hints"、"reset"、"launch" という単語が参照されます。どのような場合でも、これらの単語のスペルをまったく同じにすることが非常に重要です。
4.エンティティの作成
[データのラベル付け] ページで、右側の [アクティビティ] ウィンドウで [エンティティの追加] を選び、[Add an entity] (エンティティの追加) ポップアップ ウィンドウに次の値を入力します。
- [エンティティ名] には、「Action」と入力します
[エンティティの追加] を選び、新しいエンティティを作成します。
前の手順を繰り返して、Target という名前の別のエンティティを作成します。これで、Action と Target という名前の 2 つのエンティティが設定されます。
注意事項
このチュートリアルでは、Unity プロジェクトでこれらの意図が名前
Action
とTarget
で参照されます。 エンティティにまったく同じ名前を付けることが非常に重要です。
5.サンプル発話へのエンティティの割り当て
go という単語と ahead という単語を選び、コンテキスト ポップアップ メニューから [Action (Simple)] (アクション (シンプル)) を選んで、Action エンティティの値として go ahead というラベルを付けます。
これで、go ahead という語句が Action エンティティ値として定義されました。 "go ahead" という単語の下に Action エンティティ値が表示されるようになります。
Note
画像のラベルの下に表示される赤い線は、エンティティ値が予測されていない状態を示します。これは、次のセクションでモデルをトレーニングすると解決されます。
次に、launch という単語を選び、コンテキスト ポップアップ メニューから [ターゲット] を選んで、Target エンティティの値として launch というラベルを付けます。
これで、launch という単語が Target エンティティ値として定義されました。 "launch" という単語の下に Target エンティティ値が表示されるようになります。
PressButton 意図の発話例
go ahead and launch the rocket
が、次のように予測するよう構成されました。- 意図:PressButton
- Action エンティティ: go ahead
- Target エンティティ: launch
前のプロセスを繰り返して、Action と Target エンティティ ラベルを各発話の例に割り当てます。次の単語は Target エンティティとしてラベルを付ける必要があることに注意してください。
- hint (Unity プロジェクトの HintsButton をターゲットにします)
- hints (Unity プロジェクトの HintsButton をターゲットにします)
- reset (Unity プロジェクトの ResetButton をターゲットにします)
- launch (Unity プロジェクトの LaunchButton をターゲットにします)
変更を保存を選択します。 すべての発話の例にラベルを付けると、PressButton の意図ページは次のようになります。
6. アプリをトレーニング、テスト、発行する
アプリをトレーニングするには、左側のサイド バーで [Train] (トレーニング) ボタンを選びます。 [トレーニング ジョブ] ページが表示されます。
[トレーニング ジョブの開始] を選んで、次の値を選びます。
- [新しいモデルのトレーニング] を選び、適切な名前 (MRTK-Tutorials-AzureSpeechServices など) を入力します。
- [標準トレーニング] を選びます。
- [トレーニング データからのテスト セットの自動分割] を選びます。
[Train] (トレーニング) を選び、トレーニング プロセスを開始します。 トレーニングの処理が完了すると、[トレーニングを終了しました] 通知が表示されます。
トレーニングの結果を確認するには、[トレーニング ジョブ] 画面で [出力モデル] を選んで、[モデルのパフォーマンス] タブを選びます。
左側のサイド バーにある [モデルのデプロイ] ボタンを選び、アプリをデプロイします。 [モデルのデプロイ] ページが表示されます。
[デプロイの追加] を選び、[デプロイの追加] ポップアップに次の値を入力します。
- [新しいデプロイ名を作成する] を選び、適切な名前を入力します。 選択した名前を書き留めておいてください。後でチュートリアルで必要になります。
- [トレーニング済みモデルを選択する] ドロップダウンから、前に作成したモデルを選びます。
[デプロイ] を選び、発行プロセスが完了するまで待ちます。
新しいデプロイを選んで、[予測 URL の取得] ボタンを選びます。
Unity プロジェクトを CLU アプリに接続する
[予測 URL の取得] ポップアップで、[コピー] アイコンを選んで [予測 URL] をコピーします。
Unity プロジェクトに戻り、[ヒエラルキー] ウィンドウで Lunarcom オブジェクトを選んでから、[インスペクター] ウィンドウで Lunarcom Intent Recognizer (Script) コンポーネント見つけて、それを次のように構成します。
- [CLU Endpoint] (CLU エンドポイント) フィールドに、前のステップでコピーした予測 URL を渡します。
- [CLU Project Name] (CLU プロジェクト名) フィールドに、CLU アプリの作成時に書き留めたプロジェクト名を渡します。
- [CLU Deployment] (CLU デプロイ) フィールドに、新しいデプロイの作成時に書き留めた [Deployment Name] (デプロイ名) を渡します。
- [Language Service API Key] (言語サービスの API キー) フィールドで、言語サービスの API キー (Key1 または Key2) を渡します。 これは、Azure portal で言語サービスを選んでから、左側のメニューで [キーとエンドポイント] を選ぶと確認できます。
意図認識をテストする
Unity エディターで意図認識を直接使用するには、開発用コンピューターでディクテーションを使用できるようにする必要があります。 この設定を確認するには、Windows の [設定] を開き、[プライバシー]>[音声認識] を選んで、[オンライン音声認識] がオンになっていることを確認します。
ゲームモードに入ると、最初にロケット ボタンを押して、意図認識をテストできます。 次に、最初の発話例の go ahead and launch the rocket を声に出して読むと、LunarModule が宇宙に向けて発射されます。
発話の例をすべて試してから、発話例のバリエーションをいくつか試し、さらにランダムな発話をいくつか試してみてください。