Início Rápido: Reconhecer intenções com Compreensão da linguagem coloquial
Documentação de referência | Pacote (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
- Uma assinatura do Azure. É possível 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.
- 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.
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. Este artigo mostra como usar variáveis de ambiente para armazenar suas credenciais. Em seguida, você poderá acessar as variáveis de ambiente do seu código para autenticar seu aplicativo. Para a produção, use um método mais seguro para armazenar e acessar suas credenciais.
Importante
Recomendamos a autenticação do Microsoft Entra ID com identidades gerenciadas para recursos do Azure a fim de evitar o armazenamento de credenciais com seus aplicativos executados na nuvem.
Se você usar uma chave de API, armazene-a com segurança em outro lugar, como no Azure Key Vault. Não inclua a chave da API diretamente no seu código e nunca a publique publicamente.
Para obter mais informações sobre segurança dos serviços de IA, confira Autenticar solicitações para os serviços de IA do Azure.
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
, substituayour-language-key
por uma das chaves do recurso. - Para definir a variável de ambiente
LANGUAGE_ENDPOINT
, substituayour-language-endpoint
por uma das regiões do recurso. - Para definir a variável de ambiente
SPEECH_KEY
, substituayour-speech-key
por uma das chaves do recurso. - Para definir a variável de ambiente
SPEECH_REGION
, substituayour-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.
Na seção Compreensão de perguntas e da linguagem coloquial do Language Studio, selecione Compreensão da linguagem coloquial.
Isso o levará à página Projetos de compreensão da linguagem coloquial. Ao lado do botão Criar projeto, selecione Importar.
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:
Selecione Testar modelo no menu do lado esquerdo.
Selecione Iniciar um trabalho de treinamento no menu superior.
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.
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.
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.
Selecione o botão Treinar.
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:
Selecione Implantar um modelo no menu à esquerda.
Selecione Adicionar implantação para iniciar o assistente Adicionar implantação.
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.
Selecione um modelo treinado na lista suspensa Modelo.
Selecione Implantar para iniciar a implantação.
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.
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
Instale o SDK de Fala em seu novo projeto com a CLI do .NET.
dotnet add package Microsoft.CognitiveServices.Speech
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?"); } } } } }
Em
Program.cs
, defina as variáveiscluProjectName
ecluDeploymentName
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.Para alterar o idioma de reconhecimento de fala, substitua
en-US
por outroen-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 deFromDefaultMicrophoneInput
:using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
- Para arquivos de áudio compactados, como MP4, instale o GStreamer e use
PullAudioInputStream
ouPushAudioInputStream
. 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 | Pacote (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
- Uma assinatura do Azure. É possível 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.
- 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.
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. Este artigo mostra como usar variáveis de ambiente para armazenar suas credenciais. Em seguida, você poderá acessar as variáveis de ambiente do seu código para autenticar seu aplicativo. Para a produção, use um método mais seguro para armazenar e acessar suas credenciais.
Importante
Recomendamos a autenticação do Microsoft Entra ID com identidades gerenciadas para recursos do Azure a fim de evitar o armazenamento de credenciais com seus aplicativos executados na nuvem.
Se você usar uma chave de API, armazene-a com segurança em outro lugar, como no Azure Key Vault. Não inclua a chave da API diretamente no seu código e nunca a publique publicamente.
Para obter mais informações sobre segurança dos serviços de IA, confira Autenticar solicitações para os serviços de IA do Azure.
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
, substituayour-language-key
por uma das chaves do recurso. - Para definir a variável de ambiente
LANGUAGE_ENDPOINT
, substituayour-language-endpoint
por uma das regiões do recurso. - Para definir a variável de ambiente
SPEECH_KEY
, substituayour-speech-key
por uma das chaves do recurso. - Para definir a variável de ambiente
SPEECH_REGION
, substituayour-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.
Na seção Compreensão de perguntas e da linguagem coloquial do Language Studio, selecione Compreensão da linguagem coloquial.
Isso o levará à página Projetos de compreensão da linguagem coloquial. Ao lado do botão Criar projeto, selecione Importar.
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:
Selecione Testar modelo no menu do lado esquerdo.
Selecione Iniciar um trabalho de treinamento no menu superior.
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.
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.
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.
Selecione o botão Treinar.
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:
Selecione Implantar um modelo no menu à esquerda.
Selecione Adicionar implantação para iniciar o assistente Adicionar implantação.
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.
Selecione um modelo treinado na lista suspensa Modelo.
Selecione Implantar para iniciar a implantação.
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.
Crie um novo projeto de console C++ no Visual Studio Community 2022 chamado
SpeechRecognition
.Instale o SDK de Fala em seu novo projeto com o gerenciador de pacotes NuGet.
Install-Package Microsoft.CognitiveServices.Speech
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 }
Em
SpeechRecognition.cpp
, defina as variáveiscluProjectName
ecluDeploymentName
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.Para alterar o idioma de reconhecimento de fala, substitua
en-US
por outroen-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 deFromDefaultMicrophoneInput
:auto audioInput = AudioConfig::FromWavFileInput("YourAudioFile.wav");
- Para arquivos de áudio compactados, como MP4, instale o GStreamer e use
PullAudioInputStream
ouPushAudioInputStream
. 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 | Exemplos 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.