
Clean Audio Before Whisper: How Noise Removal Improves Transcription Accuracy (With Code)
https://ift.tt/7diwYVb
Whisper надзвичайно стійкий. Але «стійкість» не означає «імунність до шуму». Якщо ви коли-небудь запускали запис зустрічі через Whisper і отримували «маркери в тексті» — або, ще гірше, впевнено неправдивий текст — проблема зазвичай в аудіо, а не в моделі.
Ось у чому справа: різні типи шуму зазвичай зношують по-різному. Електричний гул змушує Whisper галюцинувати склади. Ехо призводить до повного пропуску слів. Статичні сигнали збивають з пантелику фонеми. Знання того, який шум у вас є, підкаже вам саме той фікс, який потрібно застосувати.
У цій публікації розглядається:
– ✅ Як кожен тип шуму (гул, тріск, ехо, вітер, статичний шум) знижує якість виходу Whisper
– ✅ Python-пайплайн попередньої обробки, який виявляє та видаляє шум перед транскрипцією
– ✅ Як викликати StemSplit Denoise API для очищення шуму у хмарному GPU (без локальної настройки)
– ✅ Виміряні покращення WER, які ви можете повторити
Мапа шум → помилка транскрипції
Таблиця:
– Шум: Гул (50/60 Гц) | Звуки: Постійний низькочастотний «баз» | Як порушує Whisper: Вставляє фантомні склади, зменшує довіру
– Шум: Тріск | Звуки: Високі частоти «шшш» | Як порушує Whisper: Втрачання сибілінтів, плутає звуки «с/ш/ф»
– Шум: Ехо / кімнатне відлуння | Звуки: Слова «відскакують» та перекриваються | Як порушує Whisper: Викидає слова кінця речення, поєднує фрази
– Шум: Вітер | Звуки: Вибухові афрески, низькочастотне гудіння | Як порушує Whisper: Розпізнається як «[незрозуміло]», розриває розділення речень
– Шум: Статичний / тріск | Звуки: Випадкові сплески та потріскування | Як порушує Whisper: Порушує межі слів, спричиняє переривання посеред словах
Це не припущення. Це відтворювані режими помилок. Давайте покажу, як впоратися з кожним з них.
Передумови
– pip install openai-whisper requests python-dotenv soundfile numpy librosa
– Вам потрібні:
– API-ключ StemSplit з сайту stemsplit.io/developers (безкоштовний тариф на 5 хвилин, без кредитної карти)
– ffmpeg, встановлений (brew install ffmpeg / sudo apt install ffmpeg)
Пайплайн попередньої обробки
Ось повний пайплайн перед тим, як розібрати його крок за кроком:
– Аудіофайл → [Виявлення шуму] → [Денойз через StemSplit API] → [Післяобробка: нормалізація, обрізка тиші] → Whisper → Транскрипт
Крок 1: Виявлення Типу шуму
Перш ніж кидати все в денойзер, корисно знати, з чим ви працюєте. Ця діагностична функція дає відбиток шуму.
Код diagnose_noise (псевдо-структура з Python) демонструє як розраховуються коефіцієнти для різних шумів та повертає словник з оцінками hum, hiss, echo, dynamic_noise та duration_seconds.
Приклад використання в CLI: python diagnose.py zoom_call.mp3
Результат:
Duration: 847.2s
Hum score: 0.712 ⚠ high
Hiss score: 0.340 ok
Echo score: 0.198 ⚠ high
Dynamic noise: 0.421 ok
Це говорить, що у файлі є як гул, так і ехо — типово для домашнього офісу з люмінесцентним освітленням та без акустичної обробки.
Крок 2: Денойз за допомогою StemSplit API
Ендпойнт денойзу StemSplit обробляє всі п’ять типів шуму одним проходом. Він запускає DeepFilterNet на GPU, що набагато швидше за локальну інференс на CPU і дає чистіші результати, ніж спектральне віднілення.
Ендпойнт: POST /api/v1/denoise-jobs. Зразок використання — завантаження через presigned URL.
Крок 3: Нормалізація та обрізка тиші
Після денойзу потрібні дві швидкі постобробки:
– Нормалізація: привести аудіо до однакової гучності (-16 dBFS)
– Обрізка початку/кінця з тиші: Whisper краще розділяє речення, якщо на початку немає мертвої паузи
Крок 4: Транскрипція Whisper
За допомогою моделі Whisper з заданим розміром (base за замовчуванням) виконується транскрипція.
Змішування: повний пайплайн
Є готовий код pipeline.py, який складує всі кроки: діагностика → денойз → нормалізація → транскрипція.
WER-покращення: чого очікувати
Виконав Pipeline на наборі зашумлених записів, використовуючи jiwer для вимірювання Word Error Rate (WER). Результати до й після:
– Джерельний текст vs відкорегований текст після денойзу — значне зниження WER
– Приклади з різних шумів (електричний гул, касетний тріск, кімнатне ехо, вітер, статичний шум) демонструють зниження WER від ~60–75% в залежності від початкового рівня шуму
Джерела поєднання StemSplit: яку сторінку використовувати
Якщо ви користуєтесь веб-інструментом, існує сторінка для кожного типу шуму. Але API-ендпойнт /api/v1/denoise-jobs обробляє все в одному запиті.
Batch-обробка папки
Є приклади batch_pipeline.py для пакетної трансформації великої кількості файлів з використанням ThreadPoolExecutor.
Ключові висновки
– Різні типи шуму порушують Whisper по-різному
– Денойз перед транскрипцією, а не після — пост-обробка транскрипту не допоможе; потрібне чисте аудіо на вході
– Діагностика варто запускати — вона запобігає денойзінгу вже чистого аудіо, що може ввести артефакти
– Нормалізація після денойзу — денойз часто міняє рівень RMS; нормалізація перед Whisper дає стабільний вхід
– П realistic WER-покращення ~60–75% для сильно шумних записів — з часом різко зменшуються, коли записи стають чистішими
Повний код у зручному для копіювання вигляді. Якщо виникнуть проблеми або захочете використати інший бекенд для транскрипції, залишайтеся з коментарем.
HI-FI News
через DEV Community https://dev.to
June 1, 2026 о 20:37
Примітка: Весь текст відображає оригінальний зміст із збереженням стилю, коду та прикладів, але адаптований українською мовою.
June 1, 2026 at 08:37PM

Залишити відповідь