news 2026/4/18 6:57:32

系列教程十 | 基于 Wav2Vec2 的语音特征提取与识别实战教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
系列教程十 | 基于 Wav2Vec2 的语音特征提取与识别实战教程

一.项目介绍

在语音处理与自然语言交互等场景中,将语音准确转换为文本并提取有价值的语音特征是关键需求。传统语音处理方式在面对复杂语音内容时,识别准确率和特征提取的深度与精度都存在明显不足。本教程旨在利用Torchaudio库中的WAV2VEC2_ASR_BASE_960H模型,针对语音特征提取和语音转文本任务进行实践操作。该任务的目标是通过对模型的合理运用,精准提取语音特征并将语音转换为文本,进而提升在语音识别、语音内容分析、有声读物转文字等领域的工作效率和应用效果。

二.创建Bitahub项目

1.进入BitaHub官网,完成注册后点击右上角进入工作台。

2.在「模型开发和训练」中,创建新的开发环境。

  • 选择平台镜像,JupyterLab访问方式,单卡4090套餐。

三.项目步骤详解

1. 环境与数据准备

Wav2Vec2 是 Facebook AI Research 团队开发的一种自监督学习的预训练模型,用于语音处理和语音识别任务。torchaudio是 PyTorch 的音频库,它提供了一系列工具和预训练模型,方便用户进行音频处理。torchaudio将 Wav2Vec2 集成到其pipelines模块中,使得用户可以方便地加载和使用预训练的 Wav2Vec2 模型。

导入torch和torchaudio库,设置随机种子为 0,确保实验的可重复性。

import torchimport torchaudiotorch.random.manual_seed(0)device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

获取语音输入样本,用于后续语音识别测试。

import IPythonimport matplotlib.pyplot as pltfrom torchaudio.utils import download_assetSPEECH_FILE = download_asset("tutorial-assets/Lab41-SRI-VOiCES-src-sp0307-ch127535-sg0042.wav")

2.模型加载与信息获取

加载torchaudio.pipelines.WAV2VEC2_ASR_BASE_960H模型,这是一个预训练的语音识别模型。同时获取模型的采样率和标签信息,采样率用于后续对语音数据的处理,标签则与模型输出的分类结果相对应。

bundle = torchaudio.pipelines.WAV2VEC2_ASR_BASE_960Hprint("Sample Rate:", bundle.sample_rate)print("Labels:", bundle.get_labels())

Sample Rate: 16000

Labels: ('-', '|', 'E', 'T', 'A', 'O', 'N', 'I', 'H', 'S', 'R', 'D', 'L', 'U', 'M', 'W', 'C', 'F', 'G', 'Y', 'P', 'B', 'V', 'K', "'", 'X', 'J', 'Q', 'Z')

获取预训练权重并将其加载到模型中。

model = bundle.get_model().to(device)print(model.__class__)

3.数据处理与分析

IPython.display.Audio(SPEECH_FILE)

加载音频文件,获取波形数据(waveform)和原始采样率。若采样率不匹配,使用 resample 调整至模型要求的 16kHz。

waveform, sample_rate = torchaudio.load(SPEECH_FILE)waveform = waveform.to(device)if sample_rate != bundle.sample_rate:waveform = torchaudio.functional.resample(waveform, sample_rate, bundle.sample_rate

调用模型的extract_features方法对处理后的语音波形进行特征提取。然后,根据提取的特征绘制特征图,展示不同 Transformer 层的特征情况,有助于理解模型对语音数据的特征提取过程。

with torch.inference_mode():features, _ = model.extract_features(waveform)fig, ax = plt.subplots(len(features), 1, figsize=(16, 4.3 * len(features)))for i, feats in enumerate(features):ax[i].imshow(feats[0].cpu(), interpolation="nearest")ax[i].set_title(f"Feature from transformer layer {i+1}")ax[i].set_xlabel("Feature dimension")ax[i].set_ylabel("Frame (time-axis)")fig.tight_layout()

4.语音转文本

在推理模式下,将处理后的语音波形输入模型,得到模型的分类结果。绘制模型分类结果的图像,横坐标为时间轴上的帧,纵坐标为类别,通过图像可以直观地观察模型对语音数据不同帧的分类情况。

with torch.inference_mode():emission, _ = model(waveform)plt.imshow(emission[0].cpu().T, interpolation="nearest")plt.title("Classification result")plt.xlabel("Frame (time-axis)")plt.ylabel("Class")plt.tight_layout()print("Class labels:", bundle.get_labels())

Class labels: ('-', '|', 'E', 'T', 'A', 'O', 'N', 'I', 'H', 'S', 'R', 'D', 'L', 'U', 'M', 'W', 'C', 'F', 'G', 'Y', 'P', 'B', 'V', 'K', "'", 'X', 'J', 'Q', 'Z')

将模型输出转换为可读文本,取每一时间帧概率最高的标签索引、去除连续重复索引和空白标签索引,最终将剩余索引对应的标签拼接成文本字符串,实现语音转文本的功能。

class GreedyCTCDecoder(torch.nn.Module):def __init__(self, labels, blank=0):super().__init__()self.labels = labelsself.blank = blankdef forward(self, emission: torch.Tensor) -> str:indices = torch.argmax(emission, dim=-1)indices = torch.unique_consecutive(indices, dim=-1)indices = [i for i in indices if i != self.blank]return "".join([self.labels[i] for i in indices])decoder = GreedyCTCDecoder(labels=bundle.get_labels())transcript = decoder(emission[0])print(transcript)

I|HAD|THAT|CURIOSITY|BESIDE|ME|AT|THIS|MOMENT|

四.总结

本项目介绍了基于Torchaudio库利用Wav2Vec2模型进行语音特征提取与语音转文本的完整流程。采用直接调用预训练模型的方式,在torch框架下,对下载的语音文件进行处理,确保采样率符合模型要求。通过模型提取语音特征并可视化,进而完成语音转文本任务,成功将语音转换为对应的文本内容。后续可进一步探索结合其他优化技术或框架,提升语音处理的性能和效率,以应用于更多实际场景。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 14:42:53

昇腾910B部署vLLM-ascend实战指南

昇腾910B部署vLLM-ascend实战指南 在大模型从实验室走向真实业务场景的今天,推理效率不再只是性能指标,而是决定能否落地的关键门槛。一个高并发、低延迟、资源利用率高的推理服务,往往能直接决定产品的用户体验和运营成本。 而在这条通往高…

作者头像 李华
网站建设 2026/4/13 20:32:00

生态聚力,数智未来|盘古信息生态接待日圆满举行

12月11日,广东盘古信息科技股份有限公司在东莞总部成功举办生态接待日。本次活动以“携手共赢,生态共建”为主题,汇聚全国各地生态伙伴与企业代表,通过沉浸式交流与深度对接,共探IMS OS新一代工业软件的创新路径&#…

作者头像 李华
网站建设 2026/4/5 1:42:35

从“炼丹“到“智能炼丹“:LLM如何重塑材料科研新范式

本文介绍了大型语言模型(LLM)在材料科学领域的革命性应用。与传统机器学习相比,LLM能处理非结构化数据、理解科学语言上下文、具备强大的泛化和推理能力。文章通过词嵌入和注意力机制两个核心概念解释了LLM的工作原理,并阐述了LLM作为文献调研助手、思路…

作者头像 李华
网站建设 2026/4/16 10:38:55

Qwen3-VL-30B API调用与部署全指南

Qwen3-VL-30B API调用与部署实战:构建下一代视觉智能系统 你有没有试过让用户上传一张医院检查单,然后AI只能回答“我看不到内容”?或者在智能客服中,客户发来一张订单截图问“为什么还没发货”,系统却无动于衷&#x…

作者头像 李华
网站建设 2026/4/15 10:27:15

网安毕设容易的课题100例

0 选题推荐 - 大数据篇 毕业设计是大家学习生涯的最重要的里程碑,它不仅是对四年所学知识的综合运用,更是展示个人技术能力和创新思维的重要过程。选择一个合适的毕业设计题目至关重要,它应该既能体现你的专业能力,又能满足实际应…

作者头像 李华
网站建设 2026/4/17 23:15:24

嵌入式软件自学:中断(专栏长期持续更新)

嵌入式软件核心:STM32中断系统全解析(原理、配置、故障与实战) 聚焦中断配置落地、实时性管控与故障解决 一、核心认知:STM32中断的本质与核心价值 STM32中断系统是“硬件事件触发的异步执行机制”,核心作用是让CPU脱离…

作者头像 李华