Приветствую, Хабр. В данной статье хочу рассмотреть процесс добавления слов в языковую модель vosk'а. (vosk - библиотека для распознавания речи, в основе которой kaldi). В русском сегменте подобных статей нет, а которые есть - неактуальны, поэтому, думаю, будет полезно.
Стоит отметить, что даже малая модель имеет под капотом достаточный запас слов, однако порой возникает необходимость в добавлении особой лексики, непредусмотренной библиотекой.
Процесс создания
Для удобства создаем директорию (в моем случае new-model
), в которой мы будем работать, и переходим в нее. Теперь скачиваем родную малую русскую модель vosk'а, чтобы заменить в ней языковую модель, которая и отвечает за словарный запас. После скачивания разархивируем родную модель.
mkdir new-model && cd new-model
wget "ttps://alphacephei.com/vosk/models/vosk-model-small-ru-0.22.zip"
unzip vosk-model-small-ru-0.22.zip
Для генерации новой модели нам необходимо установить kaldi
для необходимого инструментария.
git clone https://github.com/kaldi-asr/kaldi
cd kaldi
Далее нам нужно установить утилиты, для этого переходим в директорию kaldi/tools
.
cd tools
Проверяем необходимые зависимости, если в конце получили "Ok" - двигаемся дальше, если нет, устанавливаем необходимые зависимости, сам скрипт достаточно понятно говорит, что необходимо сделать.
extras/check_dependencies.sh
Устанавливаем основные утилиты, добавление маркера -j
позволяет распараллелить задачу на указанное после маркера количество потоков.
make -j 4
Устанавливаем дополнительные утилиты irstlm и opengrm, без которых нам сегодня не обойтись.
extras/install_irstlm.sh
extras/install_opengrm.sh
Чтобы скачать и установить srilm при помощи штатного скрипта, необходимо указать свою почту, имя и организацию, но запросы с российских ip блокируются. Поэтому нужно будет вручную скачать srilm в директорию, где находитесь в данный момент (kaldi/tools
).
После этого запускаем его установку.
extras/install_srilm.sh
Продолжаем собирать инструментарий, но уже в папке kaldi/src
. Переходим в нее.
cd ../src
Используем следующие команды для сборки. после -j
количество поток, как и ранее.
./configure --shared
make depend -j 4
make -j 4
Выходим из kaldi/src
и отправляемся в директорию kaldi/egs/wsj/s5
, в ней мы и будем работать:
cd ../egs/wsg/s5
Скачиваем исходные файлы нескомпилированной малой модели vosk'а и разархивируем ее.
wget "https://alphacephei.com/vosk/models/vosk-model-small-ru-0.22-compile.tar.gz"
tar -xf vosk-model-small-ru-0.22-compile.tar.gz
Копируем содержимое файла kaldi/tools/env.sh
и вставляем в конец файла kaldi/egs/wsj/s5/path.sh
, который только разархивировался из модели vosk'а. После этого kaldi/egs/wsj/s5/path.sh
должен выглядеть примерно так:
export KALDI_ROOT=`pwd`/../../..
export PATH=$PWD/utils:$KALDI_ROOT/src/bin:$KALDI_ROOT/tools/openfst/bin:$KALDI_ROOT/src/fs>
export PATH=$KALDI_ROOT/tools/ngram-1.3.7/src/bin:$PATH
export LD_LIBRARY_PATH=$KALDI_ROOT/tools/openfst/lib/fst/
export LC_ALL=C
export PATH=/home/arch/model_disk/kaldi/tools/python:${PATH}
export IRSTLM=/home/arch/model_disk/kaldi/tools/irstlm
export PATH=${PATH}:${IRSTLM}/bin
export LIBLBFGS=/home/arch/model_disk/kaldi/tools/liblbfgs-1.10
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH:-}:${LIBLBFGS}/lib/.libs
export SRILM=/home/arch/model_disk/kaldi/tools/srilm
export PATH=${PATH}:${SRILM}/bin:${SRILM}/bin/i686-m64
Запускаем kaldi/egs/wsj/s5/path.sh
, чтобы инициализировать пути к kaldi и его инструментарию.
./path.sh
Прописываем в файле kaldi/egs/wsj/s5/db/extra.txt
словосочетания, которые вы хотите добавить в модель. Каждое словосочетание должно быть в новой строке и без знаков препинания, например
поставь эмоджи
открой фейсбук
В данном случае мы добавляем слова «эмоджи» и «фейсбук».
Также, скорее всего, вам понадобится установить python-библиотеку phonetisaurus
для скрипта далее.
pip install phonetisaurus
И наконец запускаем kaldi/egs/wsj/s5/compile-graph.sh
, который сгенерирует нам модифицированную модель.
./compile-graph.sh
Модель сгенерирована. Теперь копируем из директории kaldi/egs/wsj/s5/exp/tdnn/lgraph/
файлы Gr.fst
и HCLr.fst
и вставляем их в родную модель, которую скачали в самом начале.
cp -f exp/tdnn/lgraph/Gr.fst exp/tdnn/lgraph/HCLr.fst ../../../../vosk-model-small-ru-0.22-compile/graph/
После этого в папке vosk-model-small-ru-0.22
будет модель, способная распознавать добавленные нами слова.
Успехов, и всего наилучшего.
Комментарии (3)
geksogen
16.05.2023 20:57Огромное спасибо. Так же ковыряюсь с VOSK (респект кто ее сделал). Полезная статья.
megazhuk
Огромная благодарность.
Думаю, что вы сэкономили мне много времени. Как раз планировал в ближайшее время дообучать Воск на своем словаре.
gist59 Автор
Приятно это слышать. Удачи Вам с проектом)