快速入門:使用交談式Language Understanding辨識意圖

參考文件 | 套件 (NuGet) | GitHub 上的其他範例

在本快速入門中,您將使用語音和語言服務從麥克風擷取的音訊資料辨識意圖。 具體而言,您將使用語音服務來辨識語音,並使用交談式Language Understanding (CLU) 模型來識別意圖。

重要

具有語音 SDK 1.25 版或更新版本的 C# 和 C++ 可使用交談式Language Understanding (CLU) 。

必要條件

  • Azure 訂用帳戶 - 建立免費帳戶
  • 在 Azure 入口網站 中建立語言資源
  • 取得語言資源金鑰和端點。 部署語言資源之後,選取 [前往資源] 以檢視和管理金鑰。 如需 Azure AI 服務資源的詳細資訊,請參閱 取得資源的金鑰
  • 在Azure 入口網站中建立語音資源
  • 取得語音資源金鑰和區域。 部署語音資源之後,選取 [移至資源] 以檢視和管理金鑰。 如需 Azure AI 服務資源的詳細資訊,請參閱 取得資源的金鑰

設定 Azure 環境

語音 SDK 可以 NuGet 套件的形式取得,並且實作 .NET Standard 2.0。 您會在本指南的後續部分中安裝語音 SDK,但請先參閱 SDK 安裝指南,了解其他需求。

設定環境變數

此範例需要名為 LANGUAGE_KEYLANGUAGE_ENDPOINTSPEECH_KEY 和 的 SPEECH_REGION 環境變數。

您的應用程式必須經過驗證,才能存取 Azure AI 服務資源。 在生產環境中,請運用安全的方式來儲存和存取您的登入資訊。 例如,取得語音資源索引碼後,在執行應用程式的本機電腦上,將索引碼寫入新的環境變數。

提示

請勿在程式碼中直接包含索引碼,且切勿公開張貼索引碼。 如需更多驗證選項,請參閱 Azure AI 服務安全性文章,例如Azure 金鑰保存庫

若要設定環境變數,請開啟主控台視窗,並遵循作業系統和開發環境的指示。

  • 若要設定 LANGUAGE_KEY 環境變數,請以您其中一個資源索引碼取代 your-language-key
  • 若要設定 LANGUAGE_ENDPOINT 環境變數,請將 取代 your-language-endpoint 為您資源的其中一個區域。
  • 若要設定 SPEECH_KEY 環境變數,請以您其中一個資源索引碼取代 your-speech-key
  • 若要設定 SPEECH_REGION 環境變數,請將 取代 your-speech-region 為您資源的其中一個區域。
setx LANGUAGE_KEY your-language-key
setx LANGUAGE_ENDPOINT your-language-endpoint
setx SPEECH_KEY your-speech-key
setx SPEECH_REGION your-speech-region

注意

如果您只需存取目前執行主控台的環境變數,您可以使用 set 設定環境變數,而不是 setx

新增環境變數之後,您可能需要重新開機任何需要讀取環境變數的執行中程式,包括主控台視窗。 例如,如果您使用 Visual Studio 做為編輯器,請在執行範例前重新啟動 Visual Studio。

建立交談式Language Understanding專案

建立 Language 資源之後,請在 Language Studio中建立交談語言理解專案。 專案是一個工作區域,可根據您的資料建置自訂 ML 模型。 專案只能由您和其他具有所使用語言資源存取權的人員存取。

移至 Language Studio,並以您的 Azure 帳戶登入。

建立交談語言理解專案

在本快速入門中,您可以下載 此範例家用自動化專案 並加以匯入。 此專案可以從使用者輸入預測預期的命令,例如開啟和關閉光線。

  1. 在 Language Studio 的 [理解問題和交談語言] 區段下,選取 [交談語言理解]。

    顯示 Language Studio 登陸頁面中「自訂語言理解」位置的螢幕擷取畫面。

  2. 這會帶您前往 [交談語言理解專案] 頁面。 在 [ 建立新專案] 按鈕旁,選取 [ 匯入]。

    顯示 Language Studio 中交談專案頁面的螢幕擷取畫面。

  3. 在出現的視窗中,上傳您想要匯入的 JSON 檔案。 確定您的檔案遵循支援的 JSON 格式

一旦上傳完成,您就會登陸 [結構描述定義] 頁面。 針對本快速入門,已建置結構描述,且語句已加上意圖和實體的標籤。

定型模型

一般而言,在建立專案之後,您應該建置結構描述標記語句。 針對本快速入門,我們已匯入備妥專案,其中具有已建置的結構描述和已標記的語句。

若要定型模型,則須啟動定型作業。 成功定型作業的輸出即是定型的模型。

若要從 Language Studio 內開始定型模型:

  1. 從左側功能表中選取 [定型模型]。

  2. 從頂端功能表中選取 [開始定型作業]。

  3. 選取 [定型新模型 ],然後在文字方塊中輸入新的模型名稱。 否則,若要以在新資料上定型的模型取代現有的模型,請選取 [覆寫現有的模型 ],然後選取現有的模型。 覆寫定型的模型是無法復原的,但在您部署新模型之前,不會影響已部署的模型。

  4. 選取定型模式。 您可以選擇 [標準定型] 來加快定型速度,但僅適用於英文。 或者,您可以選擇支援其他語言和多語系專案的 [進階定型],但需要較長的定型時間。 深入瞭解模型定型

  5. 選取資料分割方法。 您可以選擇 [從定型資料自動分割測試集],使用此方法時,系統會根據指定的百分比,將您的表達分割為定型集與測試集。 或者,您可以選擇 [使用手動分割定型和測試資料],但只有在表達已新增至測試集,且您標記表達時,才會啟用此選項。

  6. 選取 [定型] 按鈕。

    顯示 Language Studio 中 [定型] 頁面的螢幕擷取畫面。

  7. 從清單中選取訓練作業識別碼。 隨即會出現一個面板,您可以在其中檢查此作業的訓練進度、作業狀態和其他詳細資料。

    注意

    • 只有成功完成的定型作業才會產生模型。
    • 根據表達的計數,定型可能需要幾分鐘到幾小時的時間。
    • 您一次只能執行一個定型作業。 在完成執行中作業之前,您無法在同一個專案內啟動其他定型工作。
    • 用來定型模型的機器學習會定期更新。 若要在先前的 組態版本上定型,請選取 [ 選取這裡] 以 從 [ 開始訓練作業 ] 頁面變更,然後選擇舊版。

部署模型

定型模型後,您通常可檢閱其評估詳細資料。 在本快速入門中,您只需部署模型,並讓其可供您在 Language Studio 中試用,或者您可以呼叫預測 API

若要從 Language Studio 內部署您的模型:

  1. 從左側功能表中,選取 [部署模型]。

  2. 選取 [新增部署 ] 以啟動 [新增部署 精靈]。

    顯示 Language Studio 中模型部署按鈕的螢幕擷取畫面。

  3. 選取 [建立新的部署名稱 ] 以建立新的部署,並從下方的下拉式清單中指派定型的模型。 否則,您可以選取 [ 覆寫現有的部署名稱 ],以有效地取代現有部署所使用的模型。

    注意

    覆寫現有的部署不需要變更預測 API 呼叫,但您取得的結果將會以新指派的模型為基礎。

    顯示 Language Studio 中新增部署畫面的螢幕擷取畫面。

  4. 從 [模型] 下拉式清單中選取定型的 模型

  5. 選取 [部署 ] 以啟動部署作業。

  6. 部署成功之後,在其旁邊會出現到期日。 部署到期是已部署模型無法用於預測的時間,這通常會在定型設定到期的十二個月後發生。

您將在下一節中使用專案名稱和部署名稱。

從麥克風辨識意圖

請遵循下列步驟來建立新的主控台應用程式並安裝語音 SDK。

  1. 在您想要新專案的位置開啟命令提示字元,並使用 .NET CLI 建立主控台應用程式。 建議您在專案目錄中建立 Program.cs 檔案。

    dotnet new console
    
  2. 使用 .NET CLI 在新專案中安裝語音 SDK。

    dotnet add package Microsoft.CognitiveServices.Speech
    
  3. 以下列程式碼取代 Program.cs 的內容。

    using Microsoft.CognitiveServices.Speech;
    using Microsoft.CognitiveServices.Speech.Audio;
    using Microsoft.CognitiveServices.Speech.Intent;
    
    class Program 
    {
        // This example requires environment variables named:
        // "LANGUAGE_KEY", "LANGUAGE_ENDPOINT", "SPEECH_KEY", and "SPEECH_REGION"
        static string languageKey = Environment.GetEnvironmentVariable("LANGUAGE_KEY");
        static string languageEndpoint = Environment.GetEnvironmentVariable("LANGUAGE_ENDPOINT");
        static string speechKey = Environment.GetEnvironmentVariable("SPEECH_KEY");
        static string speechRegion = Environment.GetEnvironmentVariable("SPEECH_REGION");
    
        // Your CLU project name and deployment name.
        static string cluProjectName = "YourProjectNameGoesHere";
        static string cluDeploymentName = "YourDeploymentNameGoesHere";
    
        async static Task Main(string[] args)
        {
            var speechConfig = SpeechConfig.FromSubscription(speechKey, speechRegion);        
            speechConfig.SpeechRecognitionLanguage = "en-US";
    
            using var audioConfig = AudioConfig.FromDefaultMicrophoneInput();
    
            // Creates an intent recognizer in the specified language using microphone as audio input.
            using (var intentRecognizer = new IntentRecognizer(speechConfig, audioConfig))
            {
                var cluModel = new ConversationalLanguageUnderstandingModel(
                    languageKey,
                    languageEndpoint,
                    cluProjectName, 
                    cluDeploymentName);
                var collection = new LanguageUnderstandingModelCollection();
                collection.Add(cluModel);
                intentRecognizer.ApplyLanguageModels(collection);
    
                Console.WriteLine("Speak into your microphone.");
                var recognitionResult = await intentRecognizer.RecognizeOnceAsync().ConfigureAwait(false);
    
                // Checks result.
                if (recognitionResult.Reason == ResultReason.RecognizedIntent)
                {
                    Console.WriteLine($"RECOGNIZED: Text={recognitionResult.Text}");
                    Console.WriteLine($"    Intent Id: {recognitionResult.IntentId}.");
                    Console.WriteLine($"    Language Understanding JSON: {recognitionResult.Properties.GetProperty(PropertyId.LanguageUnderstandingServiceResponse_JsonResult)}.");
                }
                else if (recognitionResult.Reason == ResultReason.RecognizedSpeech)
                {
                    Console.WriteLine($"RECOGNIZED: Text={recognitionResult.Text}");
                    Console.WriteLine($"    Intent not recognized.");
                }
                else if (recognitionResult.Reason == ResultReason.NoMatch)
                {
                    Console.WriteLine($"NOMATCH: Speech could not be recognized.");
                }
                else if (recognitionResult.Reason == ResultReason.Canceled)
                {
                    var cancellation = CancellationDetails.FromResult(recognitionResult);
                    Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");
    
                    if (cancellation.Reason == CancellationReason.Error)
                    {
                        Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
                        Console.WriteLine($"CANCELED: ErrorDetails={cancellation.ErrorDetails}");
                        Console.WriteLine($"CANCELED: Did you update the subscription info?");
                    }
                }
            }
        }
    }
    
  4. 在 中 Program.cs ,將 cluProjectNamecluDeploymentName 變數設定為專案和部署的名稱。 如需如何建立 CLU 專案和部署的資訊,請參閱建立對話式Language Understanding專案

  5. 若要變更語音辨識語言,請以另一種支援的語言取代 en-US。 例如,es-ES 代表西班牙文 (西班牙)。 如果您未指定語言,則預設語言為 en-US。 如需詳細了解如何識別所可能說出的多種語言之一,請參閱語言識別

執行新的主控台應用程式,以從麥克風啟動語音辨識:

dotnet run

重要

請確定您已如所述設定 LANGUAGE_KEYLANGUAGE_ENDPOINTSPEECH_KEYSPEECH_REGION 環境變數。 如果您未設定這些變數,則範例將會失敗,並顯示錯誤訊息。

出現提示時,請用麥克風說話。 您說話的內容應該會以文字的形式輸出:

Speak into your microphone.
RECOGNIZED: Text=Turn on the lights.
    Intent Id: HomeAutomation.TurnOn.
    Language Understanding JSON: {"kind":"ConversationResult","result":{"query":"turn on the lights","prediction":{"topIntent":"HomeAutomation.TurnOn","projectKind":"Conversation","intents":[{"category":"HomeAutomation.TurnOn","confidenceScore":0.97712576},{"category":"HomeAutomation.TurnOff","confidenceScore":0.8431633},{"category":"None","confidenceScore":0.782861}],"entities":[{"category":"HomeAutomation.DeviceType","text":"lights","offset":12,"length":6,"confidenceScore":1,"extraInformation":[{"extraInformationKind":"ListKey","key":"light"}]}]}}}.

注意

語音 SDK 1.26 版已新增透過 LanguageUnderstandingServiceResponse_JsonResult 屬性對 CLU 的 JSON 回應支援。

意圖會以最有可能的機率順序傳回。 以下是 JSON 輸出的格式化版本,其 topIntentHomeAutomation.TurnOn 信賴分數為 0.97712576 (97.71%) 。 第二個最有可能的意圖可能是 HomeAutomation.TurnOff 信賴分數為 0.8985081 (84.31%) 。

{
  "kind": "ConversationResult",
  "result": {
    "query": "turn on the lights",
    "prediction": {
      "topIntent": "HomeAutomation.TurnOn",
      "projectKind": "Conversation",
      "intents": [
        {
          "category": "HomeAutomation.TurnOn",
          "confidenceScore": 0.97712576
        },
        {
          "category": "HomeAutomation.TurnOff",
          "confidenceScore": 0.8431633
        },
        {
          "category": "None",
          "confidenceScore": 0.782861
        }
      ],
      "entities": [
        {
          "category": "HomeAutomation.DeviceType",
          "text": "lights",
          "offset": 12,
          "length": 6,
          "confidenceScore": 1,
          "extraInformation": [
            {
              "extraInformationKind": "ListKey",
              "key": "light"
            }
          ]
        }
      ]
    }
  }
}

備註

您現在已完成快速入門,以下是一些其他考量:

  • 此範例使用 RecognizeOnceAsync 作業來轉換最長 30 秒的語句,或直到偵測到無聲為止。 如需較長音訊的連續辨識相關資訊 (包括多語系交談),請參閱如何辨識語音
  • 若要從音訊檔案辨識語音,請使用 FromWavFileInput,而不是 FromDefaultMicrophoneInput
    using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
    
  • 針對 MP4 之類的壓縮音訊檔案,請安裝 GStreamer 並使用 PullAudioInputStreamPushAudioInputStream。 如需詳細資訊,請參閱如何使用壓縮的輸入音訊

清除資源

您可以使用Azure 入口網站Azure 命令列介面 (CLI) 來移除您所建立的語言和語音資源。

參考文件 | 套件 (NuGet) | GitHub 上的其他範例

在本快速入門中,您將使用語音和語言服務,從從麥克風擷取的音訊資料辨識意圖。 具體而言,您將使用語音服務來辨識語音,並使用交談式Language Understanding (CLU) 模型來識別意圖。

重要

使用語音 SDK 1.25 版或更新版本,C# 和 C++ 可以使用交談Language Understanding (CLU) 。

必要條件

  • Azure 訂用帳戶 - 建立免費帳戶
  • 在Azure 入口網站中建立語言資源
  • 取得語言資源金鑰和端點。 部署語言資源之後,選取 [前往資源] 以檢視和管理金鑰。 如需 Azure AI 服務資源的詳細資訊,請參閱 取得資源的金鑰
  • 在Azure 入口網站中建立語音資源
  • 取得語音資源金鑰和區域。 部署語音資源之後,選取 [移至資源] 以檢視和管理金鑰。 如需 Azure AI 服務資源的詳細資訊,請參閱 取得資源的金鑰

設定 Azure 環境

語音 SDK 可以 NuGet 套件的形式取得,並且實作 .NET Standard 2.0。 您會在本指南的後續部分中安裝語音 SDK,但請先參閱 SDK 安裝指南,了解其他需求。

設定環境變數

此範例需要名為 LANGUAGE_KEYLANGUAGE_ENDPOINTSPEECH_KEY 和 的 SPEECH_REGION 環境變數。

您的應用程式必須經過驗證,才能存取 Azure AI 服務資源。 在生產環境中,請運用安全的方式來儲存和存取您的登入資訊。 例如,取得語音資源索引碼後,在執行應用程式的本機電腦上,將索引碼寫入新的環境變數。

提示

請勿在程式碼中直接包含索引碼,且切勿公開張貼索引碼。 如需更多驗證選項,請參閱 Azure AI 服務安全性文章,例如Azure 金鑰保存庫

若要設定環境變數,請開啟主控台視窗,並遵循作業系統和開發環境的指示。

  • 若要設定 LANGUAGE_KEY 環境變數,請以您其中一個資源索引碼取代 your-language-key
  • 若要設定 LANGUAGE_ENDPOINT 環境變數,請將 取代 your-language-endpoint 為您資源的其中一個區域。
  • 若要設定 SPEECH_KEY 環境變數,請以您其中一個資源索引碼取代 your-speech-key
  • 若要設定 SPEECH_REGION 環境變數,請將 取代 your-speech-region 為您資源的其中一個區域。
setx LANGUAGE_KEY your-language-key
setx LANGUAGE_ENDPOINT your-language-endpoint
setx SPEECH_KEY your-speech-key
setx SPEECH_REGION your-speech-region

注意

如果您只需存取目前執行主控台的環境變數,您可以使用 set 設定環境變數,而不是 setx

新增環境變數之後,您可能需要重新開機任何需要讀取環境變數的執行中程式,包括主控台視窗。 例如,如果您使用 Visual Studio 做為編輯器,請在執行範例前重新啟動 Visual Studio。

建立交談式Language Understanding專案

建立 Language 資源之後,請在 Language Studio中建立交談語言理解專案。 專案是一個工作區域,可根據您的資料建置自訂 ML 模型。 專案只能由您和其他具有所使用語言資源存取權的人員存取。

移至 Language Studio,並以您的 Azure 帳戶登入。

建立交談語言理解專案

在本快速入門中,您可以下載 此範例家用自動化專案 並加以匯入。 此專案可以從使用者輸入預測預期的命令,例如開啟和關閉光線。

  1. 在 Language Studio 的 [理解問題和交談語言] 區段下,選取 [交談語言理解]。

    顯示 Language Studio 登陸頁面中「自訂語言理解」位置的螢幕擷取畫面。

  2. 這會帶您前往 [交談語言理解專案] 頁面。 在 [ 建立新專案] 按鈕旁,選取 [ 匯入]。

    顯示 Language Studio 中交談專案頁面的螢幕擷取畫面。

  3. 在出現的視窗中,上傳您想要匯入的 JSON 檔案。 確定您的檔案遵循支援的 JSON 格式

一旦上傳完成,您就會登陸 [結構描述定義] 頁面。 針對本快速入門,已建置結構描述,且語句已加上意圖和實體的標籤。

定型模型

一般而言,在建立專案之後,您應該建置結構描述標記語句。 針對本快速入門,我們已匯入備妥專案,其中具有已建置的結構描述和已標記的語句。

若要定型模型,則須啟動定型作業。 成功定型作業的輸出即是定型的模型。

若要從 Language Studio 內開始定型模型:

  1. 從左側功能表中選取 [定型模型]。

  2. 從頂端功能表中選取 [開始定型作業]。

  3. 選取 [定型新模型 ],然後在文字方塊中輸入新的模型名稱。 否則,若要以在新資料上定型的模型取代現有的模型,請選取 [覆寫現有的模型 ],然後選取現有的模型。 覆寫定型的模型是無法復原的,但在您部署新模型之前,不會影響已部署的模型。

  4. 選取定型模式。 您可以選擇 [標準定型] 來加快定型速度,但僅適用於英文。 或者,您可以選擇支援其他語言和多語系專案的 [進階定型],但需要較長的定型時間。 深入瞭解模型定型

  5. 選取資料分割方法。 您可以選擇 [從定型資料自動分割測試集],使用此方法時,系統會根據指定的百分比,將您的表達分割為定型集與測試集。 或者,您可以選擇 [使用手動分割定型和測試資料],但只有在表達已新增至測試集,且您標記表達時,才會啟用此選項。

  6. 選取 [定型] 按鈕。

    顯示 Language Studio 中 [定型] 頁面的螢幕擷取畫面。

  7. 從清單中選取訓練作業識別碼。 隨即會出現一個面板,您可以在其中檢查此作業的訓練進度、作業狀態和其他詳細資料。

    注意

    • 只有成功完成的定型作業才會產生模型。
    • 根據表達的計數,定型可能需要幾分鐘到幾小時的時間。
    • 您一次只能執行一個定型作業。 在完成執行中作業之前,您無法在同一個專案內啟動其他定型工作。
    • 用來定型模型的機器學習會定期更新。 若要在先前的 組態版本上定型,請選取 [選取這裡] 以 從 [ 開始定型作業 ] 頁面變更,然後選擇舊版。

部署模型

定型模型後,您通常可檢閱其評估詳細資料。 在本快速入門中,您只需部署模型,並讓其可供您在 Language Studio 中試用,或者您可以呼叫預測 API

若要從 Language Studio 內部署您的模型:

  1. 從左側功能表中,選取 [部署模型]。

  2. 選取 [新增部署 ] 以啟動 [ 新增部署 精靈]。

    顯示 Language Studio 中模型部署按鈕的螢幕擷取畫面。

  3. 選取 [建立新的部署名稱 ] 以建立新的部署,並從下列下拉式清單中指派定型的模型。 否則,您可以選取 [覆寫現有的部署名稱 ],以有效地取代現有部署所使用的模型。

    注意

    覆寫現有的部署不需要變更預測 API 呼叫,但您取得的結果將會以新指派的模型為基礎。

    顯示 Language Studio 中新增部署畫面的螢幕擷取畫面。

  4. 從 [ 模型 ] 下拉式清單中選取定型的模型。

  5. 選取 [部署 ] 以啟動部署作業。

  6. 部署成功之後,在其旁邊會出現到期日。 部署到期是已部署模型無法用於預測的時間,這通常會在定型設定到期的十二個月後發生。

您將在下一節中使用專案名稱和部署名稱。

從麥克風辨識意圖

請遵循下列步驟來建立新的主控台應用程式並安裝語音 SDK。

  1. 在名為 SpeechRecognition 的 Visual Studio Community 2022 中建立新的 C++ 主控台專案。

  2. 使用 NuGet 套件管理員在新專案中安裝語音 SDK。

    Install-Package Microsoft.CognitiveServices.Speech
    
  3. 以下列程式碼取代 SpeechRecognition.cpp 的內容:

    #include <iostream> 
    #include <stdlib.h>
    #include <speechapi_cxx.h>
    
    using namespace Microsoft::CognitiveServices::Speech;
    using namespace Microsoft::CognitiveServices::Speech::Audio;
    using namespace Microsoft::CognitiveServices::Speech::Intent;
    
    std::string GetEnvironmentVariable(const char* name);
    
    int main()
    {
        // This example requires environment variables named:
        // "LANGUAGE_KEY", "LANGUAGE_ENDPOINT", "SPEECH_KEY", and "SPEECH_REGION"
        auto languageKey = GetEnvironmentVariable("LANGUAGE_KEY");
        auto languageEndpoint = GetEnvironmentVariable("LANGUAGE_ENDPOINT");
        auto speechKey = GetEnvironmentVariable("SPEECH_KEY");
        auto speechRegion = GetEnvironmentVariable("SPEECH_REGION");
    
        auto cluProjectName = "YourProjectNameGoesHere";
        auto cluDeploymentName = "YourDeploymentNameGoesHere";
    
        if ((size(languageKey) == 0) || (size(languageEndpoint) == 0) || (size(speechKey) == 0) || (size(speechRegion) == 0)) {
            std::cout << "Please set LANGUAGE_KEY, LANGUAGE_ENDPOINT, SPEECH_KEY, and SPEECH_REGION environment variables." << std::endl;
            return -1;
        }
    
        auto speechConfig = SpeechConfig::FromSubscription(speechKey, speechRegion);
    
        speechConfig->SetSpeechRecognitionLanguage("en-US");
    
        auto audioConfig = AudioConfig::FromDefaultMicrophoneInput();
        auto intentRecognizer = IntentRecognizer::FromConfig(speechConfig, audioConfig);
    
        std::vector<std::shared_ptr<LanguageUnderstandingModel>> models;
    
        auto cluModel = ConversationalLanguageUnderstandingModel::FromResource(
            languageKey,
            languageEndpoint,
            cluProjectName,
            cluDeploymentName);
    
        models.push_back(cluModel);
        intentRecognizer->ApplyLanguageModels(models);
    
        std::cout << "Speak into your microphone.\n";
        auto result = intentRecognizer->RecognizeOnceAsync().get();
    
        if (result->Reason == ResultReason::RecognizedIntent)
        {
            std::cout << "RECOGNIZED: Text=" << result->Text << std::endl;
            std::cout << "  Intent Id: " << result->IntentId << std::endl;
            std::cout << "  Intent Service JSON: " << result->Properties.GetProperty(PropertyId::LanguageUnderstandingServiceResponse_JsonResult) << std::endl;
        }
        else if (result->Reason == ResultReason::RecognizedSpeech)
        {
            std::cout << "RECOGNIZED: Text=" << result->Text << " (intent could not be recognized)" << std::endl;
        }
        else if (result->Reason == ResultReason::NoMatch)
        {
            std::cout << "NOMATCH: Speech could not be recognized." << std::endl;
        }
        else if (result->Reason == ResultReason::Canceled)
        {
            auto cancellation = CancellationDetails::FromResult(result);
            std::cout << "CANCELED: Reason=" << (int)cancellation->Reason << std::endl;
    
            if (cancellation->Reason == CancellationReason::Error)
            {
                std::cout << "CANCELED: ErrorCode=" << (int)cancellation->ErrorCode << std::endl;
                std::cout << "CANCELED: ErrorDetails=" << cancellation->ErrorDetails << std::endl;
                std::cout << "CANCELED: Did you update the subscription info?" << std::endl;
            }
        }
    }
    
    std::string GetEnvironmentVariable(const char* name)
    {
    #if defined(_MSC_VER)
        size_t requiredSize = 0;
        (void)getenv_s(&requiredSize, nullptr, 0, name);
        if (requiredSize == 0)
        {
            return "";
        }
        auto buffer = std::make_unique<char[]>(requiredSize);
        (void)getenv_s(&requiredSize, buffer.get(), requiredSize, name);
        return buffer.get();
    #else
        auto value = getenv(name);
        return value ? value : "";
    #endif
    }
    
  4. 在 中 SpeechRecognition.cpp ,將 cluProjectNamecluDeploymentName 變數設定為專案和部署的名稱。 如需如何建立 CLU 專案和部署的資訊,請參閱建立交談式Language Understanding專案

  5. 若要變更語音辨識語言,請以另一種支援的語言取代 en-US。 例如,es-ES 代表西班牙文 (西班牙)。 如果您未指定語言,則預設語言為 en-US。 如需詳細了解如何識別所可能說出的多種語言之一,請參閱語言識別

組建並執行新的主控台應用程式,以從麥克風啟動語音辨識。

重要

請確定您已設定 LANGUAGE_KEYLANGUAGE_ENDPOINTSPEECH_KEYSPEECH_REGION 環境變數, 如上所述。 如果您未設定這些變數,則範例將會失敗,並顯示錯誤訊息。

出現提示時,請用麥克風說話。 您說話的內容應該會以文字的形式輸出:

Speak into your microphone.
RECOGNIZED: Text=Turn on the lights.
    Intent Id: HomeAutomation.TurnOn.
    Language Understanding JSON: {"kind":"ConversationResult","result":{"query":"turn on the lights","prediction":{"topIntent":"HomeAutomation.TurnOn","projectKind":"Conversation","intents":[{"category":"HomeAutomation.TurnOn","confidenceScore":0.97712576},{"category":"HomeAutomation.TurnOff","confidenceScore":0.8431633},{"category":"None","confidenceScore":0.782861}],"entities":[{"category":"HomeAutomation.DeviceType","text":"lights","offset":12,"length":6,"confidenceScore":1,"extraInformation":[{"extraInformationKind":"ListKey","key":"light"}]}]}}}.

注意

語音 SDK 1.26 版已新增透過 LanguageUnderstandingServiceResponse_JsonResult 屬性對 CLU 的 JSON 回應支援。

意圖會以最有可能的機率順序傳回。 以下是 JSON 輸出的格式版本,其 topIntentHomeAutomation.TurnOn 信賴分數為 0.97712576 (97.71%) 。 第二個最有可能的意圖可能是 HomeAutomation.TurnOff 信賴分數為 0.8985081 (84.31%) 。

{
  "kind": "ConversationResult",
  "result": {
    "query": "turn on the lights",
    "prediction": {
      "topIntent": "HomeAutomation.TurnOn",
      "projectKind": "Conversation",
      "intents": [
        {
          "category": "HomeAutomation.TurnOn",
          "confidenceScore": 0.97712576
        },
        {
          "category": "HomeAutomation.TurnOff",
          "confidenceScore": 0.8431633
        },
        {
          "category": "None",
          "confidenceScore": 0.782861
        }
      ],
      "entities": [
        {
          "category": "HomeAutomation.DeviceType",
          "text": "lights",
          "offset": 12,
          "length": 6,
          "confidenceScore": 1,
          "extraInformation": [
            {
              "extraInformationKind": "ListKey",
              "key": "light"
            }
          ]
        }
      ]
    }
  }
}

備註

您現在已完成快速入門,以下是一些其他考量:

  • 此範例使用 RecognizeOnceAsync 作業來轉換最長 30 秒的語句,或直到偵測到無聲為止。 如需較長音訊的連續辨識相關資訊 (包括多語系交談),請參閱如何辨識語音
  • 若要從音訊檔案辨識語音,請使用 FromWavFileInput,而不是 FromDefaultMicrophoneInput
    auto audioInput = AudioConfig::FromWavFileInput("YourAudioFile.wav");
    
  • 針對 MP4 之類的壓縮音訊檔案,請安裝 GStreamer 並使用 PullAudioInputStreamPushAudioInputStream。 如需詳細資訊,請參閱如何使用壓縮的輸入音訊

清除資源

您可以使用Azure 入口網站Azure 命令列介面 (CLI) 來移除您所建立的語言和語音資源。

參考文件 | GitHub 上的其他範例

適用于 JAVA 的語音 SDK 不支援使用交談語言理解 (CLU) 的意圖辨識。 請從本文開頭選取另一種程式設計語言或 JAVA 參考和範例連結。

後續步驟