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

Documentação do serviço de linguagem | Language Studio | Documentação do serviço de Fala | Speech Studio

Neste início rápido em C#, você executa a análise de sentimento e a sumarização de conversas das transcrições do call center. O exemplo identifica, categoriza e redige automaticamente as informações confidenciais. O início rápido implementa um cenário entre serviços que usa recursos do Serviço Cognitivo do Azure para Fala e do Serviço Cognitivo do Azure para Linguagem.

Dica

Experimente o Language Studio ou o Speech Studio para uma demonstração de como usar os serviços de Linguagem e Fala para analisar conversas do call center.

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

Os seguintes recursos do serviços de IA do Azure para Fala são usados no início rápido:

O serviço de Linguagem oferece os seguintes recursos que são usados:

Pré-requisitos

Importante

Este início rápido exige acesso à sumarização de conversas. Para ter acesso, envie uma solicitação online e obtenha a aprovação.

Os valores --languageKey e --languageEndpoint neste início rápido devem corresponder a um recurso que está em uma das regiões compatíveis com a API de sumarização de conversas: eastus, northeurope e uksouth.

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

Siga estas etapas para compilar e executar o exemplo de código de início rápido da análise de transcrição pós-chamada.

  1. Copie os arquivos de exemplo scenarios/csharp/dotnetcore/captioning/ do GitHub. Se você tiver o Git instalado, abra um prompt de comando e execute o comando git clone para baixar o repositório de exemplos do SDK de Fala.

    git clone https://github.com/Azure-Samples/cognitive-services-speech-sdk.git
    
  2. Abra um prompt de comando e altere para o diretório do projeto.

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

    dotnet build
    
  4. Execute o aplicativo com seus argumentos de linha de comando preferenciais. Confira o uso e os argumentos das opções disponíveis.

    Aqui está um exemplo que transcreve de um arquivo 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 você já tiver uma transcrição para entrada, segue um exemplo que requer apenas um recurso de Linguagem:

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

    Substitua YourResourceKey pela chave de recurso dos serviços de IA do Azure, substitua YourResourceRegion pela região do recurso dos serviços de IA do Azure (tal como eastus) e substitua YourResourceEndpoint pelo ponto de extremidade dos serviços de IA do Azure. Verifique se os caminhos especificados por --input e --output são válidos. Caso contrário, altere os caminhos.

    Importante

    Lembre-se de remover a chave do seu código quando terminar e nunca poste-a publicamente. Para produção, use uma maneira segura de armazenar e acessar suas credenciais, como o Azure Key Vault. Consulte o artigo sobre segurança do serviços de IA do Azure para obter mais informações.

Verificar os resultados

A saída do console mostra a conversa completa e o resumo. Aqui está um exemplo do resumo geral com redações para edição:

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

Se você especificar o argumento opcional --output FILE, uma versão JSON dos resultados será gravada no arquivo. A saída do arquivo é uma combinação das respostas JSON das APIs transcrição em lote (Fala), sentimento (Linguagem) e resumo de conversa (Linguagem).

A propriedade transcription contém um objeto JSON com os resultados da análise de sentimento mesclados com a transcrição em lote. Aqui está um exemplo com redações para edição:

{
    "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 propriedade conversationAnalyticsResults contém um objeto JSON com os resultados da PII da conversa e da análise de sumarização de conversas. Aqui está um exemplo com redações para edição:

{
  "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 e argumentos

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

Importante

Você pode usar um recurso de vários serviços ou recursos separados Linguagem e Fala. Em qualquer caso, os valores --languageKey e --languageEndpoint neste início rápido devem corresponder a um recurso que está em uma das regiões compatíveis com a API de sumarização de conversas: eastus, northeurope e uksouth.

As opções de conexão incluem:

As opções de entrada incluem:

  • --input URL: insere áudio da URL. Você deve definir a opção --input ou --jsonInput.
  • --jsonInput FILE: insere um resultado JSON da transcrição em lote existente do ARQUIVO. Com essa opção, você só precisa de um recurso de Linguagem para processar uma transcrição que você já tem. Com essa opção, você não precisa de um arquivo de áudio ou de um recurso de Fala. Substitui --input. Você deve definir a opção --input ou --jsonInput.
  • --stereo: indica que o áudio por meio de ```URL de entrada` deve estar no formato estéreo. Se o formato estéreo não for especificado, os arquivos wav PCM mono de 16khz e 16 bits serão assumidos. A diarização de arquivos mono é usada para separar vários alto-falantes. Não há suporte para a diarização de arquivos estéreo, pois os arquivos estéreo de dois canais já devem ter um alto-falante por canal.
  • --certificate: o arquivo de certificado PEM. Necessário para C++.

As opções de idioma incluem:

  • --language LANGUAGE: o idioma a ser usado para a análise de sentimento e a análise de conversa. Esse valor deve ser um código ISO 639-1 de duas letras. O valor padrão é en.
  • --locale LOCALE: a localidade a ser usada para transcrição em lote de áudio. O valor padrão é en-US.

As opções de saída incluem:

  • --help: mostra a ajuda de uso e parada
  • --output FILE: gera os resumos de conversa, transcrição, sentimento e PII de conversa no formato JSON para um arquivo de texto. Para saber mais, confira exemplos de saída.

Limpar os recursos

Você pode usar o portal do Azure ou a CLI (Interface de Linha de Comando) do Azure para remover o recurso dos serviços de IA do Azure que você criou.

Próximas etapas