cv.cm

AI · AI音频

AI语音转文字是怎么实现的?

阅读约 7 分钟

简短回答

语音转文字(自动语音识别,ASR)先把声音变成频谱图,也就是各频率随时间变化的响度图。神经网络读这张图,再逐个 token 写出最可能的文字。Whisper 等模型从数十万小时带文字稿的音频中学会了这件事,所以能处理多种语言和噪声,但仍可能听错人名,或在静音处凭空编出文字。

打开语音转文字

从声波到文字的四个步骤

Whisper 这样的现代识别模型,每次处理文件都走同一条流水线:

  1. 重采样。音频被转换成单声道、每秒 16,000 个采样点。这对语音足够了,因为语音的大部分信息都在 8 kHz 以下。
  2. 生成频谱图。信号被切成短而相互重叠的窗口(Whisper 用 25 毫秒的窗口,每 10 毫秒一个),每个窗口变成梅尔刻度上的 80 个数,梅尔刻度按人耳听觉的方式来划分频率。结果是一张图像:一个轴是时间,另一个轴是音高频带。
  3. 编码。Transformer 编码器读取频谱图,建立对“说了什么”的表示,包括哪些声音是语音、哪些是噪声。
  4. 解码。Transformer 解码器逐个 token 写出文字稿,每一步都根据音频和已写出的文字挑选最可能的下一个 token。特殊 token 告诉它语言、任务(转写,或翻译成英语)以及在哪里插入时间戳。

Whisper 以 30 秒为一个窗口处理音频。一小时的文件会被当作一串滑动的窗口来处理,预测出的时间戳告诉程序下一个窗口从哪里开始。时间戳以 20 毫秒为单位预测,所以 Whisper 的字幕时间轴不错,但不能精确到帧。

模型是怎么学会的:大规模弱监督

早期系统由几个独立部分拼成:负责发音的声学模型、发音词典,以及决定词序的语言模型。每个部分都需要每种语言经过仔细标注的数据。

Whisper 走了另一条路。作者从互联网上收集了 68 万小时的音频及其对应文字稿。其中约 11.7 万小时涵盖英语之外的 96 种语言,另有 12.5 万小时是配有英文文本的非英语语音,教会了模型翻译。这些标注并不完美(这就是弱监督里“弱”的部分),但规模让模型对口音、背景噪声和录音质量有很强的稳健性,不需要针对每个测试集再微调。

同样的道理也解释了它的弱点。数据集中数据很少的语言,识别精度较低;模型还学到了网络字幕的习惯,比如加上视频结尾常出现的套话。

衡量准确率:词错误率

语音识别的准确率用词错误率(WER,word error rate)来表示:被替换、被删除和被插入的词数之和,除以正确文字稿中的词数。越低越好;如果模型插入了大量文字,它还可能超过 100%。

Reference:  the meeting moved to three thirty on friday   (8 words)
Model:      the meeting moved to tree  thirty    friday

Substitutions: three -> tree        1
Deletions:     on                   1
Insertions:                         0
WER = (1 + 1 + 0) / 8 = 25%

比较之前,研究者会先对两份文本做规范化:统一小写、去掉标点、展开缩写、数字写法统一。不这样做的话,“3:30”和“three thirty”明明都对,也会被算成错误。厂商给出 WER 时,要问清楚是在什么音频上测的:清晰的朗读语音和嘈杂的电话录音,结果可能差好几倍。

中文、日文和泰文不用空格分词,因此改用字错误率(CER,character error rate)。

语音识别模型的类型

类型工作方式优点缺点
编码器-解码器(Whisper 类)读取一段音频,再用解码器写出文字准确率高,带标点,支持多语言和翻译按片段处理,实时字幕有延迟;可能产生幻觉
CTC 与转导(transducer)模型为每个短音频帧预测一个标签,再合并延迟低,适合实时字幕,很少凭空编造文字标点和大小写需要额外处理
平台语音服务浏览器或手机把音频发给厂商服务,或运行设备上的模型无需配置;网页可通过 Web Speech API 调用不同浏览器和设备表现不同;可能需要联网

Web Speech API 的 SpeechRecognition 接口,允许网页请求平台对麦克风输入做实时识别。默认情况下,它使用浏览器或操作系统提供的服务;有些浏览器也可以在设备本地运行。像 cv.cm 的语音转文字工具那样自己运行 Whisper 的网页(在浏览器里运行 Whisper,可导出 TXT、SRT 或 VTT)不依赖这类服务,但需要先下载一次模型。

语音转文字会在哪里出错

  • 人名、品牌和行话。解码器偏爱常见词,所以生僻姓氏会被换成常见的。可以手动更正,如果工具支持,也可以给一小段写有正确拼写的提示。
  • 静音或音乐中的幻觉。Whisper 论文指出,长音频转写可能陷入重复循环、漏掉一段的开头或结尾几个词,或者生成与音频无关的文字。静音片头、掌声和背景音乐是常见的诱因。
  • 口音与语码转换。同一句话里夹杂两种语言,或口音很重而训练数据又少,都会推高错误率。
  • 多人同时说话。大多数识别模型只输出一条文字流,不会告诉你是谁说的。说话人标注(diarization)是另一个独立步骤。
  • 繁体与简体中文。模型对普通话可能输出任一种字形;需要统一字形的话,事后再转换文字稿。
  • 识别错语言。自动检测只看音频开头。如果开头几秒是音乐或另一种语言,请手动选择语言。

做出干净字幕的实用流程

  1. 从手头最好的音频开始。用原始文件,不要用扬声器翻录的版本。可能的话降低人声下面的音乐。
  2. 剪掉开头的长静音和音乐,它们会导致语言识别错误和编造出台词。
  3. 知道语言的话就手动指定。
  4. 最终字幕用较大的模型,快速记笔记用较小的。大模型更慢,但对人名和口音的错误更少。
  5. 导出 SRT 或 VTT,然后边看视频边把整个文件读一遍。修正人名、数字和任何重复的行。
  6. 拆开过长的字幕条。易读的字幕大约两行,至少在屏幕上停留一秒。

两种常见字幕格式只有细微差别:

SRT:
1
00:00:01,000 --> 00:00:04,000
Welcome to the lesson.

VTT:
WEBVTT

00:00:01.000 --> 00:00:04.000
Welcome to the lesson.

SRT 给每条字幕编号,毫秒前用逗号。WebVTT 是 W3C 的格式,HTML 视频元素使用它,以 WEBVTT 头开始,毫秒前用句点。

隐私与同意

会议、通话和访谈的录音含有个人信息,而且在许多国家,录制他人需要对方同意。使用云端转写服务之前,要确认音频存在哪里,是否会被用于训练。在本地运行模型(应用或浏览器内),音频就留在你的设备上,往往是满足隐私要求最简单的办法。

常见问题

AI转写的准确率有多高?

在清晰的、单人说话的通用语言音频上,现代模型每一百个词只有几处错误。噪声、多人重叠说话、浓重口音、小语种和专业词汇都会拉低准确率,所以人名和数字一定要校对。

Whisper 为什么会写出根本没人说过的话?

它是一个以音频为条件的文本生成器。在静音、音乐或噪声中,它可能续写出总体上“很常见”的文字,比如重复的句子,或网络视频结尾的套话。剪掉静音、指定语言可以减少这种情况。

语音转文字能分辨是谁在说话吗?

它自己做不到。识别说话人叫 diarization,通常是另一个模型,把片段标成说话人 1、说话人 2 等等。之后还需要人工把这些标签对应到真实姓名。

SRT 和 VTT 有什么区别?

两者都是带起止时间的纯文本字幕文件。SRT 的时间戳用逗号,并给每条字幕编号;VTT 以 WEBVTT 行开头,用句点,是浏览器对 HTML 视频原生支持的格式。

可以离线转写音频吗?

可以。Whisper 等开源模型可以在电脑或现代浏览器里运行,不需要把音频发到服务器。第一次运行会下载模型,之后转写就不用上传文件了。

全部AI教程