ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

WavLM 实践教程:从下载权重到跑通语音特征提取

WavLM 实践教程:从下载权重到跑通语音特征提取 WavLM 实践教程从下载权重到跑通语音特征提取【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilmWavLM 是微软开源的大规模自监督预训练语音模型把 16kHz 原始音频直接转成可用于语音识别、说话人验证、语音分离等任务的表示。本文基于官方仓库覆盖环境准备、权重下载与最小特征提取示例并讲解 Base、Base、Large 三种检查点的选型适合想快速跑通语音编码器的新手。一、WavLM 是什么面向全栈语音任务的编码器WavLM 的定位不是开箱即用的识别器而是一个语音表示编码器输入一段波形输出每个时间帧的语义向量识别、验证、分离等下游任务都在这些向量上接一个轻量任务头再微调。它和 HuBERT、wav2vec 2.0 同属自监督预训练路线区别在于训练目标同时考虑了语音内容与说话人信息因此官方在 SUPERB 基准上同时公布了内容类ASR、KS、QbE和说话人类SID、ASV、SD、ER任务的统一评测结果。SUPERB 是一个覆盖 30 项以上语音任务、统一数据格式的评测基准榜单截图如下对使用者的实际意义是如果你要同时做多个语音任务用同一个预训练编码器可以省去为每个任务单独找模型的工作。二、准备环境与获取 WavLM 权重wavlm/目录没有 requirements.txt依赖从代码导入看只有两个PyTorch和NumPy。git clone https://gitcode.com/GitHub_Trending/un/unilm cd unilm/wavlm pip install torch numpy权重文件不随仓库分发。仓库 wavlm/README.md 的 Pre-Trained Models 一节列出了三个检查点的官方下载地址Azure Storage 与 Google Drive 两种渠道下载后得到形如WavLM-Base.pt的 checkpoint后文代码里统一记为/path/to/wavlm.pt。三、跑通第一个特征提取示例下面的代码是官方 README 中的最小示例在wavlm/目录下运行即可代码里from WavLM import ...依赖当前目录能直接看到 WavLM.py。import torch from WavLM import WavLM, WavLMConfig checkpoint torch.load(/path/to/wavlm.pt) cfg WavLMConfig(checkpoint[cfg]) model WavLM(cfg) model.load_state_dict(checkpoint[model]) model.eval() wav torch.randn(1, 10000) # 16kHz 单声道10000 个采样点 if cfg.normalize: wav torch.nn.functional.layer_norm(wav, wav.shape) rep model.extract_features(wav)[0] print(rep.shape) # torch.Size([1, 31, 768])预期输出说明输入形状是(batch, 采样点数)这里 10000 个采样点约等于 0.6 秒音频卷积特征提取器把时间轴按约 320 倍下采样所以 10000 点变成31 个时间帧即大约每秒 50 帧rep最后一维 768 是 Base 配置的隐藏层维度Large 会更大以 checkpoint 内cfg为准。如果需要每一层的中间表示微调时常用来做多层加权用官方推荐的写法rep, layer_results model.extract_features( wav, output_layermodel.cfg.encoder_layers, ret_layer_resultsTrue)[0] layer_reps [x.transpose(0, 1) for x, _ in layer_results]四、WavLM 检查点怎么选Base、Base 还是 Large三个检查点结构同族差别在预训练语料规模和参数量。参数量与 SUPERB 总分来自下表论文 Table 3与 wavlm/SUPERB_Results.png 一致检查点预训练数据参数量SUPERB 总分WavLM Base960 小时 LibriSpeech94.7M81.9WavLM Base60k Libri-Light 10k GigaSpeech 24k VoxPopuli94.7M82.8WavLM Large同上约 94k 小时混合语料316.6M84.6选型建议Base语料只有 960 小时适合快速验证 pipeline、显存紧张的场景Base和 Base 同参数规模但语料扩大 100 倍多数场景下是性价比最高的起点Large需要最高精度如论文中的说话人验证、分离任务时再上代价是显存与推理时间明显增加。三个检查点的cfg都保存在 checkpoint 内同一套加载代码不用改换权重文件即可。五、三个典型用法与官方结果仓库本身只提供编码器下游训练代码需要搭配框架README 建议通过 Hugging Face Transformers 或 s3prl 接入微调。下面列出 README 中三组代表性结果方便判断该编码器能达到的水平。说话人验证VoxCeleb1EER% 越低越好在 Large Margin Finetune and Score Calibration 设置下模型Vox1-OVox1-EVox1-HHuBERT large0.5850.6541.342WavLM largeNew0.330.4770.984说话人分离CALLHOMEDER% 越低越好模型2 人3 人全部EEND-EDA clustering7.1111.8811.84WavLM large6.4610.6910.35语音分离LibriCSSSI-SDR dB 越高越好模型0S0LOV10OV20OV30OV40Conformer4.54.46.28.51112.6WavLM large4.24.14.85.87.48.5语音分离上 OV 档overfit 数据少的设置提升最明显说明大规模预训练对低数据量场景帮助更大。六、常见问题与调优建议输入必须预处理成 16kHz 单声道。extract_features直接吃波形张量(batch, samples)采样率不对时输出特征没有意义。为什么要先做layer_norm当 checkpoint 的cfg.normalize为 True 时预训练阶段输入经过了归一化推理时不做同样的归一化会掉点所以代码里判断if cfg.normalize后补一步layer_norm。帧数太少是不是丢信息不是。320 倍下采样是结构决定的约每秒 50 帧语义信息分布在 768 维特征里不是靠帧数堆出来的。特征层怎么选官方 README 的建议是提取各层表示后做加权融合而不是固定取某一层ret_layer_resultsTrue就是为这个用途提供的接口。长音频会爆显存吗时间轴帧数与音频时长线性相关50 帧/秒10 分钟音频约 3 万帧如果 batch 维度吃紧可以按分钟切段推理各段特征直接拼接。训练下游任务从哪入手仓库 README 指出 Hugging Face 与 s3prl 都已支持 WavLM微调代码可以直接参考这两个生态不必自己搭训练循环。代码结构想深入看哪里卷积特征提取器、Transformer 编码器和WavLMConfig全在 wavlm/WavLM.py多头注意力与归一化等基础组件在 wavlm/modules.py。七、参考资料官方说明权重下载、加载示例、全部下游结果表wavlm/README.md模型主体wavlm/WavLM.pyWavLM、WavLMConfig、ConvFeatureExtractionModel、TransformerEncoder基础模块wavlm/modules.py论文WavLM: Large-Scale Self-Supervised Pre-training for Full Stack Speech ProcessingarXiv: 2110.13900引用格式见 README 末尾许可证仓库根目录 LICENSEMITWavLM 本身是一个编码器而非完整应用把它接到识别、验证或分离的下游框架里才是完整的工程链路。【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表