Guida introduttiva: Riconoscere le finalità con Language Understanding conversazionali
Documentazione | di riferimentoPacchetto (NuGet) | Esempi aggiuntivi in GitHub
In questa guida introduttiva si useranno i servizi Voce e Lingua per riconoscere le finalità dai dati audio acquisiti da un microfono. In particolare, si userà il servizio Voce per riconoscere la voce e un modello CLU (Conversational Language Understanding) per identificare le finalità.
Importante
Conversational Language Understanding (CLU) è disponibile per C# e C++ con Speech SDK versione 1.25 o successiva.
Prerequisiti
- Sottoscrizione di Azure: creare un account gratuito
- Creare una risorsa Language nel portale di Azure.
- Ottenere la chiave della risorsa lingua e l'endpoint. Dopo aver distribuito la risorsa Lingua, selezionare Vai alla risorsa per visualizzare e gestire le chiavi. Per altre informazioni sulle risorse dei servizi di intelligenza artificiale di Azure, vedere Ottenere le chiavi per la risorsa.
- Creare una risorsa Voce nel portale di Azure.
- Ottenere la chiave e l'area della risorsa Voce. Dopo aver distribuito la risorsa Voce, selezionare Vai alla risorsa per visualizzare e gestire le chiavi. Per altre informazioni sulle risorse dei servizi di intelligenza artificiale di Azure, vedere Ottenere le chiavi per la risorsa.
Configurare l'ambiente
Speech SDK è disponibile come pacchetto NuGet e implementa .NET Standard 2.0. Si installa Speech SDK più avanti in questa guida, ma prima di tutto controllare la guida all'installazione dell'SDK per altri requisiti.
Impostare le variabili di ambiente
Questo esempio richiede variabili di ambiente denominate LANGUAGE_KEY
, LANGUAGE_ENDPOINT
, SPEECH_KEY
e SPEECH_REGION
.
L'applicazione deve essere autenticata per accedere alle risorse dei servizi di intelligenza artificiale di Azure. Per l'ambiente di produzione, usare un modo sicuro per archiviare e accedere alle credenziali. Ad esempio, dopo aver ottenere una chiave per la , scriverla in una nuova variabile di ambiente nel computer locale che esegue l'applicazione.
Suggerimento
Non includere la chiave direttamente nel codice e non pubblicarla mai pubblicamente. Vedere l'articolo sulla sicurezza dei servizi di intelligenza artificiale di Azure per altre opzioni di autenticazione, ad esempio Azure Key Vault.
Per impostare le variabili di ambiente, aprire una finestra della console e seguire le istruzioni per il sistema operativo e l'ambiente di sviluppo.
- Per impostare la
LANGUAGE_KEY
variabile di ambiente, sostituireyour-language-key
con una delle chiavi per la risorsa. - Per impostare la
LANGUAGE_ENDPOINT
variabile di ambiente, sostituireyour-language-endpoint
con una delle aree per la risorsa. - Per impostare la
SPEECH_KEY
variabile di ambiente, sostituireyour-speech-key
con una delle chiavi per la risorsa. - Per impostare la
SPEECH_REGION
variabile di ambiente, sostituireyour-speech-region
con una delle aree per la risorsa.
setx LANGUAGE_KEY your-language-key
setx LANGUAGE_ENDPOINT your-language-endpoint
setx SPEECH_KEY your-speech-key
setx SPEECH_REGION your-speech-region
Nota
Se è sufficiente accedere alla variabile di ambiente nella console in esecuzione corrente, è possibile impostare la variabile di setx
ambiente con set
anziché .
Dopo aver aggiunto le variabili di ambiente, potrebbe essere necessario riavviare tutti i programmi in esecuzione che dovranno leggere la variabile di ambiente, inclusa la finestra della console. Se ad esempio si usa Visual Studio come editor, riavviare Visual Studio prima di eseguire l'esempio.
Creare un progetto di Language Understanding conversazioni
Dopo aver creato una risorsa Language, creare un progetto di comprensione del linguaggio conversazionale in Language Studio. Un progetto è un'area di lavoro per la creazione di modelli di Machine Learning personalizzati in base ai dati. L'accesso al progetto può essere eseguito solo dall'utente e da altri utenti che hanno accesso alla risorsa Language in uso.
Passare a Language Studio e accedere con l'account Azure.
Creare un progetto di comprensione del linguaggio di conversazione
Per questa guida introduttiva, è possibile scaricare questo progetto di home automation di esempio e importarlo. Questo progetto può prevedere i comandi previsti dall'input dell'utente, ad esempio accendere e spegnere le luci.
Nella sezione Informazioni sulle domande e sul linguaggio di conversazione di Language Studio selezionare Comprensione del linguaggio conversazionale.
Verrà visualizzata la pagina Progetti di comprensione del linguaggio conversazionale . Accanto al pulsante Crea nuovo progetto selezionare Importa.
Nella finestra visualizzata caricare il file JSON da importare. Assicurarsi che il file segua il formato JSON supportato.
Al termine del caricamento, verrà visualizzata la pagina Definizione schema . Per questa guida introduttiva, lo schema è già compilato e le espressioni sono già etichettate con finalità ed entità.
Eseguire training del modello
In genere, dopo aver creato un progetto, è necessario compilare uno schema e le espressioni di etichetta. Per questa guida introduttiva è già stato importato un progetto pronto con schema compilato ed espressioni etichettate.
Per eseguire il training di un modello, è necessario avviare un processo di training. L'output di un processo di training riuscito è il modello sottoposto a training.
Per avviare il training del modello dall'interno di Language Studio:
Selezionare Train model (Esegui training modello ) dal menu a sinistra.
Selezionare Avvia un processo di training dal menu in alto.
Selezionare Esegui training di un nuovo modello e immettere un nuovo nome di modello nella casella di testo. In caso contrario, per sostituire un modello esistente con un modello sottoposto a training sui nuovi dati, selezionare Sovrascrivi un modello esistente e quindi selezionare un modello esistente. La sovrascrittura di un modello sottoposto a training è irreversibile, ma non influisce sui modelli distribuiti fino a quando non si distribuisce il nuovo modello.
Selezionare la modalità di training. È possibile scegliere Formazione standard per una formazione più veloce, ma è disponibile solo per l'inglese. In alternativa, è possibile scegliere Formazione avanzata supportata per altri linguaggi e progetti multilingue, ma comporta tempi di formazione più lunghi. Altre informazioni sulle modalità di training.
Selezionare un metodo di suddivisione dei dati . È possibile scegliere Suddivisione automatica del set di test dai dati di training in cui il sistema dividerà le espressioni tra i set di training e di test, in base alle percentuali specificate. In alternativa, è possibile usare una suddivisione manuale dei dati di training e test, questa opzione è abilitata solo se sono state aggiunte espressioni al set di test quando sono state etichettate le espressioni.
Selezionare il pulsante Train (Esegui training ).
Selezionare l'ID processo di training nell'elenco. Verrà visualizzato un pannello in cui è possibile controllare lo stato del training, lo stato del processo e altri dettagli per questo processo.
Nota
- Solo i processi di training completati correttamente genereranno modelli.
- Il training può richiedere tempo tra un paio di minuti e un paio di ore in base al numero di espressioni.
- È possibile eseguire un solo processo di training alla volta. Non è possibile avviare altri processi di training all'interno dello stesso progetto fino al completamento del processo in esecuzione.
- L'apprendimento automatico usato per eseguire il training dei modelli viene aggiornato regolarmente. Per eseguire il training in una versione di configurazione precedente, selezionare Seleziona qui per passare dalla pagina Avvia un processo di training e scegliere una versione precedente.
Distribuire il modello
In genere, dopo il training di un modello, esaminare i dettagli di valutazione. In questa guida introduttiva si distribuirà semplicemente il modello e lo si renderà disponibile per provare in Language Studio oppure è possibile chiamare l'API di stima.
Per distribuire il modello da Language Studio:
Selezionare Deploying a model (Distribuzione di un modello ) dal menu a sinistra.
Selezionare Aggiungi distribuzione per avviare l'Aggiunta guidata distribuzione.
Selezionare Crea un nuovo nome di distribuzione per creare una nuova distribuzione e assegnare un modello sottoposto a training nell'elenco a discesa seguente. In caso contrario, è possibile selezionare Sovrascrivi un nome di distribuzione esistente per sostituire in modo efficace il modello usato da una distribuzione esistente.
Nota
La sovrascrittura di una distribuzione esistente non richiede modifiche alla chiamata all'API Stima , ma i risultati ottenuti saranno basati sul modello appena assegnato.
Selezionare un modello sottoposto a training nell'elenco a discesa Modello .
Selezionare Distribuisci per avviare il processo di distribuzione.
Al termine della distribuzione, accanto verrà visualizzata una data di scadenza. La scadenza della distribuzione è quando il modello distribuito non sarà disponibile per la stima, che in genere si verifica dodici mesi dopo la scadenza di una configurazione di training.
Il nome del progetto e il nome della distribuzione verranno usati nella sezione successiva.
Riconoscere le finalità da un microfono
Seguire questa procedura per creare una nuova applicazione console e installare Speech SDK.
Aprire un prompt dei comandi in cui si vuole il nuovo progetto e creare un'applicazione console con l'interfaccia della riga di comando di .NET. Il
Program.cs
file deve essere creato nella directory del progetto.dotnet new console
Installare Speech SDK nel nuovo progetto con l'interfaccia della riga di comando di .NET.
dotnet add package Microsoft.CognitiveServices.Speech
Sostituire il contenuto di
Program.cs
con il codice seguente.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?"); } } } } }
In
Program.cs
impostare lecluProjectName
variabili ecluDeploymentName
sui nomi del progetto e della distribuzione. Per informazioni su come creare un progetto e una distribuzione CLU, vedere Creare un progetto di Language Understanding conversazionale.Per modificare la lingua di riconoscimento vocale, sostituire
en-US
con un'altra lingua supportata. Ad esempio,es-ES
per spagnolo (Spagna). La lingua predefinita èen-US
se non si specifica una lingua. Per informazioni dettagliate su come identificare una di più lingue che potrebbero essere pronunciate, vedere Identificazione della lingua.
Eseguire la nuova applicazione console per avviare il riconoscimento vocale da un microfono:
dotnet run
Importante
Assicurarsi di impostare le LANGUAGE_KEY
variabili di ambiente , LANGUAGE_ENDPOINT
, SPEECH_KEY
e SPEECH_REGION
come descritto in precedenza. Se non si impostano queste variabili, l'esempio avrà esito negativo con un messaggio di errore.
Quando richiesto, parlare con il microfono. Ciò che si parla deve essere restituito come testo:
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"}]}]}}}.
Nota
Il supporto per la risposta JSON per CLU tramite la proprietà LanguageUnderstandingServiceResponse_JsonResult è stato aggiunto in Speech SDK versione 1.26.
Le finalità vengono restituite nell'ordine di probabilità con maggiore probabilità. Ecco una versione formattata dell'output JSON in cui è topIntent
HomeAutomation.TurnOn
con un punteggio di attendibilità pari a 0,97712576 (97,71%). La seconda finalità più probabile potrebbe essere HomeAutomation.TurnOff
con un punteggio di attendibilità pari a 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"
}
]
}
]
}
}
}
Commenti
Dopo aver completato la guida introduttiva, ecco alcune considerazioni aggiuntive:
- In questo esempio viene usata l'operazione
RecognizeOnceAsync
per trascrivere espressioni fino a 30 secondi o fino a quando non viene rilevato il silenzio. Per informazioni sul riconoscimento continuo per un audio più lungo, incluse le conversazioni multilingue, vedere Come riconoscere la voce. - Per riconoscere la voce da un file audio, usare
FromWavFileInput
invece diFromDefaultMicrophoneInput
:using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
- Per i file audio compressi, ad esempio MP4, installare GStreamer e usare
PullAudioInputStream
oPushAudioInputStream
. Per altre informazioni, vedere Come usare l'audio di input compresso.
Pulire le risorse
È possibile usare il portale di Azure o l'interfaccia della riga di comando di Azure per rimuovere le risorse lingua e voce create.
Documentazione | di riferimentoPacchetto (NuGet) | Esempi aggiuntivi in GitHub
In questa guida introduttiva si useranno i servizi Voce e Lingua per riconoscere le finalità dai dati audio acquisiti da un microfono. In particolare, si userà il servizio Voce per riconoscere la voce e un modello CLU (Conversational Language Understanding) per identificare le finalità.
Importante
Conversational Language Understanding (CLU) è disponibile per C# e C++ con Speech SDK versione 1.25 o successiva.
Prerequisiti
- Sottoscrizione di Azure: creare un account gratuito
- Creare una risorsa Language nel portale di Azure.
- Ottenere la chiave della risorsa lingua e l'endpoint. Dopo aver distribuito la risorsa Lingua, selezionare Vai alla risorsa per visualizzare e gestire le chiavi. Per altre informazioni sulle risorse dei servizi di intelligenza artificiale di Azure, vedere Ottenere le chiavi per la risorsa.
- Creare una risorsa Voce nel portale di Azure.
- Ottenere la chiave e l'area della risorsa Voce. Dopo aver distribuito la risorsa Voce, selezionare Vai alla risorsa per visualizzare e gestire le chiavi. Per altre informazioni sulle risorse dei servizi di intelligenza artificiale di Azure, vedere Ottenere le chiavi per la risorsa.
Configurare l'ambiente
Speech SDK è disponibile come pacchetto NuGet e implementa .NET Standard 2.0. Si installa Speech SDK più avanti in questa guida, ma prima di tutto controllare la guida all'installazione dell'SDK per altri requisiti.
Impostare le variabili di ambiente
Questo esempio richiede variabili di ambiente denominate LANGUAGE_KEY
, LANGUAGE_ENDPOINT
, SPEECH_KEY
e SPEECH_REGION
.
L'applicazione deve essere autenticata per accedere alle risorse dei servizi di intelligenza artificiale di Azure. Per l'ambiente di produzione, usare un modo sicuro per archiviare e accedere alle credenziali. Ad esempio, dopo aver ottenere una chiave per la , scriverla in una nuova variabile di ambiente nel computer locale che esegue l'applicazione.
Suggerimento
Non includere la chiave direttamente nel codice e non pubblicarla mai pubblicamente. Vedere l'articolo sulla sicurezza dei servizi di intelligenza artificiale di Azure per altre opzioni di autenticazione, ad esempio Azure Key Vault.
Per impostare le variabili di ambiente, aprire una finestra della console e seguire le istruzioni per il sistema operativo e l'ambiente di sviluppo.
- Per impostare la
LANGUAGE_KEY
variabile di ambiente, sostituireyour-language-key
con una delle chiavi per la risorsa. - Per impostare la
LANGUAGE_ENDPOINT
variabile di ambiente, sostituireyour-language-endpoint
con una delle aree per la risorsa. - Per impostare la
SPEECH_KEY
variabile di ambiente, sostituireyour-speech-key
con una delle chiavi per la risorsa. - Per impostare la
SPEECH_REGION
variabile di ambiente, sostituireyour-speech-region
con una delle aree per la risorsa.
setx LANGUAGE_KEY your-language-key
setx LANGUAGE_ENDPOINT your-language-endpoint
setx SPEECH_KEY your-speech-key
setx SPEECH_REGION your-speech-region
Nota
Se è sufficiente accedere alla variabile di ambiente nella console in esecuzione corrente, è possibile impostare la variabile di setx
ambiente con set
anziché .
Dopo aver aggiunto le variabili di ambiente, potrebbe essere necessario riavviare tutti i programmi in esecuzione che dovranno leggere la variabile di ambiente, inclusa la finestra della console. Se ad esempio si usa Visual Studio come editor, riavviare Visual Studio prima di eseguire l'esempio.
Creare un progetto di Language Understanding conversazioni
Dopo aver creato una risorsa lingua, creare un progetto di comprensione del linguaggio di conversazione in Language Studio. Un progetto è un'area di lavoro per la creazione di modelli di Machine Learning personalizzati in base ai dati. Il progetto può essere accessibile solo dall'utente e da altri utenti che hanno accesso alla risorsa lingua usata.
Passare a Language Studio e accedere con l'account Azure.
Creare un progetto di comprensione del linguaggio di conversazione
Per questa guida introduttiva, è possibile scaricare questo progetto di automazione domestica di esempio e importarlo. Questo progetto può prevedere i comandi previsti dall'input dell'utente, ad esempio attivare e disattivare le luci.
Nella sezione Informazioni sulle domande e sul linguaggio di conversazione di Language Studio selezionare Informazioni sul linguaggio di conversazione.
Verrà visualizzata la pagina Progetti di comprensione del linguaggio conversazionale . Accanto al pulsante Crea nuovo progetto selezionare Importa.
Nella finestra visualizzata caricare il file JSON da importare. Assicurarsi che il file segue il formato JSON supportato.
Al termine del caricamento, verrà visualizzata la pagina definizione dello schema . Per questa guida introduttiva, lo schema è già compilato e le espressioni sono già etichettate con finalità ed entità.
Eseguire training del modello
In genere, dopo aver creato un progetto, è necessario creare uno schema e espressioni di etichetta. Per questa guida introduttiva, è già stato importato un progetto pronto con schemi compilati ed espressioni etichettate.
Per eseguire il training di un modello, è necessario avviare un processo di training. L'output di un processo di training riuscito è il modello sottoposto a training.
Per avviare il training del modello da Language Studio:
Selezionare Eseguire il training del modello dal menu a sinistra.
Selezionare Avvia un processo di training dal menu superiore.
Selezionare Eseguire il training di un nuovo modello e immettere un nuovo nome del modello nella casella di testo. In caso contrario, per sostituire un modello esistente con un modello sottoposto a training sui nuovi dati, selezionare Sovrascrivere un modello esistente e quindi selezionare un modello esistente. Sovrascrivere un modello sottoposto a training è irreversibile, ma non influisce sui modelli distribuiti finché non si distribuisce il nuovo modello.
Selezionare la modalità di training. È possibile scegliere Formazione standard per un training più veloce, ma è disponibile solo per l'inglese. Oppure è possibile scegliere Formazione avanzata supportata per altre lingue e progetti multilingue, ma comporta tempi di formazione più lunghi. Altre informazioni sulle modalità di training.
Selezionare un metodo di divisione dei dati . È possibile scegliere Suddivisione automatica del set di test dai dati di training in cui il sistema suddividerà le espressioni tra i set di training e test, in base alle percentuali specificate. In alternativa, è possibile usare una suddivisione manuale dei dati di training e test, questa opzione è abilitata solo se sono state aggiunte espressioni al set di test quando si etichettano le espressioni.
Selezionare il pulsante Esegui training .
Selezionare l'ID del processo di training dall'elenco. Verrà visualizzato un pannello in cui è possibile controllare lo stato del training, lo stato del processo e altri dettagli per questo processo.
Nota
- Solo i processi di training completati genereranno modelli.
- Il training può richiedere tempo tra un paio di minuti e un paio di ore in base al conteggio delle espressioni.
- È possibile eseguire un solo processo di training alla volta. Non è possibile avviare altri processi di training nello stesso progetto fino al completamento del processo in esecuzione.
- Machine Learning usato per eseguire il training dei modelli viene aggiornato regolarmente. Per eseguire il training in una versione di configurazione precedente, selezionare Seleziona qui per modificare dalla pagina Avvia un processo di training e scegliere una versione precedente.
Distribuire il modello
In genere dopo il training di un modello si esaminerebbero i dettagli di valutazione. In questa guida introduttiva si distribuisce semplicemente il modello e lo si rende disponibile per provare in Language Studio oppure è possibile chiamare l'API di stima.
Per distribuire il modello da Language Studio:
Selezionare Distribuisci un modello dal menu a sinistra.
Selezionare Aggiungi distribuzione per avviare la procedura guidata Aggiungi distribuzione .
Selezionare Crea un nuovo nome di distribuzione per creare una nuova distribuzione e assegnare un modello sottoposto a training dall'elenco a discesa seguente. In caso contrario, selezionare Sovrascrivere un nome di distribuzione esistente per sostituire in modo efficace il modello usato da una distribuzione esistente.
Nota
La sovrascrittura di una distribuzione esistente non richiede modifiche alla chiamata API di stima , ma i risultati ottenuti saranno basati sul modello appena assegnato.
Selezionare un modello sottoposto a training nell'elenco a discesa Modello .
Selezionare Distribuisci per avviare il processo di distribuzione.
Al termine della distribuzione, verrà visualizzata una data di scadenza accanto. La scadenza della distribuzione è quando il modello distribuito non sarà disponibile per la stima, che in genere si verifica dodici mesi dopo la scadenza di una configurazione di training.
Si userà il nome del progetto e il nome della distribuzione nella sezione successiva.
Riconoscere le finalità da un microfono
Seguire questa procedura per creare una nuova applicazione console e installare Speech SDK.
Creare un nuovo progetto console C++ in Visual Studio Community 2022 denominato
SpeechRecognition
.Installare Speech SDK nel nuovo progetto con Gestione pacchetti NuGet.
Install-Package Microsoft.CognitiveServices.Speech
Sostituire il contenuto di
SpeechRecognition.cpp
con il codice seguente:#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 }
In
SpeechRecognition.cpp
impostare lecluProjectName
variabili ecluDeploymentName
sui nomi del progetto e della distribuzione. Per informazioni su come creare un progetto e una distribuzione CLU, vedere Creare un progetto di conversazione Language Understanding.Per modificare la lingua di riconoscimento vocale, sostituire
en-US
con un'altra lingua supportata. Ad esempio,es-ES
per spagnolo (Spagna). La lingua predefinita èen-US
se non si specifica una lingua. Per informazioni dettagliate su come identificare una delle più lingue che potrebbero essere parlate, vedere Identificazione della lingua.
Compilare ed eseguire la nuova applicazione console per avviare il riconoscimento vocale da un microfono.
Importante
Assicurarsi di impostare le LANGUAGE_KEY
variabili di ambiente , LANGUAGE_ENDPOINT
, SPEECH_KEY
e SPEECH_REGION
, come descritto in precedenza. Se non si impostano queste variabili, l'esempio avrà esito negativo con un messaggio di errore.
Parla nel microfono quando richiesto. Ciò che si parla deve essere restituito come testo:
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"}]}]}}}.
Nota
Il supporto per la risposta JSON per CLU tramite la proprietà LanguageUnderstandingServiceResponse_JsonResult è stata aggiunta nella versione di Speech SDK 1.26.
Le finalità vengono restituite nell'ordine di probabilità più probabile. Ecco una versione formattata dell'output JSON in cui è topIntent
HomeAutomation.TurnOn
con un punteggio di attendibilità pari a 0,97712576 (97,71%). La seconda finalità più probabile potrebbe essere HomeAutomation.TurnOff
con un punteggio di attendibilità pari a 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"
}
]
}
]
}
}
}
Commenti
Dopo aver completato l'avvio rapido, ecco alcune considerazioni aggiuntive:
- In questo esempio viene usata l'operazione
RecognizeOnceAsync
per trascrivere espressioni di fino a 30 secondi o fino a quando non viene rilevato il silenzio. Per informazioni sul riconoscimento continuo per un audio più lungo, incluse conversazioni multi linguali, vedere Come riconoscere la voce. - Per riconoscere la voce da un file audio, usare
FromWavFileInput
invece diFromDefaultMicrophoneInput
:auto audioInput = AudioConfig::FromWavFileInput("YourAudioFile.wav");
- Per i file audio compressi, ad esempio MP4, installare GStreamer e usare
PullAudioInputStream
oPushAudioInputStream
. Per altre informazioni, vedere Come usare l'audio di input compresso.
Pulire le risorse
È possibile usare la portale di Azure o l'interfaccia della riga di comando di Azure per rimuovere le risorse lingua e voce create.
Documentazione di | riferimentoEsempi aggiuntivi in GitHub
Speech SDK per Java non supporta il riconoscimento delle finalità con la comprensione del linguaggio di conversazione (CLU). Selezionare un altro linguaggio di programmazione o i riferimenti e gli esempi Java collegati all'inizio di questo articolo.