1. 课程导入
各位同学好,我是这门课的主讲。在语音识别领域摸爬滚打了十几年,踩过的坑比走过的路还多。今天咱们先聊聊语音识别的全貌——它从哪来,用到哪去,现在卡在哪,以及我们怎么衡量它好不好。
说白了,语音识别就是让机器听懂人话。但这事儿远没你想的那么简单。我刚开始做这行时,觉得不就是“声音转文字”嘛,后来才发现,这里面藏着声学、语言学、信号处理、深度学习一大堆学问。
核心观点:语音识别的本质是一个序列到序列的映射问题——把连续的声学信号,映射成离散的文本符号。这个映射过程,充满了不确定性。
1.1 语音识别技术发展史
语音识别不是新鲜事。从上世纪50年代到现在,它经历了几个关键阶段。我把它分成四个时期,你一看就明白。
| 时期 | 时间 | 核心技术 | 代表系统 |
|---|---|---|---|
| 萌芽期 | 1950s-1970s | 模板匹配、动态时间规整(DTW) | IBM Shoebox(识别16个英文单词) |
| 统计建模期 | 1980s-2000s | 隐马尔可夫模型(HMM)+ 高斯混合模型(GMM) | Dragon NaturallySpeaking |
| 深度学习期 | 2010s-2015 | DNN-HMM混合模型、RNN/LSTM | 百度Deep Speech |
| 端到端时代 | 2016-至今 | CTC、Attention、Transformer、Conformer | Whisper、WeNet、RNN-T |
我记得刚入行那会儿,大家还在用GMM-HMM那一套。调个高斯分量数能调一星期,效果还不咋地。后来深度学习一来,整个行业都变了。嗯,这里要注意——不是旧技术没用,而是新工具让我们能处理更复杂的声学模式。
我的经验:别小看HMM。虽然现在端到端模型是主流,但HMM的时序建模思想,在语音对齐、强制对齐这些任务里依然好用。我去年做的一个项目,就是用HMM做数据对齐,帮端到端模型提升了3%的准确率。
1.2 核心应用场景
语音识别现在几乎无处不在。我随便列几个,你肯定都用过。
- 智能助手:小爱、Siri、天猫精灵。这些场景要求低延迟、高实时性,但可以容忍少量错误。
- 会议转写:讯飞听见、阿里云语音转写。要求高准确率,尤其是专业术语、人名、数字。
- 车载语音:导航、空调控制。噪声环境复杂,风噪、胎噪、音乐声混在一起。
- 医疗听写:医生口述病历。这是高价值场景,错一个字可能出大事。
- 客服质检:自动分析通话录音。需要处理方言、口音、语速变化。
你想想看,这些场景对精度的要求完全不一样。车载场景,你说“导航到天安门”,它识别成“导航到天安们”,可能也能用。但医疗场景,“服用阿莫西林”识别成“服用阿莫西林胶囊”,剂量就错了。
避坑指南:我曾经在一个医疗项目中,直接拿通用模型去跑,结果“盐酸二甲双胍”识别成了“盐酸二甲双瓜”。后来加了医疗领域词表和语言模型,错误率才降下来。所以——场景决定技术选型,别想一套模型打天下。
1.3 当前面临的精度挑战
语音识别做到今天,在安静环境下,准确率已经很高了。但一到真实场景,问题就来了。我总结了几个核心挑战。
- 噪声鲁棒性:背景音乐、多人说话、机器轰鸣。信噪比低的时候,模型直接“失聪”。
- 口音与方言:中文有八大方言区,英文有印度口音、日本口音。模型在训练数据覆盖不到的口音上,表现断崖式下降。
- 语速变化:有人说话像机关枪,有人慢吞吞。模型对语速的泛化能力有限。
- 长尾词与专有名词:人名、地名、产品名、生僻字。训练数据里出现次数少,模型就学不会。
- 领域迁移:在新闻数据上训练好的模型,拿到金融领域,准确率直接掉10个点。
为什么会这样?说白了,语音信号本身就有歧义。同一个音,在不同上下文、不同人嘴里,声学特征差异很大。再加上环境干扰,模型要做的其实是一个“在噪声中猜答案”的游戏。
一个残酷的事实:我见过很多团队,在公开测试集上刷到98%的准确率,一上线就被用户骂。为什么?因为测试集是干净的,用户环境是脏的。精度提升,从来不是实验室里的数字游戏。
1.4 评价指标:WER 与 CER
聊精度,先得说清楚怎么量。语音识别最核心的指标就是词错误率(WER)和字错误率(CER)。
WER(Word Error Rate) 的计算公式很简单:
WER = (S + D + I) / N × 100%
其中:
S = 替换错误的词数(Substitution)
D = 删除错误的词数(Deletion)
I = 插入错误的词数(Insertion)
N = 参考文本的总词数
注意,WER 可以超过100%。如果模型疯狂插入词,错误率就爆表了。我见过最夸张的一个模型,WER 跑到 180%,比不说话还差。
CER(Character Error Rate) 和 WER 原理一样,只是把“词”换成“字”。中文里,CER 更常用,因为中文的词边界不明确。
| 指标 | 适用语言 | 粒度 | 典型值(当前SOTA) |
|---|---|---|---|
| WER | 英文、分词后的中文 | 词级别 | 2%-5%(英文LibriSpeech clean) |
| CER | 中文、日文、韩文 | 字/字符级别 | 3%-8%(中文AISHELL-1) |
我的习惯:做中文语音识别,我一般同时看 CER 和句子准确率(SACC)。CER 反映字级别的错误,SACC 反映整句对不对。有时候 CER 很低,但每句话都错一两个字,用户体验其实很差。两个指标一起看,才能全面评估。
计算 WER/CER 时,需要用动态规划做对齐。我给你们看一段简单的 Python 代码,用 jiwer 库算 WER:
import jiwer
reference = "今天天气真不错"
hypothesis = "今天天气真不错"
wer = jiwer.wer(reference, hypothesis)
print(f"WER: {wer:.2%}")
# 输出:WER: 0.00%
# 如果识别错了
hypothesis_bad = "今天天气真不差"
wer_bad = jiwer.wer(reference, hypothesis_bad)
print(f"WER: {wer_bad:.2%}")
# 输出:WER: 25.00% (替换了1个字,共4个字)
嗯,这里要注意——WER 对插入错误特别敏感。模型如果倾向于多说词,WER 会很难看。反过来,如果模型倾向于少说词,虽然 WER 可能不高,但信息丢失了。所以调模型时,要平衡删除和插入的惩罚权重。
避坑指南:我曾经犯过一个错——只盯着 WER 调模型,结果 WER 降了,但用户反馈说“识别结果经常漏词”。后来一查,是解码时 beam search 的惩罚参数设得太高,模型倾向于输出短句。所以,指标只是参考,最终要以用户体验为准。
1.5 本章知识体系总览
最后,我用一张图把本章的核心逻辑串起来。你一看就明白语音识别的全貌了。
这张图把本章的核心逻辑串起来了。从语音识别这个中心点出发,我们聊了它的发展史、应用场景、精度挑战,最后落到评价指标上。后面的课程,我们会沿着这些分支深入下去,一步步把精度提上去。
好,第一章就到这里。记住一句话:语音识别精度提升,不是一蹴而就的事。它需要你理解历史、看清场景、直面挑战、用好指标。后面的路还长,咱们慢慢走。