Локальный пайплайн транскрипции на Whisper large-v3 + Gemma 27B + Obsidian
Я системный аналитик в Альфа-банке. Постоянная боль — обрабатывать аудиоконтент: лекции, подкасты, интервью, голосовые заметки, рабочие встречи. Хотелось получить из них структурированные резюме, чтобы потом не переслушивать часовые записи. Облачных решений на рынке много, но они не подходят: данные часто конфиденциальные, отдавать их во внешние сервисы нельзя.
Поэтому решил собрать пайплайн локально. Требования: всё крутится на моём железе, без интернета, без подписок. На выходе — markdown-файл с транскриптом, разбивкой по говорящим и кратким резюме, который сразу попадает в Obsidian как заметка.
Стек получился из пяти компонентов. Whisper large-v3 от OpenAI — распознавание речи. Под русский язык эта версия подходит лучше всего из доступных open-source-моделей: точность распознавания близка к идеалу даже на грязных записях. NeMo от Nvidia — диаризация, то есть разделение записи по говорящим. Gemma 27B (квантованная) — генерация саммари по транскрипту. Bash-скрипты как клей и Obsidian для хранения результата.
Whisper можно запускать в разных размерах — от tiny до large. Для серьёзной работы я остановился на large-v3 — точность на ступени выше, чем у медиум-варианта. Производительность на CPU — медленно, имеет смысл только если есть видеокарта с поддержкой RTX. У меня под это выделена машина с RTX, и обработка часовой записи укладывается в разумное время.
Что Whisper делает хорошо. Шум фоном, посторонние голоса в зале, акценты, плохая дикция — модель справляется. Я тестировал на записях, где было сразу четыре говорящих плюс эхо в комнате — всё пишется внятным текстом. С русским языком работает на ура: технические термины распознаёт корректно, имена и аббревиатуры тоже.
NeMo берёт на себя задачу, с которой Whisper сам по себе не справляется — кто что сказал. Модель строит эмбеддинги голосов и кластеризует фрагменты по говорящим. На встречах из 3–5 человек получается «Speaker 1: ...», «Speaker 2: ...» с правильным разделением. Дальше эти метки можно вручную подменить на реальные имена.
Gemma 27B на финальном шаге берёт сырой транскрипт с разметкой говорящих и делает структурированное резюме: ключевые пункты обсуждения, принятые решения, открытые вопросы. На моих тестах она сильно лучше тянет русскоязычные тексты, чем многие младшие модели — для локального инференса это разумный компромисс между качеством и аппетитом к ресурсам.
Финальный шаг — выгрузка в Obsidian. У меня там личная база знаний, в которой все записи лежат как обычные markdown-файлы с тегами по типу записи (встреча, лекция, интервью), участникам и темам. Через 5–10 минут после конца записи у меня в Obsidian уже лежит структурированная заметка, которую можно искать вместе со всем остальным.
Сравнение с облачными решениями. Любой облачный сервис транскрипции стоит подписку и требует отдавать данные вовне — для рабочих встреч в банке это просто неприемлемо. Локальный пайплайн — один разовый сетап, дальше работает бесконечно бесплатно. Минус — порог входа: нужно разобраться в установке Whisper, NeMo, Gemma, склеить их скриптами, поднять Obsidian. Для разработчика это нормально, для обычного пользователя сложно.
Что я понял после нескольких месяцев работы. Локальный Whisper-стек — это рабочее решение для регулярной обработки аудио, где приватность важнее удобства. Качество распознавания и диаризации сравнимо с платными облаками. Главное — правильно подобрать железо: на CPU всё работает, но мучительно медленно. С RTX-видеокартой пайплайн становится по-настоящему практичным.