Краткое руководство: транскрипция и аналитика после звонка

Документация по службе "Язык" | Language Studio | Документация по службе "Речь" | Speech Studio

В этом кратком руководстве по C# вы выполняете анализ тональности и суммаризацию разговоров на основе расшифровок звонков контакт-центра. Пример автоматически определяет, классифицирует и редактирует конфиденциальную информацию. Краткое руководство описывает межсервисный сценарий, в котором используются возможности служб Azure Cognitive Speech и Azure Cognitive Language.

Совет

Ознакомьтесь с Языковой Студией или Речевой Студией для демонстрации использования служб Azure Language и Speech для анализа бесед в центре обработки вызовов.

Чтобы развернуть решение транскрибирования для центра обработки вызовов в Azure с использованием подхода без написания кода, попробуйте использовать клиент приема данных.

В быстром старте используются следующие средства Foundry для работы с речью.

Служба языка предлагает следующие функции, которые используются:

  • Извлечение и редактирование личных сведений: идентифицируйте, классифицируйте и редактируйте конфиденциальную информацию при транскрибировании бесед.
  • Сводка беседы: Суммировать в виде краткого текста, что каждый участник беседы говорил о проблемах и способах их решения. Например, центр обработки вызовов может группировать сведения о самых значительных проблемах с продуктами.
  • Анализ тональности и анализ мнений: анализируйте расшифровки и определяйте положительную, нейтральную или отрицательную тональность на уровне отдельных высказываний и всего разговора.

Предварительные требования

Внимание

Это краткое руководство требует доступа к суммаризации беседы. Чтобы получить доступ, необходимо отправить онлайн-запрос и утвердить его.

Значения --languageKey и --languageEndpoint в этом кратком руководстве должны соответствовать ресурсу, который находится в одном из регионов, поддерживаемых API суммаризации бесед: eastus, northeurope и uksouth.

Выполнение анализа транскрибирования после вызова с помощью C#

Выполните следующие действия, чтобы создать и запустить пример кода быстрого запуска анализа транскрибирования после вызова.

  1. Скопируйте из GitHub файлы примера scenarios/csharp/dotnetcore/call-center/. Если вы установили Git, откройте командную строку и выполните git clone команду, чтобы скачать репозиторий примеров пакета SDK службы "Речь".

    git clone https://github.com/Azure-Samples/cognitive-services-speech-sdk.git
    
  2. Откройте командную строку и перейдите в каталог проекта.

    cd <your-local-path>/scenarios/csharp/dotnetcore/call-center/call-center/
    
  3. Создайте проект с помощью интерфейса командной строки .NET.

    dotnet build
    
  4. Запустите приложение с подходящими аргументами командной строки. Список доступных параметров см. в сведениях об использовании и аргументах.

    Вот пример, который выполняет транскрибацию на основе примера аудиофайла на 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
    

    Если у вас уже есть транскрипция входных данных, ниже приведён пример, для которого требуется только ресурс Language:

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

    Замените YourResourceKey на ключ ресурса Microsoft Foundry, замените YourResourceRegion на регион Microsoft Foundry (например, eastus), и замените YourResourceEndpoint на конечную точку инструментов Foundry. Убедитесь, что пути, заданные значениями --input и --output, допустимы. В противном случае путь необходимо изменить.

    Внимание

    Обязательно удалите ключ из кода, когда завершите работу, и ни в коем случае не публикуйте его в открытом доступе. Для рабочей среды используйте безопасный способ хранения и доступа к учетным данным, например Azure Key Vault. Дополнительные сведения см. в статье о безопасности средств Foundry.

Проверка результатов

В выходных данных консоли отображаются полные беседы и сводки. Ниже приведен пример общей сводки с редактами для краткости:

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

Если указать --output FILE необязательный аргумент, версия результатов JSON записывается в файл. Результирующий файл представляет собой объединение ответов в формате JSON от API пакетной транскрипции (Речь), анализа тональности (Язык) и суммаризации бесед (Язык).

Свойство transcription содержит объект JSON с результатами анализа тональности, объединёнными с результатами пакетной транскрипции. Ниже приведен пример с редактами для краткости:

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

Свойство conversationAnalyticsResults содержит объект JSON с результатами анализа персональных данных и суммаризации беседы. Ниже приведен пример с редактами для краткости:

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

Использование и аргументы

Использование: call-center -- [...]

Внимание

Вы можете использовать мультисервисный ресурс Foundry или отдельные языковые и ресурсы Foundry для устной речи. В любом случае, значения --languageKey и --languageEndpoint должны соответствовать ресурсу, находящемуся в одном из регионов, поддерживаемых API сводки бесед: eastus, northeurope и uksouth.

Доступны следующие параметры подключения:

  • --speechKey KEY: ключ ресурса . Требуется для транскрибирования аудио с опцией --input из URL-адреса.

  • --speechRegion REGION: регион ресурса . Требуется для транскрипции аудио с параметром --input из URL. Примеры: eastus, northeurope

  • --languageKey KEY: ключ ресурса . Обязательный.

  • --languageEndpoint ENDPOINT: конечная точка ресурса . Обязательный. Пример: https://YourResourceName.cognitiveservices.azure.com

Доступны следующие параметры входных данных:

  • --input URL: входной звук из URL-адреса. Необходимо задать либо параметр --input, либо параметр --jsonInput.
  • --jsonInput FILE: Введите существующий JSON-результат пакетной транскрипции из FILE. С этим вариантом вам нужен только ресурс Language для обработки уже имеющейся у вас транскрипции. С помощью этого параметра не требуется звуковой файл или ресурс Foundry для распознавания речи. Переопределяет --input. Необходимо задать либо параметр --input, либо параметр --jsonInput.
  • --stereo: указывает, что аудио, передаваемое через ```input URL```, должно быть в стереоформате. Если стерео не указано, предполагаются монофонические WAV-файлы PCM 16 кГц, 16 бит. Диаризация монофайлов используется для разделения нескольких динамиков. Диаризация стереофайлов не поддерживается, так как 2-каналовые стереофайлы уже должны иметь один динамик на канал.
  • --certificate: файл сертификата PEM. Требуется для C++.

Доступны следующие параметры языка:

  • --language LANGUAGE: язык, используемый для анализа тональности и анализа бесед. Это значение должно быть двухбуквенным кодом ISO 639-1. Значение по умолчанию — en.
  • --locale LOCALE: языковой стандарт, используемый для пакетной транскрипции аудио. Значение по умолчанию — en-US.

Доступны следующие параметры выходных данных:

  • --help: показать справку по использованию и завершить работу
  • --output FILE: выводит транскрибирование, тональность, личные данные беседы и сводки бесед в формате JSON в текстовый файл. Дополнительные сведения см. в примерах выходных данных.

Очистка ресурсов

Вы можете использовать портал Azure или интерфейс командной строки Azure (CLI), чтобы удалить созданный ресурс Microsoft Foundry.

Следующие шаги