LINUX.ORG.RU

whisper.cpp 1.9.0 и 1.9.1

 , , , ,


2

1

17 и 19 июня состоялись выпуски 1.9.0 и 1.9.1 высокопроизводительной системы автоматического распознавания речи whisper.cpp, реализующей модель Whisper от OpenAI, и основанной на тензорной библиотеке машинного обучения GGML и двоичном формате GGUF.

Предоставляется библиотека libwhisper, демонстрационные примеры и консольные утилиты: whisper-bench, whisper-cli, whisper-command, whisper-lsp, whisper-quantize, whisper-server, whisper-stream, whisper-vad-speech-segments, parakeet-cli и parakeet-quantize.

Проекты написаны на языках C и C++ и распространяются по лицензии MIT.

Изменения:

  • добавлена консольная утилита parakeet-cli, поддерживающая модель NVIDIA Parakeet;
  • во враппер Ruby также добавлена поддержка NVIDIA Parakeet.

Некоторые важные изменения, сделанные в промежуточных версиях со времени новости whisper.cpp 1.8.0:

  • обработка исключений C++ в функции whisper_init_with_params_no_state;
  • полностью переписана поддержка ffmpeg (без использования GPL-кода, взятого из примеров ffmpeg), и уточнено использование ffmpeg в whisper.cpp;
  • в утилиту whisper-cli добавлена опция --version для вывода версии.

>>> Подробности на GitHub

★★★★★

Проверено: maxcom ()
Последнее исправление: maxcom (всего исправлений: 2)
Ответ на: комментарий от gagarin0

$ whisper-stream --capture <id> --model <...>

-c ID, –capture ID [-1 ] capture device ID

dataman ★★★★★
() автор топика
Ответ на: комментарий от gagarin0

Посмотри последнюю мою тему, там AI-ассистент использует Whisper для STT-ввода (вдобавок к TTS-выводу через Silero) в реальном времени (или насколько я смог подобраться к этому)

mazdai ★★★
()
Последнее исправление: mazdai (всего исправлений: 1)
Ответ на: комментарий от gagarin0

у кого-нибудь получалось при помощи whisper распознавать речь в real-time (или близко к этому)?

На видеокарте или Ryzen 9 — гораздо быстрее реального времени. На Вишере с 4 физическими ядрами — турбо-модель примерно втрое дольше воспроизведения.

question4 ★★★★★
()
Последнее исправление: question4 (всего исправлений: 1)

У меня. Но мне не зашло.

Простому обывателю кажется что «распознавание речи» - это единственная и главная задача для реальных применений, но это далеко не так. Просто пока с этим не сталкиваешься вплотную - даже не подозреваешь что есть проблемы намного сложнее чем просто распознать слово. Итак, что мне не понравилось или что я не осилил с whisper.cpp:

1. Детекция тишины. Иными словами тебе нужно не просто распознать начало разговора чтобы активировать распознавание - тебе надо еще и не сглотнуть первые буквы фразы;

2. Микс из русских и английских слов. Адекватно работающую модель я не нашел;

3. Определение персоны говорящего. И не просто определение, а создание векторного «слепка», который ты потом сможешь использовать в других блоках и вычислять, какова вероятность того что говорящий голос соответствует слепку;

4. Пунктуация. Хотя может я просто не находил адекватную модель, но белиберда которую удалось распознать - вряд ли напоминала человеческую речь;

5. Борьба с эхом. А вот это было самое забавное и сложное: распознавалка не должна распознавать говорилку, т.е. саму себя, но параллельно должна распознавать других говорящих;

6. Порционное распознавание. Это нужно было, чтобы система могла прерваться в любой момент каким-нибудь внешним триггером.

- - -

В тот момент когда я это пробовал - в реалтайме оно работало на Ryzen 5 Pro 2400GE, используя мощности только процессора.

windows10 ★★★★★
()
Последнее исправление: windows10 (всего исправлений: 1)
Ответ на: комментарий от question4

Ryzen 9

Это с какой моделью? Более менее хорошая Large v3 слабовато 12/24 тянет

вулкан GPU даже на мобильных - очень хорошо

One ★★★★★
()
Последнее исправление: One (всего исправлений: 1)
Ответ на: комментарий от One

Это с какой моделью?

ggml-large-v3-turbo-q8_0.bin Качество для одноязычных монологов нормальное, работает довольно быстро. Субтитры для фильмов обычно получаются нормально.

question4 ★★★★★
()
Последнее исправление: question4 (всего исправлений: 1)
Ответ на: комментарий от One

А процессор сам какой?

AMD FX-8xxx (не помню, который) и AMD Ryzen 9 9950X3D.

question4 ★★★★★
()
Ответ на: комментарий от windows10

Использовал для распознавания речи в видео из интернета. В основном, русский и английский, реже украинский, польский, немецкий, французский, испанский, китайский, японский. С фильмом на тамильском не получилось. Модель обычно large-turbo — справляется не хуже large, уступает в скорости только tiny, которая распознаёт намного хуже.

Детекция тишины. Иными словами тебе нужно не просто распознать начало разговора чтобы активировать распознавание - тебе надо еще и не сглотнуть первые буквы фразы;

С первыми буквами фразы у меня проблем не бывало. Гораздо чаще наоборот — промежуток без слов заполняется многократно повторяемой последней репликой. Которая может заместить не первые буквы, а первые МИНУТЫ следующего фрагмента с речью. Особенно часто так бывает, если промежуток без речи не тихий — музыка, шум города и т.п. Единственный выход — перераспознать проблемный фрагмент, вручную указав начало где-то во фрагменте без речи. Тогда начало речи ловит лучше.

Микс из русских и английских слов. Адекватно работающую модель я не нашел;

Whisper.cpp это не осиливает, но другие распознавалки с моделями Whisper, говорят, справляются.

Часто определяет основной язык по первым словам, иногда успешно переводит всё на него. Особенно с моделью large без turbo. На английский переводит лучше, чем на другие.

Определение персоны говорящего.

Для этого предназначен tinydiarize. Но с Whisper.cpp работает плохо. Успешно опознало только Трампа один раз, даже без tinydiarize.

Пунктуация.

Из всех перепробованных, Whisper.cpp с моделью large-turbo справляется лучше всех. От идеала далеко, но нередко поправлять не требуется.

question4 ★★★★★
()
Ответ на: комментарий от question4

ggml-large-v3-turbo-q8_0.bin Качество для одноязычных монологов нормальное, работает довольно быстро.

А новую parakeet-cli ещё не пробовал? На скринах видно, что она значительно быстрее, по крайней мере на моём старье.
Правда, я сравнил не с ggml-large-v3-turbo-q8_0.bin, а с ggml-large-v3-turbo.bin.

dataman ★★★★★
() автор топика
Ответ на: комментарий от dataman

А новую parakeet-cli ещё не пробовал?

Нет, застрял в середине апдейта ядра, поэтому пока распознаю на процессоре, без видеокарты. Отпишусь, если попробую на следующей неделе.

question4 ★★★★★
()
Ответ на: комментарий от question4

Кстати, ggml-large-v3-turbo-q8_0.bin тоже выдала «радга», а вот ggml-large-v3-turbo.bin справилась. Я поэтому её результат и добавил.

dataman ★★★★★
() автор топика
Ответ на: комментарий от hobbit

Несравнимо лучше, чем с C++.

dataman ★★★★★
() автор топика
Ответ на: комментарий от hobbit

Как у неё с русским языком?

Субтитры к фильмам получаются нормально. Песни с громкой музыкой — хуже, бывает нужно вручную указывать время для каждого предложения.

question4 ★★★★★
()

Ну если не считать постоянных «Субтитры by Дима Торжок» из дефолтной largev3 модели, то прям огонь штука

eagleivg ★★★★★
()
Ответ на: комментарий от BruteForce

Срвнивал кто-то производительность Whisper.cpp с sherpa-onnx?

Я и сравнивал. Собственно сейчас у меня и используется это все.

«Производительность» здесь не особо нужная и важная характеристика, на всех современных процессорах, считай начиная с эры DDR4 распознается быстрее, чем говорит человек. Думаю что при грамотном распараллеивании и на более слабых архитектурах может.

Гораздо важнее качество распознавания. Здесь onnx-модели впереди: низкие задержки (емнип у whisper.cpp лимит в 30 сек), присутствие silero vad для детекции тишины, диаризация, детекция ключевых слов и более тесная интеграция с другими компонентами системы, тем же пш-пш-аудио, если у вас несколько микрофонов и вам нужно знать откуда именно прилетело.

windows10 ★★★★★
()
Ответ на: комментарий от question4

Использовал для распознавания речи в видео из интернета. В основном, русский и английский, реже украинский, польский, немецкий, французский, испанский, китайский, японский.

Ну, это у вас считай тепличные условия.

С первыми буквами фразы у меня проблем не бывало. Гораздо чаще наоборот — промежуток без слов заполняется многократно повторяемой последней репликой.

Из-за тех самых тепличных условий, у вас просто не возникало такой необходимости. Т.е. упрощенно говоря, вы нажимаете «старт» на воспроизведении и «старт» на распознавании. А мой юзкейс - тот самый «ассистент», который должен 24\7 слушать, но при этом не греть проц.

Для этого предназначен tinydiarize. Но с Whisper.cpp работает плохо. Успешно опознало только Трампа один раз, даже без tinydiarize.

Угу. Я бы сказал вообще хреново. При том, что определение говорящего - это как бы функция где ошибки быть не должно. А оно понимаешь, Кипелова с моей женой путало, гы.

Из всех перепробованных, Whisper.cpp с моделью large-turbo справляется лучше всех. От идеала далеко, но нередко поправлять не требуется.

А нагрузка при этом?

windows10 ★★★★★
()
Ответ на: комментарий от windows10

«Производительность» здесь не особо нужная

Это всегда нужная характеристика, особенно на сервере.

Моё «особенно» связано со слабыми мобильными устройствами.

На Dimestity 7300 фраза из трех коротких слов распознаётся sherpa-onnx с моделью sherpa-onnx-whisper-base за 500-800ms:

JOB: ASR	ui notified time: 2 us
ONNX: CreateOfflineStream	time: 205 us
ONNX: AcceptWaveformOffline	time: 14685 us
ONNX: DecodeOfflineStream	time: 736882 us
ONNX: GetResult	                time: 16 us
ONNX: finish	destroy result time: 6 us
ONNX: finish	destroy stream time: 84 us
JOB: ASR	audio transcribed time: 752022 us

На более старом Snapdragon 615 это уже от 4-х секунд:

JOB: ASR	ui notified time: 17 us
ONNX: CreateOfflineStream	time: 685 us
ONNX: AcceptWaveformOffline	time: 307231 us
ONNX: DecodeOfflineStream	time: 4332659 us
ONNX: GetResult	time: 68 us
ONNX: finish	strdup time: 4 us
ONNX: finish	destroy result time: 43 us
ONNX: finish	destroy stream time: 132 us
JOB: ASR	audio transcribed time: 4641491 us

Что уже никак не быстрее речи.

Качество распознавания этой модели тоже хромает, кончено.

Интересно, что если выставить язык, а говориь на другом — модель переведёт текст (если хорошо разберет слова).

BruteForce ★★★★
()
Ответ на: комментарий от windows10

А нагрузка при этом?

В смысле? Whisper.cpp ресурсоёмок, но знаки препинания пытается расставлять всегда, способа включить или выключить это я не знаю. Хотя я не уверен, есть ли в них смысл в режиме ассистента. Учитывая, как большинство людей всё время экают, мэкают, прерываются…

question4 ★★★★★
()
Ответ на: комментарий от question4

очень хорошо, пока не приехали мои видеокарты, подскажи пожалуйста, как дела обстоят в случае диалога?

есть сейчас инструменты которые могу разбивать аудиопоток «по собеседникам» ?

gagarin0
()
Ответ на: комментарий от gagarin0

есть сейчас инструменты которые могу разбивать аудиопоток «по собеседникам» ?

Если расписать каждой реплике имя — знаю про tinydiarize, но в Whisper.cpp для фильмов это работает плохо.

Если просто обеспечить, чтобы реплики разных людей не попадали в один абзац — с этим у Whisper.cpp с параметрами по умолчанию обычно всё нормально. Даже Vosk справляется. (С разбивкой на абзацы — как повезёт. Для одного говорящего может сделать и абзац на сотню слов, и пару десятков абзацев по паре слов.)

question4 ★★★★★
()
Последнее исправление: question4 (всего исправлений: 1)
Ответ на: комментарий от question4

я не до конца уловил, мне в идеале получить такую транскрипцию

Собеседник1: Привет ребята, как дела?
Собеседник2: Хорошо
Собеседник3: У меня тоже хорошо
gagarin0
()
Ответ на: комментарий от gagarin0

Собеседник1: Привет ребята, как дела?
Собеседник2: Хорошо
Собеседник3: У меня тоже хорошо

Да, так и работает в режиме tinydiarize. Только у меня почти все реплики приписывались «(speaker 1)».

Вообще, это называется «speaker diarization», «speaker segmentation» или «local diarization».

question4 ★★★★★
()
Ответ на: комментарий от PunkPerson

Оно русский язык принимает?

Из материала по ссылке из моего предыдущего комментария разве не понятно??.. ;)) :)

Somebody ★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.