Démarrage rapide : Transcription et analytique post-appel

Documentation du service de langage | Language Studio | Documentation du service Speech | Speech Studio

Dans ce guide de démarrage rapide C#, vous effectuez une analyse des sentiments et un résumé des conversations dans les transcriptions du centre d’appels. L’exemple va automatiquement identifier, catégoriser et adapter des informations sensibles. Le guide de démarrage rapide implémente un scénario multiservice qui utilise à la fois les fonctionnalités des services Speech et des services de langage d’Azure Cognitive Services.

Conseil

Essayez Language Studio ou Speech Studio pour une démonstration de l’utilisation des services Language et Speech visant à analyser les conversations de centre d’appels.

Pour déployer une solution de transcription de centre d’appels dans Azure avec une approche sans code, essayez le client d’ingestion.

Les fonctionnalités Azure AI services pour Speech suivantes sont utilisées dans le démarrage rapide :

Le service Language offre les fonctionnalités suivantes :

Prérequis

Important

Ce guide de démarrage rapide nécessite un accès au résumé des conversations. Pour l’obtenir, vous devez envoyer une demande en ligne et la faire approuver.

Les valeurs --languageKey et --languageEndpoint figurant dans ce guide de démarrage rapide doivent correspondre à une ressource qui se trouve dans l’une des régions prises en charge par l’API de résumé des conversations : eastus, northeurope et uksouth.

Exécuter l’analyse de la transcription post-appel avec C#

Suivez ces étapes pour générer et exécuter l’exemple de code de démarrage rapide de l’analyse de la transcription post-appel.

  1. Copiez les exemples de fichiers scenarios/csharp/dotnetcore/call-center/ à partir de GitHub. Si Git est installé, ouvrez une invite de commandes et exécutez la commande git clone pour télécharger le dépôt d’exemples du SDK Speech.

    git clone https://github.com/Azure-Samples/cognitive-services-speech-sdk.git
    
  2. Ouvrez une invite de commandes et accédez au répertoire du projet.

    cd <your-local-path>/scenarios/csharp/dotnetcore/call-center/call-center/
    
  3. Générez le projet avec l’interface CLI .NET.

    dotnet build
    
  4. Exécutez l’application avec vos arguments de ligne de commande préférés. Consultez la section Utilisation et arguments pour connaître les options disponibles.

    Voici un exemple qui transcrit un exemple de fichier audio sur GitHub :

    dotnet run --languageKey YourResourceKey --languageEndpoint YourResourceEndpoint --speechKey YourResourceKey --speechRegion YourResourceRegion --input "https://github.com/Azure-Samples/cognitive-services-speech-sdk/raw/master/scenarios/call-center/sampledata/Call1_separated_16k_health_insurance.wav" --stereo  --output summary.json
    

    Si vous avez déjà une transcription pour l’entrée, voici un exemple qui nécessite uniquement une ressource Language :

    dotnet run --languageKey YourResourceKey --languageEndpoint YourResourceEndpoint --jsonInput "YourTranscriptionFile.json" --stereo  --output summary.json
    

    Remplacez YourResourceKey par votre clé de ressource Azure AI services, remplacez YourResourceRegion par la région de votre ressource Azure AI services (par exemple eastus), puis remplacez YourResourceEndpoint par votre point de terminaison Azure AI services. Vérifiez que les chemins spécifiés par --input et --output sont valides. Sinon, vous devez modifier les chemins d’accès.

    Important

    N’oubliez pas de supprimer la clé de votre code une fois que vous avez terminé, et ne la postez jamais publiquement. Pour la production, utilisez un moyen sécurisé de stocker et d’accéder à vos informations d’identification comme Azure Key Vault. Pour plus d’informations, consultez l’article sur la sécurité d’Azure AI services.

Vérifier les résultats

La sortie de la console affiche la conversation complète et le résumé. Voici un exemple de résumé global, avec des corrections à des fins de concision :

Conversation summary:
    issue: Customer wants to sign up for insurance.
    resolution: Customer was advised that customer would be contacted by the insurance company.

Si vous spécifiez l’argument facultatif --output FILE, une version JSON des résultats est écrite dans le fichier. La sortie du fichier est une combinaison des réponses JSON de la transcription par lot (Speech), des sentiments (Language) et des API de résumé des conversations (Language).

La propriété transcription contient un objet JSON avec les résultats de l’analyse des sentiments fusionnés avec la transcription par lot. Voici un exemple, avec des corrections à des fins de concision :

{
    "source": "https://github.com/Azure-Samples/cognitive-services-speech-sdk/raw/master/scenarios/call-center/sampledata/Call1_separated_16k_health_insurance.wav",
// Example results redacted for brevity
        "nBest": [
          {
            "confidence": 0.77464247,
            "lexical": "hello thank you for calling contoso who am i speaking with today",
            "itn": "hello thank you for calling contoso who am i speaking with today",
            "maskedITN": "hello thank you for calling contoso who am i speaking with today",
            "display": "Hello, thank you for calling Contoso. Who am I speaking with today?",
            "sentiment": {
              "positive": 0.78,
              "neutral": 0.21,
              "negative": 0.01
            }
          },
        ]
// Example results redacted for brevity
}   

La propriété conversationAnalyticsResults contient un objet JSON avec les résultats de l’analyse des informations d’identification personnelle et du résumé des conversations. Voici un exemple, avec des corrections à des fins de concision :

{
  "conversationAnalyticsResults": {
    "conversationSummaryResults": {
      "conversations": [
        {
          "id": "conversation1",
          "summaries": [
            {
              "aspect": "issue",
              "text": "Customer wants to sign up for insurance"
            },
            {
              "aspect": "resolution",
              "text": "Customer was advised that customer would be contacted by the insurance company"
            }
          ],
          "warnings": []
        }
      ],
      "errors": [],
      "modelVersion": "2022-05-15-preview"
    },
    "conversationPiiResults": {
      "combinedRedactedContent": [
        {
          "channel": "0",
          "display": "Hello, thank you for calling Contoso. Who am I speaking with today? Hi, ****. Uh, are you calling because you need health insurance?", // Example results redacted for brevity
          "itn": "hello thank you for calling contoso who am i speaking with today hi **** uh are you calling because you need health insurance", // Example results redacted for brevity
          "lexical": "hello thank you for calling contoso who am i speaking with today hi **** uh are you calling because you need health insurance" // Example results redacted for brevity
        },
        {
          "channel": "1",
          "display": "Hi, my name is **********. I'm trying to enroll myself with Contoso. Yes. Yeah, I'm calling to sign up for insurance.", // Example results redacted for brevity
          "itn": "hi my name is ********** i'm trying to enroll myself with contoso yes yeah i'm calling to sign up for insurance", // Example results redacted for brevity
          "lexical": "hi my name is ********** i'm trying to enroll myself with contoso yes yeah i'm calling to sign up for insurance" // Example results redacted for brevity
        }
      ],
      "conversations": [
        {
          "id": "conversation1",
          "conversationItems": [
            {
              "id": "0",
              "redactedContent": {
                "itn": "hello thank you for calling contoso who am i speaking with today",
                "lexical": "hello thank you for calling contoso who am i speaking with today",
                "text": "Hello, thank you for calling Contoso. Who am I speaking with today?"
              },
              "entities": [],
              "channel": "0",
              "offset": "PT0.77S"
            },
            {
              "id": "1",
              "redactedContent": {
                "itn": "hi my name is ********** i'm trying to enroll myself with contoso",
                "lexical": "hi my name is ********** i'm trying to enroll myself with contoso",
                "text": "Hi, my name is **********. I'm trying to enroll myself with Contoso."
              },
              "entities": [
                {
                  "text": "Mary Rondo",
                  "category": "Name",
                  "offset": 15,
                  "length": 10,
                  "confidenceScore": 0.97
                }
              ],
              "channel": "1",
              "offset": "PT4.55S"
            },
            {
              "id": "2",
              "redactedContent": {
                "itn": "hi **** uh are you calling because you need health insurance",
                "lexical": "hi **** uh are you calling because you need health insurance",
                "text": "Hi, ****. Uh, are you calling because you need health insurance?"
              },
              "entities": [
                {
                  "text": "Mary",
                  "category": "Name",
                  "offset": 4,
                  "length": 4,
                  "confidenceScore": 0.93
                }
              ],
              "channel": "0",
              "offset": "PT9.55S"
            },
            {
              "id": "3",
              "redactedContent": {
                "itn": "yes yeah i'm calling to sign up for insurance",
                "lexical": "yes yeah i'm calling to sign up for insurance",
                "text": "Yes. Yeah, I'm calling to sign up for insurance."
              },
              "entities": [],
              "channel": "1",
              "offset": "PT13.09S"
            },
// Example results redacted for brevity
          ],
          "warnings": []
        }
      ]
    }
  }
}

Utilisation et arguments

Utilisation : call-center -- [...]

Important

Vous pouvez utiliser une ressource multiservice ou des ressources Language et. Dans les deux cas, les valeurs --languageKey et --languageEndpoint doivent correspondre à une ressource qui se trouve dans l’une des régions prises en charge par l’API de résumé des conversations : eastus, northeurope et uksouth.

Les options de connexion sont les suivantes :

  • --speechKey KEY : clé de votre ressource Azure AI services ou Speech. Obligatoire pour les transcriptions audio avec l’option --input à partir d’une URL.

  • --speechRegion REGION : région de votre ressource Azure AI services ou Speech. Obligatoire pour les transcriptions audio avec l’option --input à partir d’une URL. Exemples : eastus, northeurope

  • --languageKey KEY : clé de votre ressource Azure AI services ou Language. Obligatoire.

  • --languageEndpoint ENDPOINT : clé de votre point de terminaison Azure AI services ou Language. Obligatoire. Exemple : https://YourResourceName.cognitiveservices.azure.com

Les options d’entrée sont les suivantes :

  • --input URL : Audio d’entrée à partir d’une URL. Vous devez définir l’option --input ou --jsonInput.
  • --jsonInput FILE : Entrez un résultat JSON de transcription par lot existant à partir d’un FICHIER. Avec cette option, vous avez uniquement besoin d’une ressource Language pour traiter une transcription que vous avez déjà. Avec cette option, vous n’avez pas besoin d’un fichier audio ni d’une ressource Speech. Substitue --input. Vous devez définir l’option --input ou --jsonInput.
  • --stereo :Indique que l’audio qui passe par l’URL d’entrée doit être au format stéréo. Si le format stéréo n’est pas spécifié, alors les fichiers sont supposés être des fichiers wav PCM mono 16 khz 16 bits. La diarisation des fichiers mono est utilisée pour séparer les multiples haut-parleurs. La diarisation des fichiers stéréo n’est pas prise en charge, car les fichiers stéréo bicanaux doivent déjà avoir un seul haut-parleur par canal.
  • --certificate : Fichier de certificat PEM. Obligatoire pour C++.

Les options de langue sont les suivantes :

  • --language LANGUAGE : Langue à utiliser pour l’analyse des sentiments et l’analyse des conversations. Cette valeur doit être un code ISO 639-1 à deux lettres. La valeur par défaut est en.
  • --locale LOCALE : Paramètres régionaux à utiliser pour la transcription par lot de l’audio. La valeur par défaut est en-US.

Les options de sortie sont les suivantes :

  • --help : Affichage de l’aide de l’utilisateur et de l’arrêt
  • --output FILE : Génère les résumés des transcriptions, des sentiments, des informations d’identification personnelle dans les conversations et des conversations au format JSON dans un fichier texte. Pour plus d’informations, consultez les exemples de sortie.

Nettoyer les ressources

Vous pouvez utiliser le Portail Azure ou l’interface CLI Azure pour supprimer la ressource Azure AI services que vous avez créée.

Étapes suivantes