Wav2Vec2音频处理技术解析

深度学习模型通常需要大量的标注训练数据才能达到良好的性能。然而,在语音识别领域,获取标注数据尤其困难,因为需要数千小时的转录语音数据来覆盖全球超过6000种语言。近年来,自监督学习作为一种新的范式,通过从无标注样本中学习通用数据表示,并在标注数据上微调模型,已经在自然语言处理和计算机视觉领域取得了显著成功。

Wav2Vec2利用自监督学习,通过无标注训练数据学习,使得语音识别能够覆盖更多的语言和方言。仅使用一小时的标注训练数据,Wav2Vec2就能在LibriSpeech基准测试的100小时子集上超越之前的最先进技术,同时使用的标注数据减少了100倍。

如果对数据科学领域感兴趣,并希望了解这些令人兴奋的技术,推荐查看。

工作原理

Wav2Vec2模型接收任何语言的原始语音信号作为输入。这些音频数据是一维的,并被传递给多层一维卷积神经网络以生成每25毫秒的音频表示。该模型使用了类似于VQ-Vae的量化器概念,其中潜在表示与码本匹配,以便为数据选择最合适的表示。

当这些量化数据被送入Transformer时,大约一半的音频表示会被掩蔽。目标是预测这些掩蔽向量,这是通过对比损失函数有效地完成的。在无标注语音上预训练后,模型会在标注数据上进行微调,以用于下游的语音识别任务,如情感识别和说话人识别。

性能与实现

在有100小时标注数据的Noisy Student自训练中,Word Error Rate(WER)为8.6。这里,Wav2Vec2使用100小时的数据进行训练,而1小时的数据已经能够提供更好的性能。更令人惊讶的是,Wav2Vec2在仅有10分钟标注数据的情况下的性能。

类似于Transformers中的Bidirectional Encoder Representations(BERT),Wav2Vec2通过预测音频掩蔽部分的语音单元进行训练,但使用的是25毫秒长的表示。这使得它即使在标注训练数据减少100倍的情况下,也能超越最佳的半监督方法。

Hugging Face为在960小时Librispeech上预训练和微调的基模型提供了一个,该模型在16kHz采样的语音音频上进行了预训练。可以通过浏览器录制音频样本并查看结果!

以下是如何使用Transformers库和Wav2Vec2将任何英语音频转换为文本的示例代码。

!pip install -q transformers import librosa import torch from transformers import Wav2Vec2ForCTC, Wav2Vec2Tokenizer # 加载模型和分词器 tokenizer = Wav2Vec2Tokenizer.from_pretrained("facebook/wav2vec2-base-960h") model = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-base-960h") # 由于基础模型是在16 kHz音频上预训练的,必须确保音频样本也被重新采样到16 kHz的采样率。 speech, rate = librosa.load("Audio.wav", sr=16000) input_values = tokenizer(speech, return_tensors='pt').input_values # 存储对数几率(未归一化的预测) logits = model(input_values).logits # 存储预测的ID predicted_ids = torch.argmax(logits, dim=-1) # 解码音频以生成文本 transcriptions = tokenizer.decode(predicted_ids[0]) print(transcriptions)
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485