Краткое руководство. Распознавание намерений с помощью диалоговых Распознавание речи

Справочная документация | Пакет (NuGet) | Дополнительные примеры в GitHub

В этом кратком руководстве вы будете использовать речевые и языковые службы для распознавания намерений из звуковых данных, захваченных с микрофона. В частности, вы будете использовать службу "Речь" для распознавания речи и модель Распознавание речи беседы (CLU) для определения намерений.

Важно!

Диалоговые Распознавание речи (CLU) доступны для C# и C++ с пакетом SDK службы "Речь" версии 1.25 или более поздней.

Предварительные требования

Настройка среды

Пакет SDK для службы "Речь" доступен в виде пакета NuGet и реализует .NET Standard 2.0. Вы установите пакет SDK службы "Речь" далее в этом руководстве, но сначала проверка в руководстве по установке пакета SDK для дополнительных требований.

Настройка переменных среды

Для этого примера требуются переменные среды с именами LANGUAGE_KEY, LANGUAGE_ENDPOINT, SPEECH_KEYи SPEECH_REGION.

Чтобы получить доступ к ресурсам служб ИИ Azure, приложение должно пройти проверку подлинности. Для рабочей среды используйте безопасный способ хранения и доступа к учетным данным,. Например, после получения ключа для ресурса , запишите его в новую переменную среды на локальном компьютере, на котором выполняется приложение.

Совет

Не включайте ключ непосредственно в код и никогда не публикуйте его. Дополнительные варианты проверки подлинности, такие как Azure Key Vault, см. в статье Безопасность служб ИИ 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 перед запуском примера.

Создание проекта conversational Распознавание речи

Создав языковой ресурс, создайте проект распознавания устной речи в Language Studio. Проект — это рабочая область для создания настраиваемых моделей машинного обучения на основе данных. Получить доступ к вашему проекту можете только вы, а также другие пользователи, у которых есть доступ к используемому ресурсу службы "Язык" в Azure.

Перейдите в Language Studio и войдите в учетную запись Azure.

Создание проекта распознавания устной речи

В этом кратком руководстве вы можете скачать этот пример проекта домашней автоматизации и импортировать его. Этот проект может прогнозировать предполагаемые команды на основе введенных пользователем данных, таких как включение и выключение света.

  1. В Language Studio найдите раздел Распознавание вопросов и устной речи и выберите Распознавание устной речи .

    Снимок экрана, на котором показано расположение элемента

  2. Откроется страница Проекты распознавания устной речи. Рядом с кнопкой Создать проект выберите Импорт.

    Снимок экрана: страница проекта для бесед в Language Studio.

  3. В появившемся окне отправьте JSON-файл, который требуется импортировать. Убедитесь, что файл соответствует поддерживаемому формату JSON.

После завершения отправки вы перейдете на страницу Определение схемы . В этом кратком руководстве схема уже создана, а речевые фрагменты уже помечены намерениями и сущностями.

Обучение модели

Как правило, после создания проекта необходимо создать схему и пометить речевые фрагменты. В этом кратком руководстве мы уже импортировали готовый проект со встроенной схемой и помеченными речевыми фрагментами.

Чтобы обучить модель, необходимо запустить задание обучения. Выходные данные успешного задания обучения — это обученная модель.

Чтобы начать обучение модели в Language Studio, выполните следующие действия.

  1. Выберите Обучение модели в меню слева.

  2. В верхнем меню выберите Запустить задание на обучение.

  3. Выберите Обучение новой модели и введите имя новой модели в текстовое поле. В противном случае, чтобы заменить существующую модель моделью, обученной на основе новых данных, выберите Перезаписать существующую модель , а затем выберите существующую модель. Перезапись обученной модели необратима, но никак не влияет на развернутые модели до тех пор, пока вы не развернете новую модель.

  4. Выберите режим обучения. Вы можете выбрать Стандартное обучение для более быстрого обучения, но оно доступно только на английском языке. Кроме того, можно выбрать Расширенное обучение, которое поддерживается для других языков и многоязычных проектов, но оно предусматривает более длительное время обучения. Узнайте больше о режимах обучения.

  5. Выберите метод разделения данных. Вы можете выбрать вариант Автоматическое выделение тестового набора из обучающих данных, при котором система разделит данные с метками на обучающий и тестовый наборы в указанной вами пропорции. Кроме того, можно использовать разделение данных обучения и тестирования вручную. Этот вариант доступен только в том случае, если вы добавили речевые фрагменты в набор тестирования во время маркировки речевых фрагментов.

  6. Нажмите кнопку Обучить.

    Снимок экрана: страница обучения в Language Studio.

  7. Выберите идентификатор задания обучения из списка. Появится панель, где можно проверка ход обучения, состояние задания и другие сведения об этом задании.

    Примечание

    • Модели будут создаваться только с помощью успешно завершенных заданий обучения.
    • Обучение может занять от нескольких минут до нескольких часов в зависимости от количества речевых фрагментов.
    • В каждый момент времени может выполняться только одно задание на обучение. Вы не сможете запускать другие задания обучения в том же проекте, пока не будет завершено запущенное задание.
    • Машинное обучение, используемое для обучения моделей, регулярно обновляется. Чтобы обучить предыдущую версию конфигурации, выберите Выбрать здесь, чтобы изменить страницу Запуск задания обучения и выбрать предыдущую версию.

Развертывание модели

Обычно после обучения модели изучаются сведения о ее оценке. В этом кратком руководстве вы просто развернете модель и предоставите себе к ней доступ в Language Studio. Можно также вызвать API прогнозирования.

Чтобы развернуть модель в студии службы "Язык", сделайте следующее:

  1. В меню слева выберите Развертывание модели.

  2. Выберите Добавить развертывание , чтобы запустить мастер добавления развертывания .

    Снимок экрана: кнопка развертывания модели в Language Studio.

  3. Выберите Создать имя развертывания , чтобы создать новое развертывание и назначить обученную модель в раскрывающемся списке ниже. В противном случае можно выбрать перезаписать имя существующего развертывания , чтобы эффективно заменить модель, используемую существующим развертыванием.

    Примечание

    Для перезаписи существующего развертывания не требуется вносить изменения в вызов API прогнозирования, но полученные результаты будут основаны на новой назначенной модели.

    Снимок экрана: экран добавления нового развертывания в Language Studio.

  4. Выберите обученную модель в раскрывающемся списке Модель .

  5. Выберите Развернуть , чтобы запустить задание развертывания.

  6. После успешного развертывания рядом с ним появится дата окончания срока действия. Срок действия развертывания заканчивается, когда развернутая модель становится недоступной для использования в целях прогнозирования, что обычно происходит через двенадцать месяцев после окончания срока действия конфигурации обучения.

В следующем разделе вы будете использовать имя проекта и имя развертывания.

Распознавание намерений с микрофона

Выполните следующие действия, чтобы создать новое консольное приложение и установить пакет SDK для службы "Речь".

  1. Откройте командную строку, в которой должен быть создан проект, и создайте консольное приложение с помощью CLI .NET. Файл Program.cs должен быть создан в каталоге проекта.

    dotnet new console
    
  2. Установите пакет SDK для службы "Речь" в новом проекте с помощью CLI .NET.

    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 задайте cluProjectName для переменных и cluDeploymentName имена проекта и развертывания. Сведения о создании проекта CLU и развертывании см. в статье Создание проекта conversational Распознавание речи.

  5. Чтобы изменить язык распознавания речи, замените en-US на другой поддерживаемый язык. Например: es-ES для испанского языка (Испания). Если язык не указан, по умолчанию используется en-US. Дополнительные сведения о том, как определить один из нескольких языков, на которых могут говорить, см. в разделе Определение языка.

Запустите новое консольное приложение, чтобы начать распознавание речи с микрофона:

dotnet run

Важно!

Убедитесь, что заданы LANGUAGE_KEYпеременные среды , LANGUAGE_ENDPOINT, SPEECH_KEYи SPEECH_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"}]}]}}}.

Примечание

Поддержка ответа JSON для CLU через свойство LanguageUnderstandingServiceResponse_JsonResult была добавлена в пакет SDK службы "Речь" версии 1.26.

Намерения возвращаются в порядке вероятности с наибольшей вероятностью до наименьшей вероятности. Ниже приведена форматированная версия выходных данных topIntentHomeAutomation.TurnOn JSON с оценкой достоверности 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"
            }
          ]
        }
      ]
    }
  }
}

Remarks

Теперь, когда вы завершили работу с кратким руководством, ознакомьтесь с дополнительными рекомендациями.

  • В этом примере операция RecognizeOnceAsync используется для транскрибирования речевых фрагментов продолжительностью до 30 секунд или до обнаружения тишины. Сведения о непрерывном распознавании для более продолжительных аудиофайлов, в том числе бесед на нескольких языках, см. в разделе Распознавание речи.
  • Чтобы распознать речь из аудиофайла, используйте FromWavFileInput вместо FromDefaultMicrophoneInput:
    using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
    
  • Для сжатых звуковых файлов, таких как MP4, установите GStreamer и используйте PullAudioInputStream или PushAudioInputStream. Дополнительные сведения см. в разделе Как использовать сжатые входные аудиофайлы.

Очистка ресурсов

Вы можете использовать портал Azure или интерфейс командной строки Azure (CLI), чтобы удалить созданные ресурсы языка и речи.

Справочная документация | Пакет (NuGet) | Дополнительные примеры в GitHub

В этом кратком руководстве вы будете использовать службы распознавания речи и языка для распознавания намерений из звуковых данных, захваченных с микрофона. В частности, вы будете использовать службу "Речь" для распознавания речи и модель Распознавание речи беседы (CLU) для определения намерений.

Важно!

Диалоговые Распознавание речи (CLU) доступны для C# и C++ с пакетом SDK службы "Речь" версии 1.25 или более поздней.

Предварительные требования

Настройка среды

Пакет SDK для службы "Речь" доступен в виде пакета NuGet и реализует .NET Standard 2.0. Вы установите пакет SDK службы "Речь" далее в этом руководстве, но сначала проверка в руководстве по установке пакета SDK с дополнительными требованиями.

Настройка переменных среды

В этом примере требуются переменные среды с именами LANGUAGE_KEY, LANGUAGE_ENDPOINT, SPEECH_KEYи SPEECH_REGION.

Чтобы получить доступ к ресурсам служб ИИ Azure, приложение должно пройти проверку подлинности. Для рабочей среды используйте безопасный способ хранения и доступа к учетным данным,. Например, когда вы получите ключ для ресурса , запишите его в новую переменную среды на локальном компьютере, на котором выполняется приложение.

Совет

Не включайте ключ непосредственно в код и никогда не публикуйте его в открытом доступе. Дополнительные варианты проверки подлинности, такие как Azure Key Vault, см. в статье о безопасности служб ИИ 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 перед запуском примера.

Создание проекта conversational Распознавание речи

Создав ресурс Language, создайте проект распознавания устной речи в Language Studio. Проект — это рабочая область для создания настраиваемых моделей машинного обучения на основе данных. Получить доступ к вашему проекту можете только вы, а также другие пользователи, у которых есть доступ к используемому ресурсу службы "Язык" в Azure.

Перейдите в Language Studio и войдите в учетную запись Azure.

Создание проекта распознавания устной речи

В этом кратком руководстве вы можете скачать этот пример проекта домашней автоматизации и импортировать его. Этот проект может прогнозировать предполагаемые команды, вводимые пользователем, например включение и выключение света.

  1. В Language Studio найдите раздел Распознавание вопросов и устной речи и выберите Распознавание устной речи .

    Снимок экрана, на котором показано расположение элемента

  2. Откроется страница Проекты распознавания устной речи. Рядом с кнопкой Создать проект выберите Импорт.

    Снимок экрана: страница проекта для бесед в Language Studio.

  3. В появившемся окне отправьте JSON-файл, который требуется импортировать. Убедитесь, что файл соответствует поддерживаемому формату JSON.

После завершения отправки вы перейдете на страницу Определения схемы . В этом кратком руководстве схема уже создана, а речевые фрагменты уже помечены намерениями и сущностями.

Обучение модели

Как правило, после создания проекта необходимо создать схему и пометить речевые фрагменты. В этом кратком руководстве мы уже импортировали готовый проект со встроенной схемой и помеченными речевыми фрагментами.

Чтобы обучить модель, необходимо запустить задание обучения. Выходные данные успешного задания обучения — это обученная модель.

Чтобы начать обучение модели в Language Studio, выполните следующие действия.

  1. Выберите Обучение модели в меню слева.

  2. В верхнем меню выберите Запустить задание на обучение.

  3. Выберите Обучение новой модели и введите имя новой модели в текстовом поле. В противном случае, чтобы заменить существующую модель моделью, обученной на основе новых данных, выберите Перезаписать существующую модель , а затем выберите существующую модель. Перезапись обученной модели необратима, но никак не влияет на развернутые модели до тех пор, пока вы не развернете новую модель.

  4. Выберите режим обучения. Вы можете выбрать Стандартное обучение для более быстрого обучения, но оно доступно только на английском языке. Кроме того, можно выбрать Расширенное обучение, которое поддерживается для других языков и многоязычных проектов, но оно предусматривает более длительное время обучения. Узнайте больше о режимах обучения.

  5. Выберите метод разделения данных. Вы можете выбрать вариант Автоматическое выделение тестового набора из обучающих данных, при котором система разделит данные с метками на обучающий и тестовый наборы в указанной вами пропорции. Кроме того, можно использовать разделение данных обучения и тестирования вручную. Этот вариант доступен только в том случае, если вы добавили речевые фрагменты в набор тестирования во время маркировки речевых фрагментов.

  6. Нажмите кнопку Обучить.

    Снимок экрана: страница обучения в Language Studio.

  7. Выберите идентификатор задания обучения в списке. Появится панель, на которой можно проверка ход обучения, состояние задания и другие сведения об этом задании.

    Примечание

    • Модели будут создаваться только с помощью успешно завершенных заданий обучения.
    • Обучение может занять от нескольких минут до нескольких часов в зависимости от количества речевых фрагментов.
    • В каждый момент времени может выполняться только одно задание на обучение. Вы не сможете запустить другие задания обучения в рамках того же проекта, пока не будет завершено выполняющееся задание.
    • Машинное обучение, используемое для обучения моделей, регулярно обновляется. Чтобы обучить предыдущую версию конфигурации, выберите Выбрать здесь, чтобы изменить страницу Запуск задания обучения и выбрать предыдущую версию.

Развертывание модели

Обычно после обучения модели изучаются сведения о ее оценке. В этом кратком руководстве вы просто развернете модель и предоставите себе к ней доступ в Language Studio. Можно также вызвать API прогнозирования.

Чтобы развернуть модель в студии службы "Язык", сделайте следующее:

  1. В меню слева выберите Развертывание модели.

  2. Выберите Добавить развертывание , чтобы запустить мастер добавления развертывания .

    Снимок экрана: кнопка развертывания модели в Language Studio.

  3. Выберите Создать имя развертывания , чтобы создать новое развертывание и назначить обученную модель в раскрывающемся списке ниже. В противном случае можно выбрать перезаписать имя существующего развертывания , чтобы эффективно заменить модель, используемую существующим развертыванием.

    Примечание

    Для перезаписи существующего развертывания не требуется вносить изменения в вызов API прогнозирования, но полученные результаты будут основаны на новой назначенной модели.

    Снимок экрана: экран добавления нового развертывания в Language Studio.

  4. Выберите обученную модель в раскрывающемся списке Модель .

  5. Выберите Развернуть , чтобы запустить задание развертывания.

  6. После успешного развертывания рядом с ним появится дата окончания срока действия. Срок действия развертывания заканчивается, когда развернутая модель становится недоступной для использования в целях прогнозирования, что обычно происходит через двенадцать месяцев после окончания срока действия конфигурации обучения.

В следующем разделе вы будете использовать имя проекта и имя развертывания.

Распознавание намерений с микрофона

Выполните следующие действия, чтобы создать новое консольное приложение и установить пакет SDK для службы "Речь".

  1. Создайте проект консоли C++ в Visual Studio Community 2022 с именем SpeechRecognition.

  2. Установите пакет SDK для службы "Речь" в новом проекте с помощью диспетчера пакетов NuGet.

    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 задайте cluProjectName для переменных и cluDeploymentName имена проекта и развертывания. Сведения о создании проекта CLU и развертывании см. в статье Создание проекта conversational Распознавание речи.

  5. Чтобы изменить язык распознавания речи, замените en-US на другой поддерживаемый язык. Например: es-ES для испанского языка (Испания). Если язык не указан, по умолчанию используется en-US. Дополнительные сведения о том, как определить один из нескольких языков, на которых могут говорить, см. в разделе Определение языка.

Создайте и запустите новое консольное приложение, чтобы начать распознавание речи с микрофона.

Важно!

Убедитесь, что заданы LANGUAGE_KEYпеременные среды , LANGUAGE_ENDPOINT, SPEECH_KEYи SPEECH_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"}]}]}}}.

Примечание

Поддержка ответа JSON для CLU через свойство LanguageUnderstandingServiceResponse_JsonResult была добавлена в пакет SDK службы "Речь" версии 1.26.

Намерения возвращаются в порядке вероятности с наибольшей вероятностью до наименьшей вероятности. Ниже приведена форматированная версия выходных данных topIntentHomeAutomation.TurnOn JSON с оценкой достоверности 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"
            }
          ]
        }
      ]
    }
  }
}

Remarks

Теперь, когда вы завершили работу с кратким руководством, ознакомьтесь с дополнительными рекомендациями.

  • В этом примере операция RecognizeOnceAsync используется для транскрибирования речевых фрагментов продолжительностью до 30 секунд или до обнаружения тишины. Сведения о непрерывном распознавании для более продолжительных аудиофайлов, в том числе бесед на нескольких языках, см. в разделе Распознавание речи.
  • Чтобы распознать речь из аудиофайла, используйте FromWavFileInput вместо FromDefaultMicrophoneInput:
    auto audioInput = AudioConfig::FromWavFileInput("YourAudioFile.wav");
    
  • Для сжатых звуковых файлов, таких как MP4, установите GStreamer и используйте PullAudioInputStream или PushAudioInputStream. Дополнительные сведения см. в разделе Как использовать сжатые входные аудиофайлы.

Очистка ресурсов

Вы можете использовать портал Azure или интерфейс командной строки Azure (CLI), чтобы удалить созданные ресурсы языка и речи.

Справочная документация | Дополнительные примеры в GitHub

Пакет SDK службы "Речь" для Java не поддерживает распознавание намерений с помощью распознавания устной речи (CLU). Выберите другой язык программирования или справочник по Java и примеры, приведенные в начале этой статьи.

Дальнейшие действия