Почему Whisper ломается на IT-сленге и как это исправить
Вы проводите техническое собеседование. Кандидат говорит: "Мы использовали Kafka для ивент-драйвена, но потом перешли на RabbitMQ, потому что у нас был легаси-код на Spring Boot". Вы записываете разговор, чтобы потом отправить расшифровку рекрутеру. И получаете это: "Мы использовали кафку для ивент-дривена, но потом перешли на Рэббит-м-кью, потому что у нас был легаси-код на Спринг Бут".
Знакомо? Whisper от OpenAI - отличная модель, но для русской IT-речи она часто выдаёт ерунду. Проблема не в модели, а в данных, на которых её учили. Её корпус - это в основном чистый русский или чистый английский, а речь разработчика - это гибридный язык, где термины на английском встроены в русские предложения, плюс сленг вроде "деплоить", "рефакторить", "баг".
К 2026 году эта проблема только обострилась. С ростом удалённых собеседований и голосовых ассистентов для разработчиков точность транскрипции стала критичной. Ошибки в терминах - это не просто опечатки, это потеря смысла.
Что такое гибридный язык и почему он ломает STT
Гибридный язык - это не просто смесь русского и английского. Это:
- Код-свитчинг: переключение между языками в середине предложения. "Давайте закоммитим этот фикс".
- Транслитерация: английские слова, произнесённые с русским акцентом. "Деплой" вместо "deploy".
- Аббревиатуры и акронимы: AWS, API, SQL, которые могут произноситься как буквы или как слова.
- Сленг: "крашить", "доки", "прод".
Обычные STT-модели обучены на стандартном языке. Они не знают, что "Kafka" - это не чешский писатель, а система потоковой обработки данных. В нашем обзоре голосового ввода для программирования мы уже писали, что эффективность падает на 40% при работе со смешанным контентом.
Три подхода к решению: какой выбрать
Есть три пути:
- Дообучение существующей модели (например, Whisper) на специализированных данных.
- Использование готовой модели, уже обученной на гибридной речи.
- Постобработка текста с помощью словарей или языковых моделей.
Самый эффективный - первый, но он требует данных и вычислительных ресурсов. Второй проще, но таких моделей мало. Третий - костыль, но иногда работает.
1 Сбор датасета: где взять IT-речь
Без данных никуда. Вам нужны аудиозаписи с IT-контентом: собеседования, подкасты, митапы, скринкасты. Проблема: таких открытых датасетов почти нет. Придётся собирать самим.
Источники:
- Подкасты типа "Подкаст для разработчиков", "RadioJS". Но нужно разрешение на использование.
- Ютуб-каналы с техническими докладами. Можно вырезать аудио, но осторожно с лицензиями.
- Синтетические данные: использовать TTS для генерации речи по текстам с IT-терминами. Качество будет ниже, но для начала сойдёт.
- Платформы для разметки данных, например, Toloka или Scale AI, где можно заказать запись и разметку аудио.
Сколько нужно данных? Для дообучения достаточно 10-20 часов качественных записей с транскриптами. Важно, чтобы в транскриптах были точно указаны термины: "Kafka", а не "кафка".
2 Подготовка данных: аудио и текст
Аудио должно быть в формате WAV или FLAC, моно, с частотой 16 кГц. Транскрипты - в текстовых файлах с выравниванием по времени или без.
Пример структуры датасета:
dataset/
├── audio/
│ ├── interview_1.wav
│ └── podcast_2.wav
└── transcripts/
├── interview_1.txt
└── podcast_2.txt
В транскриптах сохраняйте оригинальное написание терминов. Если в речи смесь языков, так и пишите: "Мы использовали Kafka для ивент-драйвена архитектуры."
Не используйте автоматическую транскрипцию для подготовки данных! Это приведёт к зацикливанию ошибок. Все транскрипты должны быть проверены человеком, хотя бы выборочно.
3 Выбор модели и подхода к дообучению
Whisper - хорошая база. Используйте последнюю версию на 2026 год. На момент написания это Whisper-Large-v4, но проверьте актуальность.
Подходы к дообучению:
- Full fine-tuning: дообучаем все слои модели. Требует много данных и GPU, но даёт лучший результат.
- LoRA (Low-Rank Adaptation): дообучаем только небольшие адаптеры. Экономит память и время, часто достаточно для специализации.
- Prefix-tuning: ещё более лёгкий метод, но может не справиться с такой специфичной задачей.
Для IT-речи я рекомендую LoRA. Она позволяет дообучить модель, не теряя общие знания, и требует меньше ресурсов.
Если не хотите дообучать, посмотрите на готовые модели. Например, GigaAM-v3 от Сбера хорошо распознаёт русскую речь, но не факт, что она обучена на IT-сленге. Также есть специализированные модели, но они редки.
4 Обучение модели: код и параметры
Используем библиотеку Hugging Face Transformers. Установите зависимости:
pip install torch torchaudio transformers datasets accelerate peft
Пример кода для дообучения Whisper с LoRA:
from transformers import WhisperForConditionalGeneration, WhisperProcessor
from peft import LoraConfig, get_peft_model
import torch
# Загружаем модель и процессор
model_name = "openai/whisper-large-v4"
processor = WhisperProcessor.from_pretrained(model_name)
model = WhisperForConditionalGeneration.from_pretrained(model_name)
# Настраиваем LoRA
lora_config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["q_proj", "v_proj"],
lora_dropout=0.1,
bias="none"
)
model = get_peft_model(model, lora_config)
# Подготовка датасета (опущено для краткости)
# ...
# Обучение
training_args = Seq2SeqTrainingArguments(
output_dir="./whisper-it-lora",
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
learning_rate=1e-4,
warmup_steps=500,
max_steps=4000,
gradient_checkpointing=True,
fp16=True,
evaluation_strategy="steps",
save_steps=1000,
eval_steps=1000,
logging_dir="./logs",
)
trainer = Seq2SeqTrainer(
model=model,
args=training_args,
train_dataset=train_dataset,
eval_dataset=eval_dataset,
data_collator=data_collator,
compute_metrics=compute_metrics,
)
trainer.train()
Это упрощённый код. Полный пример с обработкой данных можно найти в репозиториях Hugging Face.
Используйте GPU с хотя бы 16 ГБ VRAM для обучения Whisper-Large. Для меньших моделей (например, Whisper-Small) хватит и 8 ГБ. Если нет своего железа, арендуйте облачный инстанс, например, на vast.ai или Lambda Labs.
5 Оценка и тестирование: метрики для гибридного языка
Не доверяйте общему WER (Word Error Rate). Нужна метрика для терминов. Создайте список IT-терминов и считайте отдельно WER для них.
Пример:
def compute_term_wer(reference, hypothesis, terms):
# Разбиваем на слова
ref_words = reference.split()
hyp_words = hypothesis.split()
# Считаем ошибки только для терминов
errors = 0
total_terms = 0
for ref, hyp in zip(ref_words, hyp_words):
if ref in terms:
total_terms += 1
if ref != hyp:
errors += 1
return errors / total_terms if total_terms > 0 else 0
Тестируйте на разных типах записей: чистые лекции, диалоги, записи с фоновым шумом.
6 Интеграция в приложение: от модели до продукта
После обучения экспортируйте модель в формат, подходящий для продакшена. Для Whisper можно использовать ONNX или просто сохранить веса PyTorch.
Пример инференса:
import torch
from transformers import WhisperForConditionalGeneration, WhisperProcessor
model = WhisperForConditionalGeneration.from_pretrained("./whisper-it-lora")
processor = WhisperProcessor.from_pretrained("openai/whisper-large-v4")
# Аудио в формате numpy array
input_features = processor(audio, sampling_rate=16000, return_tensors="pt").input_features
with torch.no_grad():
predicted_ids = model.generate(input_features)
transcription = processor.batch_decode(predicted_ids, skip_special_tokens=True)[0]
print(transcription)
Для массовой обработки используйте асинхронные очереди, например, Redis или RabbitMQ. Если нужно реальное время, посмотрите на оптимизированные инференс-движки вроде Whisper.cpp.
Где ошибаются даже опытные: три фатальные ошибки
- Использовать только синтетические данные. TTS не передаёт все нюансы живой речи, особенно интонации и паузы. Модель переобучится на артефакты.
- Дообучать на слишком маленьком датасете. Менее 5 часов - и модель забудет, как распознавать обычную речь, но не научится новому.
- Игнорировать фонетику терминов. "Kafka" в русской речи может произноситься как "Кафка" с ударением на первый слог. В транскриптах должно быть "Kafka", но модель должна научиться связывать это произношение с написанием.
FAQ: частые вопросы про IT-речь и STT
| Вопрос | Ответ |
|---|---|
| Можно ли использовать Whisper для реальных собеседований без дообучения? | Можно, но будьте готовы к ошибкам в терминах. Для критичных случаев лучше дообучить или использовать постобработку. |
| Сколько стоит собрать датасет? | Если делать самим - только время. На платформах разметки - от 2 до 5 долларов за час аудио с транскрипцией. |
| Какая модель лучше всего для русского IT-контента в 2026? | Пока нет явного лидера. Whisper дообученный - сильный кандидат. Следите за новыми моделями, например, в нашем тесте Qwen3-ASR. |
| Как обрабатывать аббревиатуры вроде "API"? | В транскриптах пишите "API". Модель научится, если в данных достаточно примеров. Можно добавить произношение как "эй-пи-ай" или "апи". |
Итог: улучшение распознавания IT-речи - это не магия, а инженерия. Соберите данные, дообучите модель, тестируйте на терминах. Да, это требует времени, но когда ваш ассистент на собеседовании точно расшифрует "микросервисы на Go с gRPC", вы поймёте, что оно того стоило.
А если нет ресурсов на дообучение, посмотрите на готовые решения вроде JobPath - они как раз специализируются на транскрипции технических интервью. Но это уже тема для другой статьи.