Нормализация результатов распознавания

Нормализация — это преобразование (постобработка) текста, полученного в результате работы модели распознавания речи Yandex SpeechKit. Нормализация выполняется согласно параметрам, указанным в запросах API.

Примечание

В режиме автоматического распознавания языка (код языка auto) нормализация не выполняется.

Вы можете применять следующие уровни нормализации:

  • Представление дат и времени в цифровом формате.
  • Преобразование чисел из словарного в цифровой формат.
  • Добавление заглавной буквы в начале предложения и в именах собственных.
  • Маскирование обсценной лексики.
  • Форматирование телефонных номеров. Например, 7(999)123-45-67 вместо 7 999 123 45 67.
  • Добавление знаков пунктуации.

Важно

Правила представления нормализованного текста могут меняться. Учитывайте это при интеграции и следите за обновлениями.

Управление параметрами нормализации

API v1

Уровень нормализации Параметр API
Маскирование обсценной лексики profanityFilter=true
Преобразование чисел из словарного в цифровой формат По умолчанию включено. Чтобы отключить, укажите rawResults=true

API v2

Уровень нормализации Параметр API
Маскирование обсценной лексики config.specification.profanityFilter=true
Преобразование чисел из словарного в цифровой формат По умолчанию включено. Чтобы отключить, укажите config.specification.rawResults=true
Уровень нормализации Параметр API
Маскирование обсценной лексики config.specification.profanityFilter=true
Преобразование чисел из словарного в цифровой формат По умолчанию включено. Чтобы отключить, укажите config.specification.rawResults=true
Добавление заглавной буквы в начале предложения и в именах собственных. Добавление знаков пунктуации config.specification.literature_text=true

API v3

Для включения нормализации задайте в API параметр text_normalization=TEXT_NORMALIZATION_ENABLED. Некоторые опции включаются дополнительными параметрами, когда задан text_normalization=TEXT_NORMALIZATION_ENABLED.

Уровень нормализации Параметр API Поддерживаемые языки
Представление дат и времени в цифровом формате text_normalization=TEXT_NORMALIZATION_ENABLED ru, uz, kk, en, fr, de, es, it, tr
Преобразование чисел из словарного в цифровой формат text_normalization=TEXT_NORMALIZATION_ENABLED ru, uz, kk, en, fr, de, es, it, tr
Форматирование телефонных номеров text_normalization=TEXT_NORMALIZATION_ENABLED. Чтобы выключить только этот уровень, укажите дополнительно phone_formatting_mode=PHONE_FORMATTING_MODE_DISABLED. ru
Работоспособность не тестировалась: en, fr, de, es, it, tr
Маскирование обсценной лексики profanity_filter=true при включенном параметре text_normalization ru
Работоспособность не тестировалась: en, fr, de, es, it, tr
Добавление заглавной буквы в начале предложения и в именах собственных. Добавление знаков пунктуации literature_text=true при включенном параметре text_normalization ru

Нормализация выполняется, только если в списке разрешенных языков указан один язык. Нормализация не поддерживается для следующих языков: pt, pl, nl, fi, sv, he, auto.

SDK

Пример настройки нормализации с помощью SDK:

import os
from yandex_ai_studio_sdk import AIStudio

# Аутентификация через переменные окружения:
# export YC_API_KEY=<API-ключ>
# export YC_FOLDER_ID=<идентификатор_каталога>
sdk = AIStudio(
    auth=os.environ['YC_API_KEY'],
    folder_id=os.environ['YC_FOLDER_ID'],
)

# Нормализация включена, форматирование телефонных номеров активно по умолчанию.
stt = sdk.speechkit.speech_to_text(
    audio_format='wav',
    language_codes='ru-RU',
    text_normalization=True,
)

with open('speech.wav', 'rb') as f:
    audio_data = f.read()

result = stt.run(audio_data)
print(result.text)

# Нормализация без форматирования телефонных номеров.
stt = stt.configure(
    text_normalization=stt.TextNormalization(phone_formatting=False)
)
result = stt.run(audio_data)
print(result.text)

# Нормализация с фильтром обсценной лексики.
stt = stt.configure(
    text_normalization=stt.TextNormalization(profanity_filter=True)
)
result = stt.run(audio_data)
print(result.text)

# Нормализация с добавлением знаков пунктуации и заглавных букв.
stt = stt.configure(
    text_normalization=stt.TextNormalization(literature_text=True)
)
result = stt.run(audio_data)
print(result.text)