1. 项目背景与任务解析
语音识别领域有个基础但关键的预处理环节叫做音素分类(Phoneme Classification)。这个任务相当于给语音信号中的每个小片段贴上"发音标签",就像给英语单词标注音标一样。我在完成李宏毅老师机器学习课程的这个作业时,深刻体会到音素分类既是入门语音处理的绝佳练手项目,又能帮助我们理解更复杂的语音识别系统是如何构建的。
这个作业使用的TIMIT数据集堪称语音界的MNIST,包含630位说话者录制的约6300个句子,每个语音片段都标注了61种音素标签。实际处理时需要先将这些标签映射成39类(这是语音处理的常规操作,主要是合并一些发音相近的音素)。数据集已经帮我们提取好了每帧语音的39维MFCC特征,这正是专业语音处理的标准操作流程。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 特征工程与数据预处理
2.1 MFCC特征解析
MFCC(梅尔频率倒谱系数)是语音处理的"黄金特征",它模拟了人耳对声音的感知特性。简单来说,这个过程就像:
- 先把声音切成小帧(通常25ms一帧)
- 计算每帧的频谱
- 用梅尔刻度滤波器组过滤(模仿人耳对不同频率的敏感度)
- 最后做离散余弦变换得到倒谱系数
作业提供的数据已经完成了这些处理,但我们还是需要理解这些39维数字背后的物理意义。比如前12维代表频谱包络特征,第13维是能量值,后面是它们的一阶和二阶差分——这些差分特征特别重要,因为它们反映了语音的动态变化特性。
2.2 数据标准化技巧
语音特征标准化有个专业技巧:不能简单地对整个数据集做标准化!因为不同说话者的声音特性差异很大,正确做法是:
python复制# 对每个说话者单独标准化
for speaker in speakers:
mean = np.mean(features[speaker], axis=0)
std = np.std(features[speaker], axis=0)
features[speaker] = (features[speaker] - mean) / (std + 1e-8)
这个小细节直接影响模型效果,我最初没注意这点时准确率直接低了3个百分点。
3. 模型架构设计与优化
3.1 基础模型选择
作业要求使用DNN(深度神经网络),这在音素
