Приветствую, Хабр. В данной статье хочу рассмотреть процесс добавления слов в языковую модель vosk'а. (vosk - библиотека для распознавания речи, в основе которой kaldi). В русском сегменте подобных статей нет, а которые есть - неактуальны, поэтому, думаю, будет полезно. Стоит отметить, что даже малая модель имеет под капотом достаточный запас слов, однако порой возникает необходимость в добавлении особой лексики, непредусмотренной библиотекой. Для удобства создаем директорию (в моем случае new-model), в которой мы будем работать, и переходим в нее. Теперь скачиваем родную малую русскую модель vosk'а, чтобы заменить в ней языковую модель, которая и отвечает за словарный запас. После скачивания разархивируем родную модель. Для генерации новой модели нам необходимо установить kaldi для необходимого инструментария. Далее нам нужно установить утилиты, для этого переходим в директорию kaldi/tools. Проверяем необходимые зависимости, если в конце получили "Ok" - двигаемся дальше, если нет, устанавливаем необходимые зависимости, сам скрипт достаточно понятно говорит, что необходимо сделать. Устанавливаем основные утилиты, добавление маркера -j позволяет распараллелить задачу на указанное после маркера количество потоков. Устанавливаем дополнительные утилиты irstlm и opengrm, без которых нам сегодня не обойтись. Также в качестве дополнительной утилиты необходим srilm. Чтобы скачать и установить его при помощи штатного скрипта, необходимо указать свою почту, имя и организацию, но запросы с российских ip блокируются. Поэтому нужно будет вручную скачать srilm в директорию, где находитесь в данный момент (kaldi/tools). После этого запускаем его установку. Продолжаем собирать инструментарий, но уже в папке kaldi/src. Переходим в нее. Используем следующие команды для сборки. после -j количество поток, как и ранее. Выходим из kaldi/src и отправляемся в директорию kaldi/egs/wsj/s5, в ней мы и будем работать: Скачиваем исходные файлы нескомпилированной малой модели vosk'а и разархивируем ее. После чего перемещаем файлы из разархивированной нескомпилированной модели в kaldi/egs/wsj/s5. Файлы stepsи utils не будут перенесены, т.к. в kaldi/egs/wsj/s5 уже есть директории с такими названиями, просто проигнорируйте ошибку об этом. Копируем содержимое файла kaldi/tools/env.sh и вставляем в конец файла kaldi/egs/wsj/s5/path.sh, который только разархивировался из модели vosk'а. После этого kaldi/egs/wsj/s5/path.sh должен выглядеть примерно так: Запускаем kaldi/egs/wsj/s5/path.sh, чтобы инициализировать пути к kaldi и его инструментарию. Прописываем в файле kaldi/egs/wsj/s5/db/extra.txt словосочетания, которые вы хотите добавить в модель. Каждое словосочетание должно быть в новой строке и без знаков препинания, например В данном случае мы добавляем слова «эмоджи» и «фейсбук». Также, скорее всего, вам понадобится установить python-библиотеку phonetisaurus для скрипта далее. И наконец запускаем kaldi/egs/wsj/s5/compile-graph.sh, который сгенерирует нам модифицированную модель. Модель сгенерирована. Теперь копируем из директории kaldi/egs/wsj/s5/exp/tdnn/lgraph/ файлы Gr.fst и HCLr.fst и вставляем их в родную модель, которую скачали в самом начале. После этого в папке vosk-model-small-ru-0.22 будет модель, способная распознавать добавленные нами слова. Успехов, и всего наилучшего.