Inicio rápido: análisis y transcripción posteriores a las llamadas

Documentación del servicio de lenguaje | Language Studio | Documentación del servicio voz | Speech Studio

En este inicio rápido C#, hará análisis de opinión y resumen de conversaciones de las transcripciones del centro de llamadas. En el ejemplo se identificará, clasificará y redactará automáticamente información confidencial. Mediante el inicio rápido se implementa un escenario entre servicios que usa características de los servicios de Azure Cognitive Speech y Azure Cognitive Language.

Sugerencia

Pruebe Language Studio o Speech Studio para ver una demostración de cómo usar los servicios Lenguaje y Voz para analizar las conversaciones del centro de llamadas.

Para implementar una solución de transcripción del centro de llamadas en Azure con un enfoque sin código, pruebe el cliente de ingesta.

En el inicio rápido se usan las siguientes características de servicios de Azure AI para Voz:

El servicio de lenguaje ofrece las siguientes características empleadas:

Prerrequisitos

Importante

Para este inicio rápido es necesario acceder al resumen de conversaciones. Para obtener acceso, debe enviar una solicitud en línea y recibir la aprobación.

Los valores --languageKey y --languageEndpoint de esta guía de inicio rápido se deben corresponder con un recurso que se encuentra en una de las regiones admitidas por la API de resumen de conversación: eastus, northeurope y uksouth.

Ejecución del análisis de transcripción posterior a la llamada con C#

Complete los siguientes pasos para compilar y ejecutar un código de inicio rápido de análisis de transcripción posterior a la llamada de ejemplo.

  1. Copie los archivos de ejemplo scenarios/csharp/dotnetcore/call-center/ de GitHub. Si tiene Git instalado, abra un símbolo del sistema y ejecute el comando git clone para descargar el repositorio de ejemplos del SDK de Voz.

    git clone https://github.com/Azure-Samples/cognitive-services-speech-sdk.git
    
  2. Abra un símbolo del sistema y cambie al directorio del proyecto.

    cd <your-local-path>/scenarios/csharp/dotnetcore/call-center/call-center/
    
  3. Compile el proyecto con la CLI de .NET.

    dotnet build
    
  4. Ejecute la aplicación con los argumentos de la línea de comandos preferidos. Consulte uso y argumentos para ver las opciones disponibles.

    Aquí puede ver un ejemplo en el que se transcribe a partir de un archivo de audio de ejemplo en 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 ya tiene una transcripción para la entrada, este es un ejemplo para el que solo se necesita un recurso de lenguaje:

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

    Sustituya YourResourceKey por la clave de recurso de servicios de Azure AI, reemplace YourResourceRegion con la región del recurso de servicios de Azure AI (por ejemplo, eastus) y reemplace YourResourceEndpoint por el punto de conexión de servicios de Azure AI. Asegúrese de que las rutas de acceso especificadas por --input y --output sean válidas. De lo contrario, deberá cambiar las rutas de acceso.

    Importante

    Recuerde quitar la clave del código cuando haya terminado y no hacerla nunca pública. En el caso de producción, use una forma segura de almacenar sus credenciales y acceder a ellas, como Azure Key Vault. Consulte el artículo Seguridad de servicios de Azure AI para más información.

Comprobar los resultados

En la salida de la consola se muestra la conversación completa y el resumen. Aquí tiene un ejemplo del resumen general, con redacciones por razones de brevedad:

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

Si especifica el --output FILEargumento opcional , una versión JSON de los resultados se escribe en el archivo. La salida del archivo es una combinación de las respuestas JSON de las API de transcripción por lotes (voz), sentimiento (lenguaje) y los resúmenes de conversación (lenguaje).

La propiedad transcription contiene un objeto JSON con los resultados del análisis de sentimiento combinado con la transcripción por lotes. Este es un ejemplo, con redacciones por razones de brevedad:

{
    "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 propiedad conversationAnalyticsResults contiene un objeto JSON con los resultados del análisis de resumen de conversación e información de identificación personal de la conversación. Este es un ejemplo, con redacciones por razones de brevedad:

{
  "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": []
        }
      ]
    }
  }
}

Uso y argumentos

Uso: call-center -- [...]

Importante

Puede usar un recurso de varios servicios o un recurso independiente Lenguaje y Voz. En cualquier caso, los valores --languageKey y --languageEndpoint se deben corresponder con un recurso que se encuentra en una de las regiones admitidas por la API de resumen de conversación: eastus, northeurope y uksouth.

Las opciones de conexión incluyen:

  • --speechKey KEY: su clave de recurso servicios de Azure AI o Voz. Obligatorio en las transcripciones de audio con opción desde URL --input.

  • --speechRegion REGION: su región de recurso servicios de Azure AI o Voz. Obligatorio en las transcripciones de audio con opción desde URL --input. Ejemplos: eastus, northeurope

  • --languageKey KEY: su clave de recurso servicios de Azure AI o Lenguaje. Necesario.

  • --languageEndpoint ENDPOINT: su punto de conexión de recurso servicios de Azure AI o Lenguaje. Necesario. Ejemplo: https://YourResourceName.cognitiveservices.azure.com

Otras entradas incluyen:

  • --input URL: audio de entrada de URL. Debe establecer una de las siguientes opciones: --input o --jsonInput.
  • --jsonInput FILE: escriba un resultado JSON de transcripción por lotes existente de FILE. Con esta opción, solo necesita un recurso de lenguaje para procesar una transcripción que tenga. Si recurre a esta opción, no es necesario un archivo de audio ni un recurso de voz. Invalida --input. Debe establecer una de las siguientes opciones: --input o --jsonInput.
  • --stereo: indica que el audio por «dirección URL de entrada» debería estar en formato estéreo. Si estéreo no aparece especificado, se adoptan los archivos WAV de PCM mono de 16 khz de 16 bits. La diarización de archivos mono sirve para diferenciar varios hablantes. No se admite la diarización de archivos con formato estéreo, dado que los archivos estéreo de dos canales ya deben contar con un hablante por canal.
  • --certificate: el archivo de certificado PEM. Obligatorio para C++.

Entre las opciones de idioma se incluyen:

  • --language LANGUAGE: el lenguaje empleado en el análisis de opiniones y el análisis de conversación. Este valor debe consistir en un código ISO 639-1 de dos letras. El valor predeterminado es en.
  • --locale LOCALE: la configuración regional que se va a usar en la transcripción por lotes de audio. El valor predeterminado es en-US.

Las opciones de entrada incluyen:

  • --help: mostrar la ayuda de uso y parar
  • --output FILE: generar la transcripción, la opinión, la información de identificación personal en la conversación y resúmenes de conversación con formato JSON en un archivo de texto. Para obtener más información, consulte ejemplos de salida.

Limpieza de recursos

Puede usar Azure Portal o la Interfaz de la línea de comandos (CLI) de Azure para quitar el recurso de servicios de Azure AI que creó.

Pasos siguientes