语音与音频 AI
语音识别 Whisper、语音合成 TTS / VITS、语种识别、音频特征提取
语音 AI 概览
语音人工智能是让机器理解、生成和处理人类语音的技术体系。语音领域主要包含四大核心任务:
- 语音识别(Automatic Speech Recognition, ASR):将语音信号转换为文本,是人机语音交互的基础。
- 语音合成(Text-to-Speech, TTS):将文本转换为自然流畅的语音,广泛应用于语音助手、有声读物和导航系统。
- 语种识别(Language Identification, LID):判断一段语音所属的语言种类,常用于多语言语音系统的前置模块。
- 声纹识别(Speaker Recognition):通过语音特征鉴别说话人身份,应用于安全认证和司法鉴定。
应用场景覆盖智能音箱、实时字幕、会议转写、语音翻译、呼叫中心质检、教育测评等众多领域。深度学习技术的成熟使得语音 AI 在准确率和自然度上均取得了显著突破。
语音识别(ASR)
OpenAI Whisper
Whisper 是 OpenAI 开源的通用语音识别模型,采用标准的 Encoder-Decoder Transformer 架构。其独特之处在于多任务训练格式:模型通过特殊的提示标记(prompt tokens)区分不同的任务模式。
Whisper 的训练格式以 <|lang|> 指定目标语言,以 <|transcribe|> 或 <|translate|> 指定任务类型,以 <|timestamps|> 控制是否输出时间戳。同一模型可同时完成语音识别、语言翻译(语音到英文文本)和带时间戳的转录。
Whisper 提供多种模型规格,从 tiny(39M 参数)到 large(1.55B 参数),支持 99 种语言的识别。
| 模型 | 参数规模 | 多语言支持 | 推荐场景 |
|---|---|---|---|
| tiny | 39M | 是 | 实时轻量应用 |
| base | 74M | 是 | 移动设备 |
| small | 244M | 是 | 边缘计算 |
| medium | 769M | 是 | 服务器端均衡方案 |
| large | 1550M | 是 | 高精度离线场景 |
评估指标:
- 词错率(Word Error Rate, WER):衡量识别结果与参考文本之间的编辑距离,计算公式为
(S + D + I) / N,其中 S 为替换词数,D 为删除词数,I 为插入词数,N 为参考词数。WER 越低越好。 - 字错率(Character Error Rate, CER):与 WER 类似,但以字符而非单词为单位计算,适用于中文等非空格分隔语言。
其他代表性模型
| 模型 | 架构 | 核心特点 |
|---|---|---|
| Wav2Vec 2.0 | Transformer 自监督 | 对大量无标注语音进行对比学习,再通过少量标注数据微调 |
| HuBERT | Transformer 自监督 | 用聚类生成的伪标签进行隐单元表征学习,鲁棒性更强 |
| Paraformer | Non-Autoregressive | 非自回归解码,并行输出,推理速度显著快于自回归模型 |
代码示例:使用 whisper 进行语音识别
import whisper
# 加载模型(自动下载权重)
model = whisper.load_model("base")
# 转录音频文件
result = model.transcribe("audio.mp3", language="zh")
print(result["text"])
# 带时间戳的转录
result_with_timestamp = model.transcribe("audio.mp3", language="zh", word_timestamps=True)
for segment in result_with_timestamp["segments"]:
print(f"[{segment['start']:.2f}s -> {segment['end']:.2f}s] {segment['text']}")代码示例:使用 transformers 进行语音识别
from transformers import pipeline
# 使用 Whisper pipeline
asr_pipeline = pipeline(
"automatic-speech-recognition",
model="openai/whisper-base",
device=0 # CPU 设为 -1,GPU 设为 0
)
result = asr_pipeline("audio.wav", return_timestamps=True)
print(result["text"])语音合成(TTS)
经典流水线架构
传统的 TTS 系统采用多阶段流水线架构:
- 文本前端(Text Frontend):对输入文本进行正则化、分词、音素转换和韵律预测。
- 声学模型(Acoustic Model):将语言特征映射为声学特征(如 Mel Spectrogram)。
- 声码器(Vocoder):将声学特征还原为原始波形。
这种流水线各模块独立优化,但误差会逐级累积。
VITS
VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)是一种端到端语音合成模型,核心创新如下:
- 条件变分自编码器(Conditional VAE):将文本编码为隐变量,再通过解码器生成波形,引入 KL 散度正则化,使隐空间更平滑。
- 对抗训练(Adversarial Training):引入判别器对生成波形进行真假判别,提升合成语音的自然度和真实感。
- 单阶段文本到波形:端到端训练,无需显式的声学特征中间表示,避免了流水线中的误差传播。
VITS 在自然度和 MOS(Mean Opinion Score)上显著优于传统流水线方法。
其他代表性模型
| 模型 | 架构类型 | 核心特点 |
|---|---|---|
| Tacotron 2 + WaveGlow | 流水线 | Tacotron 2 生成 Mel Spectrogram,WaveGlow 作为流式声码器 |
| FastSpeech 2 | 非自回归 | 基于 Duration Predictor 实现并行生成,速度快且可控性高 |
| CosyVoice | 大语言模型驱动 | 阿里通义实验室出品,结合 LLM 实现零样本语音克隆和风格控制 |
语种识别(Language Identification)
语种识别通常被建模为基于 Embedding 的分类问题,主要流程如下:
- 特征提取:从语音信号中提取声学特征(如 MFCC 或 Fbank)。
- Embedding 提取:使用深度神经网络(如 TDNN、ResNet、ECAPA-TDNN)将变长语音映射为固定维度的语种嵌入向量。
- 分类器:在嵌入向量上接全连接层和 Softmax,输出各语种的概率分布。
常见的语种识别数据集包括 VoxLingua107(涵盖 107 种语言)和 NIST LRE 系列评测任务。当前最先进的语种识别系统在 107 种语言上的 Top-1 准确率可达 90% 以上。
音频特征提取
音频特征提取是将原始波形转换为可用于机器学习任务的数值表示的过程,分为时域特征和频域特征两大类。
时域特征
- 过零率(Zero Crossing Rate, ZCR):每帧内信号穿过零轴的次数,反映信号的频率特性。浊音段 ZCR 较低,清音段 ZCR 较高。
- 短时能量(Short-Time Energy, STE):每帧内信号的平方和,衡量该帧的响度。用于区分静音段和语音段。
频域特征
- MFCC(梅尔频率倒谱系数):模拟人耳听觉特性,先对 Mel Spectrogram 取对数再进行离散余弦变换(DCT),得到一组去相关的倒谱系数。是语音领域最经典的特征之一,常用于 ASR 和说话人识别。
- Mel Spectrogram(梅尔频谱图):对 STFT 频谱进行梅尔尺度滤波得到的二维时频表示,是 TTS 和语音增强中最常见的中间表示。
- Fbank(Filter Banks):在 Mel Spectrogram 基础上取对数能量,未经过 DCT 变换,保留了更多非线性信息,在现代基于深度学习的 ASR 中比 MFCC 更常用。
特征对比总结
| 特征 | 维度 | 主要用途 | 是否保留相位信息 |
|---|---|---|---|
| MFCC | 13-40 | ASR、说话人识别 | 否 |
| Mel Spectrogram | 80-128 | TTS、语音增强 | 否 |
| Fbank | 40-80 | 深度学习 ASR | 否 |
| STFT Spectrogram | 可变 | 语音增强、分离 | 是(包含幅度) |
代码示例:使用 librosa 提取音频特征
import librosa
import numpy as np
# 加载音频文件
audio, sr = librosa.load("audio.wav", sr=16000)
# 提取 MFCC(13维)
mfcc = librosa.feature.mfcc(y=audio, sr=sr, n_mfcc=13)
print(f"MFCC shape: {mfcc.shape}") # (13, time_frames)
# 提取 Mel Spectrogram(80维)
mel_spec = librosa.feature.melspectrogram(y=audio, sr=sr, n_mels=80)
mel_spec_db = librosa.power_to_db(mel_spec, ref=np.max)
print(f"Mel Spectrogram shape: {mel_spec_db.shape}") # (80, time_frames)
# 提取过零率
zcr = librosa.feature.zero_crossing_rate(audio)
print(f"ZCR shape: {zcr.shape}")代码示例:使用 torchaudio 提取音频特征
import torchaudio
import torchaudio.functional as F
# 加载音频
waveform, sample_rate = torchaudio.load("audio.wav")
# 重采样到 16kHz
if sample_rate != 16000:
waveform = F.resample(waveform, sample_rate, 16000)
sample_rate = 16000
# 提取 MFCC
mfcc_transform = torchaudio.transforms.MFCC(
sample_rate=sample_rate,
n_mfcc=13,
melkwargs={"n_fft": 400, "hop_length": 160, "n_mels": 80}
)
mfcc = mfcc_transform(waveform)
print(f"MFCC shape: {mfcc.shape}")
# 提取 Mel Spectrogram
mel_transform = torchaudio.transforms.MelSpectrogram(
sample_rate=sample_rate,
n_fft=400,
hop_length=160,
n_mels=80
)
mel_spec = mel_transform(waveform)
mel_spec_db = F.amplitude_to_DB(mel_spec, multiplier=10.0, top_db=80.0)
print(f"Mel Spectrogram shape: {mel_spec_db.shape}")总结
语音与音频 AI 技术已经从传统的信号处理方法全面转向深度学习驱动。Whisper 凭借多任务统一架构成为 ASR 领域的事实标准,VITS 通过端到端生成式模型显著提升了语音合成质量,而自监督学习(Wav2Vec 2.0、HuBERT)大幅降低了对标注数据的依赖。特征提取作为语音任务的基石,MFCC、Mel Spectrogram 和 Fbank 各有其适用场景。随着大语言模型和多模态技术的融合,语音 AI 正在向更自然、更个性化、更低资源依赖的方向持续演进。