返回预测wav2vec fairseq

2024-06-01 10:34:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用wav2vec来训练我自己的自动语音识别系统:

https://github.com/pytorch/fairseq/tree/master/examples/wav2vec

import torch
from fairseq.models.wav2vec import Wav2VecModel

cp = torch.load('/path/to/wav2vec.pt')
model = Wav2VecModel.build_model(cp['args'], task=None)
model.load_state_dict(cp['model'])
model.eval()

首先,如何使用加载的模型从wav文件返回预测

第二,如何使用带注释的数据进行预训练? 我在清单脚本中没有看到任何提到的文本


Tags: httpsimportgithubmastercomtreemodelload
2条回答

在尝试了各种方法之后,我终于找到了答案,并从头开始训练了一个wav2vec模型

一些背景:wav2vec使用半监督学习来学习预处理声音帧的向量表示。这类似于word2vec学习嵌入文本语料库的单词所做的工作。在wav2vec的情况下,它对声音文件的随机部分进行采样,并学习预测给定部分是否在不久的将来从当前偏移位置开始。这在某种程度上类似于用于训练诸如伯特这样的变形金刚的蒙面单词任务。这种预测任务的优点在于它们是自我监督的:该算法可以在未标记的数据上进行训练,因为它使用数据的时间结构来生成标签,并使用随机抽样来生成对比的否定示例。这是一项二值分类任务(是指建议处理的声音帧在近期内的当前偏移量与否)。 在这个二元分类任务的训练中,它学习声音帧的矢量表示(每10ms声音一个512维的矢量)。这些向量表示是有用的特征,因为它们集中了与预测语音相关的信息。然后可以使用这些向量代替谱图向量作为语音到文本算法(如Wav2Litter或deepSpeech)的输入。这是一个重要的观点:wav2vec不是一个全自动语音识别(ASR)系统。它是一个有用的组件,因为通过利用对未标记数据(包含语音但没有文本转录的音频文件)的自监督学习,它大大减少了对标记数据(语音转录为文本)的需要。根据他们的文章,似乎通过在ASR管道中使用wav2vec,所需的标记数据量可以减少至少10倍(显然所需的转录语音减少10到100倍)。由于未转录的语音文件比转录的语音文件更容易获取,这是在ASR系统中使用wav2vec作为初始模块的巨大优势

因此,wav2vec使用未注释的数据进行训练(不使用文本进行训练)

让我困惑的是以下训练命令(here):

python train.py /manifest/path  save-dir /model/path ...(etc.).........

事实证明,由于wav2vec是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

大多数参数都是建议的here,只有前两个(即文件系统路径)必须为您的系统修改

因为我有mp3格式的音频文件,所以我使用以下bash脚本将它们转换为wav文件:

#!/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方法的第二个参数是保存模型的路径。 培训后将有以下两个模型文件:
检查点\u最佳。pt
检查点\u last.pt
这些都是在每个历元结束时更新的,因此我能够提前终止训练过程,并且仍然保留那些保存的模型文件

您错过了示例代码的后半部分

# replace this line with the input from your wave file
wav_input_16khz = torch.randn(1,10000)
# this extracts the features
z = model.feature_extractor(wav_input_16khz)
# this will have your embedding
c = model.feature_aggregator(z)

(有关问题最后两位的更多信息,请参见此处) https://github.com/pytorch/fairseq/tree/master/examples/wav2vec

相关问题 更多 >