Zelf studie: een Tenant model maken (preview)Tutorial: Create a tenant model (preview)

Tenant model (Custom Speech met Office 365-gegevens) is een opt-in-service voor Office 365 Enter prise-klanten die automatisch een aangepast spraakherkennings model genereren op basis van de Office 365-gegevens van uw organisatie.Tenant Model (Custom Speech with Office 365 data) is an opt-in service for Office 365 enterprise customers that automatically generates a custom speech recognition model from your organization's Office 365 data. Het model is geoptimaliseerd voor technische termen, jargon en namen van personen, allemaal op een veilige en compatibele manier.The model is optimized for technical terms, jargon, and people's names, all in a secure and compliant way.

Belangrijk

Als uw organisatie zich registreert met behulp van de Tenant model-service, kan de spraak service toegang krijgen tot het taal model van uw organisatie.If your organization enrolls by using the Tenant Model service, Speech Service may access your organization’s language model. Het model wordt gegenereerd op basis van e-mail berichten en documenten van Office 365 open bare groep, die kunnen worden gezien door iedereen in uw organisatie.The model is generated from Office 365 public group emails and documents, which can be seen by anyone in your organization. De Office 365-beheerder van uw organisatie kan het gebruik van het organisatiebrede taal model in-of uitschakelen vanuit de Office 365-beheer Portal.Your organization's Office 365 admin can turn on or turn off the use of the organization-wide language model from the Office 365 admin portal.

In deze zelfstudie leert u het volgende:In this tutorial, you learn how to:

  • Registreren in het Tenant model met behulp van het Microsoft 365-beheer centrumEnroll in the Tenant Model by using the Microsoft 365 admin center
  • Een spraak abonnement sleutel ophalenGet a Speech subscription key
  • Een Tenant model makenCreate a tenant model
  • Een Tenant model implementerenDeploy a tenant model
  • Uw Tenant model gebruiken met de Speech SDKUse your tenant model with the Speech SDK

Registreren in de Tenant model serviceEnroll in the Tenant Model service

Voordat u uw Tenant model kunt implementeren, moet u worden inge schreven bij de service Tenant model.Before you can deploy your tenant model, you need to be enrolled in the Tenant Model service. De inschrijving is voltooid in het beheer centrum van Microsoft 365 en kan alleen worden uitgevoerd door uw Microsoft 365-beheerder.Enrollment is completed in the Microsoft 365 admin center and can be done only by your Microsoft 365 admin.

  1. Meld u aan bij het Microsoft 365-beheercentrum.Sign in to the Microsoft 365 admin center.

  2. Selecteer in het linkerdeel venster instellingen, selecteer instellingen in het geneste menu en selecteer vervolgens Azure speech Services in het hoofd venster.In the left pane, select Settings, then select Settings from the nested menu, then select Azure Speech Services from the main window.

    Het deel venster Services &-invoeg toepassingen

  3. Schakel het selectie vakje het taal model voor de hele organisatie toestaan in en selecteer vervolgens wijzigingen opslaan.Select the Allow the organization-wide language model check box, and then select Save changes.

    Het deel venster spraak services van Azure

Het Tenant model exemplaar uitschakelen:To turn off the tenant model instance:

  1. Herhaal de voor gaande stappen 1 en 2.Repeat the preceding steps 1 and 2.
  2. Schakel het selectie vakje het taal model voor de hele organisatie toestaan uit en selecteer vervolgens wijzigingen opslaan.Clear the Allow the organization-wide language model check box, and then select Save changes.

Een spraak abonnement sleutel ophalenGet a Speech subscription key

Als u uw Tenant model wilt gebruiken met de Speech SDK, hebt u een spraak bron en de bijbehorende abonnements sleutel nodig.To use your tenant model with the Speech SDK, you need a Speech resource and its associated subscription key.

  1. Meld u aan bij de Azure-portal.Sign in to the Azure portal.

  2. Selecteer Een resource maken.Select Create a resource.

  3. Typ in het zoekvak spraak.In the Search box, type Speech.

  4. Selecteer in de lijst met resultaten spraaken selecteer vervolgens maken.In the results list, select Speech, and then select Create.

  5. Volg de instructies op het scherm om de resource te maken.Follow the onscreen instructions to create your resource. Vereisten:Make sure that:

    • De locatie is ingesteld op Oost -of westus.Location is set to either eastus or westus.
    • Prijs categorie wordt ingesteld op s0.Pricing tier is set to S0.
  6. Selecteer Maken.Select Create.

    Na een paar minuten wordt uw resource gemaakt.After a few minutes, your resource is created. De abonnements sleutel is beschikbaar in het gedeelte overzicht van uw resource.The subscription key is available in the Overview section for your resource.

Een taal model makenCreate a language model

Nadat de beheerder Tenant model heeft ingeschakeld voor uw organisatie, kunt u een taal model maken dat is gebaseerd op uw Office 365-gegevens.After your admin has enabled Tenant Model for your organization, you can create a language model that's based on your Office 365 data.

  1. Meld u aan bij Speech Studio.Sign in to Speech Studio.

  2. Selecteer in de rechter bovenhoek de optie instellingen (tandwiel pictogram) en selecteer vervolgens Tenant model instellingen.At the top right, select Settings (gear icon), and then select Tenant Model settings.

    De koppeling Tenant model instellingen

    In speech Studio wordt een bericht weer gegeven waarin u kunt zien of u een Tenant model wilt maken.Speech Studio displays a message that lets you know whether you're qualified to create a tenant model.

    Notitie

    Office 365 Enter prise-klanten in Noord-Amerika komen in aanmerking voor het maken van een Tenant model (Engels).Office 365 enterprise customers in North America are eligible to create a tenant model (English). Als u een Klanten-lockbox, klant sleutel of Office 365 Government-klant bent, is deze functie niet beschikbaar.If you're a Customer Lockbox, Customer Key, or Office 365 Government customer, this feature isn't available. Ga als volgt te werk om te bepalen of u een klant van Klanten-lockbox of klant code bent?To determine whether you're a Customer Lockbox or Customer Key customer, see:

  3. Selecteer Aanmelden.Select Opt in.

    Wanneer uw Tenant model klaar is, ontvangt u een bevestigings e-mail bericht met verdere instructies.When your tenant model is ready, you'll receive a confirmation email message with further instructions.

Uw Tenant model implementerenDeploy your tenant model

Wanneer uw Tenant model exemplaar gereed is, implementeert u dit door het volgende te doen:When your tenant model instance is ready, deploy it by doing the following:

  1. Selecteer in uw bevestigings e-mail bericht de knop model weer geven .In your confirmation email message, select the View model button. Of Meld u aan bij Speech Studio.Or sign in to Speech Studio.

  2. Selecteer in de rechter bovenhoek de optie instellingen (tandwiel pictogram) en selecteer vervolgens Tenant model instellingen.At the top right, select Settings (gear icon), and then select Tenant Model settings.

    De koppeling Tenant model instellingen

  3. Selecteer Implementeren.Select Deploy.

    Wanneer het model is geïmplementeerd, wordt de status gewijzigd in geïmplementeerd.When your model has been deployed, the status changes to Deployed.

Uw Tenant model gebruiken met de Speech SDKUse your tenant model with the Speech SDK

Nu u het model hebt geïmplementeerd, kunt u het gebruiken met de spraak-SDK.Now that you've deployed your model, you can use it with the Speech SDK. In deze sectie gebruikt u voorbeeld code om de spraak service aan te roepen met behulp van Azure Active Directory-verificatie (Azure AD).In this section, you use sample code to call Speech Service by using Azure Active Directory (Azure AD) authentication.

Laten we eens kijken naar de code die u gaat gebruiken voor het aanroepen van de Speech SDK in C#.Let's look at the code you'll use to call the Speech SDK in C#. In dit voor beeld voert u spraak herkenning uit met behulp van uw Tenant model.In this example, you perform speech recognition by using your tenant model. In deze hand leiding wordt ervan uitgegaan dat uw platform al is ingesteld.This guide presumes that your platform is already set up. Als u hulp nodig hebt bij de installatie, raadpleegt u Quick Start: Speech herkennen, C# (.net core).If you need setup help, see Quickstart: Recognize speech, C# (.NET Core).

Kopieer deze code naar uw project:Copy this code into your project:

namespace PrincetonSROnly.FrontEnd.Samples
{
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Net.Http;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Threading.Tasks;
    using Microsoft.CognitiveServices.Speech;
    using Microsoft.CognitiveServices.Speech.Audio;
    using Microsoft.IdentityModel.Clients.ActiveDirectory;
    using Newtonsoft.Json.Linq;

    // ServiceApplicationId is a fixed value. No need to change it.

    public class TenantLMSample
    {
        private const string EndpointUriArgName = "EndpointUri";
        private const string SubscriptionKeyArgName = "SubscriptionKey";
        private const string UsernameArgName = "Username";
        private const string PasswordArgName = "Password";
        private const string ClientApplicationId = "f87bc118-1576-4097-93c9-dbf8f45ef0dd";
        private const string ServiceApplicationId = "18301695-f99d-4cae-9618-6901d4bdc7be";

        public static async Task ContinuousRecognitionWithTenantLMAsync(Uri endpointUri, string subscriptionKey, string audioDirPath, string username, string password)
        {
            var config = SpeechConfig.FromEndpoint(endpointUri, subscriptionKey);

            // Passing client specific information for obtaining LM
            if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))
            {
                config.AuthorizationToken = await AcquireAuthTokenWithInteractiveLoginAsync().ConfigureAwait(false);
            }
            else
            {
                config.AuthorizationToken = await AcquireAuthTokenWithUsernamePasswordAsync(username, password).ConfigureAwait(false);
            }

            var stopRecognition = new TaskCompletionSource<int>();

            // Creates a speech recognizer using file as audio input.
            // Replace with your own audio file name.
            using (var audioInput = AudioConfig.FromWavFileInput(audioDirPath))
            {
                using (var recognizer = new SpeechRecognizer(config, audioInput))
                {
                    // Subscribes to events
                    recognizer.Recognizing += (s, e) =>
                    {
                        Console.WriteLine($"RECOGNIZING: Text={e.Result.Text}");
                    };

                    recognizer.Recognized += (s, e) =>
                    {
                        if (e.Result.Reason == ResultReason.RecognizedSpeech)
                        {
                            Console.WriteLine($"RECOGNIZED: Text={e.Result.Text}");
                        }
                        else if (e.Result.Reason == ResultReason.NoMatch)
                        {
                            Console.WriteLine($"NOMATCH: Speech could not be recognized.");
                        }
                    };

                    recognizer.Canceled += (s, e) =>
                    {
                        Console.WriteLine($"CANCELED: Reason={e.Reason}");
                        if (e.Reason == CancellationReason.Error)
                        {
                            Exception exp = new Exception(string.Format("Error Code: {0}\nError Details{1}\nIs your subscription information updated?", e.ErrorCode, e.ErrorDetails));
                            throw exp;
                        }

                        stopRecognition.TrySetResult(0);
                    };

                    recognizer.SessionStarted += (s, e) =>
                    {
                        Console.WriteLine("\n    Session started event.");
                    };

                    recognizer.SessionStopped += (s, e) =>
                    {
                        Console.WriteLine("\n    Session stopped event.");
                        Console.WriteLine("\nStop recognition.");
                        stopRecognition.TrySetResult(0);
                    };

                    // Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
                    await recognizer.StartContinuousRecognitionAsync().ConfigureAwait(false);

                    // Waits for completion.
                    // Use Task.WaitAny to keep the task rooted.
                    Task.WaitAny(new[] { stopRecognition.Task });

                    // Stops recognition.
                    await recognizer.StopContinuousRecognitionAsync().ConfigureAwait(false);
                }
            }
        }

        public static void Main(string[] args)
        {
            var arguments = new Dictionary<string, string>();
            string inputArgNamePattern = "--";
            Regex regex = new Regex(inputArgNamePattern);
            if (args.Length > 0)
            {
                foreach (var arg in args)
                {
                    var userArgs = arg.Split("=");
                    arguments[regex.Replace(userArgs[0], string.Empty)] = userArgs[1];
                }
            }

            var endpointString = arguments.GetValueOrDefault(EndpointUriArgName, $"wss://westus.online.princeton.customspeech.ai/msgraphcustomspeech/conversation/v1");
            var endpointUri = new Uri(endpointString);

            if (!arguments.ContainsKey(SubscriptionKeyArgName))
            {
                Exception exp = new Exception("Subscription Key missing! Please pass in a Cognitive services subscription Key using --SubscriptionKey=\"your_subscription_key\"" +
                    "Find more information on creating a Cognitive services resource and accessing your Subscription key here: https://docs.microsoft.com/azure/cognitive-services/cognitive-services-apis-create-account?tabs=multiservice%2Cwindows");
                throw exp;
            }

            var subscriptionKey = arguments[SubscriptionKeyArgName];
            var username = arguments.GetValueOrDefault(UsernameArgName, null);
            var password = arguments.GetValueOrDefault(PasswordArgName, null);

            var audioDirPath = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "../../../AudioSamples/DictationBatman.wav");
            if (!File.Exists(audioDirPath))
            {
                Exception exp = new Exception(string.Format("Audio File does not exist at path: {0}", audioDirPath));
                throw exp;
            }

            ContinuousRecognitionWithTenantLMAsync(endpointUri, subscriptionKey, audioDirPath, username, password).GetAwaiter().GetResult();
        }

        private static async Task<string> AcquireAuthTokenWithUsernamePasswordAsync(string username, string password)
        {
            var tokenEndpoint = "https://login.microsoftonline.com/common/oauth2/token";
            var postBody = $"resource={ServiceApplicationId}&client_id={ClientApplicationId}&grant_type=password&username={username}&password={password}";
            var stringContent = new StringContent(postBody, Encoding.UTF8, "application/x-www-form-urlencoded");
            using (HttpClient httpClient = new HttpClient())
            {
                var response = await httpClient.PostAsync(tokenEndpoint, stringContent).ConfigureAwait(false);

                if (response.IsSuccessStatusCode)
                {
                    var result = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                    JObject jobject = JObject.Parse(result);
                    return jobject["access_token"].Value<string>();
                }
                else
                {
                    throw new Exception($"Requesting token from {tokenEndpoint} failed with status code {response.StatusCode}: {await response.Content.ReadAsStringAsync().ConfigureAwait(false)}");
                }
            }
        }

        private static async Task<string> AcquireAuthTokenWithInteractiveLoginAsync()
        {
            var authContext = new AuthenticationContext("https://login.windows.net/microsoft.onmicrosoft.com");
            var deviceCodeResult = await authContext.AcquireDeviceCodeAsync(ServiceApplicationId, ClientApplicationId).ConfigureAwait(false);

            Console.WriteLine(deviceCodeResult.Message);

            var authResult = await authContext.AcquireTokenByDeviceCodeAsync(deviceCodeResult).ConfigureAwait(false);

            return authResult.AccessToken;
        }
    }
}

Vervolgens moet u het project opnieuw opbouwen en uitvoeren vanaf de opdracht regel.Next, you need to rebuild and run the project from the command line. Voordat u de opdracht uitvoert, moet u een aantal para meters bijwerken door het volgende te doen:Before you run the command, update a few parameters by doing the following:

  1. Vervang <Username> en <Password> door de waarden voor een geldige Tenant gebruiker.Replace <Username> and <Password> with the values for a valid tenant user.

  2. Vervang door <Subscription-Key> de abonnements sleutel voor uw spraak bron.Replace <Subscription-Key> with the subscription key for your Speech resource. Deze waarde is beschikbaar in het gedeelte overzicht voor uw spraak resource in de Azure Portal.This value is available in the Overview section for your Speech resource in the Azure portal.

  3. Vervang door <Endpoint-Uri> het volgende eind punt.Replace <Endpoint-Uri> with the following endpoint. Zorg ervoor dat u vervangt door {your region} de regio waarin uw spraak bron is gemaakt.Make sure that you replace {your region} with the region where your Speech resource was created. Deze regio's worden ondersteund: westus , westus2 en eastus .These regions are supported: westus, westus2, and eastus. Uw regio gegevens zijn beschikbaar in de sectie overzicht van uw spraak resource in de Azure Portal.Your region information is available in the Overview section of your Speech resource in the Azure portal.

    "wss://{your region}.online.princeton.customspeech.ai/msgraphcustomspeech/conversation/v1".
    
  4. Voer de volgende opdracht uit:Run the following command:

    dotnet TenantLMSample.dll --Username=<Username> --Password=<Password> --SubscriptionKey=<Subscription-Key> --EndpointUri=<Endpoint-Uri>
    

In deze zelf studie hebt u geleerd hoe u Office 365-gegevens kunt gebruiken om een aangepast spraakherkennings model te maken, dit te implementeren en te gebruiken met de spraak-SDK.In this tutorial, you've learned how to use Office 365 data to create a custom speech recognition model, deploy it, and use it with the Speech SDK.

Volgende stappenNext steps