Tutoriel : Créer un modèle de locataire (préversion)Tutorial: Create a tenant model (preview)

Tenant Model (Custom Speech avec données Microsoft 365) est un service d’activation pour les clients d’entreprise Microsoft 365 qui génère automatiquement un modèle de reconnaissance vocale personnalisé à partir des données Microsoft 365 de votre organisation.Tenant Model (Custom Speech with Microsoft 365 data) is an opt-in service for Microsoft 365 enterprise customers that automatically generates a custom speech recognition model from your organization's Microsoft 365 data. Le modèle est optimisé pour les termes techniques, le jargon et les noms de personnes, le tout d’une manière sécurisée et conforme.The model is optimized for technical terms, jargon, and people's names, all in a secure and compliant way.

Important

Si votre organisation s’inscrit via le service Tenant Model, il se peut que le service Speech accède au modèle de langage de votre organisation.If your organization enrolls by using the Tenant Model service, Speech Service may access your organization’s language model. Un modèle est généré à partir d’e-mails et de documents de groupe public Microsoft 365 qui peuvent être consultés par quiconque au sein de votre organisation.The model is generated from Microsoft 365 public group emails and documents, which can be seen by anyone in your organization. L’administrateur de votre organisation peut activer ou désactiver l’utilisation du modèle de langage à l’échelle de l’organisation à partir du portail d’administration.Your organization's admin can turn on or turn off the use of the organization-wide language model from the admin portal.

Dans ce tutoriel, vous allez apprendre à :In this tutorial, you learn how to:

  • S’inscrire à Tenant Model à partir du centre d’administration Microsoft 365Enroll in the Tenant Model by using the Microsoft 365 admin center
  • Obtenir une clé d’abonnement SpeechGet a Speech subscription key
  • Créer un modèle de locataireCreate a tenant model
  • Déployer un modèle de locataireDeploy a tenant model
  • Utiliser votre modèle de locataire avec le kit SDK SpeechUse your tenant model with the Speech SDK

S’inscrire au service Tenant ModelEnroll in the Tenant Model service

Avant de pouvoir déployer votre modèle de locataire, vous devez vous être inscrit au service Tenant Model.Before you can deploy your tenant model, you need to be enrolled in the Tenant Model service. L’inscription s’effectue dans le centre d’administration Microsoft 365 et ne peut être réalisée que par votre administrateur.Enrollment is completed in the Microsoft 365 admin center and can be done only by your admin.

  1. Connectez-vous au centre d’administration Microsoft 365.Sign in to the Microsoft 365 admin center.

  2. Dans le volet gauche, sélectionnez Paramètres, puis sélectionnez Paramètres dans le menu imbriqué et Azure Speech Services dans la fenêtre principale.In the left pane, select Settings, then select Settings from the nested menu, then select Azure Speech Services from the main window.

    Volet « Services et compléments »

  3. Cochez la case Autoriser le modèle de langage à l’échelle de l’organisation, puis sélectionnez Enregistrer les modifications.Select the Allow the organization-wide language model check box, and then select Save changes.

    Volet Services de reconnaissance vocale Azure

Pour désactiver l’instance du modèle de locataire :To turn off the tenant model instance:

  1. Répétez les étapes 1 et 2 précédentes.Repeat the preceding steps 1 and 2.
  2. Décochez la case Autoriser le modèle de langue à l’échelle de l’organisation, puis sélectionnez Enregistrer les modifications.Clear the Allow the organization-wide language model check box, and then select Save changes.

Obtenir une clé d’abonnement SpeechGet a Speech subscription key

Pour utiliser votre modèle de locataire avec le kit SDK Speech, vous avez besoin d’une ressource Speech et de sa clé d’abonnement associée.To use your tenant model with the Speech SDK, you need a Speech resource and its associated subscription key.

  1. Connectez-vous au portail Azure.Sign in to the Azure portal.

  2. Sélectionnez Créer une ressource.Select Create a resource.

  3. Dans la zone Rechercher, tapez Speech.In the Search box, type Speech.

  4. Dans la liste des résultats, sélectionnez Speech, puis Créer.In the results list, select Speech, and then select Create.

  5. Suivez les instructions à l’écran pour créer votre ressource.Follow the onscreen instructions to create your resource. Assurez-vous que :Make sure that:

    • Emplacement est défini sur eastus ou westus.Location is set to either eastus or westus.
    • Niveau tarifaire est défini sur S0.Pricing tier is set to S0.
  6. Sélectionnez Create (Créer).Select Create.

    Après quelques minutes, votre ressource est créée.After a few minutes, your resource is created. La clé d’abonnement est disponible dans la section Vue d’ensemble de votre ressource.The subscription key is available in the Overview section for your resource.

Créer un modèle de langageCreate a language model

Dès lors que votre administrateur a activé Tenant Model pour votre organisation, vous pouvez créer un modèle de langage basé sur vos données Microsoft 365.After your admin has enabled Tenant Model for your organization, you can create a language model that's based on your Microsoft 365 data.

  1. Connectez-vous à Speech Studio.Sign in to Speech Studio.

  2. En haut à droite, sélectionnez Settings (icône d’engrenage), puis sélectionnez Tenant Model settings (Paramètres Tenant Model).At the top right, select Settings (gear icon), and then select Tenant Model settings.

    Lien « Tenant Model settings » (Paramètres Tenant Model)

    Speech Studio affiche un message qui vous indique si vous êtes apte à créer un modèle de locataire.Speech Studio displays a message that lets you know whether you're qualified to create a tenant model.

    Notes

    Les clients d’entreprise d’Amérique du Nord sont éligibles à la création d’un modèle de locataire (anglais).Enterprise customers in North America are eligible to create a tenant model (English). Si vous êtes un client Customer Lockbox (CLB), Customer Key (CK) ou Office 365 Government, cette fonctionnalité n’est pas disponible.If you're a Customer Lockbox, Customer Key, or Office 365 Government customer, this feature isn't available. Pour déterminer si vous êtes un client Customer Lockbox ou Customer Key, consultez :To determine whether you're a Customer Lockbox or Customer Key customer, see:

  3. Sélectionnez Activer.Select Opt in.

    Quand votre modèle de locataire sera prêt, vous recevrez un e-mail de confirmation avec des instructions supplémentaires.When your tenant model is ready, you'll receive a confirmation email message with further instructions.

Déployer votre modèle de locataireDeploy your tenant model

Une fois que l’instance de votre modèle de locataire est prête, déployez-la en procédant comme suit :When your tenant model instance is ready, deploy it by doing the following:

  1. Dans l’e-mail de confirmation, sélectionnez le bouton View model (Voir le modèle).In your confirmation email message, select the View model button. Ou bien, connectez-vous à Speech Studio.Or sign in to Speech Studio.

  2. En haut à droite, sélectionnez Settings (icône d’engrenage), puis sélectionnez Tenant Model settings (Paramètres Tenant Model).At the top right, select Settings (gear icon), and then select Tenant Model settings.

    Lien « Tenant Model settings » (Paramètres Tenant Model)

  3. Sélectionnez Déployer.Select Deploy.

    Une fois que votre modèle est déployé, son état passe à Deployed (Déployé).When your model has been deployed, the status changes to Deployed.

Utiliser votre modèle de locataire avec le kit SDK SpeechUse your tenant model with the Speech SDK

Maintenant que vous avez déployé votre modèle, vous pouvez l’utiliser avec le Kit de développement logiciel (SDK) Speech.Now that you've deployed your model, you can use it with the Speech SDK. Dans cette section, vous allez utiliser un exemple de code pour appeler le service Speech en utilisant l’authentification Azure Active Directory (Azure AD).In this section, you use sample code to call Speech Service by using Azure Active Directory (Azure AD) authentication.

Examinons le code que vous utiliserez pour appeler le Kit de développement logiciel (SDK) Speech dans C#.Let's look at the code you'll use to call the Speech SDK in C#. Dans cet exemple, vous allez procéder à une reconnaissance vocale en utilisant votre modèle de locataire.In this example, you perform speech recognition by using your tenant model. Ce guide suppose que votre plateforme est déjà configurée.This guide presumes that your platform is already set up. Si vous avez besoin d’aide pour la configuration, consultez Démarrage rapide : Reconnaissance vocale, C# (.NET Core).If you need setup help, see Quickstart: Recognize speech, C# (.NET Core).

Copiez ce code dans votre projet :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;
        }
    }
}

Vous devez ensuite regénérer et exécuter le projet à partir de la ligne de commande.Next, you need to rebuild and run the project from the command line. Avant d’exécuter la commande, mettez à jour quelques paramètres en procédant comme suit :Before you run the command, update a few parameters by doing the following:

  1. Remplacez <Username> et <Password> par les valeurs d’un utilisateur locataire valide.Replace <Username> and <Password> with the values for a valid tenant user.

  2. Remplacez <Subscription-Key> par la clé d’abonnement de votre ressource Speech.Replace <Subscription-Key> with the subscription key for your Speech resource. Cette valeur est disponible dans la section Vue d’ensemble de votre ressource Speech dans le portail Azure.This value is available in the Overview section for your Speech resource in the Azure portal.

  3. Remplacez <Endpoint-Uri> par le point de terminaison suivant.Replace <Endpoint-Uri> with the following endpoint. Veillez à remplacer {your region} par la région dans laquelle votre ressource Speech a été créée.Make sure that you replace {your region} with the region where your Speech resource was created. Ces régions sont prises en charge : westus, westus2 et eastus.These regions are supported: westus, westus2, and eastus. Les informations sur votre région sont disponibles dans la section Vue d’ensemble de votre ressource Speech sur le portail Azure.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. Exécutez la commande suivante :Run the following command:

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

Dans ce tutoriel, vous avez découvert comment utiliser des données Microsoft 365 pour créer un modèle de reconnaissance vocale personnalisé, le déployer et l’utiliser avec le kit SDK Speech.In this tutorial, you've learned how to use Microsoft 365 data to create a custom speech recognition model, deploy it, and use it with the Speech SDK.

Étapes suivantesNext steps