Compartilhar via


Início Rápido: Reconhecer intenções com Compreensão da linguagem coloquial

Documentação de referênciaPacotes (NuGet)Exemplos adicionais no GitHub

Neste início rápido, você usará os Serviços para Fala e Linguagem para reconhecer intenções em dados de áudio capturados de um microfone. Especificamente, você usará o Serviço para Fala para reconhecer fala e um modelo CLU (Compreensão da linguagem coloquial) para identificar intenções.

Importante

A Compreensão da linguagem coloquial (CLU) está disponível para C# e C++ com o SDK de Fala versão 1.25 ou posterior.

Pré-requisitos

  • Assinatura do Azure – Criar uma gratuitamente
  • Criar um recurso de Linguagem no portal do Azure.
  • Obter a chave e o ponto de extremidade do recurso de Linguagem Depois que o recurso de Linguagem for implantado, selecione Ir para o recurso para ver e gerenciar as chaves. Para saber mais sobre os recursos dos serviços de IA do Azure, confira Obter as chaves do recurso.
  • Criar um recurso de Fala no portal do Azure.
  • Obter a região e a chave do recurso para Fala. Depois que o recurso de Fala for implantado, selecione Ir para o recurso para exibir e gerenciar as chaves. Para saber mais sobre os recursos dos serviços de IA do Azure, confira Obter as chaves do recurso.

Configurar o ambiente

O SDK de Fala está disponível como um pacote NuGet e implementa o .NET Standard 2.0. Você instalará o SDK de Fala posteriormente neste guia, mas primeiro verifique o guia de instalação do SDK para conhecer os demais requisitos.

Definir variáveis de ambiente

Este exemplo requer as variáveis de ambiente chamadas LANGUAGE_KEY, LANGUAGE_ENDPOINT, SPEECH_KEY e SPEECH_REGION.

O aplicativo deverá ser autenticado para acessar os recursos dos serviços de IA do Azure. Para produção, use uma maneira segura de armazenar e acessar suas credenciais. Por exemplo, após você obter uma chave para , Recurso de Fala grave-a em uma nova variável de ambiente no computador local que executa o aplicativo.

Dica

Não inclua a chave diretamente no código e nunca a divulgue publicamente. Consulte o artigo de segurança dos serviços de IA do Azure para obter mais opções de autenticação como o Azure Key Vault.

Para definir as variáveis de ambiente, abra uma janela do console e siga as instruções do sistema operacional e do ambiente de desenvolvimento.

  • Para definir a variável de ambiente LANGUAGE_KEY, substitua your-language-key por uma das chaves do recurso.
  • Para definir a variável de ambiente LANGUAGE_ENDPOINT, substitua your-language-endpoint por uma das regiões do recurso.
  • Para definir a variável de ambiente SPEECH_KEY, substitua your-speech-key por uma das chaves do recurso.
  • Para definir a variável de ambiente SPEECH_REGION, substitua your-speech-region por uma das regiões do recurso.
setx LANGUAGE_KEY your-language-key
setx LANGUAGE_ENDPOINT your-language-endpoint
setx SPEECH_KEY your-speech-key
setx SPEECH_REGION your-speech-region

Observação

Se for necessário somente acessar a variável de ambiente no console em execução atual, você poderá definir a variável de ambiente com set em vez de setx.

Depois de adicionar as variáveis de ambiente, talvez seja necessário reiniciar todos os programas em execução que precisarem ler a variável de ambiente, incluindo a janela do console. Por exemplo, se estiver usando o Visual Studio como seu editor, reinicie-o antes de executar o exemplo.

Criar um projeto de Compreensão da linguagem coloquial

Após criar um recurso de Linguagem, crie um projeto de compreensão da linguagem coloquial no Estúdio de Linguagem. Um projeto é uma área de trabalho para a criação de modelos de ML personalizados com base em seus dados. Seu projeto só pode ser acessado por você e por outras pessoas que têm acesso ao recurso de idioma sendo usado.

Vá para o Language Studio e entre com sua conta do Azure.

Criar um projeto de compreensão da linguagem coloquial

Para este início rápido, você pode baixar este projeto de exemplo de automação residencial e importá-lo. Esse projeto pode prever os comandos pretendidos da entrada do usuário, como ligar e desligar as luzes.

  1. Na seção Compreensão de perguntas e da linguagem coloquial do Language Studio, selecione Compreensão da linguagem coloquial.

    Uma captura de tela mostrando o local do Reconhecimento vocal personalizado na página de aterrissagem do Language Studio.

  2. Isso o levará à página Projetos de compreensão da linguagem coloquial. Ao lado do botão Criar projeto, selecione Importar.

    Uma captura de tela mostrando a página de projeto de conversa no Language Studio.

  3. Na janela exibida, carregue o arquivo JSON que você deseja importar. Verifique se o arquivo segue o formato JSON com suporte.

Quando o carregamento for concluído, você chegará à página Definição de esquema. Neste início rápido, o esquema já foi criado e os enunciados já estão rotulados com intenções e entidades.

Treinar seu modelo

Normalmente, depois de criar um projeto, você deve criar um esquema e rotular enunciados. Neste início rápido, já importamos um projeto pronto com esquema criado e enunciados rotulados.

Para treinar um modelo, você precisa iniciar um trabalho de treinamento. A saída de um trabalho de treinamento bem-sucedido é seu modelo treinado.

Para começar a treinar o modelo no Language Studio:

  1. Selecione Testar modelo no menu do lado esquerdo.

  2. Selecione Iniciar um trabalho de treinamento no menu superior.

  3. Selecione Treinar um novo modelo e insira um novo nome do modelo na caixa de texto. Caso contrário, para substituir um modelo existente por um modelo treinado nos novos dados, selecione Substituir um modelo existente e selecione um modelo existente. A substituição de um modelo treinado é irreversível, mas não afetará os modelos implantados até que você implante o novo modelo.

  4. Selecione o modo de treinamento. Você pode escolher Treinamento padrão para um treinamento mais rápido, mas ele só está disponível em inglês. Ou você pode escolher Treinamento avançado que tem suporte para outros idiomas e projetos multilíngues, mas envolve tempos de treinamento mais longos. Saiba mais sobre os modos de treinamento.

  5. Selecione o método divisão de dados. É possível optar por Dividir automaticamente o conjunto de teste dos dados de treinamento, em que o sistema dividirá os enunciados entre os conjuntos de treinamento e de teste, conforme os percentuais especificados. Ou você pode Usar uma divisão manual dos dados de treinamento e de teste. Essa opção será habilitada somente se você tiver adicionado enunciados ao conjunto de teste quando rotulou seus enunciados.

  6. Selecione o botão Treinar.

    Uma captura de tela mostrando a página de treinamento no Language Studio.

  7. Selecione a ID do trabalho de treinamento na lista. Um painel lateral será exibido para permitir a verificação do progresso do treinamento, do status do trabalho e de outros detalhes do trabalho.

    Observação

    • Somente os trabalhos de treinamento concluídos com êxito vão gerar modelos.
    • O treinamento pode levar entre alguns minutos e algumas horas, de acordo com a contagem dos dados rotulados.
    • É possível ter um trabalho de treinamento em execução por vez. Não é possível iniciar outros trabalhos de treinamento no mesmo projeto até que o trabalho em execução seja concluído.
    • O aprendizado de máquina usado para treinar modelos é atualizado regularmente. Para treinar em uma versão de configuração anterior, selecione Selecione aqui para alterar na página Iniciar um trabalho de treinamento e escolha uma versão anterior.

Implantar o seu modelo

Geralmente, após treinar um modelo, você poderá examinar os detalhes da avaliação. Neste início rápido, você implantará somente o modelo e o disponibilizará para ser experimentado no estúdio de Linguagem ou você poderá chamar a API de previsão.

Para implantar o modelo por meio do Language Studio:

  1. Selecione Implantar um modelo no menu à esquerda.

  2. Selecione Adicionar implantação para iniciar o assistente Adicionar implantação.

    Uma captura de tela mostrando o botão da implantação de modelo no Language Studio.

  3. Selecione Criar um novo nome de implantação para criar uma implantação e atribuir um modelo treinado na lista suspensa abaixo. Caso contrário, você pode selecionar Substituir um nome de implantação existente para substituir efetivamente o modelo usado por uma implantação existente.

    Observação

    A substituição de uma implantação existente não exige alterações na chamada à API de Previsão, mas os resultados obtidos serão baseados no modelo recém-atribuído.

    Captura de tela que mostra a tela para adicionar uma nova implantação no Language Studio.

  4. Selecione um modelo treinado na lista suspensa Modelo.

  5. Selecione Implantar para iniciar a implantação.

  6. Depois que a implantação for realizada com sucesso, uma data de validade será exibida. A expiração da implantação consiste no momento em que o modelo implantado não estará disponível para ser usado para previsão, o que normalmente acontece 12 meses após a expiração de uma configuração de treinamento.

Você usará o nome do projeto e o nome da implantação na próxima seção.

Reconhecer intenções de um microfone

Siga estas etapas para criar um novo aplicativo de console e instalar o SDK de Fala.

  1. Abra um prompt de comando no qual você deseja criar o novo projeto e crie um aplicativo de console com a CLI do .NET. O arquivo Program.cs deverá ser criado no diretório do projeto.

    dotnet new console
    
  2. Instale o SDK de Fala em seu novo projeto com a CLI do .NET.

    dotnet add package Microsoft.CognitiveServices.Speech
    
  3. Substitua o conteúdo de Program.cs pelo seguinte código.

    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. Em Program.cs, defina as variáveis cluProjectName e cluDeploymentName como os nomes do projeto e da implantação. Para obter informações sobre como criar um projeto e uma implantação da CLU, consulte Criar um projeto de Compreensão da linguagem coloquial.

  5. Para alterar o idioma de reconhecimento de fala, substitua en-US por outro en-US. Por exemplo: es-ES para espanhol (Espanha). O idioma padrão é en-US se você não especificar um idioma. Para obter detalhes sobre como identificar um dos vários idiomas que podem ser falados, consulte identificação do idioma.

Execute seu novo aplicativo de console para iniciar o reconhecimento de fala a partir de um microfone:

dotnet run

Importante

Defina as variáveis de ambiente LANGUAGE_KEY, LANGUAGE_ENDPOINT, SPEECH_KEY e SPEECH_REGION conforme descrito acima. Se você não definir essas variáveis, o exemplo falhará com uma mensagem de erro.

Fale no microfone quando solicitado. O que você fala deve sair como texto:

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

Observação

O suporte para a resposta JSON para CLU por meio da propriedade LanguageUnderstandingServiceResponse_JsonResult foi adicionado no SDK de Fala versão 1.26.

As intenções são retornadas na ordem de probabilidade da mais provável para a menos provável. Confira uma versão formatada da saída JSON em que topIntent é HomeAutomation.TurnOn com uma pontuação de confiança de 0,97712576 (97,71%). A segunda intenção mais provável pode ser HomeAutomation.TurnOff com uma pontuação de confiança de 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"
            }
          ]
        }
      ]
    }
  }
}

Comentários

Agora que você concluiu o início rápido, aqui estão algumas considerações adicionais:

  • Este exemplo usa a operação RecognizeOnceAsync para transcrever enunciados de até 30 segundos ou até que o silêncio seja detectado. Para obter informações sobre o reconhecimento contínuo de áudios mais longos, incluindo conversas multilíngues, consulte Como reconhecer a fala.
  • Para reconhecer a fala de um arquivo de áudio, use FromWavFileInput em vez de FromDefaultMicrophoneInput:
    using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
    
  • Para arquivos de áudio compactados, como MP4, instale o GStreamer e use PullAudioInputStream ou PushAudioInputStream. Para saber mais, confira Como usar áudio de entrada compactado.

Limpar os recursos

Você pode usar o portal do Azure ou a CLI (interface de linha de comando) do Azure para remover os recursos de Fala e Linguagem que criou.

Documentação de referênciaPacotes (NuGet)Exemplos adicionais no GitHub

Neste início rápido, você usará os Serviços para Fala e Linguagem para reconhecer intenções em dados de áudio capturados de um microfone. Especificamente, você usará o Serviço para Fala para reconhecer fala e um modelo CLU (Compreensão da linguagem coloquial) para identificar intenções.

Importante

A Compreensão da linguagem coloquial (CLU) está disponível para C# e C++ com o SDK de Fala versão 1.25 ou posterior.

Pré-requisitos

  • Assinatura do Azure – Criar uma gratuitamente
  • Criar um recurso de Linguagem no portal do Azure.
  • Obter a chave e o ponto de extremidade do recurso de Linguagem Depois que o recurso de Linguagem for implantado, selecione Ir para o recurso para ver e gerenciar as chaves. Para saber mais sobre os recursos dos serviços de IA do Azure, confira Obter as chaves do recurso.
  • Criar um recurso de Fala no portal do Azure.
  • Obter a região e a chave do recurso para Fala. Depois que o recurso de Fala for implantado, selecione Ir para o recurso para exibir e gerenciar as chaves. Para saber mais sobre os recursos dos serviços de IA do Azure, confira Obter as chaves do recurso.

Configurar o ambiente

O SDK de Fala está disponível como um pacote NuGet e implementa o .NET Standard 2.0. Você instalará o SDK de Fala posteriormente neste guia, mas primeiro verifique o guia de instalação do SDK para conhecer os demais requisitos.

Definir variáveis de ambiente

Este exemplo requer as variáveis de ambiente chamadas LANGUAGE_KEY, LANGUAGE_ENDPOINT, SPEECH_KEY e SPEECH_REGION.

O aplicativo deverá ser autenticado para acessar os recursos dos serviços de IA do Azure. Para produção, use uma maneira segura de armazenar e acessar suas credenciais. Por exemplo, após você obter uma chave para , Recurso de Fala grave-a em uma nova variável de ambiente no computador local que executa o aplicativo.

Dica

Não inclua a chave diretamente no código e nunca a divulgue publicamente. Consulte o artigo de segurança dos serviços de IA do Azure para obter mais opções de autenticação como o Azure Key Vault.

Para definir as variáveis de ambiente, abra uma janela do console e siga as instruções do sistema operacional e do ambiente de desenvolvimento.

  • Para definir a variável de ambiente LANGUAGE_KEY, substitua your-language-key por uma das chaves do recurso.
  • Para definir a variável de ambiente LANGUAGE_ENDPOINT, substitua your-language-endpoint por uma das regiões do recurso.
  • Para definir a variável de ambiente SPEECH_KEY, substitua your-speech-key por uma das chaves do recurso.
  • Para definir a variável de ambiente SPEECH_REGION, substitua your-speech-region por uma das regiões do recurso.
setx LANGUAGE_KEY your-language-key
setx LANGUAGE_ENDPOINT your-language-endpoint
setx SPEECH_KEY your-speech-key
setx SPEECH_REGION your-speech-region

Observação

Se for necessário somente acessar a variável de ambiente no console em execução atual, você poderá definir a variável de ambiente com set em vez de setx.

Depois de adicionar as variáveis de ambiente, talvez seja necessário reiniciar todos os programas em execução que precisarem ler a variável de ambiente, incluindo a janela do console. Por exemplo, se estiver usando o Visual Studio como seu editor, reinicie-o antes de executar o exemplo.

Criar um projeto de Compreensão da linguagem coloquial

Após criar um recurso de Linguagem, crie um projeto de compreensão da linguagem coloquial no Estúdio de Linguagem. Um projeto é uma área de trabalho para a criação de modelos de ML personalizados com base em seus dados. Seu projeto só pode ser acessado por você e por outras pessoas que têm acesso ao recurso de idioma sendo usado.

Vá para o Language Studio e entre com sua conta do Azure.

Criar um projeto de compreensão da linguagem coloquial

Para este início rápido, você pode baixar este projeto de exemplo de automação residencial e importá-lo. Esse projeto pode prever os comandos pretendidos da entrada do usuário, como ligar e desligar as luzes.

  1. Na seção Compreensão de perguntas e da linguagem coloquial do Language Studio, selecione Compreensão da linguagem coloquial.

    Uma captura de tela mostrando o local do Reconhecimento vocal personalizado na página de aterrissagem do Language Studio.

  2. Isso o levará à página Projetos de compreensão da linguagem coloquial. Ao lado do botão Criar projeto, selecione Importar.

    Uma captura de tela mostrando a página de projeto de conversa no Language Studio.

  3. Na janela exibida, carregue o arquivo JSON que você deseja importar. Verifique se o arquivo segue o formato JSON com suporte.

Quando o carregamento for concluído, você chegará à página Definição de esquema. Neste início rápido, o esquema já foi criado e os enunciados já estão rotulados com intenções e entidades.

Treinar seu modelo

Normalmente, depois de criar um projeto, você deve criar um esquema e rotular enunciados. Neste início rápido, já importamos um projeto pronto com esquema criado e enunciados rotulados.

Para treinar um modelo, você precisa iniciar um trabalho de treinamento. A saída de um trabalho de treinamento bem-sucedido é seu modelo treinado.

Para começar a treinar o modelo no Language Studio:

  1. Selecione Testar modelo no menu do lado esquerdo.

  2. Selecione Iniciar um trabalho de treinamento no menu superior.

  3. Selecione Treinar um novo modelo e insira um novo nome do modelo na caixa de texto. Caso contrário, para substituir um modelo existente por um modelo treinado nos novos dados, selecione Substituir um modelo existente e selecione um modelo existente. A substituição de um modelo treinado é irreversível, mas não afetará os modelos implantados até que você implante o novo modelo.

  4. Selecione o modo de treinamento. Você pode escolher Treinamento padrão para um treinamento mais rápido, mas ele só está disponível em inglês. Ou você pode escolher Treinamento avançado que tem suporte para outros idiomas e projetos multilíngues, mas envolve tempos de treinamento mais longos. Saiba mais sobre os modos de treinamento.

  5. Selecione o método divisão de dados. É possível optar por Dividir automaticamente o conjunto de teste dos dados de treinamento, em que o sistema dividirá os enunciados entre os conjuntos de treinamento e de teste, conforme os percentuais especificados. Ou você pode Usar uma divisão manual dos dados de treinamento e de teste. Essa opção será habilitada somente se você tiver adicionado enunciados ao conjunto de teste quando rotulou seus enunciados.

  6. Selecione o botão Treinar.

    Uma captura de tela mostrando a página de treinamento no Language Studio.

  7. Selecione a ID do trabalho de treinamento na lista. Um painel lateral será exibido para permitir a verificação do progresso do treinamento, do status do trabalho e de outros detalhes do trabalho.

    Observação

    • Somente os trabalhos de treinamento concluídos com êxito vão gerar modelos.
    • O treinamento pode levar entre alguns minutos e algumas horas, de acordo com a contagem dos dados rotulados.
    • É possível ter um trabalho de treinamento em execução por vez. Não é possível iniciar outros trabalhos de treinamento no mesmo projeto até que o trabalho em execução seja concluído.
    • O aprendizado de máquina usado para treinar modelos é atualizado regularmente. Para treinar em uma versão de configuração anterior, selecione Selecione aqui para alterar na página Iniciar um trabalho de treinamento e escolha uma versão anterior.

Implantar o seu modelo

Geralmente, após treinar um modelo, você poderá examinar os detalhes da avaliação. Neste início rápido, você implantará somente o modelo e o disponibilizará para ser experimentado no estúdio de Linguagem ou você poderá chamar a API de previsão.

Para implantar o modelo por meio do Language Studio:

  1. Selecione Implantar um modelo no menu à esquerda.

  2. Selecione Adicionar implantação para iniciar o assistente Adicionar implantação.

    Uma captura de tela mostrando o botão da implantação de modelo no Language Studio.

  3. Selecione Criar um novo nome de implantação para criar uma implantação e atribuir um modelo treinado na lista suspensa abaixo. Caso contrário, você pode selecionar Substituir um nome de implantação existente para substituir efetivamente o modelo usado por uma implantação existente.

    Observação

    A substituição de uma implantação existente não exige alterações na chamada à API de Previsão, mas os resultados obtidos serão baseados no modelo recém-atribuído.

    Captura de tela que mostra a tela para adicionar uma nova implantação no Language Studio.

  4. Selecione um modelo treinado na lista suspensa Modelo.

  5. Selecione Implantar para iniciar a implantação.

  6. Depois que a implantação for realizada com sucesso, uma data de validade será exibida. A expiração da implantação consiste no momento em que o modelo implantado não estará disponível para ser usado para previsão, o que normalmente acontece 12 meses após a expiração de uma configuração de treinamento.

Você usará o nome do projeto e o nome da implantação na próxima seção.

Reconhecer intenções de um microfone

Siga estas etapas para criar um novo aplicativo de console e instalar o SDK de Fala.

  1. Crie um novo projeto de console C++ no Visual Studio Community 2022 chamado SpeechRecognition.

  2. Instale o SDK de Fala em seu novo projeto com o gerenciador de pacotes NuGet.

    Install-Package Microsoft.CognitiveServices.Speech
    
  3. Substitua o conteúdo de SpeechRecognition.cpp pelo seguinte código:

    #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. Em SpeechRecognition.cpp, defina as variáveis cluProjectName e cluDeploymentName como os nomes do projeto e da implantação. Para obter informações sobre como criar um projeto e uma implantação da CLU, consulte Criar um projeto de Compreensão da linguagem coloquial.

  5. Para alterar o idioma de reconhecimento de fala, substitua en-US por outro en-US. Por exemplo: es-ES para espanhol (Espanha). O idioma padrão é en-US se você não especificar um idioma. Para obter detalhes sobre como identificar um dos vários idiomas que podem ser falados, consulte identificação do idioma.

Compile e execute seu novo aplicativo de console para iniciar o reconhecimento de fala a partir de um microfone.

Importante

Defina as variáveis de ambiente LANGUAGE_KEY, LANGUAGE_ENDPOINT, SPEECH_KEY e SPEECH_REGION conforme descrito acima. Se você não definir essas variáveis, o exemplo falhará com uma mensagem de erro.

Fale no microfone quando solicitado. O que você fala deve sair como texto:

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

Observação

O suporte para a resposta JSON para CLU por meio da propriedade LanguageUnderstandingServiceResponse_JsonResult foi adicionado no SDK de Fala versão 1.26.

As intenções são retornadas na ordem de probabilidade da mais provável para a menos provável. Confira uma versão formatada da saída JSON em que topIntent é HomeAutomation.TurnOn com uma pontuação de confiança de 0,97712576 (97,71%). A segunda intenção mais provável pode ser HomeAutomation.TurnOff com uma pontuação de confiança de 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"
            }
          ]
        }
      ]
    }
  }
}

Comentários

Agora que você concluiu o início rápido, aqui estão algumas considerações adicionais:

  • Este exemplo usa a operação RecognizeOnceAsync para transcrever enunciados de até 30 segundos ou até que o silêncio seja detectado. Para obter informações sobre o reconhecimento contínuo de áudios mais longos, incluindo conversas multilíngues, consulte Como reconhecer a fala.
  • Para reconhecer a fala de um arquivo de áudio, use FromWavFileInput em vez de FromDefaultMicrophoneInput:
    auto audioInput = AudioConfig::FromWavFileInput("YourAudioFile.wav");
    
  • Para arquivos de áudio compactados, como MP4, instale o GStreamer e use PullAudioInputStream ou PushAudioInputStream. Para saber mais, confira Como usar áudio de entrada compactado.

Limpar os recursos

Você pode usar o portal do Azure ou a CLI (interface de linha de comando) do Azure para remover os recursos de Fala e Linguagem que criou.

Documentação de referência | Amostras adicionais no GitHub

O SDK de Fala para Java não dá suporte ao reconhecimento de intenção com a CLU (compreensão da linguagem coloquial). Selecione outra linguagem de programação ou a referência Java e amostras vinculadas no início deste artigo.

Próximas etapas