Многие из вас задаются вопросом, что у вас недостаточно ресурсов, таких как аудиоданные, транскрипции и, что более важно, оборудования для обучения хорошей модели. Таким образом, разумно использовать предварительно обученную модель, которая уже была обучена исследователями, у которых был доступ ко всем ресурсам, если вы не хотите превзойти результаты SOTA. Чтобы объяснить, как можно использовать предварительно обученную модель, я здесь рассматриваю модель ASpIRE, которую мы получаем из репозитория загрузок Kaldi. Я рассматриваю модель ASpIRE, поскольку она обучается на наборе данных Fisher English, который был дополнен импульсными характеристиками и шумами для создания тренировки с несколькими условиями. Хорошо…. Давайте сначала разберемся, что вам нужно для декодирования аудиофайла.

  1. Аудиофайл, выбранный на частоте 8 кГц, поскольку модель была обучена на mfccs, сгенерированных из набора аудиоданных с частотой 8 кГц. Путь к аудиофайлу должен быть указан в файле с именем wav.scp, который ожидают сценарии Kaldi. wav.scp имеет два столбца, первый столбец содержит идентификатор высказывания или говорящего (поскольку здесь мы говорим только об одном файле), а во втором столбце - путь к файлу wav. Если ваш звук не в формате wav, вам нужно будет передать двоичный файл (например, sph2pipe) для преобразования аудиофайла в формат wav. Если ваш аудиофайл не дискретизирован с частотой 8 кГц, как мой, тогда мы можем передать двоичный вывод sox по конвейеру для дальнейшей обработки, как показано ниже. Я не использовал sph2pipe, потому что мой аудиофайл уже имеет формат wav. (Ссылка на мой аудиофайл)

Как вы уже догадались, я пытаюсь декодировать аудиофайл с именем test_file.wav, который находится в моем каталоге ~ / Desktop / ASR_demo / audio.

создайте файл utt2spk с высказыванием (nithin_123, как показано выше), за которым следует говорящий (имя говорящего, здесь я) в каталоге ~ / Desktop / ASR_demo /. wav.scp и utt2spk - это только два файла, которые мы создадим сами, остальное мы загружаем с веб-сайта Kaldi.

2. Теперь нам требуется акустическая модель, которую мы обычно называем final.mdl, и граф fst (HCLG.fst), декодирующий граф, который является композицией грамматики, состояний HMM, контекста и лексики. На данный момент я не буду вдаваться в подробности этих терминов, я постараюсь объяснить их в будущих блогах.

3. Нам нужно построить fst на основе нашей языковой модели (G.fst) (если нам нужно ограничить слова или изменить язык в целом).

4. Теперь загрузите файлы МОДЕЛИ с http://kaldi-asr.org/models/1/0001_aspire_chain_model.tar.gz и распакуйте их в существующий egs / aspire / s5 / path.

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

6. Создайте файл mfcc_hires.conf с конфигурацией, как указано ниже, в каталоге s5 / conf /. Этот файл конфигурации используется для создания функций, необходимых для декодирования модели.

7. Затем запустите сценарий ……

- → это сгенерирует файлы ivector и соответствующие файлы конфигурации, необходимые для декодирования. Потратьте немного времени, чтобы посмотреть, какие файлы присутствуют в exp / chain / tdnn_7b и exp / tdnn_7b_chain_online

8. Как обсуждалось ранее, нам нужно сгенерировать составной граф HCLG.fst на основе существующих G.fst (грамматика), L.fst (Lexicon) (см. Каталог data / lang_pp_test). Чтобы сгенерировать HCLG.fst, запустите

utils / mkgraph.sh - масштабируемые данные 1.0 / lang_pp_test exp / tdnn_7b_chain_online exp / tdnn_7b_chain_online / graph

Приведенная выше команда создает файл HCLG.fst в каталоге exp / tdnn_7b_chain_online / graph.

9. Теперь остается только декодировать файл на основе файла и графика mdl ... команда для генерации декодированных решеток выглядит так:

шаги / онлайн / nnet3 / decode.sh - nj 1 - acwt 1.0 - post-decode-acwt 10.0 exp / tdnn_7b_chain_online / graph ~ / Desktop / ASR_demo / exp / tdnn_7b_chain_online / decode_ASR_demo

Вышеупомянутая команда берет каталог, в котором находится наш файл wav.scp, и наши решетки будут сгенерированы в каталоге exp / tdnn_7b_chain_online / decode_ASR_demo.

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

lattice-best-path ark: ’gunzip -c exp / tdnn_7b_chain_online / ASR_decode / lat.1.gz |’ ‘ark, t: | int2sym.pl -f 2- exp / tdnn_7b_chain_online / graph / words.txt ›~ / Desktop / ASR_demo / decoded_text.txt’

Здесь вывод сохраняется в файле ~ / Desktop / ASR_demo / decoded_text.txt, как показано ниже:

Мы также можем просматривать вывод вместе с некоторыми командами, которые Kaldi запускал через сценарии в файле exp / tdnn_7b_chain_online / ASR_decode / log / decode.1.log.

На этом пока все. Надеюсь, вы узнали что-то полезное 😄.

Это мой первый технический пост в блоге. Сообщите мне, если вы нашли это полезным. Хотелось бы услышать отзывы :)