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_KEYe 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, sostituire your-language-key con una delle chiavi per la risorsa.
  • Per impostare la LANGUAGE_ENDPOINT variabile di ambiente, sostituire your-language-endpoint con una delle aree per la risorsa.
  • Per impostare la SPEECH_KEY variabile di ambiente, sostituire your-speech-key con una delle chiavi per la risorsa.
  • Per impostare la SPEECH_REGION variabile di ambiente, sostituire your-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 setxambiente 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.

  1. Nella sezione Informazioni sulle domande e sul linguaggio di conversazione di Language Studio selezionare Comprensione del linguaggio conversazionale.

    Screenshot che mostra la posizione di Custom Language Understanding nella pagina di destinazione di Language Studio.

  2. Verrà visualizzata la pagina Progetti di comprensione del linguaggio conversazionale . Accanto al pulsante Crea nuovo progetto selezionare Importa.

    Screenshot che mostra la pagina del progetto di conversazione in Language Studio.

  3. 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:

  1. Selezionare Train model (Esegui training modello ) dal menu a sinistra.

  2. Selezionare Avvia un processo di training dal menu in alto.

  3. 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.

  4. 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.

  5. 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.

  6. Selezionare il pulsante Train (Esegui training ).

    Screenshot che mostra la pagina di training in Language Studio.

  7. 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:

  1. Selezionare Deploying a model (Distribuzione di un modello ) dal menu a sinistra.

  2. Selezionare Aggiungi distribuzione per avviare l'Aggiunta guidata distribuzione.

    Screenshot che mostra il pulsante di distribuzione del modello in Language Studio.

  3. 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.

    Screenshot che mostra la schermata per l'aggiunta di una nuova distribuzione in Language Studio.

  4. Selezionare un modello sottoposto a training nell'elenco a discesa Modello .

  5. Selezionare Distribuisci per avviare il processo di distribuzione.

  6. 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.

  1. 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
    
  2. Installare Speech SDK nel nuovo progetto con l'interfaccia della riga di comando di .NET.

    dotnet add package Microsoft.CognitiveServices.Speech
    
  3. 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?");
                    }
                }
            }
        }
    }
    
  4. In Program.cs impostare le cluProjectName variabili e cluDeploymentName 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.

  5. 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_KEYvariabili di ambiente , LANGUAGE_ENDPOINT, SPEECH_KEYe 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 è topIntentHomeAutomation.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 di FromDefaultMicrophoneInput:
    using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
    
  • Per i file audio compressi, ad esempio MP4, installare GStreamer e usare PullAudioInputStream o PushAudioInputStream. 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_KEYe 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, sostituire your-language-key con una delle chiavi per la risorsa.
  • Per impostare la LANGUAGE_ENDPOINT variabile di ambiente, sostituire your-language-endpoint con una delle aree per la risorsa.
  • Per impostare la SPEECH_KEY variabile di ambiente, sostituire your-speech-key con una delle chiavi per la risorsa.
  • Per impostare la SPEECH_REGION variabile di ambiente, sostituire your-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 setxambiente 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.

  1. Nella sezione Informazioni sulle domande e sul linguaggio di conversazione di Language Studio selezionare Informazioni sul linguaggio di conversazione.

    Screenshot che mostra il percorso di Custom Language Understanding nella pagina di destinazione di Language Studio.

  2. Verrà visualizzata la pagina Progetti di comprensione del linguaggio conversazionale . Accanto al pulsante Crea nuovo progetto selezionare Importa.

    Screenshot che mostra la pagina del progetto di conversazione in Language Studio.

  3. 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:

  1. Selezionare Eseguire il training del modello dal menu a sinistra.

  2. Selezionare Avvia un processo di training dal menu superiore.

  3. 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.

  4. 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.

  5. 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.

  6. Selezionare il pulsante Esegui training .

    Screenshot che mostra la pagina di training in Language Studio.

  7. 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:

  1. Selezionare Distribuisci un modello dal menu a sinistra.

  2. Selezionare Aggiungi distribuzione per avviare la procedura guidata Aggiungi distribuzione .

    Screenshot che mostra il pulsante di distribuzione del modello in Language Studio.

  3. 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.

    Screenshot che mostra la schermata per l'aggiunta di una nuova distribuzione in Language Studio.

  4. Selezionare un modello sottoposto a training nell'elenco a discesa Modello .

  5. Selezionare Distribuisci per avviare il processo di distribuzione.

  6. 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.

  1. Creare un nuovo progetto console C++ in Visual Studio Community 2022 denominato SpeechRecognition.

  2. Installare Speech SDK nel nuovo progetto con Gestione pacchetti NuGet.

    Install-Package Microsoft.CognitiveServices.Speech
    
  3. 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
    }
    
  4. In SpeechRecognition.cpp impostare le cluProjectName variabili e cluDeploymentName 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.

  5. 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_KEYvariabili di ambiente , LANGUAGE_ENDPOINT, SPEECH_KEYe 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 è topIntentHomeAutomation.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 di FromDefaultMicrophoneInput:
    auto audioInput = AudioConfig::FromWavFileInput("YourAudioFile.wav");
    
  • Per i file audio compressi, ad esempio MP4, installare GStreamer e usare PullAudioInputStream o PushAudioInputStream. 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.

Passaggi successivi