Dela via


Snabbstart: Identifiera avsikter med konversationsspråkstolkning

Referensdokumentation Paket (NuGet) | Ytterligare exempel på GitHub |

I den här snabbstarten använder du tal- och språktjänster för att identifiera avsikter från ljuddata som hämtats från en mikrofon. Mer specifikt använder du Speech-tjänsten för att identifiera tal och en CLU-modell (Conversational Language Understanding) för att identifiera avsikter.

Viktigt!

Conversational Language Understanding (CLU) är tillgängligt för C# och C++ med Speech SDK version 1.25 eller senare.

Förutsättningar

  • En Azure-prenumeration. Du kan skapa en kostnadsfritt.
  • Skapa en språkresurs i Azure-portalen.
  • Hämta språkresursnyckeln och slutpunkten. När språkresursen har distribuerats väljer du Gå till resurs för att visa och hantera nycklar.
  • Skapa en Speech-resurs i Azure-portalen.
  • Hämta resursnyckeln och regionen Speech. När speech-resursen har distribuerats väljer du Gå till resurs för att visa och hantera nycklar.

Konfigurera miljön

Speech SDK är tillgängligt som ett NuGet-paket och implementerar .NET Standard 2.0. Du installerar Speech SDK senare i den här guiden, men kontrollera först SDK-installationsguiden om det finns fler krav.

Ange miljövariabler

Det här exemplet kräver miljövariabler med namnet LANGUAGE_KEY, LANGUAGE_ENDPOINT, SPEECH_KEYoch SPEECH_REGION.

Ditt program måste autentiseras för att få åtkomst till Azure AI-tjänstresurser. Den här artikeln visar hur du använder miljövariabler för att lagra dina autentiseringsuppgifter. Du kan sedan komma åt miljövariablerna från koden för att autentisera ditt program. För produktion använder du ett säkrare sätt att lagra och komma åt dina autentiseringsuppgifter.

Viktigt!

Vi rekommenderar Microsoft Entra-ID-autentisering med hanterade identiteter för Azure-resurser för att undvika att lagra autentiseringsuppgifter med dina program som körs i molnet.

Om du använder en API-nyckel lagrar du den på ett säkert sätt någon annanstans, till exempel i Azure Key Vault. Inkludera inte API-nyckeln direkt i koden och publicera den aldrig offentligt.

Mer information om säkerhet för AI-tjänster finns i Autentisera begäranden till Azure AI-tjänster.

Om du vill ange miljövariablerna öppnar du ett konsolfönster och följer anvisningarna för operativsystemet och utvecklingsmiljön.

  • Om du vill ange LANGUAGE_KEY miljövariabeln ersätter du your-language-key med en av nycklarna för resursen.
  • Om du vill ange LANGUAGE_ENDPOINT miljövariabeln ersätter du your-language-endpoint med en av regionerna för resursen.
  • Om du vill ange SPEECH_KEY miljövariabeln ersätter du your-speech-key med en av nycklarna för resursen.
  • Om du vill ange SPEECH_REGION miljövariabeln ersätter du your-speech-region med en av regionerna för resursen.
setx LANGUAGE_KEY your-language-key
setx LANGUAGE_ENDPOINT your-language-endpoint
setx SPEECH_KEY your-speech-key
setx SPEECH_REGION your-speech-region

Kommentar

Om du bara behöver komma åt miljövariabeln i den aktuella konsolen som körs kan du ange miljövariabeln med set i stället för setx.

När du har lagt till miljövariablerna kan du behöva starta om alla program som körs och som behöver läsa miljövariabeln, inklusive konsolfönstret. Om du till exempel använder Visual Studio som redigerare startar du om Visual Studio innan du kör exemplet.

Skapa ett projekt för att förstå konversationsspråk

När du har skapat en språkresurs skapar du ett projekt för språktolkning i Language Studio. Ett projekt är ett arbetsområde för att skapa dina anpassade ML-modeller baserat på dina data. Ditt projekt kan bara nås av dig och andra som har åtkomst till den språkresurs som används.

Gå till Language Studio och logga in med ditt Azure-konto.

Skapa ett projekt för att förstå konversationsspråk

I den här snabbstarten kan du ladda ned det här exempelprojektet för hemautomatisering och importera det. Det här projektet kan förutsäga de avsedda kommandona från användarindata, till exempel att tända och inaktivera lampor.

  1. Under avsnittet Förstå frågor och konversationsspråk i Language Studio väljer du Förståelse för konversationsspråk.

    En skärmbild som visar platsen för Custom Language Understanding på landningssidan för Language Studio.

  2. På så sätt kommer du till projektsidan för språktolkning för konversationer. Bredvid knappen Skapa nytt projekt väljer du Importera.

    En skärmbild som visar konversationsprojektsidan i Language Studio.

  3. Ladda upp den JSON-fil som du vill importera i fönstret som visas. Kontrollera att filen följer JSON-formatet som stöds.

När uppladdningen är klar hamnar du på sidan Schemadefinition . För den här snabbstarten har schemat redan skapats och yttranden är redan märkta med avsikter och entiteter.

Träna din modell

När du har skapat ett projekt bör du vanligtvis skapa ett schema - och etikettyttranden. För den här snabbstarten har vi redan importerat ett färdigt projekt med inbyggda scheman och märkta yttranden.

Om du vill träna en modell måste du starta ett träningsjobb. Utdata från ett lyckat träningsjobb är din tränade modell.

Så här börjar du träna din modell inifrån Language Studio:

  1. Välj Träna modell på menyn till vänster.

  2. Välj Starta ett träningsjobb på den översta menyn.

  3. Välj Träna en ny modell och ange ett nytt modellnamn i textrutan. Om du vill ersätta en befintlig modell med en modell som tränats på nya data väljer du Skriv över en befintlig modell och väljer sedan en befintlig modell. Att skriva över en tränad modell är oåterkalleligt, men det påverkar inte dina distribuerade modeller förrän du distribuerar den nya modellen.

  4. Välj träningsläge. Du kan välja Standardträning för snabbare träning, men det är bara tillgängligt för engelska. Eller så kan du välja Avancerad utbildning som stöds för andra språk och flerspråkiga projekt, men det innebär längre utbildningstider. Läs mer om träningslägen.

  5. Välj en datadelningsmetod . Du kan välja Att automatiskt dela upp testuppsättningen från träningsdata där systemet delar upp dina yttranden mellan tränings- och testuppsättningarna, enligt de angivna procentandelarna. Eller så kan du använda en manuell uppdelning av tränings- och testdata. Det här alternativet är bara aktiverat om du har lagt till yttranden i testuppsättningen när du etiketterade dina yttranden.

  6. Välj knappen Träna.

    En skärmbild som visar träningssidan i Language Studio.

  7. Välj träningsjobbets ID i listan. En panel visas där du kan kontrollera träningsförloppet, jobbstatusen och annan information för det här jobbet.

    Kommentar

    • Endast slutförda träningsjobb genererar modeller.
    • Träningen kan ta lite tid mellan ett par minuter och ett par timmar baserat på antalet yttranden.
    • Du kan bara köra ett träningsjobb i taget. Du kan inte starta andra träningsjobb i samma projekt förrän jobbet som körs har slutförts.
    • Den maskininlärning som används för att träna modeller uppdateras regelbundet. Om du vill träna på en tidigare konfigurationsversion väljer du Välj här om du vill ändra från sidan Starta ett träningsjobb och välja en tidigare version.

Distribuera din modell

När du har tränat en modell kan du granska dess utvärderingsinformation. I den här snabbstarten distribuerar du bara din modell och gör den tillgänglig för dig att prova i Language Studio, eller så kan du anropa förutsägelse-API:et.

Så här distribuerar du din modell inifrån Language Studio:

  1. Välj Distribuera en modell från menyn till vänster.

  2. Välj Lägg till distribution för att starta guiden Lägg till distribution .

    En skärmbild som visar knappen för modelldistribution i Language Studio.

  3. Välj Skapa ett nytt distributionsnamn för att skapa en ny distribution och tilldela en tränad modell i listrutan nedan. Annars kan du välja Skriv över ett befintligt distributionsnamn för att effektivt ersätta den modell som används av en befintlig distribution.

    Kommentar

    Om du skriver över en befintlig distribution krävs inte ändringar i ditt Förutsägelse-API-anrop , men de resultat du får baseras på den nyligen tilldelade modellen.

    En skärmbild som visar skärmen för att lägga till en ny distribution i Language Studio.

  4. Välj en tränad modell i listrutan Modell .

  5. Välj Distribuera för att starta distributionsjobbet.

  6. När distributionen har slutförts visas ett förfallodatum bredvid den. Distributionen upphör att gälla när den distribuerade modellen inte kommer att användas för förutsägelse, vilket vanligtvis sker tolv månader efter att en träningskonfiguration upphör att gälla.

Du använder projektnamnet och distributionsnamnet i nästa avsnitt.

Identifiera avsikter från en mikrofon

Följ dessa steg för att skapa ett nytt konsolprogram och installera Speech SDK.

  1. Öppna en kommandotolk där du vill ha det nya projektet och skapa ett konsolprogram med .NET CLI. Filen Program.cs ska skapas i projektkatalogen.

    dotnet new console
    
  2. Installera Speech SDK i ditt nya projekt med .NET CLI.

    dotnet add package Microsoft.CognitiveServices.Speech
    
  3. Ersätt innehållet i Program.cs med följande kod.

    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. Ange Program.cs variablerna cluProjectName och cluDeploymentName till namnen på projektet och distributionen. Information om hur du skapar ett CLU-projekt och en distribution finns i Skapa ett projekt för förståelse av konversationsspråk.

  5. Om du vill ändra taligenkänningsspråket ersätter du en-US med ett annat språk som stöds. Till exempel es-ES för spanska (Spanien). Standardspråket är en-US om du inte anger något språk. Mer information om hur du identifierar ett av flera språk som kan talas finns i språkidentifiering.

Kör det nya konsolprogrammet för att starta taligenkänning från en mikrofon:

dotnet run

Viktigt!

Se till att du anger LANGUAGE_KEYmiljövariablerna , LANGUAGE_ENDPOINT, SPEECH_KEYoch SPEECH_REGION enligt beskrivningen ovan. Om du inte anger dessa variabler misslyckas exemplet med ett felmeddelande.

Tala i mikrofonen när du uppmanas att göra det. Det du talar bör vara utdata som text:

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"}]}]}}}.

Kommentar

Stöd för JSON-svaret för CLU via egenskapen LanguageUnderstandingServiceResponse_JsonResult lades till i Speech SDK version 1.26.

Avsikterna returneras i sannolikhetsordningen som mest sannolikt är minst sannolikt. Här är en formaterad version av JSON-utdata där topIntent är HomeAutomation.TurnOn med en konfidenspoäng på 0,97712576 (97,71 %). Den näst mest sannolika avsikten kan vara HomeAutomation.TurnOff med en konfidenspoäng på 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"
            }
          ]
        }
      ]
    }
  }
}

Kommentarer

Nu när du har slutfört snabbstarten kan du tänka på följande:

  • I det här exemplet används åtgärden RecognizeOnceAsync för att transkribera yttranden på upp till 30 sekunder eller tills tystnad har identifierats. Information om kontinuerlig igenkänning för längre ljud, inklusive flerspråkiga konversationer, finns i Så här känner du igen tal.
  • Om du vill känna igen tal från en ljudfil använder du FromWavFileInput i stället för FromDefaultMicrophoneInput:
    using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
    
  • För komprimerade ljudfiler som MP4 installerar du GStreamer och använder PullAudioInputStream eller PushAudioInputStream. Mer information finns i Använda komprimerat indataljud.

Rensa resurser

Du kan använda Azure-portalen eller Azure-kommandoradsgränssnittet (CLI) för att ta bort de språk- och talresurser som du skapade.

Referensdokumentation Paket (NuGet) | Ytterligare exempel på GitHub |

I den här snabbstarten använder du tal- och språktjänster för att identifiera avsikter från ljuddata som hämtats från en mikrofon. Mer specifikt använder du Speech-tjänsten för att identifiera tal och en CLU-modell (Conversational Language Understanding) för att identifiera avsikter.

Viktigt!

Conversational Language Understanding (CLU) är tillgängligt för C# och C++ med Speech SDK version 1.25 eller senare.

Förutsättningar

  • En Azure-prenumeration. Du kan skapa en kostnadsfritt.
  • Skapa en språkresurs i Azure-portalen.
  • Hämta språkresursnyckeln och slutpunkten. När språkresursen har distribuerats väljer du Gå till resurs för att visa och hantera nycklar.
  • Skapa en Speech-resurs i Azure-portalen.
  • Hämta resursnyckeln och regionen Speech. När speech-resursen har distribuerats väljer du Gå till resurs för att visa och hantera nycklar.

Konfigurera miljön

Speech SDK är tillgängligt som ett NuGet-paket och implementerar .NET Standard 2.0. Du installerar Speech SDK senare i den här guiden, men kontrollera först SDK-installationsguiden om det finns fler krav.

Ange miljövariabler

Det här exemplet kräver miljövariabler med namnet LANGUAGE_KEY, LANGUAGE_ENDPOINT, SPEECH_KEYoch SPEECH_REGION.

Ditt program måste autentiseras för att få åtkomst till Azure AI-tjänstresurser. Den här artikeln visar hur du använder miljövariabler för att lagra dina autentiseringsuppgifter. Du kan sedan komma åt miljövariablerna från koden för att autentisera ditt program. För produktion använder du ett säkrare sätt att lagra och komma åt dina autentiseringsuppgifter.

Viktigt!

Vi rekommenderar Microsoft Entra-ID-autentisering med hanterade identiteter för Azure-resurser för att undvika att lagra autentiseringsuppgifter med dina program som körs i molnet.

Om du använder en API-nyckel lagrar du den på ett säkert sätt någon annanstans, till exempel i Azure Key Vault. Inkludera inte API-nyckeln direkt i koden och publicera den aldrig offentligt.

Mer information om säkerhet för AI-tjänster finns i Autentisera begäranden till Azure AI-tjänster.

Om du vill ange miljövariablerna öppnar du ett konsolfönster och följer anvisningarna för operativsystemet och utvecklingsmiljön.

  • Om du vill ange LANGUAGE_KEY miljövariabeln ersätter du your-language-key med en av nycklarna för resursen.
  • Om du vill ange LANGUAGE_ENDPOINT miljövariabeln ersätter du your-language-endpoint med en av regionerna för resursen.
  • Om du vill ange SPEECH_KEY miljövariabeln ersätter du your-speech-key med en av nycklarna för resursen.
  • Om du vill ange SPEECH_REGION miljövariabeln ersätter du your-speech-region med en av regionerna för resursen.
setx LANGUAGE_KEY your-language-key
setx LANGUAGE_ENDPOINT your-language-endpoint
setx SPEECH_KEY your-speech-key
setx SPEECH_REGION your-speech-region

Kommentar

Om du bara behöver komma åt miljövariabeln i den aktuella konsolen som körs kan du ange miljövariabeln med set i stället för setx.

När du har lagt till miljövariablerna kan du behöva starta om alla program som körs och som behöver läsa miljövariabeln, inklusive konsolfönstret. Om du till exempel använder Visual Studio som redigerare startar du om Visual Studio innan du kör exemplet.

Skapa ett projekt för att förstå konversationsspråk

När du har skapat en språkresurs skapar du ett projekt för språktolkning i Language Studio. Ett projekt är ett arbetsområde för att skapa dina anpassade ML-modeller baserat på dina data. Ditt projekt kan bara nås av dig och andra som har åtkomst till den språkresurs som används.

Gå till Language Studio och logga in med ditt Azure-konto.

Skapa ett projekt för att förstå konversationsspråk

I den här snabbstarten kan du ladda ned det här exempelprojektet för hemautomatisering och importera det. Det här projektet kan förutsäga de avsedda kommandona från användarindata, till exempel att tända och inaktivera lampor.

  1. Under avsnittet Förstå frågor och konversationsspråk i Language Studio väljer du Förståelse för konversationsspråk.

    En skärmbild som visar platsen för Custom Language Understanding på landningssidan för Language Studio.

  2. På så sätt kommer du till projektsidan för språktolkning för konversationer. Bredvid knappen Skapa nytt projekt väljer du Importera.

    En skärmbild som visar konversationsprojektsidan i Language Studio.

  3. Ladda upp den JSON-fil som du vill importera i fönstret som visas. Kontrollera att filen följer JSON-formatet som stöds.

När uppladdningen är klar hamnar du på sidan Schemadefinition . För den här snabbstarten har schemat redan skapats och yttranden är redan märkta med avsikter och entiteter.

Träna din modell

När du har skapat ett projekt bör du vanligtvis skapa ett schema - och etikettyttranden. För den här snabbstarten har vi redan importerat ett färdigt projekt med inbyggda scheman och märkta yttranden.

Om du vill träna en modell måste du starta ett träningsjobb. Utdata från ett lyckat träningsjobb är din tränade modell.

Så här börjar du träna din modell inifrån Language Studio:

  1. Välj Träna modell på menyn till vänster.

  2. Välj Starta ett träningsjobb på den översta menyn.

  3. Välj Träna en ny modell och ange ett nytt modellnamn i textrutan. Om du vill ersätta en befintlig modell med en modell som tränats på nya data väljer du Skriv över en befintlig modell och väljer sedan en befintlig modell. Att skriva över en tränad modell är oåterkalleligt, men det påverkar inte dina distribuerade modeller förrän du distribuerar den nya modellen.

  4. Välj träningsläge. Du kan välja Standardträning för snabbare träning, men det är bara tillgängligt för engelska. Eller så kan du välja Avancerad utbildning som stöds för andra språk och flerspråkiga projekt, men det innebär längre utbildningstider. Läs mer om träningslägen.

  5. Välj en datadelningsmetod . Du kan välja Att automatiskt dela upp testuppsättningen från träningsdata där systemet delar upp dina yttranden mellan tränings- och testuppsättningarna, enligt de angivna procentandelarna. Eller så kan du använda en manuell uppdelning av tränings- och testdata. Det här alternativet är bara aktiverat om du har lagt till yttranden i testuppsättningen när du etiketterade dina yttranden.

  6. Välj knappen Träna.

    En skärmbild som visar träningssidan i Language Studio.

  7. Välj träningsjobbets ID i listan. En panel visas där du kan kontrollera träningsförloppet, jobbstatusen och annan information för det här jobbet.

    Kommentar

    • Endast slutförda träningsjobb genererar modeller.
    • Träningen kan ta lite tid mellan ett par minuter och ett par timmar baserat på antalet yttranden.
    • Du kan bara köra ett träningsjobb i taget. Du kan inte starta andra träningsjobb i samma projekt förrän jobbet som körs har slutförts.
    • Den maskininlärning som används för att träna modeller uppdateras regelbundet. Om du vill träna på en tidigare konfigurationsversion väljer du Välj här om du vill ändra från sidan Starta ett träningsjobb och välja en tidigare version.

Distribuera din modell

När du har tränat en modell kan du granska dess utvärderingsinformation. I den här snabbstarten distribuerar du bara din modell och gör den tillgänglig för dig att prova i Language Studio, eller så kan du anropa förutsägelse-API:et.

Så här distribuerar du din modell inifrån Language Studio:

  1. Välj Distribuera en modell från menyn till vänster.

  2. Välj Lägg till distribution för att starta guiden Lägg till distribution .

    En skärmbild som visar knappen för modelldistribution i Language Studio.

  3. Välj Skapa ett nytt distributionsnamn för att skapa en ny distribution och tilldela en tränad modell i listrutan nedan. Annars kan du välja Skriv över ett befintligt distributionsnamn för att effektivt ersätta den modell som används av en befintlig distribution.

    Kommentar

    Om du skriver över en befintlig distribution krävs inte ändringar i ditt Förutsägelse-API-anrop , men de resultat du får baseras på den nyligen tilldelade modellen.

    En skärmbild som visar skärmen för att lägga till en ny distribution i Language Studio.

  4. Välj en tränad modell i listrutan Modell .

  5. Välj Distribuera för att starta distributionsjobbet.

  6. När distributionen har slutförts visas ett förfallodatum bredvid den. Distributionen upphör att gälla när den distribuerade modellen inte kommer att användas för förutsägelse, vilket vanligtvis sker tolv månader efter att en träningskonfiguration upphör att gälla.

Du använder projektnamnet och distributionsnamnet i nästa avsnitt.

Identifiera avsikter från en mikrofon

Följ dessa steg för att skapa ett nytt konsolprogram och installera Speech SDK.

  1. Skapa ett nytt C++-konsolprojekt i Visual Studio Community 2022 med namnet SpeechRecognition.

  2. Installera Speech SDK i ditt nya projekt med NuGet-pakethanteraren.

    Install-Package Microsoft.CognitiveServices.Speech
    
  3. Ersätt innehållet i SpeechRecognition.cpp med följande kod:

    #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. Ange SpeechRecognition.cpp variablerna cluProjectName och cluDeploymentName till namnen på projektet och distributionen. Information om hur du skapar ett CLU-projekt och en distribution finns i Skapa ett projekt för förståelse av konversationsspråk.

  5. Om du vill ändra taligenkänningsspråket ersätter du en-US med ett annat språk som stöds. Till exempel es-ES för spanska (Spanien). Standardspråket är en-US om du inte anger något språk. Mer information om hur du identifierar ett av flera språk som kan talas finns i språkidentifiering.

Skapa och kör det nya konsolprogrammet för att starta taligenkänning från en mikrofon.

Viktigt!

Se till att du anger LANGUAGE_KEYmiljövariablerna , LANGUAGE_ENDPOINT, SPEECH_KEYoch SPEECH_REGION enligt beskrivningen ovan. Om du inte anger dessa variabler misslyckas exemplet med ett felmeddelande.

Tala i mikrofonen när du uppmanas att göra det. Det du talar bör vara utdata som text:

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"}]}]}}}.

Kommentar

Stöd för JSON-svaret för CLU via egenskapen LanguageUnderstandingServiceResponse_JsonResult lades till i Speech SDK version 1.26.

Avsikterna returneras i sannolikhetsordningen som mest sannolikt är minst sannolikt. Här är en formaterad version av JSON-utdata där topIntent är HomeAutomation.TurnOn med en konfidenspoäng på 0,97712576 (97,71 %). Den näst mest sannolika avsikten kan vara HomeAutomation.TurnOff med en konfidenspoäng på 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"
            }
          ]
        }
      ]
    }
  }
}

Kommentarer

Nu när du har slutfört snabbstarten kan du tänka på följande:

  • I det här exemplet används åtgärden RecognizeOnceAsync för att transkribera yttranden på upp till 30 sekunder eller tills tystnad har identifierats. Information om kontinuerlig igenkänning för längre ljud, inklusive flerspråkiga konversationer, finns i Så här känner du igen tal.
  • Om du vill känna igen tal från en ljudfil använder du FromWavFileInput i stället för FromDefaultMicrophoneInput:
    auto audioInput = AudioConfig::FromWavFileInput("YourAudioFile.wav");
    
  • För komprimerade ljudfiler som MP4 installerar du GStreamer och använder PullAudioInputStream eller PushAudioInputStream. Mer information finns i Använda komprimerat indataljud.

Rensa resurser

Du kan använda Azure-portalen eller Azure-kommandoradsgränssnittet (CLI) för att ta bort de språk- och talresurser som du skapade.

Referensdokumentation | Ytterligare exempel på GitHub

Speech SDK för Java stöder inte avsiktsigenkänning med förståelse för konversationsspråk (CLU). Välj ett annat programmeringsspråk eller Java-referensen och exempel som är länkade från början av den här artikeln.

Nästa steg