惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
AWS News Blog
AWS News Blog
V
Vulnerabilities – Threatpost
D
Darknet – Hacking Tools, Hacker News & Cyber Security
量子位
博客园 - 叶小钗
AI
AI
T
Tor Project blog
Forbes - Security
Forbes - Security
W
WeLiveSecurity
博客园_首页
爱范儿
爱范儿
J
Java Code Geeks
B
Blog
G
GRAHAM CLULEY
aimingoo的专栏
aimingoo的专栏
Cloudbric
Cloudbric
C
CXSECURITY Database RSS Feed - CXSecurity.com
TaoSecurity Blog
TaoSecurity Blog
L
LINUX DO - 热门话题
阮一峰的网络日志
阮一峰的网络日志
有赞技术团队
有赞技术团队
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Simon Willison's Weblog
Simon Willison's Weblog
云风的 BLOG
云风的 BLOG
Google DeepMind News
Google DeepMind News
H
Help Net Security
博客园 - 三生石上(FineUI控件)
C
Cisco Blogs
C
Cybersecurity and Infrastructure Security Agency CISA
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
P
Palo Alto Networks Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Recent Commits to openclaw:main
Recent Commits to openclaw:main
博客园 - 司徒正美
The Last Watchdog
The Last Watchdog
Blog — PlanetScale
Blog — PlanetScale
T
The Blog of Author Tim Ferriss
S
Secure Thoughts
Spread Privacy
Spread Privacy
F
Fortinet All Blogs
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
H
Hackread – Cybersecurity News, Data Breaches, AI and More
A
About on SuperTechFans
Security Latest
Security Latest
Webroot Blog
Webroot Blog
Scott Helme
Scott Helme
Hugging Face - Blog
Hugging Face - Blog

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Почему Cluely и другие плохо слышат русских айтишников: разбор того, как Whisper ломается и что мы сделали с этим
billiedark · 2026-04-23 · via Все публикации подряд на Хабре

Уровень сложностиСредний

Время на прочтение8 мин

Охват и читатели682

Кейс

фото с реального собеседования нашего клиента

фото с реального собеседования нашего клиента

В январе я купил подписки на Cluely, Final Round AI и Sensei. Хотел посмотреть как они справляются с русским айти-собесами, раз уж все три заявляют о поддержке русского. Подключил по очереди к тестовому звонку в Телемосте (сомневаюсь, что платформа имела роль, но все же), прогнал одну и ту же запись: Senior Python backend разработчик, 45 минут, стек FastAPI + PostgreSQL + Kafka + Kubernetes. Обычный русский спикер, если важно - из Москвы, с речью проблем не было, нормальный микрофон

Все три выдали транскрипт и все три провалились, как неожиданно..

"Кафка" в половине случаев становилась "как-то" или "кофта". "Кубернетис" превращался в "губер нет тест". "Сабскрайбер патерн" - в "саб скрайп патерн". "Middleware для CSRF" - "мидл-вер для си эс эр эф" - это еще норм

Проблема не в том, что человек говорил по-русски, и не в том, что Whisper не умеет русский (сноска: хорошо не умеет). Whisper умеет русский нормально, около 9.8% WER на Common Voice. Проблема в другом: русскоязычный айтишник не говорит ни на чистом русском, ни на чистом английском. Он говорит на гибриде: русская грамматика плюс английские термины плюс своеобразное произношение этих терминов плюс местами свой жаргон вроде "гошечки" и "крудошлёпа"

Этот гибрид ни один из популярных STT не держит. Потому что его в тренировочных данных почти нет

Разбираю ниже, как устроена эта проблема, что с ней делают конкуренты (почти ничего), и что сделали мы в JobPath

Как устроена речевая часть в ассистентах для собеседований

Архитектурно у всех продуктов в нише одно и то же:

  1. Перехват аудио с системного output (чтобы слышать интервьюера через Zoom/Мит/Телемост) плюс опционально с микрофона кандидата

  2. Speech-to-text в реальном времени. Аудио превращается в транскрипт

  3. LLM. Транскрипт плюс контекст (резюме, стек, прошлые ответы) уходит в модель, обратно приходит ответ

  4. Вывод на экран так, чтобы не попасть в демонстрацию экрана интервьюеру

Интересное с точки зрения распознавания речи происходит на втором шаге: если STT услышал не то, дальше никакой промпт-инженерией не починить: LLM получает "кофта" и генерирует либо ответ про одежду, либо галлюцинацию (пытаясь пофиксить эту проблему системным промптом)

Под капотом у конкурентов на STT три основных варианта:

Whisper (OpenAI, open-source) или его форки. По анализу опенсорсных аналогов Cluely и по ошибкам, которые я наблюдаю в транскриптах, с большой вероятностью это Whisper large-v3. Sensei выдаёт похожие паттерны ошибок. Parakeet по имени намекает на NVIDIA NeMo Parakeet, но я не смог подтвердить это по опенсорс-клонам..

OpenAI Realtime API (gpt-4o-realtime). Использует проприетарный STT. Для русского работает на уровне Whisper или чуть хуже, плюс стоит сильно дороже

Коммерческие API: Deepgram, AssemblyAI, Google Cloud Speech. На русском у них хуже Whisper, кроме Google который сопоставим +-

Все эти варианты упираются в одну и ту же стену на русскоязычных IT-собеседованиях. Дальше про эту стену

Почему Whisper ломается именно на айти-речи

Whisper large-v3 обучали на миллионе часов слабо размеченных данных плюс четыре миллиона часов псевдо-разметки. Откуда эти данные, OpenAI не раскрывает, но по акустическим доменам, где модель работает хорошо, можно примерно понять состав:

  • YouTube с автосубтитрами

  • подкасты и аудиокниги

  • субтитры к фильмам

Русский в этом корпусе есть, но специфика такая, что IT-контента там десятые доли процента. То есть слово "кофта" в обучающей выборке встречается тысячи раз, а слово "Kafka" в значимом русскоязычном контексте - единицы. Когда аудио неоднозначное, модель выбирает более вероятное слово. Это и даёт "кофту" вместо "Кафки"

Дальше идёт самая тяжёлая проблема, которую я и называю code-switching. Русскоязычный айтишник в одной фразе легко переключается между языками:

"Я там сделал subscriber pattern на RabbitMQ, обернул в try-except, и на пятисотой ошибке делаю retry с exponential backoff"

В этой фразе у Whisper на каждом английском слове встаёт вопрос: это русский текст и английская вставка, или это перешли на английский? Решается через мягкий переключатель языка, который работает на длинных английских фрагментах, но на отдельных словах ошибается. "Subscriber" может стать "сабскрайбер" (кириллицей, и дальше LLM уже может не понять что это), или "собеседник". "Retry" - "ритри" или "три" (число). "Try-except" - "трай эксепт" или "трое-детей", и так до бесконечности..

Ещё одна большая проблема: русское произношение английских терминов. "Kubernetes" в английском [ku:bər'netis], в русском говорят [куберне́тис], ударение не там. "Nginx" по-английски [ˈendʒɪnɛks], по-русски обычно [энджи́никс] или даже [нгинкс]. "Cache" произносится как [кэш] часто с твёрдым к, без характерного английского смягчения. Whisper обучался на носителях английского, произносящих эти термины корректно. Русский вариант произношения звучит для модели как какое-то другое слово (транскрипции слов брал с вики)

И наконец, собственно технический русский жаргон. Это уже не англицизмы, а чисто русские слова из IT-субкультуры. "Гошечка" (Go), "плюсы" (C++), "жаба" (Java), "шарпы" (C#), "падать в кафку" (писать в Apache Kafka), "катать роллауты" (делать rollout в production), "переливать в прод", "крудошлёп". Этих слов в тренировочных данных Whisper в IT-контексте нет совсем. "Гошечка" модель распознаёт либо как "хорошо", либо как "горшочек", либо вообще никак..

Если сложить всё вместе: модель должна одновременно понимать русскую речь, корректно распознавать английские термины с русским произношением, не путаться в code-switching и знать айти жаргон. Стандартный Whisper ни одно из четырёх не умеет на уровне, нужном для продакшен-ассистента

Реальные цифры

Чтобы не быть голословным, я собрал тестовый корпус для замеров. Критерий один: такой контент, с которым ассистент должен работать в бою

Что в корпусе:

  • 200 минут аудио с настоящих IT-собеседований, собранных с согласия участников

  • пять спикеров, разные регионы (Москва, Питер, Минск, Екатеринбург, Новосибирск), но без сильных акцентов

  • разные стеки: Python, Go, Java, JavaScript, немного C++

  • ручная расшифровка всего как ground truth

Прогнал три системы и получил такой расклад:

Модель

WER на общей речи

WER на технических терминах

WER на командах/коде надиктованном

Whisper large-v3 (vanilla)

~8%

~34%

~52%

whisper-large-v3-russian (Antony66, fine-tune на Common Voice RU)

~6%

~29%

~48%

JobPath (наш fine-tune)

~4%

~7%

~11%

Общая речь у всех трёх работает прилично. Но на технических терминах разрыв колоссальный: каждое третье слово неправильно у конкурентов против одного из пятнадцати у нас

Что такое "технические термины" в этом замере: названия фреймворков, библиотек, инструментов, протоколов. То есть именно то, что интервьюер спрашивает каждые 30 секунд. Каждое третье такое слово неправильно это сломанный продукт

Как выглядят ошибки в живую

Один и тот же 30-секундный фрагмент аудио через три разных системы. Интервьюер спрашивает про работу с базами данных.

Оригинал (ручная расшифровка):

"Расскажите, как бы вы решали проблему лишних запросов к базе при использовании ORM. Что такое N+1 проблема, как её избегают в SQLAlchemy и в Django?"

Cluely:

"Расскажите, как бы вы решали проблему лишних запросов к базе при использовании о-эр-эм. Что такое эн плюс один проблема, как её избегают в эс-кью-эль-алкемия и в данже?"

Sensei Copilot:

"Расскажите, как бы вы решали проблему лишних запросов к базе при использовании oRm. Что такое н плюс 1 проблема, как её избегают в sqlachemi и в Django?"

JobPath:

"Расскажите как бы вы решали проблему лишних запросов к базе при использовании ORM. Что такое N+1 проблема. Как её избегают в SQLAlchemy и в Django?"

Разница выглядит косметической. На самом деле нет. Когда этот транскрипт уходит в LLM, результат получается совершенно разный, потому что она не понимает контекст

сравнение сервисов как есть

сравнение сервисов как есть

Что конкретно сделали в JobPath

Наш STT это fine-tune Whisper large-v3 на внутреннем корпусе русскоязычных IT-собеседований. Корпус собирали примерно полтора месяца. Часть через явное согласие пользователей на платформе (опция "улучшить распознавание", с прозрачным описанием что происходит с аудио). Часть через записи интервью коллег и знакомых с их согласием. Часть через публично доступные записи IT-интервью на YouTube (каналы типа "Айти Борода", "Хабр", записи митапов) с ручной разметкой.

Объём получился около 30 ГБ очищенного аудио с выверенной разметкой.

Fine-tune делали через LoRA-адаптер. Full fine-tune на large-v3 требует 8+ H100 на несколько дней, таких ресурсов у нас нет:

  • Target modules: q_proj, k_proj, v_proj, out_proj в attention-слоях decoder'а

  • Rank: 32

  • Alpha: 64

  • Dropout: 0.05

  • Learning rate: 1e-4, cosine schedule

  • Batch size 8 с gradient accumulation 4 (effective 32)

  • 3 эпохи (дальше шло переобучение)

  • Железо: 2x A100 80GB, примерно 18 часов на обучение

Поверх fine-tune стоит постпроцессинг из трёх слоёв:

Технический словарь терминов с их вариантами русского произношения. Около 4000 элементов. Если Whisper выдал слово, фонетически близкое к известному термину (сравниваем по метафону и двойному метафону), заменяем на канонический вариант. "Куберне́тис" становится "Kubernetes", "сабскрайбер" становится "subscriber". Работает детерминированно, задержек не добавляет

Контекст сессии. Когда пользователь в настройках указал свой стек (например, Python + Django + PostgreSQL), этот контекст автоматически подмешивается в initial_prompt при запуске Whisper. Whisper это учитывает при выборе между похожими словами и начинает предпочитать термины из указанного стека

ЛЛМ-постпроцессинг для неуверенных сегментов. Если confidence score транскрипта ниже порога (это бывает редко, примерно в 3-5% сегментов), прогоняем через лёгкую LLM с промптом "исправь только технические ошибки распознавания, смысл не меняй". Добавляет 200-400 мс задержки, поэтому применяется только когда нужно

Почему зарубежные конкуренты это не делают

У Cluely, Sensei, Sensei, Parakeet в TAM (Total Addressable Market) Россия и СНГ оптимистично 2-3 процента. У них огромные англоязычные рынки: США, Индия, Европа. Инвестировать в fine-tune под русский IT-жаргон это несколько сотен часов инженерного времени плюс инфраструктура для обучения плюс постоянная поддержка модели с обновлениями. Окупится если они получат значимую долю русского рынка, а этого не случится без локализации маркетинга, поддержки, сайта, оплаты и всего остального, чем они заниматься не планируют

Вторая проблема у них посерьёзнее инженерной. Чтобы собрать русскоязычный корпус IT-собеседований, нужна юзер-база в России, которая согласится отдать аудио своих собеседований. У Cluely этой базы нет. JobPath эту базу собирает сам через платформу, у нас пользователи русскоязычные по определению (только с согласия, личного. У всех подряд мы ничего не собираем (!!))

Итого: ни один зарубежный ассистент собеседований не будет нормально работать с русской IT-речью в обозримом будущем. Это не инженерная проблема, а экономическая. Они не упираются в невозможность сделать, они упираются в бессмысленность делать это для себя.

Отдельно про Cluely добавлю один факт, который напрямую не про STT, но для российских пользователей важный. В 2025 году у Cluely произошла утечка данных пользователей, включая записи собеседований. Подробности есть в разборе на medium. Для российского пользователя это значит, что аудио собеседований хранится в США и при утечке попадает в публичный доступ вместе с транскриптами. JobPath хранит аудио локально на устройстве пользователя. На сервер уходят только транскрипты (кстати, собираемся криптовать эти данные)

Где у нас всё ещё плохо

Не хочу создать впечатление, что fine-tune это серебряная пуля. Он даёт огромный буст на том, под что обучался, и не даёт буста на том, под что нет

Сильные региональные акценты: казахский, узбекский, грузинский, армянский на русской речи. Наш корпус оптимизирован под стандартный московско-питерский вариант, и на акцентах WER всё ещё 15-20% на технических терминах. Планируем добавить региональные adapter'ы, но пока это в планах

Плохой микрофон. Встроенный в старый ноутбук, или через bluetooth-наушники 2014 года, или когда человек далеко от микрофона. Физику не обмануть, у всех систем в таких условиях WER улетает за 20%, и у нас, увы..

Надиктованный код. Интервьюер читает вслух длинное имя класса или метода: AbstractSingletonProxyFactoryBean, buildUserPreferencesRepositoryImpl. Всё плохо у всех, включая нас. К счастью, такой формат вопроса редкий, но если встречается, единственный рабочий вариант это когда пользователь руками вводит код в интерфейсе..

Цифры для тех, кто гонится за метриками

Если вам интересны ещё какие-то характеристики стека:

  • WER на техническом русском: 6-7% у нас, 29-34% у конкурентов

  • Latency STT: около 400 мс от конца фразы до готового транскрипта (Whisper large-v3 с LoRA на RTX 3060)

  • Память: 3.2 ГБ GPU VRAM с LoRA, 6+ ГБ без

  • Полное время от конца фразы интервьюера до первого токена ответа в UI: примерно 1.5 секунды

Что дальше

Работаем над тремя направлениями:

Региональные адаптеры для акцентов стран СНГ. Казахский и узбекский на русском это значительная часть нашей аудитории, и сейчас мы с ними работаем хуже чем могли бы

Украинский и другие языки СНГ как первоклассная поддержка, а не через английский режим Whisper

Снижение латенси, пробуем distil-whisper с нашим LoRA адаптером, цель 150-200 мс вместо текущих 400

Если кто-то работает над похожими задачами, особенно интересно обменяться опытом по code-switching и по сбору корпуса технической речи не на английском. Пишите в комментариях (!)

Сам продукт JobPath. Бесплатный тариф включает 15 минут ассистента в день, можно попробовать и проверить, о чем я говорю :)