Szybki start: rozpoznawanie intencji za pomocą Language Understanding konwersacji

Dokumentacja referencyjna | Pakiet (NuGet) | Dodatkowe przykłady w usłudze GitHub

W tym przewodniku Szybki start użyjesz usług rozpoznawania mowy i języka do rozpoznawania intencji z danych dźwiękowych przechwyconych z mikrofonu. W szczególności użyjesz usługi rozpoznawania mowy do rozpoznawania mowy i modelu konwersacyjnej Language Understanding (CLU) do identyfikowania intencji.

Ważne

Konwersacyjna Language Understanding (CLU) jest dostępna dla języków C# i C++ z zestawem Speech SDK w wersji 1.25 lub nowszej.

Wymagania wstępne

  • Subskrypcja platformy Azure — utwórz bezpłatnie
  • Utwórz zasób języka w Azure Portal.
  • Pobierz klucz zasobu języka i punkt końcowy. Po wdrożeniu zasobu language wybierz pozycję Przejdź do zasobu, aby wyświetlić klucze i zarządzać nimi. Aby uzyskać więcej informacji na temat zasobów usług Azure AI, zobacz Uzyskiwanie kluczy dla zasobu.
  • Utwórz zasób usługi Mowa w Azure Portal.
  • Pobierz klucz zasobu usługi Mowa i region. Po wdrożeniu zasobu usługi Mowa wybierz pozycję Przejdź do zasobu, aby wyświetlić klucze i zarządzać nimi. Aby uzyskać więcej informacji na temat zasobów usług Azure AI, zobacz Uzyskiwanie kluczy dla zasobu.

Konfigurowanie środowiska

Zestaw SPEECH SDK jest dostępny jako pakiet NuGet i implementuje platformę .NET Standard 2.0. Zestaw SDK usługi Mowa zostanie zainstalowany w dalszej części tego przewodnika, ale najpierw zapoznaj się z przewodnikiem instalacji zestawu SDK , aby uzyskać więcej wymagań.

Ustawianie zmiennych środowiskowych

W tym przykładzie są wymagane zmienne środowiskowe o nazwach LANGUAGE_KEY, LANGUAGE_ENDPOINT, SPEECH_KEYi SPEECH_REGION.

Aby można było uzyskiwać dostęp do zasobów usług Azure AI, aplikacja musi być uwierzytelniona. W środowisku produkcyjnym należy użyć bezpiecznego sposobu przechowywania i uzyskiwania dostępu do poświadczeń. Na przykład po otrzymaniu klucza dla mowy zapisz go w nowej zmiennej środowiskowej na komputerze lokalnym z uruchomioną aplikacją.

Porada

Nie dołączaj klucza bezpośrednio do kodu i nigdy nie publikuj go publicznie. Aby uzyskać więcej opcji uwierzytelniania, takich jak Azure Key Vault, zobacz artykuł Azure AI Services security (Zabezpieczenia usług Azure AI).

Aby ustawić zmienne środowiskowe, otwórz okno konsoli i postępuj zgodnie z instrukcjami dotyczącymi systemu operacyjnego i środowiska programistycznego.

  • Aby ustawić zmienną LANGUAGE_KEY środowiskową, zastąp your-language-key element jednym z kluczy zasobu.
  • Aby ustawić zmienną LANGUAGE_ENDPOINT środowiskową, zastąp your-language-endpoint element jednym z regionów zasobu.
  • Aby ustawić zmienną SPEECH_KEY środowiskową, zastąp your-speech-key element jednym z kluczy zasobu.
  • Aby ustawić zmienną SPEECH_REGION środowiskową, zastąp your-speech-region element jednym z regionów zasobu.
setx LANGUAGE_KEY your-language-key
setx LANGUAGE_ENDPOINT your-language-endpoint
setx SPEECH_KEY your-speech-key
setx SPEECH_REGION your-speech-region

Uwaga

Jeśli musisz uzyskać dostęp tylko do zmiennej środowiskowej w bieżącej uruchomionej konsoli, możesz ustawić zmienną środowiskową set zamiast setx.

Po dodaniu zmiennych środowiskowych może być konieczne ponowne uruchomienie wszystkich uruchomionych programów, które będą musiały odczytać zmienną środowiskową, w tym okno konsoli. Jeśli na przykład używasz programu Visual Studio jako edytora, uruchom ponownie program Visual Studio przed uruchomieniem przykładu.

Tworzenie projektu Language Understanding konwersacji

Po utworzeniu zasobu Language utwórz projekt usługi Language understanding języka konwersacyjnego w programie Language Studio. Projekt to obszar roboczy umożliwiający tworzenie niestandardowych modeli uczenia maszynowego na podstawie Twoich danych. Dostęp do projektu można uzyskać tylko do Ciebie i innych osób, które mają dostęp do używanego zasobu Language.

Przejdź do programu Language Studio i zaloguj się przy użyciu konta platformy Azure.

Tworzenie projektu interpretacji języka konwersacyjnego

W tym przewodniku Szybki start możesz pobrać ten przykładowy projekt automatyzacji domu i zaimportować go. Ten projekt może przewidzieć zamierzone polecenia na podstawie danych wejściowych użytkownika, takich jak włączanie i wyłączanie świateł.

  1. W sekcji Understand questions and conversational language (Informacje o pytaniach i języku konwersacyjnym) w programie Language Studio wybierz pozycję Conversational Language understanding (Interpretacja języka konwersacyjnego).

    Zrzut ekranu przedstawiający lokalizację Language Understanding niestandardowych na stronie docelowej programu Language Studio.

  2. Spowoduje to wyświetlenie strony projektów z informacjami o języku konwersacyjnym . Obok przycisku Utwórz nowy projekt wybierz pozycję Importuj.

    Zrzut ekranu przedstawiający stronę projektu konwersacji w programie Language Studio.

  3. W wyświetlonym oknie przekaż plik JSON, który chcesz zaimportować. Upewnij się, że plik jest zgodny z obsługiwanym formatem JSON.

Po zakończeniu przekazywania zostanie wyświetlona strona Definicja schematu . W tym przewodniku Szybki start schemat został już skompilowany, a wypowiedzi są już oznaczone intencjami i jednostkami.

Szkolenie modelu

Zazwyczaj po utworzeniu projektu należy utworzyć schemat i etykiety wypowiedzi. Na potrzeby tego przewodnika Szybki start zaimportowaliśmy już gotowy projekt ze skompilowanym schematem i oznaczonymi wypowiedziami.

Aby wytrenować model, musisz uruchomić zadanie szkoleniowe. Dane wyjściowe pomyślnego zadania szkoleniowego to wytrenowany model.

Aby rozpocząć trenowanie modelu z poziomu programu Language Studio:

  1. Wybierz pozycję Train model (Trenowanie modelu ) z menu po lewej stronie.

  2. Wybierz pozycję Start a training job (Uruchom zadanie szkoleniowe ) z górnego menu.

  3. Wybierz pozycję Train a new model (Trenowanie nowego modelu ) i wprowadź nową nazwę modelu w polu tekstowym. W przeciwnym razie, aby zastąpić istniejący model modelem wytrenowanym na nowych danych, wybierz pozycję Zastąp istniejący model , a następnie wybierz istniejący model. Zastąpienie wytrenowanego modelu jest nieodwracalne, ale nie wpłynie to na wdrożone modele do momentu wdrożenia nowego modelu.

  4. Wybierz tryb trenowania. Możesz wybrać standardowe szkolenie w celu szybszego trenowania, ale jest dostępne tylko dla języka angielskiego. Możesz też wybrać opcję Zaawansowane szkolenie , które jest obsługiwane w innych językach i projektach wielojęzycznych, ale obejmuje dłuższe czasy trenowania. Dowiedz się więcej o trybach trenowania.

  5. Wybierz metodę dzielenia danych . Możesz wybrać opcję Automatycznie dzielenie zestawu testów na podstawie danych treningowych , w których system podzieli wypowiedzi między zestawy treningowe i testowe, zgodnie z określonymi wartościami procentowymi. Możesz też użyć ręcznego podziału danych treningowych i testowych. Ta opcja jest włączona tylko w przypadku dodania wypowiedzi do zestawu testowego po oznaczeniu wypowiedzi.

  6. Wybierz przycisk Train (Trenuj ).

    Zrzut ekranu przedstawiający stronę szkolenia w programie Language Studio.

  7. Wybierz identyfikator zadania szkoleniowego z listy. Zostanie wyświetlony panel, w którym można sprawdzić postęp trenowania, stan zadania i inne szczegóły dotyczące tego zadania.

    Uwaga

    • Tylko pomyślnie ukończone zadania szkoleniowe będą generować modele.
    • Trenowanie może zająć trochę czasu od kilku minut do kilku godzin na podstawie liczby wypowiedzi.
    • Jednocześnie może być uruchomione tylko jedno zadanie trenowania. Nie można uruchomić innych zadań szkoleniowych w ramach tego samego projektu, dopóki uruchomione zadanie nie zostanie ukończone.
    • Uczenie maszynowe używane do trenowania modeli jest regularnie aktualizowane. Aby wytrenować w poprzedniej wersji konfiguracji, wybierz pozycję Wybierz tutaj, aby zmienić stronę Rozpocznij zadanie trenowania i wybierz poprzednią wersję.

Wdrażanie modelu

Ogólnie po trenowaniu modelu należy przejrzeć jego szczegóły oceny. W tym przewodniku Szybki start wdrożysz model i udostępnisz go do wypróbowania w programie Language Studio lub możesz wywołać interfejs API przewidywania.

Aby wdrożyć model z poziomu programu Language Studio:

  1. Wybierz pozycję Deploying a model (Wdrażanie modelu) z menu po lewej stronie.

  2. Wybierz pozycję Dodaj wdrożenie , aby uruchomić Kreatora dodawania wdrożenia .

    Zrzut ekranu przedstawiający przycisk wdrażania modelu w programie Language Studio.

  3. Wybierz pozycję Utwórz nową nazwę wdrożenia , aby utworzyć nowe wdrożenie i przypisać wytrenowany model z poniższej listy rozwijanej. W przeciwnym razie możesz wybrać pozycję Zastąp istniejącą nazwę wdrożenia , aby skutecznie zastąpić model używany przez istniejące wdrożenie.

    Uwaga

    Zastąpienie istniejącego wdrożenia nie wymaga zmian wywołania interfejsu API przewidywania , ale uzyskane wyniki będą oparte na nowo przypisanym modelu.

    Zrzut ekranu przedstawiający ekran dodawania nowego wdrożenia w programie Language Studio.

  4. Wybierz wytrenowany model z listy rozwijanej Model .

  5. Wybierz pozycję Wdróż , aby uruchomić zadanie wdrożenia.

  6. Po pomyślnym wdrożeniu obok niego pojawi się data wygaśnięcia. Wygaśnięcie wdrożenia jest wtedy, gdy wdrożony model będzie niedostępny do przewidywania, co zwykle ma miejsce dwanaście miesięcy po wygaśnięciu konfiguracji trenowania.

W następnej sekcji użyjesz nazwy projektu i nazwy wdrożenia.

Rozpoznawanie intencji z mikrofonu

Wykonaj następujące kroki, aby utworzyć nową aplikację konsolową i zainstalować zestaw SPEECH SDK.

  1. Otwórz wiersz polecenia, w którym chcesz utworzyć nowy projekt, i utwórz aplikację konsolową przy użyciu interfejsu wiersza polecenia platformy .NET. Plik Program.cs powinien zostać utworzony w katalogu projektu.

    dotnet new console
    
  2. Zainstaluj zestaw SPEECH SDK w nowym projekcie przy użyciu interfejsu wiersza polecenia platformy .NET.

    dotnet add package Microsoft.CognitiveServices.Speech
    
  3. Zastąp zawartość Program.cs pliku poniższym kodem.

    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. W Program.cs ustawieniu cluProjectName zmiennych i cluDeploymentName na nazwy projektu i wdrożenia. Aby uzyskać informacje na temat tworzenia projektu CLU i wdrożenia, zobacz Tworzenie projektu Language Understanding konwersacyjnego.

  5. Aby zmienić język rozpoznawania mowy, zastąp en-US element innym obsługiwanym językiem. Na przykład es-ES w przypadku języka hiszpańskiego (Hiszpania). Język domyślny to en-US , jeśli nie określisz języka. Aby uzyskać szczegółowe informacje na temat identyfikowania jednego z wielu języków, które mogą być mówione, zobacz identyfikacja języka.

Uruchom nową aplikację konsolową, aby rozpocząć rozpoznawanie mowy z mikrofonu:

dotnet run

Ważne

Upewnij się, że ustawiono LANGUAGE_KEYzmienne środowiskowe , , LANGUAGE_ENDPOINTSPEECH_KEYi SPEECH_REGION zgodnie z powyższym opisem. Jeśli te zmienne nie zostaną ustawione, próba zakończy się niepowodzeniem z komunikatem o błędzie.

Po wyświetleniu monitu porozmawiaj z mikrofonem. Mówisz, że dane wyjściowe powinny być danymi wyjściowymi jako tekst:

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

Uwaga

Obsługa odpowiedzi JSON dla funkcji CLU za pośrednictwem właściwości LanguageUnderstandingServiceResponse_JsonResult została dodana w zestawie SPEECH SDK w wersji 1.26.

Intencje są zwracane w kolejności prawdopodobieństwa, która jest najbardziej prawdopodobna. Oto sformatowana wersja danych wyjściowych JSON, w której topIntent wskaźnik ufności wynosi HomeAutomation.TurnOn 0,97712576 (97,71%). Drugim najbardziej prawdopodobnym zamiarem może być HomeAutomation.TurnOff współczynnik ufności 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"
            }
          ]
        }
      ]
    }
  }
}

Uwagi

Teraz, po ukończeniu przewodnika Szybki start, poniżej przedstawiono kilka dodatkowych zagadnień:

  • W tym przykładzie użyto RecognizeOnceAsync operacji do transkrypcji wypowiedzi do 30 sekund lub do momentu wykrycia ciszy. Aby uzyskać informacje na temat ciągłego rozpoznawania dłuższego dźwięku, w tym konwersacji wielojęzycznych, zobacz Jak rozpoznawać mowę.
  • Aby rozpoznać mowę z pliku audio, użyj polecenia FromWavFileInput zamiast FromDefaultMicrophoneInput:
    using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
    
  • W przypadku skompresowanych plików audio, takich jak MP4, zainstaluj usługę GStreamer i użyj polecenia PullAudioInputStream lub PushAudioInputStream. Aby uzyskać więcej informacji, zobacz Jak używać skompresowanego dźwięku wejściowego.

Czyszczenie zasobów

Aby usunąć utworzone zasoby języka i mowy, możesz użyć Azure Portal interfejsu wierszapolecenia platformy Azure lub interfejsu wiersza polecenia platformy Azure.

Dokumentacja referencyjna | Pakiet (NuGet) | Dodatkowe przykłady w usłudze GitHub

W tym przewodniku Szybki start użyjesz usług rozpoznawania mowy i języka do rozpoznawania intencji z danych dźwiękowych przechwyconych z mikrofonu. W szczególności użyjesz usługi rozpoznawania mowy do rozpoznawania mowy i modelu konwersacyjnej Language Understanding (CLU) do identyfikowania intencji.

Ważne

Konwersacyjna Language Understanding (CLU) jest dostępna dla języków C# i C++ z zestawem Speech SDK w wersji 1.25 lub nowszej.

Wymagania wstępne

  • Subskrypcja platformy Azure — utwórz bezpłatnie
  • Utwórz zasób języka w Azure Portal.
  • Pobierz klucz zasobu języka i punkt końcowy. Po wdrożeniu zasobu language wybierz pozycję Przejdź do zasobu, aby wyświetlić klucze i zarządzać nimi. Aby uzyskać więcej informacji na temat zasobów usług Azure AI, zobacz Uzyskiwanie kluczy dla zasobu.
  • Utwórz zasób usługi Mowa w Azure Portal.
  • Pobierz klucz zasobu usługi Mowa i region. Po wdrożeniu zasobu usługi Mowa wybierz pozycję Przejdź do zasobu, aby wyświetlić klucze i zarządzać nimi. Aby uzyskać więcej informacji na temat zasobów usług Azure AI, zobacz Uzyskiwanie kluczy dla zasobu.

Konfigurowanie środowiska

Zestaw SPEECH SDK jest dostępny jako pakiet NuGet i implementuje platformę .NET Standard 2.0. Zestaw SDK usługi Mowa zostanie zainstalowany w dalszej części tego przewodnika, ale najpierw zapoznaj się z przewodnikiem instalacji zestawu SDK , aby uzyskać więcej wymagań.

Ustawianie zmiennych środowiskowych

W tym przykładzie są wymagane zmienne środowiskowe o nazwach LANGUAGE_KEY, LANGUAGE_ENDPOINT, SPEECH_KEYi SPEECH_REGION.

Aby można było uzyskiwać dostęp do zasobów usług Azure AI, aplikacja musi być uwierzytelniona. W środowisku produkcyjnym należy użyć bezpiecznego sposobu przechowywania i uzyskiwania dostępu do poświadczeń. Na przykład po otrzymaniu klucza dla mowy zapisz go w nowej zmiennej środowiskowej na komputerze lokalnym z uruchomioną aplikacją.

Porada

Nie dołączaj klucza bezpośrednio do kodu i nigdy nie publikuj go publicznie. Aby uzyskać więcej opcji uwierzytelniania, takich jak Azure Key Vault, zobacz artykuł Azure AI Services security (Zabezpieczenia usług Azure AI).

Aby ustawić zmienne środowiskowe, otwórz okno konsoli i postępuj zgodnie z instrukcjami dotyczącymi systemu operacyjnego i środowiska programistycznego.

  • Aby ustawić zmienną LANGUAGE_KEY środowiskową, zastąp your-language-key element jednym z kluczy zasobu.
  • Aby ustawić zmienną LANGUAGE_ENDPOINT środowiskową, zastąp your-language-endpoint element jednym z regionów zasobu.
  • Aby ustawić zmienną SPEECH_KEY środowiskową, zastąp your-speech-key element jednym z kluczy zasobu.
  • Aby ustawić zmienną SPEECH_REGION środowiskową, zastąp your-speech-region element jednym z regionów zasobu.
setx LANGUAGE_KEY your-language-key
setx LANGUAGE_ENDPOINT your-language-endpoint
setx SPEECH_KEY your-speech-key
setx SPEECH_REGION your-speech-region

Uwaga

Jeśli musisz uzyskać dostęp tylko do zmiennej środowiskowej w bieżącej uruchomionej konsoli, możesz ustawić zmienną środowiskową set zamiast setx.

Po dodaniu zmiennych środowiskowych może być konieczne ponowne uruchomienie wszystkich uruchomionych programów, które będą musiały odczytać zmienną środowiskową, w tym okno konsoli. Jeśli na przykład używasz programu Visual Studio jako edytora, uruchom ponownie program Visual Studio przed uruchomieniem przykładu.

Tworzenie projektu Language Understanding konwersacji

Po utworzeniu zasobu Language utwórz projekt interpretacji języka konwersacyjnego w programie Language Studio. Projekt to obszar roboczy do tworzenia niestandardowych modeli uczenia maszynowego na podstawie danych. Dostęp do projektu można uzyskać tylko do Ciebie i innych osób, które mają dostęp do używanego zasobu Language.

Przejdź do programu Language Studio i zaloguj się przy użyciu konta platformy Azure.

Tworzenie projektu interpretacji języka konwersacyjnego

W tym przewodniku Szybki start możesz pobrać ten przykładowy projekt automatyzacji domu i zaimportować go. Ten projekt może przewidzieć zamierzone polecenia z danych wejściowych użytkownika, takich jak włączanie i wyłączanie świateł.

  1. W sekcji Informacje o pytaniach i języku konwersacyjnym w programie Language Studio wybierz pozycję Interpretacja języka konwersacyjnego.

    Zrzut ekranu przedstawiający lokalizację Language Understanding niestandardowych na stronie docelowej programu Language Studio.

  2. Spowoduje to wyświetlenie strony projektów interpretacji języka konwersacyjnego . Obok przycisku Utwórz nowy projekt wybierz pozycję Importuj.

    Zrzut ekranu przedstawiający stronę projektu konwersacji w programie Language Studio.

  3. W wyświetlonym oknie przekaż plik JSON, który chcesz zaimportować. Upewnij się, że plik jest zgodny z obsługiwanym formatem JSON.

Po zakończeniu przekazywania zostanie wyświetlona strona Definicja schematu . W tym przewodniku Szybki start schemat jest już skompilowany, a wypowiedzi są już oznaczone intencjami i jednostkami.

Szkolenie modelu

Zazwyczaj po utworzeniu projektu należy utworzyć wypowiedzi schematu i etykiety. Na potrzeby tego przewodnika Szybki start zaimportowaliśmy już gotowy projekt z utworzonym schematem i oznaczonymi etykietami wypowiedzi.

Aby wytrenować model, musisz rozpocząć zadanie szkoleniowe. Dane wyjściowe pomyślnego zadania szkoleniowego to wytrenowany model.

Aby rozpocząć trenowanie modelu z poziomu programu Language Studio:

  1. Wybierz pozycję Train model (Trenowanie modelu ) z menu po lewej stronie.

  2. Wybierz pozycję Start a training job (Uruchom zadanie szkoleniowe ) z górnego menu.

  3. Wybierz pozycję Train a new model (Trenowanie nowego modelu) i wprowadź nową nazwę modelu w polu tekstowym. W przeciwnym razie, aby zastąpić istniejący model modelem wytrenowanym na nowych danych, wybierz pozycję Zastąp istniejący model , a następnie wybierz istniejący model. Zastępowanie wytrenowanego modelu jest nieodwracalne, ale nie wpłynie to na wdrożone modele do momentu wdrożenia nowego modelu.

  4. Wybierz tryb trenowania. Możesz wybrać standardowe szkolenie w celu szybszego trenowania, ale jest dostępne tylko dla języka angielskiego. Możesz też wybrać opcję Zaawansowane szkolenie , które jest obsługiwane w przypadku innych języków i projektów wielojęzycznych, ale obejmuje dłuższe czasy trenowania. Dowiedz się więcej o trybach trenowania.

  5. Wybierz metodę dzielenia danych . Możesz wybrać opcję Automatyczne dzielenie zestawu testów na podstawie danych treningowych , w których system podzieli wypowiedzi między zestawy treningowe i testowe, zgodnie z określonymi wartościami procentowymi. Możesz też użyć ręcznego podziału danych treningowych i testowych, ta opcja jest włączona tylko w przypadku dodania wypowiedzi do zestawu testów podczas etykietowania wypowiedzi.

  6. Wybierz przycisk Train (Trenowanie ).

    Zrzut ekranu przedstawiający stronę szkoleniową w programie Language Studio.

  7. Wybierz identyfikator zadania trenowania z listy. Zostanie wyświetlony panel, w którym można sprawdzić postęp trenowania, stan zadania i inne szczegóły dotyczące tego zadania.

    Uwaga

    • Tylko pomyślnie ukończone zadania szkoleniowe będą generować modele.
    • Trenowanie może zająć trochę czasu od kilku minut do kilku godzin na podstawie liczby wypowiedzi.
    • Jednocześnie może być uruchomione tylko jedno zadanie trenowania. Nie można uruchomić innych zadań szkoleniowych w ramach tego samego projektu, dopóki uruchomione zadanie nie zostanie ukończone.
    • Uczenie maszynowe używane do trenowania modeli jest regularnie aktualizowane. Aby wyszkolić poprzednią wersję konfiguracji, wybierz pozycję Wybierz tutaj, aby zmienić wersję na stronie Rozpocznij zadanie trenowania i wybierz poprzednią wersję.

Wdrażanie modelu

Ogólnie po trenowaniu modelu należy przejrzeć jego szczegóły oceny. W tym przewodniku Szybki start wdrożysz model i udostępnisz go do wypróbowania w programie Language Studio lub możesz wywołać interfejs API przewidywania.

Aby wdrożyć model z poziomu programu Language Studio:

  1. Wybierz pozycję Deploying a model (Wdrażanie modelu) z menu po lewej stronie.

  2. Wybierz pozycję Dodaj wdrożenie , aby uruchomić Kreatora dodawania wdrożenia .

    Zrzut ekranu przedstawiający przycisk wdrażania modelu w programie Language Studio.

  3. Wybierz pozycję Utwórz nową nazwę wdrożenia , aby utworzyć nowe wdrożenie i przypisać wytrenowany model z poniższej listy rozwijanej. W przeciwnym razie możesz wybrać opcję Zastąp istniejącą nazwę wdrożenia , aby skutecznie zastąpić model używany przez istniejące wdrożenie.

    Uwaga

    Zastępowanie istniejącego wdrożenia nie wymaga zmian wywołania interfejsu API przewidywania , ale wyniki, które otrzymasz, będą oparte na nowo przypisanym modelu.

    Zrzut ekranu przedstawiający ekran dodawania nowego wdrożenia w programie Language Studio.

  4. Wybierz wytrenowany model z listy rozwijanej Model .

  5. Wybierz pozycję Wdróż, aby rozpocząć zadanie wdrażania.

  6. Po pomyślnym wdrożeniu obok niego pojawi się data wygaśnięcia. Wygaśnięcie wdrożenia jest wtedy, gdy wdrożony model będzie niedostępny do przewidywania, co zwykle odbywa się dwanaście miesięcy po wygaśnięciu konfiguracji trenowania.

W następnej sekcji użyjesz nazwy projektu i nazwy wdrożenia.

Rozpoznawanie intencji z mikrofonu

Wykonaj następujące kroki, aby utworzyć nową aplikację konsolową i zainstalować zestaw SPEECH SDK.

  1. Utwórz nowy projekt konsoli języka C++ w Visual Studio Community 2022 o nazwie SpeechRecognition.

  2. Zainstaluj zestaw SPEECH SDK w nowym projekcie za pomocą menedżera pakietów NuGet.

    Install-Package Microsoft.CognitiveServices.Speech
    
  3. Zastąp zawartość SpeechRecognition.cpp następującym kodem:

    #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. W SpeechRecognition.cpp ustawieniu cluProjectName zmiennych i cluDeploymentName na nazwy projektu i wdrożenia. Aby uzyskać informacje na temat tworzenia projektu CLU i wdrożenia, zobacz Tworzenie projektu Language Understanding konwersacji.

  5. Aby zmienić język rozpoznawania mowy, zastąp en-US innym obsługiwanym językiem. Na przykład es-ES w przypadku języka hiszpańskiego (Hiszpania). Język domyślny to en-US , jeśli nie określisz języka. Aby uzyskać szczegółowe informacje na temat identyfikowania jednego z wielu języków, które mogą być mówione, zobacz identyfikację języka.

Skompiluj i uruchom nową aplikację konsolową, aby rozpocząć rozpoznawanie mowy z mikrofonu.

Ważne

Upewnij się, że ustawiono LANGUAGE_KEYzmienne środowiskowe , LANGUAGE_ENDPOINT, SPEECH_KEYi SPEECH_REGION zgodnie z powyższym opisem. Jeśli te zmienne nie zostaną ustawione, przykład zakończy się niepowodzeniem z komunikatem o błędzie.

Po wyświetleniu monitu porozmawiaj z mikrofonem. To, co mówisz, powinno być dane wyjściowe jako tekst:

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

Uwaga

Dodano obsługę odpowiedzi JSON dla funkcji CLU za pośrednictwem właściwości LanguageUnderstandingServiceResponse_JsonResult w zestawie Speech SDK w wersji 1.26.

Intencje są zwracane w kolejności prawdopodobieństwa najprawdopodobniej najmniej prawdopodobne. Oto sformatowana wersja danych wyjściowych JSON, w której topIntent znajduje się HomeAutomation.TurnOn wskaźnik ufności 0,97712576 (97,71%). Drugą najbardziej prawdopodobną intencją może być HomeAutomation.TurnOff wskaźnik ufności 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"
            }
          ]
        }
      ]
    }
  }
}

Uwagi

Po ukończeniu przewodnika Szybki start poniżej przedstawiono kilka dodatkowych zagadnień:

  • W tym przykładzie RecognizeOnceAsync użyto operacji do transkrypcji wypowiedzi do 30 sekund lub do momentu wykrycia ciszy. Aby uzyskać informacje na temat ciągłego rozpoznawania dłuższego dźwięku, w tym konwersacji wielojęzycznych, zobacz Jak rozpoznawać mowę.
  • Aby rozpoznać mowę z pliku audio, użyj FromWavFileInput polecenia zamiast FromDefaultMicrophoneInput:
    auto audioInput = AudioConfig::FromWavFileInput("YourAudioFile.wav");
    
  • W przypadku skompresowanych plików audio, takich jak MP4, zainstaluj usługę GStreamer i użyj polecenia PullAudioInputStream lub PushAudioInputStream. Aby uzyskać więcej informacji, zobacz Jak używać skompresowanego dźwięku wejściowego.

Czyszczenie zasobów

Aby usunąć utworzone zasoby języka i mowy, możesz użyć Azure Portal interfejsu wiersza polecenia platformy Azure lub interfejsuwiersza polecenia platformy Azure.

Dokumentacja referencyjna | Dodatkowe przykłady w usłudze GitHub

Zestaw SPEECH SDK dla języka Java nie obsługuje rozpoznawania intencji za pomocą funkcji rozpoznawania języka konwersacyjnego (CLU). Wybierz inny język programowania lub odwołanie do języka Java i przykłady połączone od początku tego artykułu.

Następne kroki