Início Rápido: transcrição e análise pós-chamada

Documentação do serviço de idiomas | Language Studio | Documentação do serviço de voz | Speech Studio

Neste início rápido de C#, vai realizar a análise de sentimentos e o resumo de conversações de transcrições de call center . O exemplo irá identificar, categorizar e redigir informações confidenciais automaticamente. O início rápido implementa um cenário entre serviços que utiliza funcionalidades dos serviços de Voz Cognitiva do Azure e do Azure Cognitive Language .

Dica

Experimente o Language Studio ou o Speech Studio para obter uma demonstração sobre como utilizar os serviços de Idioma e Voz para analisar conversações de call center.

Para implementar uma solução de transcrição de call center no Azure com uma abordagem sem código, experimente o Cliente de Ingestão.

Os seguintes serviços de IA do Azure para funcionalidades de Voz são utilizados no início rápido:

O Serviço de idiomas oferece as seguintes funcionalidades que são utilizadas:

Pré-requisitos

  • Subscrição do Azure – Criar uma gratuitamente
  • Criar um recurso de vários serviços no portal do Azure. Este início rápido requer apenas um recurso multiserviços dos serviços de IA do Azure. O código de exemplo permite-lhe especificar as teclas de recurso e Chaves de recursos de Voz.
  • Obtenha a chave de recurso e a região. Após a implementação do recurso dos serviços de IA do Azure, selecione Ir para recurso para ver e gerir chaves. Para obter mais informações sobre os recursos dos serviços de IA do Azure, veja Obter as chaves do recurso.

Importante

Este início rápido requer acesso ao resumo de conversação. Para obter acesso, tem de submeter um pedido online e tê-lo aprovado.

Os --languageKey valores e --languageEndpoint neste início rápido têm de corresponder a um recurso que esteja numa das regiões suportadas pela API de resumo de conversação: eastus, northeuropee uksouth.

Executar a análise de transcrição pós-chamada com C#

Siga estes passos para criar e executar o exemplo de código de início rápido de análise de transcrição pós-chamada.

  1. Copie os /csharp/dotnetcore/call-center/ do GitHub. Se tiver o Git instalado, abra uma linha de comandos e execute o git clone comando para transferir o repositório de exemplos do SDK de Voz.

    git clone https://github.com/Azure-Samples/cognitive-services-speech-sdk.git
    
  2. Abra uma linha de comandos e mude para o diretório do projeto.

    cd <your-local-path>/scenarios/csharp/dotnetcore/call-center/call-center/
    
  3. Crie o projeto com a CLI de .NET.

    dotnet build
    
  4. Execute a aplicação com os argumentos da linha de comandos preferidos. Veja utilização e argumentos para obter as opções disponíveis.

    Eis um exemplo que transcreve a partir de um ficheiro de áudio de exemplo no 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
    

    Se já tiver uma transcrição para entrada, eis um exemplo que só requer um recurso de Idioma:

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

    Substitua pela YourResourceKey chave de recurso dos serviços de IA do Azure, substitua pela YourResourceRegionregião de recursos dos serviços de IA do Azure (como eastus), e substitua pelo YourResourceEndpoint ponto final dos serviços de IA do Azure. Confirme que os caminhos especificados por --input e --output são válidos. Caso contrário, tem de alterar os caminhos.

    Importante

    Lembre-se de remover a chave do código quando terminar e nunca a publicar publicamente. Para produção, utilize uma forma segura de armazenar e aceder às suas credenciais, como o Azure Key Vault. Veja o artigo segurança dos serviços de IA do Azure para obter mais informações.

Verificar os resultados

A saída da consola mostra a conversação completa e o resumo. Eis um exemplo do resumo geral, com redações por questões de brevidade:

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

Se especificar o --output FILEargumento opcional, será escrita uma versão JSON dos resultados no ficheiro. A saída do ficheiro é uma combinação das respostas JSON das APIs de transcrição em lote (Voz), sentimento (Idioma) e resumo de conversação (Idioma).

A transcription propriedade contém um objeto JSON com os resultados da análise de sentimentos intercalados com a transcrição em lote. Eis um exemplo, com redações por questões de brevidade:

{
    "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
}   

A conversationAnalyticsResults propriedade contém um objeto JSON com os resultados do PII de conversação e a análise de resumo de conversação. Eis um exemplo, com redações por questões de brevidade:

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

Utilização e argumentos

Utilização: call-center -- [...]

Importante

Pode utilizar um recurso ou e de Voz recursos de Voz. Em ambos os casos, os --languageKey valores e --languageEndpoint têm de corresponder a um recurso que esteja numa das regiões suportadas pela API de resumo de conversação: eastus, northeuropee uksouth.

As opções de ligação incluem:

  • --speechKey KEY: do Azure ou chave de recurso de Voz do recurso de Voz. Necessário para transcrições de áudio com a opção --input de URL.

  • --speechRegion REGION: do Azure ou região de recurso de Voz do recurso de Voz. Necessário para transcrições de áudio com a opção --input de URL. Exemplos: eastus, northeurope

  • --languageKey KEY: do Azure ou . Obrigatório.

  • --languageEndpoint ENDPOINT: do Azure ou Crie um ponto final de . Obrigatório. Exemplo: https://YourResourceName.cognitiveservices.azure.com

As opções de entrada incluem:

  • --input URL: áudio de entrada do URL. Tem de definir a opção --input ou --jsonInput .
  • --jsonInput FILE: introduza um resultado JSON de transcrição em lote existente a partir de FILE. Com esta opção, só precisa de um recurso de Idioma para processar uma transcrição que já tenha. Com esta opção, não precisa de um ficheiro de áudio ou de um recurso de Voz. --inputSubstitui . Tem de definir a opção --input ou --jsonInput .
  • --stereo: indica que o áudio através de ""URL de entrada" deve estar no formato estéreo. Se a opção estéreo não for especificada, serão assumidos os ficheiros wav de PCM de 16 bits mono 16khz. A diarização de ficheiros mono é utilizada para separar múltiplos altifalantes. A diarização de ficheiros estéreo não é suportada, uma vez que os ficheiros estéreo de dois canais já devem ter um altifalante por canal.
  • --certificate: o ficheiro de certificado PEM. Necessário para C++.

As opções de idioma incluem:

  • --language LANGUAGE: o idioma a utilizar para análise de sentimentos e análise de conversação. Este valor deve ser um código ISO 639-1 de duas letras. O valor predefinido é en.
  • --locale LOCALE: a região a utilizar para a transcrição em lote de áudio. O valor predefinido é en-US.

As opções de saída incluem:

  • --help: Mostrar a ajuda e parar a utilização
  • --output FILE: produza a transcrição, o sentimento, o PII de conversação e os resumos de conversação no formato JSON para um ficheiro de texto. Para obter mais informações, veja exemplos de saída.

Limpar os recursos

Pode utilizar o portal do Azure ou a Interface de Linha de Comandos (CLI) do Azure para remover o recurso dos serviços de IA do Azure que criou.

Passos seguintes