LINUX.ORG.RU

whisper.cpp 1.7.4

 , , , ,

whisper.cpp 1.7.4

5

3

6 января состоялся выпуск 1.7.4 высокопроизводительной системы автоматического распознавания речи whisper.cpp, реализующей модель Whisper от OpenAI, написанной на языках C и C++ и распространяемой по лицензии MIT.

В проекте используется авторская тензорная библиотека машинного обучения GGML, написанная на языке C и оптимизированная для использования различных бэкендов (CUDA, Vulkan, BLAS, SYCL, OpenCL и др.).

Список изменений:

  • Переименования исполняемых файлов:
main	   -> whisper-cli
bench	   -> whisper-bench
stream	   -> whisper-stream
command	   -> whisper-command
server	   -> whisper-server
talk-llama -> whisper-talk-llama
  • Удалены примеры talk и talk.wasm.
  • В whisper-server добавлена опция подавления неречевых лексем.
  • Параметр suppress_non_speech_tokens переименован в suppress_nst.
  • В API и утилиты добавлена опция no_speech_thold для задания вероятности отсутствия речи на уровне сегмента при транскрипции.
  • В whisper-cli добавлена опция --suppress_nst.
  • Другие улучшения и исправления ошибок.

>>> Список изменений версии 1.7.4 на GitHub

★★★★★

Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 2)

Компактная модель, в самой большой версии ~3.9 GB памяти. А с русским языком у неё как.

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

так а че «поддерживать», бери модель с русским и используй, сам виспер просто интерфейс

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

Если это тот же виспер, что и оригинальый на пистоне, то все отлично, распознает на ура. В самой большой модели даже с пунктуацией.

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

А с русским языком у неё как.

Вот, например: https://ru.wikipedia.org/wiki/Википедия:Список_аудиостатей.

Я взял https://ru.wikipedia.org/wiki/Файл:Ru-African_buffalo_(intro).ogg.
У меня сабж скомпилирован с поддержкой Vulkan.

$ ffmpeg -y -i Ru-African_buffalo_\(intro\).ogg -ar 16000 -ac 1 -c:a pcm_s16le out16.wav
$ ./whisper-cli --language ru -m models/ggml-medium-q8_0.bin out16.wav

system_info: n_threads = 4 / 8 | AVX = 1 | AVX2 = 1 | AVX512 = 0 | FMA = 1 | NEON = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | SSE3 = 1 | SSSE3 = 1 | VSX = 0 | COREML = 0 | OPENVINO = 0 |

main: processing 'out16.wav' (2278927 samples, 142.4 sec), 4 threads, 1 processors, 5 beams + best of 5, lang = ru, task = transcribe, timestamps = 1 ...


[00:00:00.000 --> 00:00:13.980]   африканский буйвол
[00:00:13.980 --> 00:00:22.460]   африканский или кафрский буйвол, в латинском sincerus cafer, это вид быков широко
[00:00:22.460 --> 00:00:27.300]   распространенной в африке. Будучи типичным представителем подсемейства
[00:00:27.300 --> 00:00:32.400]   быков, африканский буйвол, однако, весьма своеобразен и выделяется в отдельный
[00:00:32.400 --> 00:00:38.640]   род sincerus с единственным видом. Этот вид также единственный из подсемейства
[00:00:38.640 --> 00:00:42.440]   быков, обитающие в африке.
[00:00:42.440 --> 00:00:55.740]   Африканский буйвол - это крупнейший из современных быков. Вес взрослых самцов,
[00:00:55.740 --> 00:01:01.760]   крупных подвидов, часто превышает одну тонну, а экземпляры весом 900 килограмм
[00:01:01.760 --> 00:01:11.040]   нередкость. Изредка встречаются старые быки весом даже 1300 килограмм. Высота в
[00:01:11.040 --> 00:01:20.200]   холке у взрослых самцов до 1,8 метра при длине тела от 3 до 3,4 метра.
[00:01:20.200 --> 00:01:26.540]   При этом некоторые подвиды африканского буйвола много меньше. Вообще лесные
[00:01:26.540 --> 00:01:32.440]   буйволы значительно меньше тех буйволов, которые обитают в саванне.
[00:01:32.440 --> 00:01:37.960]   Популяция буйволов в африке сохранилась по сравнению с поголовьем других крупных
[00:01:37.960 --> 00:01:43.560]   животных континента достаточно хорошо, хотя и испытывает сильное давление со
[00:01:43.560 --> 00:01:46.400]   стороны человека.
[00:01:50.200 --> 00:02:08.760]   Википедия - свободная энциклопедия, которую может
[00:02:08.760 --> 00:02:19.320]   редактировать каждый. Адрес в интернете ru.wikipedia.org
[00:02:20.200 --> 00:02:23.200]   Редактор субтитров А.Олзоева Корректор А.Кулакова


whisper_print_timings:     load time = 47871.96 ms
whisper_print_timings:     fallbacks =   0 p /   0 h
whisper_print_timings:      mel time =   189.98 ms
whisper_print_timings:   sample time =  1354.03 ms /  2144 runs (    0.63 ms per run)
whisper_print_timings:   encode time = 15359.93 ms /     6 runs ( 2559.99 ms per run)
whisper_print_timings:   decode time =    17.33 ms /     1 runs (   17.33 ms per run)
whisper_print_timings:   batchd time = 25472.85 ms /  2119 runs (   12.02 ms per run)
whisper_print_timings:   prompt time =  1854.66 ms /   708 runs (    2.62 ms per run)
whisper_print_timings:    total time = 92298.40 ms
dataman ★★★★★
() автор топика
Ответ на: комментарий от Zhbert

Да, и даже «не редкость» вместо «нередкость».
И даже быстрее получилось:

whisper_print_timings:     load time = 18934.96 ms
whisper_print_timings:     fallbacks =   0 p /   0 h
whisper_print_timings:      mel time =   184.15 ms
whisper_print_timings:   sample time =  1286.67 ms /  2104 runs (    0.61 ms per run)
whisper_print_timings:   encode time = 34451.09 ms /     8 runs ( 4306.39 ms per run)
whisper_print_timings:   decode time =    38.82 ms /     8 runs (    4.85 ms per run)
whisper_print_timings:   batchd time =  6286.73 ms /  2065 runs (    3.04 ms per run)
whisper_print_timings:   prompt time =   786.46 ms /  1116 runs (    0.70 ms per run)
whisper_print_timings:    total time = 62219.11 ms
dataman ★★★★★
() автор топика
Последнее исправление: dataman (всего исправлений: 1)
Ответ на: комментарий от One

А с русским языком у неё как.

Распознавание диктофонной записи вполне уверенное

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

У меня сабж скомпилирован с поддержкой Vulkan

Если не сложно собери пожалуйста без вулкана, только на CPU, на сколько медленнее будет?

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

А что за PC?

CPU: Intel(R) Core(TM) i7-7700HQ (8) @ 3.80 GHz
GPU 1: NVIDIA GeForce GTX 1050 Mobile [Discrete]
GPU 2: Intel HD Graphics 630 @ 1.10 GHz [Integrated]
dataman ★★★★★
() автор топика

Не ждите чудес от распознавания. Если у записи будет такое качество, где 90% букв и цифр невнятные, но слушатель примерно понимает что происходит, то whisper.cpp мало что сможет сделать.

sarumeister
()

Аппаратные хотелки?

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

$ ./whisper-cli-cpu --language auto -m models/ggml-large-v3-turbo-q8_0.bin out16.wav

system_info: n_threads = 4 / 8 | AVX = 1 | AVX2 = 1 | AVX512 = 0 | FMA = 1 | NEON = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | SSE3 = 1 | SSSE3 = 1 | VSX = 0 | COREML = 0 | OPENVINO = 0 |

main: processing 'out16.wav' (2278927 samples, 142.4 sec), 4 threads, 1 processors, 5 beams + best of 5, lang = auto, task = transcribe, timestamps = 1 ...

whisper_full_with_state: auto-detected language: ru (p = 0.999322)

[00:00:00.760 --> 00:00:14.640]   Африканский буйвол
[00:00:14.640 --> 00:00:19.880]   Африканский или кафрский буйвол, в латинском sincerus
[00:00:19.880 --> 00:00:24.600]   caffir - это вид быков, широко распространенный в Африке.
[00:00:24.600 --> 00:00:28.840]   Будучи типичным представителем подсемейства быков, африканский
[00:00:28.840 --> 00:00:32.420]   буйвол, однако, весьма своеобразен и выделяется в отдельный
[00:00:32.420 --> 00:00:35.660]   род sincerus с единственным видом.
[00:00:35.660 --> 00:00:40.080]   Этот вид, также единственный из подсемейства быков, обитающих
[00:00:40.080 --> 00:00:50.220]   в Африке.
[00:00:50.220 --> 00:00:53.480]   Африканский буйвол - это крупнейший из современных
[00:00:53.480 --> 00:00:54.480]   быков.
[00:00:54.480 --> 00:00:57.680]   Вес взрослых самцов, крупных подвидов, часто превышает
[00:00:57.680 --> 00:01:04.500]   1 тонну, а экземпляры весом 900 килограмм не редкость.
[00:01:04.500 --> 00:01:10.640]   Изредка встречаются старые быки весом даже 1300 килограмм.
[00:01:10.640 --> 00:01:16.300]   Высота в холке у взрослых самцов до 1,8 метра при длине
[00:01:16.300 --> 00:01:20.500]   тела от 3 до 3,4 метра.
[00:01:20.500 --> 00:01:24.420]   При этом некоторые подвиды африканского буйвола много
[00:01:24.420 --> 00:01:25.420]   меньше.
[00:01:25.420 --> 00:01:29.720]   Вообще лесные буйволы значительно меньше тех буйволов, которые
[00:01:29.720 --> 00:01:32.960]   обитают в саванне.
[00:01:32.960 --> 00:01:36.300]   Популяция буйволов в Африке сохранилась по сравнению
[00:01:36.300 --> 00:01:40.080]   с поголовьем других крупных животных континента достаточно
[00:01:40.080 --> 00:01:43.960]   хорошо, хотя и испытывает сильное давление со стороны
[00:01:43.960 --> 00:01:46.900]   человека.
[00:01:46.900 --> 00:02:09.780]   Википедия - свободная энциклопедия, которую может редактировать
[00:02:09.780 --> 00:02:21.780]   каждый.


whisper_print_timings:     load time =  7506.68 ms
whisper_print_timings:     fallbacks =   1 p /   0 h
whisper_print_timings:      mel time =   184.35 ms
whisper_print_timings:   sample time =  1416.46 ms /  1950 runs (    0.73 ms per run)
whisper_print_timings:   encode time = 187881.59 ms /     8 runs (23485.20 ms per run)
whisper_print_timings:   decode time =   576.40 ms /    41 runs (   14.06 ms per run)
whisper_print_timings:   batchd time =  8026.26 ms /  1873 runs (    4.29 ms per run)
whisper_print_timings:   prompt time =  4829.12 ms /  1426 runs (    3.39 ms per run)
whisper_print_timings:    total time = 210855.86 ms

whisper_print_timings:    total time = 210855.86 ms

а с Vulkan

whisper_print_timings:    total time = 62219.11 ms
dataman ★★★★★
() автор топика
Ответ на: комментарий от One

Потому что GGML использует свой формат GGUF.

GGUF is a file format for storing models for inference with GGML and executors based on GGML. GGUF is a binary format that is designed for fast loading and saving of models, and for ease of reading. Models are traditionally developed using PyTorch or another framework, and then converted to GGUF for use in GGML.

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

Даже относительно слабая видяха дает прирост в три раза, круто!

einhander ★★★★★
()

системы автоматического распознавания речи

Тест: все САРР обламываются на «двух болтливых бабах», говорящих одновременно.

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

Зависит от (не)культурных традиций.

dataman ★★★★★
() автор топика

Изучаю совершенно удивительную библиотеку miniaudio. Она поддерживает декодирование WAV, FLAC, MP3 и Vorbis (c stb_vorbis) без ffmpeg.
И tools/audioconverter работает быстрее, чем ffmpeg.
Немножко улучшил audioconverter в PR#925. Компиляция:

$ gcc -O3 -march=native audioconverter.c -o maconverter -lm

И для сабжа вместо:

$ ffmpeg -y -i <входной файл> -ar 16000 -ac 1 -c:a pcm_s16le <выходной.wav>

использую

$ maconverter <входной файл> <выходной.wav> s16 1 16000

Если осилю, то добавлю использование miniaudio в сабж (вместо dr_wav.h от того же автора). Тогда не нужно будет конвертировать исходные файлы.

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

Ну когда я подсунул ей файл со стихотворением Городницкого «Матюшкин», Горчакова и Вольхонского оно опознало как имена собственные и написало с большой буквой, а Державина - нет, сочла кратким прилагательным «державен».

vitus
()

Плохо, что на встройке амд нельзя заставить его распознавать. У меня дофигище всякого, что требует распознования

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

встройке амд нельзя заставить его распознавать.

По ссылке про вулкан есть, неужели не работает. Да и ROCm обычно можно завести, по крайней мере на 780m

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

По ссылке про вулкан есть, неужели не работает.

Не видел ссылку

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

Я попытался позапускать большую модельку на моём TP X220, он погрел воздух минут десять и я забил.

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

Плохо, что на встройке амд нельзя заставить его распознавать.

Распознавай на CPU. Всего вчетверо медленнее.

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

Я попытался позапускать большую модельку на моём TP X220, он погрел воздух минут десять и я забил.

Попробуй large-turbo. На да, эта волынка надолго.

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

Интересно, а несколько языков сможет задетектировать?

Иногда распознаёт текст на неосновных языках и автоматически переводит на основной. Отключить не смог :(

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

Не ждите чудес от распознавания. Если у записи будет такое качество, где 90% букв и цифр невнятные, но слушатель примерно понимает что происходит, то whisper.cpp мало что сможет сделать.

Русский и английский large-turbo понимает лучше меня. Хотя бывают ошибки, очевидные из контекста человеку.

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

только на CPU, на сколько медленнее будет?

1.7.3 модель large-turbo занимает 4 ядра и транскрибирует в ~4 раза медленнее, чем воспроизводится. AMD FX-8300

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

@One, @UriZzz, @rumgot, с русским языком у моделей large и large-turbo превосходно, если других языков в файле нет, и явно указать язык ru или auto. На меньших моделях заметно хуже. Если языков несколько — будет переводить, и не всегда верно.

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

Тест: все САРР обламываются на «двух болтливых бабах», говорящих одновременно.

Как повезёт. Один такой ролик распознало неплохо — не меньше половины наложившихся реплик. Но там заметно отличались голоса. Ролики «2 скандалистки-истерички с неразличимыми голосами» пока не попадались.

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

автоматически переводит на основной. Отключить не смог

То есть,

-tr, –translate [false ] translate from source language to english

никак не влияет? И в новой версии тоже?

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

То есть, -tr, –translate [false ] translate from source language to english никак не влияет?

Да, не влияет.

И в новой версии тоже?

Ещё не пробовал, но баг висит без движения.

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

1.7.3 модель large-turbo занимает 4 ядра и транскрибирует в ~4 раза медленнее

А если скомпилировать с -DGGML_BLAS=ON? Поддерживаются несколько реализаций BLAS.

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

А если скомпилировать с -DGGML_BLAS=ON? Поддерживаются несколько реализаций BLAS.

/usr/lib/gcc/x86_64-pc-linux-gnu/13/../../../../x86_64-pc-linux-gnu/bin/ld: ../../ggml/src/ggml-blas/libggml-blas.so: неопределённая ссылка на «cblas_sgemm»

У меня стоит lapack 3.12.0.

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

можно попробовать задавать -DGGML_BLAS_VENDOR= или -DGGML_BLAS_VENDOR_DEFAULT.

И какие значения доступны для GGML_BLAS_VENDOR помимо OpenBLAS?

В ggml-blas.cpp в качестве альтернатив cblas упоминаются BLIS, MKL и NVPL. NVPL у меня нет. Если MKL — Intel Math Kernel Library, то в Gentoo оно не считается вариантом BLAS. Попробовал только OpenBLAS и LAPACK.

С LAPACK, который считается эталонной реализацией, не собралось, с BLIS тоже, с OpenBLAS собралось, и 109-секундная речь на английском распозналась за 305 секунд, на CPU без BLAS она же распозналась за 394 секунды.

OpenBLAS:

whisper_print_timings:     load time =   689.73 ms
whisper_print_timings:     fallbacks =   0 p /   0 h
whisper_print_timings:      mel time =   301.09 ms
whisper_print_timings:   sample time =  2219.86 ms /  2370 runs (    0.94 ms per run)
whisper_print_timings:   encode time = 269812.03 ms /     6 runs (44968.67 ms per run)
whisper_print_timings:   decode time =   912.75 ms /    50 runs (   18.26 ms per run)
whisper_print_timings:   batchd time = 23721.02 ms /  2299 runs (   10.32 ms per run)
whisper_print_timings:   prompt time =  6974.69 ms /   801 runs (    8.71 ms per run)
whisper_print_timings:    total time = 304835.28 ms

Без BLAS:

whisper_print_timings:     load time =  4246.12 ms
whisper_print_timings:     fallbacks =   0 p /   0 h
whisper_print_timings:      mel time =   254.14 ms
whisper_print_timings:   sample time =  2184.74 ms /  2359 runs (    0.93 ms per run)
whisper_print_timings:   encode time = 356079.53 ms /     6 runs (59346.59 ms per run)
whisper_print_timings:   decode time =   390.63 ms /    22 runs (   17.76 ms per run)
whisper_print_timings:   batchd time = 24277.35 ms /  2316 runs (   10.48 ms per run)
whisper_print_timings:   prompt time =  6676.17 ms /   770 runs (    8.67 ms per run)
whisper_print_timings:    total time = 394345.44 ms

То есть выигрыш примерно на четверть.

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