Фильтрация нецензурной лексики в расшифровках: где ломается качество
Штатное решение задачи выглядит просто: словарь запрещённых слов на выходе распознавания. На студийной записи с одним диктором он работает — и именно поэтому кажется, что фильтрация нецензурной лексики закрыта. На реальном потоке правило пропускает заметную часть брани и одновременно режет нейтральные слова, после чего расшифровка перестаёт быть источником, которому доверяет контроль качества.
Сильнее всего проседают шумные записи распознавания: перебивания, музыка на удержании, сжатие телефонного канала. Модель подставляет фонетически близкое слово, и мат в расшифровке речи либо исчезает, либо появляется там, где его не было. Словарь сравнивает строки, а не смысл, поэтому такую подстановку он не ловит.
Второй слой — обход правил. Брань приходит латиницей, разбитой дефисами, звёздочками, пробелами внутри слова, эвфемизмами и сленгом конкретной смены. Одновременно срабатывает обратная ошибка: под правило попадают фамилии, топонимы и бытовые слова — и оператор получает разбор по фразе, которой не было.
В разговоре двух каналов добавляется атрибуция. Разделение по голосам на перебиваниях путает роли, и реплика клиента приписывается оператору, хотя именно от этого зависит оценка работы. Здесь и ломается качество транскрипта контакт-центра: дело не в том, что слова нет в словаре, а в том, что решение о нём принимается без контекста разговора.
Разбираем, как это закрывается: доменный словарь в связке с правилами на контекст, порог уверенности вместо жёсткого совпадения строк, разметка спорных участков на выборочную проверку и контроль доли ложных срабатываний после каждой правки.
Что даёт управляемая обработка речи: измеримые эффекты
До фильтрации расшифровка живёт в режиме ручной доводки: оператор вычитывает текст и правит лексику — это 20–30% реплик в записях колл-центра. Когда чистка расшифровок идёт внутри распознавания, а не поверх готового текста, доля ручной правки транскриптов падает до единиц процентов, и запись уходит в учётную систему уже пригодной к использованию.
Ключевая величина, по которой мы принимаем работу, — доля ложных срабатываний на нормативной лексике. Русский мат омонимичен: под правило попадают фамилии, топонимы, названия лекарств и разговорные «блин» или «хрен», поэтому фильтр строится не на списке слов, а на словаре исключений, контексте фразы и морфологии. На тестовой выборке держим ложные срабатывания ниже 0,5%, пропуск реальной нецензурной лексики — в пределах 1–2%.
Единый стандарт речи даёт предсказуемость: одна политика обработки работает и на телефонии, и на микрофоне в переговорной, и на записях вебинаров — не нужно вести отдельные наборы правил под каждый канал. За основу берём открытую модель Whisper и дообучаем её на доменном словаре заказчика, чтобы имена, аббревиатуры и отраслевые термины не маскировались фильтром вместе с бранью.
Стабильность распознавания речи проверяем на длинных записях, где качество канала плывёт: узкополосная телефония, перекрывающиеся голоса, фоновый шум. Метрика здесь — доля слов, требующих правки после обработки, и её разброс между каналами: если телефонная расшифровка и студийная расходятся в разы, политику пересобирают до сходимости.
Фильтрация в потоке распознавания и на постобработке: что выбрать
Развилка простая: правило срабатывает внутри декодера, пока аудио превращается в текст, либо уже на готовой расшифровке. Первый вариант не добавляет задержки в поток, второй — видит фразу целиком и работает со словарями и контекстом. Выбор диктует архитектура обработки речи: потоковые субтитры и голосовой ввод с одной стороны, финальная расшифровка для аналитики и протоколов — с другой.
Отдельно решается, где обрезается оригинал. Маскирование фрагментов в потоке не оставляет «сырого» текста, а постобработка расшифровки сохраняет исходник и позволяет разобрать спорные срабатывания.
| Вариант | Когда подходит | Ограничения |
|---|---|---|
| Правила на этапе распознавания | Поток: субтитры, телефония, голосовой ввод — недопустимое слово не должно попасть в выдачу вовсе | Словарь вшит в модель: обновление списка — пересборка и проверка качества. Омофоны и имена страдают, точность распознавания падает |
| Постобработка расшифровки | Аналитика, протоколы, длинные записи, где задержка в секунды допустима | Аудио недоступно: слияния слов и нестандартные написания проходят мимо. Нужен второй проход и стабильный промежуточный формат |
| Гибрид: смещение декодера плюс текстовый слой | Массовые сервисы, где список слов меняется, а задержка критична | Два набора правил приходится синхронизировать, чтобы маскирование не сработало дважды |
Чем именно маскировать — звёздочками, тегом-заглушкой или пропуском — решается на том же шаге и влияет на то, как расшифровку потом читает поиск и аналитика.
Этапы внедрения: от аудита записей до передачи регламентов
Работа идёт итерациями: сначала смотрим на реальные записи, а не на демонстрационные примеры, и только потом выбираем схему. Так фильтр не начинает глушить обычные слова и не пропускает то, ради чего его ставили.
- Аудит записей. Выгружаем архив за типичный период: считаем долю нецензурной лексики, смотрим каналы записи, фоновый шум и перекрытие голосов. Без этого пороги настраивать не на чем.
- Схема обработки. Определяем, где стоит фильтр — до распознавания, по звуковой дорожке, или после, по тексту, — и что происходит при срабатывании: заглушение, сигнал, замена или пометка для модератора.
- Разметка контрольного корпуса. Вручную размечаем несколько часов записей: где мат есть, где его нет, и отдельно — спорные случаи и похожие по звучанию слова. Корпус становится эталоном для всех последующих проверок.
- Настройка и калибровка. Собираем словари с учётом словоформ, задаём пороги отдельно для чистых и шумных дорожек. Ложные срабатывания на этом этапе важнее пропусков: они ломают доверие к фильтру.
- Проверка на контрольной выборке. Прогоняем размеченный корпус и считаем, сколько поймали, сколько пропустили и сколько нормальных слов задели. Смотрим худшие фрагменты, а не средние.
- Приёмка качества распознавания. Убеждаемся, что фильтр не ухудшил сам текст: смысл фраз сохранился, задержка в допустимых границах. Приёмка идёт по согласованным показателям, а не на слух.
- Передача регламентов. Отдаём документацию: как добавить слово, обновить словарь, перепроверить изменения на том же корпусе, подключить новый канал записи. Корпус и правила остаются у заказчика.
Что остаётся у заказчика: словари, правила и регламенты
Проект закрывается не демонстрацией, а набором артефактов, которые команда заказчика правит без нас. Всё, что влияет на поведение фильтра, лежит в файлах настроек под контролем версий, а не внутри кода обработчика — поэтому правку словаря можно проверить ревью и откатить.
- Словари терминов. Базовый список нецензурных основ с нормализацией: регистр, транслит, латинские омоглифы, растянутые повторяющиеся буквы. Отдельным блоком — список ложных срабатываний, чтобы легальные слова внутри длинных токенов не маскировались.
- Профили чувствительности. Наборы порогов под каналы и сценарии: строгий для эфира и записи клиентских разговоров, мягкий для внутренней расшифровки, где важнее полнота транскрипта, чем чистота текста.
- Правила замены фрагментов. Маскирование посимвольно, замена на нейтральную метку, удаление слова с сохранением тайм-кодов — субтитр не съезжает относительно звука.
- Порог по уверенности распознавания. Слово маскируется только тогда, когда модель уверена в гипотезе; на шумных дорожках обычная речь перестаёт попадать под замену.
- Регламент эксплуатации. Кто пополняет словарь, с какой периодичностью, как прогоняется проверка на размеченном наборе и что делать при ложном срабатывании в рабочем контуре.
- Документация и передача. Описание форматов файлов настроек, схема потока аудио, порядок выкладки профиля и откат на предыдущую версию.
Отдаём в вашем репозитории вместе с примерами записей и набором проверочных кейсов — воспроизводимость важнее устных договорённостей.
Кейс: контакт-центр, доля брака в расшифровках до и после
Контакт-центр с потоком в несколько тысяч диалогов в сутки выгружал расшифровки в контроль качества, в отчёты руководителей смен и в выборку для разметки. В сыром тексте оставались недопустимые фрагменты — брань в адрес оператора, оскорбления в репликах клиентов, — и они расходились по внутренним документам вместе с расшифровкой.
Метрики до и после
| Метрика | До внедрения | После |
|---|---|---|
| Доля недопустимых фрагментов в расшифровках | 4,8% | 0,4% |
| Ложные срабатывания на нормальной лексике | 7,1% | 1,3% |
| Диалоги, требовавшие ручной правки | 21% | 4% |
Что дало снижение ложных срабатываний
Ключевым оказалось не расширение словаря, а разведение двух режимов: уверенное совпадение маскируется сразу, спорное — не вырезается, а помечается флагом и уходит на проверку. Пороги настраивали на своём размеченном наборе: открытый корпус Common Voice плюс несколько тысяч диалогов с двойной разметкой, где спорные реплики независимо размечали два проверяющих.
Маскирование сделали обратимым: на месте фрагмента остаётся служебная метка с сохранением структуры реплики, поэтому речевая аналитика по паузам и перебиваниям продолжает работать, а ручная правка сократилась с пятой части диалогов до единичных случаев. Похожие потоки разбираем так же — от разметки до порогов.
Чем отличается маскирование от удаления фрагментов записи?
Разница проявляется в том, что происходит с временной шкалой записи. Маскирование оставляет на месте бранного слова созвучную замену или короткий маркер, поэтому длительность фрагмента не меняется и хронометраж записи остаётся исходным.
Удаление вырезает участок целиком: дорожка укорачивается, и все последующие таймкоды смещаются на сэкономленные доли секунды. Для архива интервью это незаметно, а для аналитики — нет: сегментация речи привязывает реплики к абсолютному времени, и после удаления спикер, субтитры и видеоряд расходятся.
Сохранение смысла фразы тоже зависит от способа. При маскировании контекст восстанавливается по соседним словам, при удалении рвутся интонация и связки, а короткая реплика может схлопнуться в пустую строку — по такой расшифровке уже не понять, о чём шла речь.
По задержке обработки выигрывает маскирование: замена идёт по словарю на готовой расшифровке, без пересборки аудио. Удаление в потоке требует пересчёта буфера и повторной склейки звука — это добавляет задержку и риск щелчков на стыках.
На практике в связке с распознаванием речи на Whisper мы чаще ставим гибрид: в тексте — маскирование, в аудио — короткий тон или сигнал той же длительности. Тогда запись не содержит ненормативной лексики, хронометраж сходится с исходным, а аналитика по репликам работает без ручной правки таймкодов.
Спорные случаи: ложные срабатывания, диалекты, имена
Омонимы и имена собственные дают ложные срабатывания чаще всего: короткое слово в другом контексте или фамилия, созвучная с корнем матерного, вырезают нормальную реплику из расшифровки. Мы не решаем по одному совпадению — вердикт собирается из контекста фразы, уверенности распознавания и белого списка сущностей, собранного из справочников и базы клиента. Спорные фрагменты не удаляются молча: они помечаются и уходят в очередь на вычитку, чтобы правка словаря была настройкой, а не переписыванием уже отданных результатов.
Клиента зовут так же, как звучит нецензурное слово — пострадает расшифровка?
Нет. Белый список имён, топонимов и названий компаний имеет приоритет над общим словарём: при совпадении решение принимается по контексту фразы и уверенности модели, а не по факту вхождения подстроки. Если уверенность низкая, слово остаётся как есть с пометкой — потерять смысл реплики дороже, чем пропустить единичный случай.
Что делать с акцентами, диалектами и смешением языков в одной записи?
Словарь расширяем фонетическими вариантами произношения, для каждого языка фразы подключаем свою языковую модель, а переключение определяем по ходу записи — иначе вставка на другом языке внутри русской реплики распознаётся как случайный набор звуков. Акцентные и диалектные формы проверяем на реальных записях заказчика, а не на синтетике: так видно, где модель ошибается системно и нужна донастройка, а где достаточно пополнить словарь.
Слабый звук, шум помещения и перекрывающие друг друга голоса — главный источник ошибок в обе стороны: фильтр либо срабатывает на безобидном слове, либо пропускает реальную брань. Здесь работает отсечение неречевых участков, выравнивание уровня громкости и повторный проход по менее уверенным гипотезам распознавания. Оскорбительное слово мы маскируем, а не вырезаем: смысл и длина реплики сохраняются, метрики аналитики не ломаются, а доля ложных срабатываний держится ниже согласованного с заказчиком порога.Обсудим задачу: соберём правила под ваш поток записей
Чтобы вернуться с оценкой, а не с общими словами, нам нужен ваш материал: 20–30 минут реальных записей с типичными голосами, шумом и оговорками, плюс короткое описание, куда уходит текст после распознавания. По этим данным видно, где распознавание ошибается чаще всего и сколько правил придётся описать вручную.
- образцы записей — аудио из разных условий: телефонный звонок, микрофон в переговорной, запись с улицы;
- требования к результату — что считаем недопустимым, что допустимо оставить и кто утверждает спорные случаи;
- словарь исключений — имена, названия и термины, которые вырезать нельзя;
- маршрут текста — куда приходит очищенная расшифровка: в отчёт, в поиск, в архив;
- режим обработки — поток в реальном времени или пакетная загрузка уже накопленных файлов;
- критерии приёмки — допустимая доля пропусков и ложных срабатываний на вашем наборе.
Из этого собираем план внедрения: порядок работ, сроки настройки и пилот на ваших записях. Пилот запускаем на ограниченном наборе — вы сравниваете результат на своих примерах и решаете, идём ли в полный объём.
Опишите задачу: пришлите образцы и требования — вернёмся с оценкой, планом и сроками.







