Реалізація фільтрації нецензурної лексики в 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