英文

WavLM-Base-Plus用于说话人验证

Microsoft's WavLM

该模型在16kHz采样的语音音频上进行了预训练,并使用话语和说话人对比损失。在使用该模型时,请确保您的语音输入也以16kHz进行采样。

注意:该模型没有自己的分词器,因为它仅在音频上进行了预训练。要使用该模型进行语音识别,需要创建一个分词器,并在标记的文本数据上进行微调。详细了解如何对模型进行微调的说明,请参阅 this blog

该模型的预训练内容:

Paper: WavLM: Large-Scale Self-Supervised Pre-Training for Full Stack Speech Processing

作者:Sanyuan Chen,Chengyi Wang,Zhengyang Chen,Yu Wu,Shujie Liu,Zhuo Chen,Jinyu Li,Naoyuki Kanda,Takuya Yoshioka,Xiong Xiao,Jian Wu,Long Zhou,Shuo Ren,Yanmin Qian,Yao Qian,Jian Wu,Michael Zeng,Furu Wei

摘要:自监督学习(SSL)在语音识别方面取得了巨大成功,而对其他语音处理任务的探索有限。由于语音信号包含了说话人身份、辅语言学、口语内容等多方面信息,因此学习所有语音任务的通用表示是具有挑战性的。在本文中,我们提出了一种新的预训练模型WavLM,以解决全栈下游语音任务。WavLM基于HuBERT框架构建,注重口语内容建模和说话人身份保护。我们首先使用门控相对位置偏差来改善Transformer结构在识别任务上的能力。为了更好地区分说话人,我们提出了一种话语混合训练策略,在模型训练过程中无监督地创建额外重叠的话语并加入。最后,我们将训练数据集从60k小时扩展到94k小时。WavLM Large在SUPERB基准测试中取得了最先进的性能,并对其代表性基准测试中的各种语音处理任务带来了显著改进。

可以在 https://github.com/microsoft/unilm/tree/master/wavlm 中找到原始模型。

微调细节

该模型在 VoxCeleb1 dataset 上进行了微调,使用了具有附加边界Softmax损失的X-Vector头部 X-Vectors: Robust DNN Embeddings for Speaker Recognition

用法

说话人验证

from transformers import Wav2Vec2FeatureExtractor, WavLMForXVector
from datasets import load_dataset
import torch

dataset = load_dataset("hf-internal-testing/librispeech_asr_demo", "clean", split="validation")

feature_extractor = Wav2Vec2FeatureExtractor.from_pretrained('microsoft/wavlm-base-plus-sv')
model = WavLMForXVector.from_pretrained('microsoft/wavlm-base-plus-sv')

# audio files are decoded on the fly
audio = [x["array"] for x in dataset[:2]["audio"]]
inputs = feature_extractor(audio, padding=True, return_tensors="pt")
embeddings = model(**inputs).embeddings
embeddings = torch.nn.functional.normalize(embeddings, dim=-1).cpu()

# the resulting embeddings can be used for cosine similarity-based retrieval
cosine_sim = torch.nn.CosineSimilarity(dim=-1)
similarity = cosine_sim(embeddings[0], embeddings[1])
threshold = 0.86  # the optimal threshold is dataset-dependent
if similarity < threshold:
    print("Speakers are not the same!")

许可证

here 可以找到官方许可证