大模型时代的 ASR 技术实践:让 AI 听懂语音,从录音转写到自动字幕
一、ASR 是什么?和大语言模型有什么关系?
我们平时使用的语音输入法、视频自动字幕、会议录音转文字,背后都有 ASR(Automatic Speech Recognition,自动语音识别)的身影。
它的核心任务其实很明确:
将音频中的语音内容,转换为对应的文字。
例如,输入一段中文录音:
“你好,我想查询一下昨天购买的耳机什么时候发货。”
ASR 模型的输出就是这段话的文字,而不是回答用户什么时候发货。
这也是它与普通大语言模型的重要区别。
传统 ASR 通常包含声学建模、发音建模、语言建模和解码等环节。随着深度学习的发展,越来越多的模型开始使用端到端架构,直接学习从音频到文本的映射关系。
到了大模型时代,部分 ASR 系统进一步引入了语言模型解码器。
例如 Qwen3-ASR,其架构可以简化为:
原始语音
│
▼
音频预处理
│
▼
语音编码器
(Audio Encoder)
│
▼
声学特征表示
│
▼
语言模型解码器
(LLM Decoder)
│
▼
识别文本
它的优势是,模型不仅学习声音与文字的对应关系,也能利用上下文信息改善识别。
例如,“授信敞口”和“相信窗口”在某些嘈杂录音中可能听起来相近。领域上下文可以帮助模型倾向于更合理的词语,但不能保证永远正确。
需要澄清一点:不是所有现代 ASR 都由大语言模型衍生而来。 Whisper 使用 Transformer 编码器—解码器架构,而 Qwen3-ASR 则明确结合了语音编码器与 Qwen3 语言模型解码器。
二、有哪些值得关注的 ASR 模型?
目前,开源社区中比较有代表性的模型包括:
| 模型 | 主要特点 | 适合场景 |
|---|---|---|
| Whisper | 多语言识别、语音翻译、成熟生态 | 录音整理、视频字幕 |
| SenseVoice-Small | 非自回归架构,支持情绪和声音事件识别 | 快速转写、语音交互 |
| Qwen3-ASR-0.6B | 轻量化,支持多语言及中文方言 | 本地应用、批量转写 |
| Qwen3-ASR-1.7B | 更大模型容量,支持领域上下文 | 专业录音、复杂声学环境 |
其中,Qwen3-ASR 于 2026 年 1 月开源,提供 0.6B 和 1.7B 两个版本,支持 30 种语言及 22 种中文方言,并提供流式和非流式识别能力。
本篇选择 Qwen3-ASR-0.6B 作为示例,主要考虑它参数量相对较小,又具备现代语言模型式 ASR 的典型能力。
官方项目:
三、实践案例一:批量识别客服录音
3.1 场景介绍
假设我们有一家电商公司的客服录音,希望每天将几千段通话转换为文字,供后续的质检、投诉识别和客户意图分析使用。
这里有一个现实问题:客服对话中经常出现一些专业术语。
例如:
- 七天无理由退货
- 运费险
- 逆向物流
- 价保
- 预授权
如果语音识别模型不了解业务背景,专业词汇可能出现误识别。
Qwen3-ASR 提供了 context 参数,可以为识别过程加入领域词汇或背景提示,帮助模型改善专业词汇的识别。
3.2 环境安装
建议使用 Python 3.12 和支持 BF16 的 NVIDIA GPU 运行下面的示例。
pip install -U qwen-asr
首次运行时需要下载模型权重。
3.3 Python 完整示例
假设有两段录音:
call_001.wav
call_002.wav
我们使用一次批量调用完成识别:
import torch
from qwen_asr import Qwen3ASRModel
# 加载模型
model = Qwen3ASRModel.from_pretrained(
"Qwen/Qwen3-ASR-0.6B",
dtype=torch.bfloat16,
device_map="cuda:0",
max_new_tokens=512,
)
# 两段客服录音
audios = [
"call_001.wav",
"call_002.wav"
]
# 提供客服领域术语
context = (
"电商售后客服场景。"
"常见术语:七天无理由退货、"
"运费险、逆向物流、价保、预授权。"
)
# 批量识别
results = model.transcribe(
audio=audios,
language="Chinese",
context=context
)
# 输出识别结果
for audio, result in zip(audios, results):
print("录音:", audio)
print("识别内容:", result.text)
print("-" * 30)
假设录音内容分别为:
录音:call_001.wav
识别内容:
我上周买的商品申请了七天无理由退货,
想问一下运费险什么时候赔付。
录音:call_002.wav
识别内容:
之前申请了价保,但是平台一直没有处理,
我想咨询一下是什么情况。
以上文字是示例,不是实际模型推理结果。
此时,我们就可以把识别出的文本交给下一阶段的 AI 系统。
例如:
客服录音
│
▼
Qwen3-ASR
│
▼
客服对话文本
│
├── 意图识别
├── 投诉识别
├── 服务质检
└── 对话摘要
这里需要特别注意:ASR 负责转写,不负责保证投诉判断或意图分类正确。后续任务需要独立的模型或规则。
另外,context 是软性提示,不是强制词表。如果真实录音说的是“退款”,模型不应该因为上下文中有“价保”就擅自修改原意。
四、实践案例二:自动生成视频字幕
4.1 为什么语音转文字还不够?
假设我们录制了一段技术课程,希望为视频生成字幕。
ASR 可以告诉我们视频里说了什么:
今天我们讲一下 Embeddings 模型的工作原理。
但视频字幕还需要知道:
- 这句话从第几秒开始?
- 在第几秒结束?
- 哪一段文字应该出现在屏幕上?
这就涉及另一个技术:Forced Alignment(强制对齐)。
它接收音频及对应文字,为文字中的词或字符预测时间位置。
Qwen 官方提供了 Qwen3-ForcedAligner-0.6B,可以配合 ASR 模型完成这个任务。
4.2 整体技术流程
课程视频 MP4
│
▼
提取音频 WAV
│
▼
Qwen3-ASR
│
▼
获得完整转写文本
│
▼
Qwen3-ForcedAligner
│
▼
获得文字时间戳
│
▼
生成 SRT 字幕文件
4.3 Python 实现
首先从视频中提取音频。这里使用 FFmpeg:
ffmpeg -i lesson.mp4 -vn -ar 16000 -ac 1 lesson.wav
接下来运行 Python:
import torch
from qwen_asr import Qwen3ASRModel
# 同时加载 ASR 和强制对齐模型
model = Qwen3ASRModel.from_pretrained(
"Qwen/Qwen3-ASR-0.6B",
dtype=torch.bfloat16,
device_map="cuda:0",
max_new_tokens=1024,
forced_aligner="Qwen/Qwen3-ForcedAligner-0.6B",
forced_aligner_kwargs={
"dtype": torch.bfloat16,
"device_map": "cuda:0"
}
)
# 转写并生成时间戳
result = model.transcribe(
audio="lesson.wav",
language="Chinese",
return_time_stamps=True
)[0]
print("转写文本:")
print(result.text)
# 获取对齐结果
segments = result.time_stamps[0]
# 把字符级结果按长度与时间分组
groups = []
current = []
for item in segments:
if current and (
item.end_time - current[0].start_time > 5
or len("".join(x.text for x in current)) >= 20
):
groups.append(current)
current = []
current.append(item)
if current:
groups.append(current)
# 转换为 SRT 时间格式
def srt_time(seconds):
ms = round(seconds * 1000)
h, ms = divmod(ms, 3600000)
m, ms = divmod(ms, 60000)
s, ms = divmod(ms, 1000)
return f"{h:02}:{m:02}:{s:02},{ms:03}"
# 写入字幕文件
with open("lesson.srt", "w", encoding="utf-8") as f:
for i, group in enumerate(groups, 1):
start = srt_time(group[0].start_time)
end = srt_time(group[-1].end_time)
text = "".join(x.text for x in group)
f.write(
f"{i}\n{start} --> {end}\n{text}\n\n"
)
最终得到 lesson.srt,可以导入常见视频播放器或剪辑软件。
例如,SRT 文件的格式如下:
1
00:00:01,200 --> 00:00:03,800
今天我们讲一下Embeddings模型。
2
00:00:03,800 --> 00:00:06,100
它主要用于表示文本的语义信息。
以上时间和文字仅用于演示。实际时间戳由模型预测。
需要注意,Forced Aligner 官方支持单次对齐最长约 5 分钟的语音。较长的视频应先分段,再合并时间轴。上述字幕分组只是基础实现,正式使用时最好进一步按标点、语义停顿和字幕阅读速度调整。
五、ASR 模型落地还有哪些坑?
别看语音识别似乎只需要调用一次模型,真正用于生产环境时,还是有几个问题不能忽略。
1. 语音识别也会产生幻觉。
当录音中有长时间静音、背景噪声或者模糊人声时,模型可能输出原音频中并不存在的文字。不能因为模型识别出的句子很通顺,就认为它一定正确。
2. 多人说话并不等于能够自动识别说话人。
ASR 解决的是“说了什么”,而说话人分离(Speaker Diarization)解决的是“谁在什么时候说话”。会议、客服等多说话人场景通常还需要额外的说话人分离模块。
3. 流式与离线识别不是一回事。
Qwen3-ASR 支持两种模式,但在官方 qwen-asr 工具包当前实现中,流式识别需要 vLLM 后端,且流式模式不支持同时返回时间戳。
如果是历史录音批处理,使用非流式识别通常更简单;如果是实时字幕或电话客服,才需要重点关注流式识别延迟。
4. 模型效果需要量化。
中文 ASR 常用 CER(字符错误率),英文常用 WER(词错误率):
[
CER=\frac{S+D+I}{N}
]
其中,S 是替换错误数,D 是删除错误数,I 是插入错误数,N 是参考文本字符总数。
错误率越低越好。不过,在客服等特定行业中,还应单独评估专业术语、数字金额和实体名称的识别准确率。
六、总结:ASR 在 AI 系统中扮演什么角色?
经过两个实践案例可以发现,ASR 的价值不仅是把录音变成文字。
它更重要的作用,是把语音这种非结构化输入,转换为下游 AI 系统容易处理的文本信息。
如果把上一篇介绍的 Embeddings 模型、决策模型与 ASR 结合,就能得到一条很典型的智能客服技术链路:
用户语音
│
▼
ASR 语音识别
│
▼
用户文本
│
▼
Embeddings 语义召回
│
▼
决策模型识别意图
│
▼
业务系统执行
│
├── 查询订单
├── 售后处理
└── 转人工客服
这几个模型分别解决不同的问题:
- ASR: 把声音变成文字。
- Embeddings: 把文字变成可比较的语义向量。
- 决策模型: 根据文本及业务规则进行分类或路由。
- 生成式 LLM: 在需要时完成复杂推理、总结和回复生成。
当然,也可以采用端到端语音大模型,一次完成语音理解与回答,未必一定要拆成多个阶段。
但对于需要独立评估识别准确率、保留转写记录、控制推理成本的业务系统,模块化架构仍然有明显价值。
ASR 可以理解为 AI 系统的一双“耳朵”。它不负责所有思考,却决定了后续模型究竟听到了什么。
而在真实业务中,听准确,往往比回答得漂亮更重要。
- 点赞
- 收藏
- 关注作者
评论(0)