1

我正在尝试通过使用Hugging Face Transformers接收使用 wav2vec 的短 wav(音频)文件的特征向量。

但是不知什么原因,无论我使用哪种方法来控制输出大小,结果都达不到我的要求。

理想情况下,我想让所有向量的长度相同(例如 60K)。我尝试使用以下命令获取它:

feature_extractor(input_audio, sampling_rate=16000, return_tensors="np", padding="max_length",
                                    max_length=60000).input_values

该命令通过将所有向量填充到至少 60K 长度来帮助我创建数据大小的最小边界,但我惊讶地看到也创建了具有 120K 值的向量。

然后我删除填充参数,希望获得没有填充但上限为 60K 的向量。根据max_length文档:

返回列表的最大长度和可选的填充长度

所以我执行了这一行:

feature_extractor(input_audio, sampling_rate=16000, return_tensors="np",
                                    max_length=60000).input_values

出乎意料的是,我收到了长度从 20K 到 120K 的向量。完全不受限制。


为了重现我的错误和结果,我包含了一段代码和一个指向相关音频数据的链接。

import librosa
import numpy as np
from transformers import Wav2Vec2FeatureExtractor
from pathlib import Path

    p = Path(dataset_path)
    audio_files = [i.parents[0] / i.name for i in p.glob('**/*.wav')]
    feature_extractor = Wav2Vec2FeatureExtractor.from_pretrained('facebook/wav2vec2-base-960h')
    for file in (audio_files):
        input_audio, _ = librosa.load(file,
                                      sr=16000)
        features_with_padding = feature_extractor(input_audio, sampling_rate=16000,
                                return_tensors="np", padding="max_length", max_length=60000).input_values                                
        features_without_padding = feature_extractor(input_audio, sampling_rate=16000,
                                  return_tensors="np", max_length=60000).input_values
        print(features_with_padding.shape, features_without_padding.shape)

这个驱动器文件夹中,我附加了 2 个创建大约 80K 长度矢量的 wav 文件。

如何使用 wav2vec 转换器创建单一尺寸的特征向量?

4

1 回答 1

2

目前truncationHugging Face 中的特征提取器不支持,所以如果你想“填充”到比样本长度短的“max_length”,它根本不会改变任何东西,因为不需要填充。

但是,我们绝对应该truncation为 Transformer 添加一个功能,因为它非常重要。

于 2021-07-20T08:10:29.300 回答