Реализация фильтрации нецензурной лексики в STT под ключ

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

Фильтрация нецензурной лексики в расшифровках: где ломается качество

Штатное решение задачи выглядит просто: словарь запрещённых слов на выходе распознавания. На студийной записи с одним диктором он работает — и именно поэтому кажется, что фильтрация нецензурной лексики закрыта. На реальном потоке правило пропускает заметную часть брани и одновременно режет нейтральные слова, после чего расшифровка перестаёт быть источником, которому доверяет контроль качества.

Сильнее всего проседают шумные записи распознавания: перебивания, музыка на удержании, сжатие телефонного канала. Модель подставляет фонетически близкое слово, и мат в расшифровке речи либо исчезает, либо появляется там, где его не было. Словарь сравнивает строки, а не смысл, поэтому такую подстановку он не ловит.

Второй слой — обход правил. Брань приходит латиницей, разбитой дефисами, звёздочками, пробелами внутри слова, эвфемизмами и сленгом конкретной смены. Одновременно срабатывает обратная ошибка: под правило попадают фамилии, топонимы и бытовые слова — и оператор получает разбор по фразе, которой не было.

В разговоре двух каналов добавляется атрибуция. Разделение по голосам на перебиваниях путает роли, и реплика клиента приписывается оператору, хотя именно от этого зависит оценка работы. Здесь и ломается качество транскрипта контакт-центра: дело не в том, что слова нет в словаре, а в том, что решение о нём принимается без контекста разговора.

Разбираем, как это закрывается: доменный словарь в связке с правилами на контекст, порог уверенности вместо жёсткого совпадения строк, разметка спорных участков на выборочную проверку и контроль доли ложных срабатываний после каждой правки.

Что даёт управляемая обработка речи: измеримые эффекты

До фильтрации расшифровка живёт в режиме ручной доводки: оператор вычитывает текст и правит лексику — это 20–30% реплик в записях колл-центра. Когда чистка расшифровок идёт внутри распознавания, а не поверх готового текста, доля ручной правки транскриптов падает до единиц процентов, и запись уходит в учётную систему уже пригодной к использованию.

Ключевая величина, по которой мы принимаем работу, — доля ложных срабатываний на нормативной лексике. Русский мат омонимичен: под правило попадают фамилии, топонимы, названия лекарств и разговорные «блин» или «хрен», поэтому фильтр строится не на списке слов, а на словаре исключений, контексте фразы и морфологии. На тестовой выборке держим ложные срабатывания ниже 0,5%, пропуск реальной нецензурной лексики — в пределах 1–2%.

Единый стандарт речи даёт предсказуемость: одна политика обработки работает и на телефонии, и на микрофоне в переговорной, и на записях вебинаров — не нужно вести отдельные наборы правил под каждый канал. За основу берём открытую модель Whisper и дообучаем её на доменном словаре заказчика, чтобы имена, аббревиатуры и отраслевые термины не маскировались фильтром вместе с бранью.

Стабильность распознавания речи проверяем на длинных записях, где качество канала плывёт: узкополосная телефония, перекрывающиеся голоса, фоновый шум. Метрика здесь — доля слов, требующих правки после обработки, и её разброс между каналами: если телефонная расшифровка и студийная расходятся в разы, политику пересобирают до сходимости.

Фильтрация в потоке распознавания и на постобработке: что выбрать

Развилка простая: правило срабатывает внутри декодера, пока аудио превращается в текст, либо уже на готовой расшифровке. Первый вариант не добавляет задержки в поток, второй — видит фразу целиком и работает со словарями и контекстом. Выбор диктует архитектура обработки речи: потоковые субтитры и голосовой ввод с одной стороны, финальная расшифровка для аналитики и протоколов — с другой.

Отдельно решается, где обрезается оригинал. Маскирование фрагментов в потоке не оставляет «сырого» текста, а постобработка расшифровки сохраняет исходник и позволяет разобрать спорные срабатывания.

Вариант Когда подходит Ограничения
Правила на этапе распознавания Поток: субтитры, телефония, голосовой ввод — недопустимое слово не должно попасть в выдачу вовсе Словарь вшит в модель: обновление списка — пересборка и проверка качества. Омофоны и имена страдают, точность распознавания падает
Постобработка расшифровки Аналитика, протоколы, длинные записи, где задержка в секунды допустима Аудио недоступно: слияния слов и нестандартные написания проходят мимо. Нужен второй проход и стабильный промежуточный формат
Гибрид: смещение декодера плюс текстовый слой Массовые сервисы, где список слов меняется, а задержка критична Два набора правил приходится синхронизировать, чтобы маскирование не сработало дважды

Чем именно маскировать — звёздочками, тегом-заглушкой или пропуском — решается на том же шаге и влияет на то, как расшифровку потом читает поиск и аналитика.

Этапы внедрения: от аудита записей до передачи регламентов

Работа идёт итерациями: сначала смотрим на реальные записи, а не на демонстрационные примеры, и только потом выбираем схему. Так фильтр не начинает глушить обычные слова и не пропускает то, ради чего его ставили.

  1. Аудит записей. Выгружаем архив за типичный период: считаем долю нецензурной лексики, смотрим каналы записи, фоновый шум и перекрытие голосов. Без этого пороги настраивать не на чем.
  2. Схема обработки. Определяем, где стоит фильтр — до распознавания, по звуковой дорожке, или после, по тексту, — и что происходит при срабатывании: заглушение, сигнал, замена или пометка для модератора.
  3. Разметка контрольного корпуса. Вручную размечаем несколько часов записей: где мат есть, где его нет, и отдельно — спорные случаи и похожие по звучанию слова. Корпус становится эталоном для всех последующих проверок.
  4. Настройка и калибровка. Собираем словари с учётом словоформ, задаём пороги отдельно для чистых и шумных дорожек. Ложные срабатывания на этом этапе важнее пропусков: они ломают доверие к фильтру.
  5. Проверка на контрольной выборке. Прогоняем размеченный корпус и считаем, сколько поймали, сколько пропустили и сколько нормальных слов задели. Смотрим худшие фрагменты, а не средние.
  6. Приёмка качества распознавания. Убеждаемся, что фильтр не ухудшил сам текст: смысл фраз сохранился, задержка в допустимых границах. Приёмка идёт по согласованным показателям, а не на слух.
  7. Передача регламентов. Отдаём документацию: как добавить слово, обновить словарь, перепроверить изменения на том же корпусе, подключить новый канал записи. Корпус и правила остаются у заказчика.

Что остаётся у заказчика: словари, правила и регламенты

Проект закрывается не демонстрацией, а набором артефактов, которые команда заказчика правит без нас. Всё, что влияет на поведение фильтра, лежит в файлах настроек под контролем версий, а не внутри кода обработчика — поэтому правку словаря можно проверить ревью и откатить.

  • Словари терминов. Базовый список нецензурных основ с нормализацией: регистр, транслит, латинские омоглифы, растянутые повторяющиеся буквы. Отдельным блоком — список ложных срабатываний, чтобы легальные слова внутри длинных токенов не маскировались.
  • Профили чувствительности. Наборы порогов под каналы и сценарии: строгий для эфира и записи клиентских разговоров, мягкий для внутренней расшифровки, где важнее полнота транскрипта, чем чистота текста.
  • Правила замены фрагментов. Маскирование посимвольно, замена на нейтральную метку, удаление слова с сохранением тайм-кодов — субтитр не съезжает относительно звука.
  • Порог по уверенности распознавания. Слово маскируется только тогда, когда модель уверена в гипотезе; на шумных дорожках обычная речь перестаёт попадать под замену.
  • Регламент эксплуатации. Кто пополняет словарь, с какой периодичностью, как прогоняется проверка на размеченном наборе и что делать при ложном срабатывании в рабочем контуре.
  • Документация и передача. Описание форматов файлов настроек, схема потока аудио, порядок выкладки профиля и откат на предыдущую версию.

Отдаём в вашем репозитории вместе с примерами записей и набором проверочных кейсов — воспроизводимость важнее устных договорённостей.

Кейс: контакт-центр, доля брака в расшифровках до и после

Контакт-центр с потоком в несколько тысяч диалогов в сутки выгружал расшифровки в контроль качества, в отчёты руководителей смен и в выборку для разметки. В сыром тексте оставались недопустимые фрагменты — брань в адрес оператора, оскорбления в репликах клиентов, — и они расходились по внутренним документам вместе с расшифровкой.

Метрики до и после

Метрика До внедрения После
Доля недопустимых фрагментов в расшифровках 4,8% 0,4%
Ложные срабатывания на нормальной лексике 7,1% 1,3%
Диалоги, требовавшие ручной правки 21% 4%

Что дало снижение ложных срабатываний

Ключевым оказалось не расширение словаря, а разведение двух режимов: уверенное совпадение маскируется сразу, спорное — не вырезается, а помечается флагом и уходит на проверку. Пороги настраивали на своём размеченном наборе: открытый корпус Common Voice плюс несколько тысяч диалогов с двойной разметкой, где спорные реплики независимо размечали два проверяющих.

Маскирование сделали обратимым: на месте фрагмента остаётся служебная метка с сохранением структуры реплики, поэтому речевая аналитика по паузам и перебиваниям продолжает работать, а ручная правка сократилась с пятой части диалогов до единичных случаев. Похожие потоки разбираем так же — от разметки до порогов.

Чем отличается маскирование от удаления фрагментов записи?

Разница проявляется в том, что происходит с временной шкалой записи. Маскирование оставляет на месте бранного слова созвучную замену или короткий маркер, поэтому длительность фрагмента не меняется и хронометраж записи остаётся исходным.

Удаление вырезает участок целиком: дорожка укорачивается, и все последующие таймкоды смещаются на сэкономленные доли секунды. Для архива интервью это незаметно, а для аналитики — нет: сегментация речи привязывает реплики к абсолютному времени, и после удаления спикер, субтитры и видеоряд расходятся.

Сохранение смысла фразы тоже зависит от способа. При маскировании контекст восстанавливается по соседним словам, при удалении рвутся интонация и связки, а короткая реплика может схлопнуться в пустую строку — по такой расшифровке уже не понять, о чём шла речь.

По задержке обработки выигрывает маскирование: замена идёт по словарю на готовой расшифровке, без пересборки аудио. Удаление в потоке требует пересчёта буфера и повторной склейки звука — это добавляет задержку и риск щелчков на стыках.

На практике в связке с распознаванием речи на Whisper мы чаще ставим гибрид: в тексте — маскирование, в аудио — короткий тон или сигнал той же длительности. Тогда запись не содержит ненормативной лексики, хронометраж сходится с исходным, а аналитика по репликам работает без ручной правки таймкодов.

Спорные случаи: ложные срабатывания, диалекты, имена

Омонимы и имена собственные дают ложные срабатывания чаще всего: короткое слово в другом контексте или фамилия, созвучная с корнем матерного, вырезают нормальную реплику из расшифровки. Мы не решаем по одному совпадению — вердикт собирается из контекста фразы, уверенности распознавания и белого списка сущностей, собранного из справочников и базы клиента. Спорные фрагменты не удаляются молча: они помечаются и уходят в очередь на вычитку, чтобы правка словаря была настройкой, а не переписыванием уже отданных результатов.

Клиента зовут так же, как звучит нецензурное слово — пострадает расшифровка?

Нет. Белый список имён, топонимов и названий компаний имеет приоритет над общим словарём: при совпадении решение принимается по контексту фразы и уверенности модели, а не по факту вхождения подстроки. Если уверенность низкая, слово остаётся как есть с пометкой — потерять смысл реплики дороже, чем пропустить единичный случай.

Что делать с акцентами, диалектами и смешением языков в одной записи?

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

Слабый звук, шум помещения и перекрывающие друг друга голоса — главный источник ошибок в обе стороны: фильтр либо срабатывает на безобидном слове, либо пропускает реальную брань. Здесь работает отсечение неречевых участков, выравнивание уровня громкости и повторный проход по менее уверенным гипотезам распознавания. Оскорбительное слово мы маскируем, а не вырезаем: смысл и длина реплики сохраняются, метрики аналитики не ломаются, а доля ложных срабатываний держится ниже согласованного с заказчиком порога.

Обсудим задачу: соберём правила под ваш поток записей

Чтобы вернуться с оценкой, а не с общими словами, нам нужен ваш материал: 20–30 минут реальных записей с типичными голосами, шумом и оговорками, плюс короткое описание, куда уходит текст после распознавания. По этим данным видно, где распознавание ошибается чаще всего и сколько правил придётся описать вручную.

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

Из этого собираем план внедрения: порядок работ, сроки настройки и пилот на ваших записях. Пилот запускаем на ограниченном наборе — вы сравниваете результат на своих примерах и решаете, идём ли в полный объём.

Опишите задачу: пришлите образцы и требования — вернёмся с оценкой, планом и сроками.

Направления AI-разработки

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    815
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139