Попробовав разные вещи, я смог разобраться с этим и натренировал модель wav2ve c с нуля.
Некоторый фон: wav2ve c использует обучение под наблюдением для изучения векторных представлений для предварительно обработанного звука кадры. Это похоже на то, что делает word2ve c для изучения встраивания слов в текстовый корпус. В случае wav2ve c он выбирает случайные части звукового файла и учится предсказывать, будет ли данная часть в ближайшем будущем из текущей позиции смещения. Это несколько похоже на замаскированное слово-задачу , используемое для обучения таких преобразователей, как BERT. Хорошая вещь в таких задачах прогнозирования заключается в том, что они контролируются самими собой: алгоритм можно обучать на немаркированных данных, поскольку он использует временную структуру данных для создания меток и использует случайную выборку для создания контрастных отрицательных примеров. Это задача двоичной классификации (является ли предложенный обработанный звуковой кадр в ближайшем будущем текущим смещением или нет). При подготовке к этой задаче двоичной классификации он изучает векторные представления звуковых кадров (один 512 затемненных векторов на каждые 10 мс звука). Эти векторные представления являются полезными функциями, поскольку они концентрируют информацию, относящуюся к предсказанию речи. Эти векторы можно затем использовать вместо векторов спектрограммы в качестве входных данных для алгоритмов преобразования речи в текст, таких как wav2letter или deepSpeech. Это важный момент: wav2ve c - это , а не полностью автоматизированная c система распознавания речи (ASR). Это полезный компонент, поскольку, используя самоконтроль обучения для немаркированных данных (аудиофайлы, содержащие речь, но без текстовой транскрипции), он значительно снижает потребность в помеченных данных (речь, транскрибируемая в текст). На основании их статьи видно, что при использовании wav2ve c в конвейере ASR количество необходимых помеченных данных может быть уменьшено не менее чем в 10 раз (очевидно, что в 10-100 раз требуется меньше транскрибированной речи). Поскольку нетранскрибированные речевые файлы гораздо проще получить, чем транскрибированную речь, это огромное преимущество использования wav2ve c в качестве исходного модуля в системе ASR.
Таким образом, wav2ve c обучается с данными который не аннотирован (для его обучения текст не используется).
То, что меня смутило, было следующей командой для обучения ( здесь ):
python train.py /manifest/path --save-dir /model/path ...(etc.).........
Оказывается, поскольку wav2ve c является частью fairseq, для его обучения следует использовать следующий инструмент командной строки fairseq:
fairseq-train
Поскольку аргументы этой команды довольно длинные, это можно сделать при использовании bash scipt, такого как
#!/bin/bash
fairseq-train /home/user/4fairseq --save-dir /home/user/4fairseq --fp16 --max-update 400000 --save-interval 1 --no-epoch-checkpoints \
--arch wav2vec --task audio_pretraining --lr 1e-06 --min-lr 1e-09 --optimizer adam --max-lr 0.005 --lr-scheduler cosine \
--conv-feature-layers "[(512, 10, 5), (512, 8, 4), (512, 4, 2), (512, 4, 2), (512, 4, 2), (512, 1, 1), (512, 1, 1)]" \
--conv-aggregator-layers "[(512, 2, 1), (512, 3, 1), (512, 4, 1), (512, 5, 1), (512, 6, 1), (512, 7, 1), (512, 8, 1), (512, 9, 1), (512, 10, 1), (512, 11, 1), (512, 12, 1), (512, 13, 1)]" \
--skip-connections-agg --residual-scale 0.5 --log-compression --warmup-updates 500 --warmup-init-lr 1e-07 --criterion binary_cross_entropy --num-negatives 10 \
--max-sample-size 150000 --max-tokens 1500000
, большинство аргументов - это те, которые предлагаются здесь , только первые два (которые являются путями файловой системы) должны быть изменены для вашей системы.
Поскольку у меня были звуковые голосовые файлы в формате mp3, я преобразовал их в wav-файлы следующим bash сценарием:
#!/bin/bash
for file in /home/user/data/soundFiles/*
do
echo "$file"
echo "${file%.*}.wav"
ffmpeg -i "$file" "${file%.*}.wav"
done
Они предполагают, что аудиофайлы имеют короткую продолжительность более длинные файлы должны быть разбиты на более мелкие файлы. Файлы, которые у меня были, были уже довольно короткими, поэтому я не делил их.
сценарий wav2vec_manifest.py должен использоваться для создания манифеста обучающих данных перед началом обучения. Он создаст два файла (train.tsv и valid.tsv), в основном создающих списки аудиофайлов, которые следует использовать для обучения, а также для проверки. Путь, по которому расположены эти два файла, является первым аргументом метода fairseq-train.
Вторым аргументом метода fairseq-train является путь, по которому следует сохранить модель. После обучения появятся эти два файла модели:
checkpoint_best.pt
checkpoint_last.pt
Они обновляются в конце каждой эпохи, поэтому я смог досрочно завершить процесс поезда и при этом сохранить сохраненную модель файлы