Что такое Пакетная транскрипция?What is batch transcription?

Запись пакетов — это набор REST API операций, позволяющих транскрипция большой объем аудио в хранилище.Batch transcription is a set of REST API operations that enables you to transcribe a large amount of audio in storage. Вы можете указывать на звуковые файлы с помощью URI подписанного URL-кода (SAS) и асинхронно получать результаты транскрипции.You can point to audio files with a shared access signature (SAS) URI and asynchronously receive transcription results.

Асинхронное преобразование речи в текст — лишь одна из функций.Asynchronous speech-to-text transcription is just one of the features. Для вызова следующих методов можно использовать API-интерфейсы RESTFUL для записи пакетов.You can use batch transcription REST APIs to call the following methods:

Операция записи пакетовBatch Transcription Operation МетодMethod Вызов REST APIREST API Call
Создает новую транскрипцию.Creates a new transcription. POSTPOST API/спичтотекст/v 2.0/транскрипцииapi/speechtotext/v2.0/transcriptions
Извлекает список транскрипций для подписки, прошедшей проверку подлинности.Retrieves a list of transcriptions for the authenticated subscription. GETGET API/спичтотекст/v 2.0/транскрипцииapi/speechtotext/v2.0/transcriptions
Возвращает список поддерживаемых языковых стандартов для автономных транскрипций.Gets a list of supported locales for offline transcriptions. GETGET API/спичтотекст/v 2.0/транскрипции/языковые стандартыapi/speechtotext/v2.0/transcriptions/locales
Обновляет изменяемые сведения о транскрипции, определяемые его ИДЕНТИФИКАТОРом.Updates the mutable details of the transcription identified by its ID. PATCHPATCH API/спичтотекст/v 2.0/транскрипции/{ID}api/speechtotext/v2.0/transcriptions/{id}
Удаляет указанную задачу транскрипции.Deletes the specified transcription task. DELETEDELETE API/спичтотекст/v 2.0/транскрипции/{ID}api/speechtotext/v2.0/transcriptions/{id}
Возвращает транскрипцию, определяемую заданным ИДЕНТИФИКАТОРом.Gets the transcription identified by the given ID. GETGET API/спичтотекст/v 2.0/транскрипции/{ID}api/speechtotext/v2.0/transcriptions/{id}

Вы можете просматривать и тестировать подробный API, доступный в виде документа Swagger, под заголовком Custom Speech transcriptions.You can review and test the detailed API, which is available as a Swagger document, under the heading Custom Speech transcriptions.

Задания записи пакетов планируются в соответствии с оптимальными усилиями.Batch transcription jobs are scheduled on a best effort basis. В настоящее время не существует оценки, когда задание изменяется в состояние выполнения.Currently there is no estimate for when a job changes into the running state. В условиях обычной загрузки системы это должно происходить в течение нескольких минут.Under normal system load, it should happen within minutes. В состоянии выполнения фактическая транскрипция обрабатываются быстрее, чем в режиме реального времени.Once in the running state, the actual transcription is processed faster than the audio real time.

Рядом с простым в использовании API не нужно развертывать пользовательские конечные точки, и у вас нет требований к параллелизму.Next to the easy-to-use API, you don't need to deploy custom endpoints, and you don't have any concurrency requirements to observe.

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

Ключ подпискиSubscription Key

Как и для всех функций службы "Речь", вам необходимо создать ключ подписки на портале Azure, следуя руководству по началу работы.As with all features of the Speech service, you create a subscription key from the Azure portal by following our Get started guide.

Примечание

Для использования записи пакетов требуется стандартная подписка (S0) для службы речи.A standard subscription (S0) for Speech service is required to use batch transcription. Ключи бесплатной подписки (F0) не работают.Free subscription keys (F0) don't work. Дополнительные сведения см. в разделе цены и ограничения.For more information, see pricing and limits.

Настраиваемые моделиCustom models

Если вы планируете настроить акустические или языковые модели, выполните действия, описанные в разделе Настройка моделей и модели языка настройки.If you plan to customize acoustic or language models, follow the steps in Customize acoustic models and Design customization language models. Для использования созданных моделей в записи пакетной службы необходимы их идентификаторы моделей.To use the created models in batch transcription, you need their model IDs. Идентификатор модели можно получить при проверке подробностей модели.You can retrieve the model ID when you inspect the details of the model. Развернутая Пользовательская конечная точка не требуется для службы транскрипции пакетов.A deployed custom endpoint is not needed for the batch transcription service.

API пакетного транскрибированияThe Batch Transcription API

Поддерживаемые форматыSupported formats

API пакетного транскрибирования поддерживает следующие форматы:The Batch Transcription API supports the following formats:

ФорматFormat КодекCodec BitrateBitrate Частота выборкиSample Rate
WAVWAV PCMPCM 16-разрядный16-bit 8 кГц или 16 кГц, моно или стерео8 kHz or 16 kHz, mono or stereo
MP3MP3 PCMPCM 16-разрядный16-bit 8 кГц или 16 кГц, моно или стерео8 kHz or 16 kHz, mono or stereo
OGGOGG OPUSOPUS 16-разрядный16-bit 8 кГц или 16 кГц, моно или стерео8 kHz or 16 kHz, mono or stereo

Для звуковых потоков стереозвука левый и правый каналы разбиваются во время транскрипции.For stereo audio streams, the left and right channels are split during the transcription. Для каждого канала создается файл результатов JSON.For each channel, a JSON result file is being created. Метки времени, созданные для каждого utterance, позволяют разработчику создавать упорядоченную окончательную запись.The timestamps generated per utterance enable the developer to create an ordered final transcript.

КонфигурацияConfiguration

Параметры конфигурации указываются в формате JSON:Configuration parameters are provided as JSON:

{
  "recordingsUrl": "<URL to the Azure blob to transcribe>",
  "models": [{"Id":"<optional acoustic model ID>"},{"Id":"<optional language model ID>"}],
  "locale": "<locale to use, for example en-US>",
  "name": "<user defined name of the transcription batch>",
  "description": "<optional description of the transcription>",
  "properties": {
    "ProfanityFilterMode": "None | Removed | Tags | Masked",
    "PunctuationMode": "None | Dictated | Automatic | DictatedAndAutomatic",
    "AddWordLevelTimestamps" : "True | False",
    "AddSentiment" : "True | False",
    "AddDiarization" : "True | False",
    "TranscriptionResultsContainerUrl" : "<service SAS URI to Azure container to store results into (write permission required)>"
  }
}

Свойства конфигурацииConfiguration properties

Используйте эти необязательные свойства для настройки транскрипции:Use these optional properties to configure transcription:

ПараметрParameter

ОписаниеDescription

ProfanityFilterMode

Указывает, как обрабатывать ненормативную лексику в результатах распознавания.Specifies how to handle profanity in recognition results. Допустимые значения None : отключить фильтрацию ненормативных слов, Masked заменить ненормативную лексику звездочками, Removed удалить всю ненормативную лексику из результата или Tags добавить теги "Ненормативная лексика".Accepted values are None to disable profanity filtering, Masked to replace profanity with asterisks, Removed to remove all profanity from the result, or Tags to add "profanity" tags. Значение по умолчанию равно Masked.The default setting is Masked.

PunctuationMode

Указывает, как обрабатывать знаки препинания в результатах распознавания.Specifies how to handle punctuation in recognition results. Допустимые значения None — отключить пунктуацию Dictated , чтобы указать явный (произнесенный) Automatic знак пунктуации, разрешить декодеру использовать знаки DictatedAndAutomatic препинания или задиктовать и автоматически применять пунктуацию.Accepted values are None to disable punctuation, Dictated to imply explicit (spoken) punctuation, Automatic to let the decoder deal with punctuation, or DictatedAndAutomatic to use dictated and automatic punctuation. Значение по умолчанию равно DictatedAndAutomatic.The default setting is DictatedAndAutomatic.

AddWordLevelTimestamps

Указывает, следует ли добавлять к выводимым данным метки времени на уровне слова.Specifies if word level timestamps should be added to the output. Допустимые значения true : включение меток времени на уровне Word false и (значение по умолчанию) для отключения.Accepted values are true to enable word level timestamps and false (the default value) to disable it.

AddSentiment

Указывает, следует ли применять анализ тональности к utterance.Specifies if sentiment analysis should be applied to the utterance. Допустимые значения true : включить и false (значение по умолчанию), чтобы отключить его.Accepted values are true to enable and false (the default value) to disable it. Дополнительные сведения см. в разделе Анализ тональности .See Sentiment Analysis for more detail.

AddDiarization

Указывает, что анализ диаризатион должен выполняться во входных данных, который должен быть каналом Mono, содержащим два голоса.Specifies that diarization analysis should be carried out on the input, which is expected to be mono channel containing two voices. Допустимые значения true : включение диаризатион false и (значение по умолчанию) для отключения.Accepted values are true enabling diarization and false (the default value) to disable it. Также AddWordLevelTimestamps необходимо установить значение true.It also requires AddWordLevelTimestamps to be set to true.

TranscriptionResultsContainerUrl

Необязательный URL-адрес со службой SAS для записываемого контейнера в Azure.Optional URL with service SAS to a writeable container in Azure. Результат сохраняется в этом контейнере.The result is stored in this container.

ПамятьStorage

Транскрипция пакетов поддерживает хранилище BLOB-объектов Azure для чтения звука и записи записанных данных в хранилище.Batch transcription supports Azure Blob storage for reading audio and writing transcriptions to storage.

Результат транскрипции пакетаThe batch transcription result

Для входного звука Mono создается один файл результатов для транскрипции.For mono input audio, one transcription result file is being created. Для стерео входного аудио создаются два файла результатов для транскрипции.For stereo input audio, two transcription result files are being created. Каждый из них имеет следующую структуру:Each has this structure:

{
  "AudioFileResults":[
    {
      "AudioFileName": "Channel.0.wav | Channel.1.wav"      'maximum of 2 channels supported'
      "AudioFileUrl": null                                  'always null'
      "AudioLengthInSeconds": number                        'Real number. Two decimal places'
      "CombinedResults": [
        {
          "ChannelNumber": null                             'always null'
          "Lexical": string
          "ITN": string
          "MaskedITN": string
          "Display": string
        }
      ]
      SegmentResults:[                                      'for each individual segment'
        {
          "RecognitionStatus": "Success | Failure"
          "ChannelNumber": null
          "SpeakerId": null | "1 | 2"                       'null if no diarization
                                                             or stereo input file, the
                                                             speakerId as a string if
                                                             diarization requested for
                                                             mono audio file'
          "Offset": number                                  'time in ticks (1 tick is 100 nanosec)'
          "Duration": number                                'time in ticks (1 tick is 100 nanosec)'
          "OffsetInSeconds" : number                        'Real number. Two decimal places'
          "DurationInSeconds" : number                      'Real number. Two decimal places'
          "NBest": [
            {
              "Confidence": number                          'between 0 and 1'
              "Lexical": string
              "ITN": string
              "MaskedITN": string
              "Display": string
              "Sentiment":
                {                                           'this is omitted if sentiment is
                                                             not requested'
                  "Negative": number                        'between 0 and 1'
                  "Neutral": number                         'between 0 and 1'
                  "Positive": number                        'between 0 and 1'
                }
              "Words": [
                {
                  "Word": string
                  "Offset": number                          'time in ticks (1 tick is 100 nanosec)'
                  "Duration": number                        'time in ticks (1 tick is 100 nanosec)'
                  "OffsetInSeconds": number                 'Real number. Two decimal places'
                  "DurationInSeconds": number               'Real number. Two decimal places'
                  "Confidence": number                      'between 0 and 1'
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

Результат содержит следующие формы:The result contains these forms:

FormForm

СодержимоеContent

Lexical

Фактические слова распознаны.The actual words recognized.

ITN

Обратная текстовая Нормализованная форма распознанного текста.Inverse-text-normalized form of the recognized text. Аббревиатуры ("врач Смит" в "Dr Smith"), Номера телефонов и другие преобразования применяются.Abbreviations ("doctor smith" to "dr smith"), phone numbers, and other transformations are applied.

MaskedITN

Форма восстановление с применением маскировки ненормативной лексики.The ITN form with profanity masking applied.

Display

Отображаемая форма распознанного текста.The display form of the recognized text. Добавлены знаки препинания и прописные буквы.Added punctuation and capitalization are included.

Разделение докладчика (Диаризатион)Speaker separation (Diarization)

Диаризатион — это процесс отделения динамиков от звука.Diarization is the process of separating speakers in a piece of audio. Наш пакетный конвейер поддерживает диаризатион и способен распознать два динамика в записях каналов Mono.Our Batch pipeline supports diarization and is capable of recognizing two speakers on mono channel recordings. Эта функция недоступна в стерео записях.The feature is not available on stereo recordings.

Все выходные данные транскрипции содержат SpeakerId.All transcription output contains a SpeakerId. Если диаризатион не используется, он отображается "SpeakerId": null в выходных данных JSON.If diarization is not used, it shows "SpeakerId": null in the JSON output. Для диаризатион мы поддерживаем два голоса, поэтому динамики обозначены как "1" или "2".For diarization we support two voices, so the speakers are identified as "1" or "2".

Чтобы запросить диаризатион, необходимо просто добавить соответствующий параметр в HTTP-запрос, как показано ниже.To request diarization, you simply have to add the relevant parameter in the HTTP request as shown below.

{
 "recordingsUrl": "<URL to the Azure blob to transcribe>",
 "models": [{"Id":"<optional acoustic model ID>"},{"Id":"<optional language model ID>"}],
 "locale": "<locale to us, for example en-US>",
 "name": "<user defined name of the transcription batch>",
 "description": "<optional description of the transcription>",
 "properties": {
   "AddWordLevelTimestamps" : "True",
   "AddDiarization" : "True"
 }
}

Метки времени на уровне слов также должны быть включены в качестве параметров в приведенном выше запросе.Word-level timestamps would also have to be 'turned on' as the parameters in the above request indicate.

Анализ мненийSentiment analysis

Функция тональности оценивает тональности, выраженный в аудио.The sentiment feature estimates the sentiment expressed in the audio. Тональности выражается значением от 0 до 1 для Negative, Neutralи Positive тональности.The sentiment is expressed by a value between 0 and 1 for Negative, Neutral, and Positive sentiment. Например, анализ тональности можно использовать в сценариях центра обработки вызовов:For example, sentiment analysis can be used in call center scenarios:

  • Получите представление о удовлетворенности клиентовGet insight on customer satisfaction
  • Получение сведений о производительности агентов (команда, принимающая вызовы)Get insight on the performance of the agents (team taking the calls)
  • Найти точную точку во времени, когда вызов потратил отрицательное направлениеFind the exact point in time when a call took a turn in a negative direction
  • Что хорошо, когда отрицательный вызов переключается в положительное направлениеWhat went well when turning a negative call into a positive direction
  • Указание клиентов и их отличий о продукте или службеIdentify what customers like and what they dislike about a product or a service

Тональности оценивается на каждом сегменте звука на основе лексической формы.Sentiment is scored per audio segment based on the lexical form. Весь текст в этом сегменте аудио используется для вычисления тональности.The entire text within that audio segment is used to calculate sentiment. Для всей транскрипции вычисление агрегатных тональности не выполняется.No aggregate sentiment is being calculated for the entire transcription. Анализ тональности в настоящее время доступен только на английском языке.Sentiment analysis is currently only available in the English language.

Примечание

Вместо этого рекомендуется использовать API анализа текста Майкрософт.We recommend using the Microsoft Text Analytics API instead. Она предоставляет более широкие возможности, помимо анализа тональности, таких как извлечение ключевых фраз, автоматическое определение языка и многое другое.It offers more advanced features beyond sentiment analysis like key phrase extraction, automatic language detection, and more. Сведения и примеры можно найти в документации по анализ текста.You can find information and samples in the Text Analytics documentation.

Пример выходных данных JSON выглядит следующим образом:A JSON output sample looks like below:

{
  "AudioFileResults": [
    {
      "AudioFileName": "Channel.0.wav",
      "AudioFileUrl": null,
      "SegmentResults": [
        {
          "RecognitionStatus": "Success",
          "ChannelNumber": null,
          "Offset": 400000,
          "Duration": 13300000,
          "NBest": [
            {
              "Confidence": 0.976174,
              "Lexical": "what's the weather like",
              "ITN": "what's the weather like",
              "MaskedITN": "what's the weather like",
              "Display": "What's the weather like?",
              "Words": null,
              "Sentiment": {
                "Negative": 0.206194,
                "Neutral": 0.793785,
                "Positive": 0.0
              }
            }
          ]
        }
      ]
    }
  ]
}

РекомендацииBest practices

Служба транскрипции может работать с большим количеством отправленных транскрипций.The transcription service can handle large number of submitted transcriptions. Вы можете запросить состояние транскрипций GET в методе транскрипции.You can query the status of your transcriptions through a GET on the transcriptions method. Чтобы данные возвращались к разумному размеру, укажите take параметр (несколько сотен).Keep the information returned to a reasonable size by specifying the take parameter (a few hundred). Регулярно удаляйте записи из службы после получения результатов.Delete transcriptions regularly from the service once you retrieved the results. Это гарантирует быстрый ответ от вызовов управления транскрипциями.This guarantees quick replies from the transcription management calls.

Образец кодаSample code

Полные примеры доступны в репозитории примера GitHub внутри samples/batch подкаталога.Complete samples are available in the GitHub sample repository inside the samples/batch subdirectory.

Чтобы использовать настраиваемую акустическую или языковую модель, необходимо добавить в пример кода сведения о подписке, регион службы, URI SAS с указанием на аудиофайл для транскрибирования и идентификаторы моделей.You have to customize the sample code with your subscription information, the service region, the SAS URI pointing to the audio file to transcribe, and model IDs in case you want to use a custom acoustic or language model.

// Replace with your subscription key
private const string SubscriptionKey = "YourSubscriptionKey";

// Update with your service region
private const string Region = "YourServiceRegion";
private const int Port = 443;

// recordings and locale
private const string Locale = "en-US";
private const string RecordingsBlobUri = "<SAS URI pointing to an audio file stored in Azure Blob Storage>";

// For usage of baseline models, no acoustic and language model needs to be specified.
private static Guid[] modelList = new Guid[0];

// For use of specific acoustic and language models:
// - comment the previous line
// - uncomment the next lines to create an array containing the guids of your required model(s)
// private static Guid AdaptedAcousticId = new Guid("<id of the custom acoustic model>");
// private static Guid AdaptedLanguageId = new Guid("<id of the custom language model>");
// private static Guid[] modelList = new[] { AdaptedAcousticId, AdaptedLanguageId };

//name and description
private const string Name = "Simple transcription";
private const string Description = "Simple transcription description";

В примере кода настраивается клиент и отправляется запрос на расшифровку.The sample code sets up the client and submits the transcription request. Затем он опрашивает сведения о состоянии и выводит сведения о ходе процесса транскрипции.It then polls for the status information and print details about the transcription progress.

// get all transcriptions for the user
transcriptions = await client.GetTranscriptionsAsync().ConfigureAwait(false);

completed = 0; running = 0; notStarted = 0;
// for each transcription in the list we check the status
foreach (var transcription in transcriptions)
{
    switch (transcription.Status)
    {
        case "Failed":
        case "Succeeded":
            // we check to see if it was one of the transcriptions we created from this client.
            if (!createdTranscriptions.Contains(transcription.Id))
            {
                // not created form here, continue
                continue;
            }
            completed++;

            // if the transcription was successful, check the results
            if (transcription.Status == "Succeeded")
            {
                var resultsUri0 = transcription.ResultsUrls["channel_0"];

                WebClient webClient = new WebClient();

                var filename = Path.GetTempFileName();
                webClient.DownloadFile(resultsUri0, filename);
                var results0 = File.ReadAllText(filename);
                var resultObject0 = JsonConvert.DeserializeObject<RootObject>(results0);
                Console.WriteLine(results0);

                Console.WriteLine("Transcription succeeded. Results: ");
                Console.WriteLine(results0);
            }
            else
            {
                Console.WriteLine("Transcription failed. Status: {0}", transcription.StatusMessage);
            }
            break;

        case "Running":
            running++;
            break;

        case "NotStarted":
            notStarted++;
            break;
    }
}

Подробные сведения о предыдущих вызовах см. в документации по Swagger.For full details about the preceding calls, see our Swagger document. Полная версия показанного здесь примера находится на GitHub в подкаталоге samples/batch.For the full sample shown here, go to GitHub in the samples/batch subdirectory.

Обратите внимание на асинхронную настройку для отправки аудио и получения состояния транскрибирования.Take note of the asynchronous setup for posting audio and receiving transcription status. Клиент, который вы создаете, является клиентом .NET HTTP.The client that you create is a .NET HTTP client. Существует метод PostTranscriptions для отправки сведений об аудиофайле и метод GetTranscriptions для получения результатов.There's a PostTranscriptions method for sending the audio file details and a GetTranscriptions method for receiving the results. PostTranscriptions возвращает дескриптор, который GetTranscriptions использует для создания дескриптора, чтобы получить состояние транскрибирования.PostTranscriptions returns a handle, and GetTranscriptions uses it to create a handle to get the transcription status.

Текущий пример кода не определяет какие-либо пользовательские модели.The current sample code doesn't specify a custom model. Служба использует базовые модели для расшифровки файлов.The service uses the baseline models for transcribing the file or files. Чтобы указать модели, можно передать с тем же методом идентификаторы акустической и языковой моделей.To specify the models, you can pass on the same method as the model IDs for the acoustic and the language model.

Примечание

Для базового транскрибирования не нужно объявлять идентификаторы базовых моделей.For baseline transcriptions, you don't need to declare the ID for the baseline models. Если вы указали только идентификатор языковой модели (без идентификатора акустической модели), соответствующая акустическая модель выбирается автоматически.If you only specify a language model ID (and no acoustic model ID), a matching acoustic model is automatically selected. Если вы указали только идентификатор акустической модели, соответствующая языковая модель выбирается автоматически.If you only specify an acoustic model ID, a matching language model is automatically selected.

Скачивание примера приложенияDownload the sample

Пример можно скачать в репозитории с примерами GitHub в каталоге samples/batch.You can find the sample in the samples/batch directory in the GitHub sample repository.

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