作为一名开发者,经常被朋友问:“你写的程序,怎么就能听懂我说话,还能转成文字?”其实核心原理一点不复杂,没有玄学,全是“信号处理+算法建模”的组合。

今天我就以一句最常见的话——“你好,欢迎使用AI录音助手”为例,一步步拆解语音转文字(ASR)的全过程。

先给大家一个核心结论:语音转文字,本质就是“把声音变成电脑能看懂的数字矩阵,再通过算法把矩阵翻译成文字”,全程就两件事,咱们跟着例子一步步来。

第一步:先让电脑“听见”声音——把声波变成数字(采样+量化)

我们说“你好,欢迎使用AI录音助手”时,嘴巴会振动空气,形成一串声波——这是一种“模拟信号”,就像一条连续的波浪线,电脑看不懂这种“波浪”,只能看懂“数字”。

这一步的核心算法:采样+量化,作用就是把“波浪线”切成无数个“小点”,再把每个小点变成数字。

结合我们的例子,具体操作如下:

1. 采样:用麦克风(或录音设备)“捕捉”声波,每秒钟取16000个点(行业通用的16kHz采样率)。比如“你好”这两个字,大概0.5秒,就会得到8000个点。

2. 量化:把每个“点”的振幅(声音大小),转换成16位的数字(比如123、-45、200、-10……)。这样一来,原本连续的声波,就变成了一串离散的数字序列:[x0, x1, x2, ..., x7999]。

举个通俗类比:就像我们给一条曲线拍照,每秒拍16000张,每张照片记录一个“位置”(数字),一串照片连起来,就还原了曲线的样子——这里的“照片”,就是采样得到的数字。

到这里,电脑终于“捕捉”到了我们的声音,但这串数字还是杂乱无章的,下一步就是提取“声音的特征”。

第二步:给声音“做标记”——从数字变成特征矩阵(分帧+FFT+MFCC)

电脑拿到一串数字[x0, x1, ...],还是不知道这是什么声音——就像我们看到一串乱码,不知道是什么意思。这一步的核心,是提取“声音的指纹”,也就是声学特征,最终变成一个矩阵

这一步用到的核心算法:分帧+FFT+MFCC,三个算法各司其职,我们结合“你好,欢迎使用AI录音助手”这个例子,一步步拆:

1. 分帧:把长声音切成“小片段”

声音有个特点:短时间内(比如25毫秒)是稳定的,超过这个时间,音调、音量会变化。所以我们把刚才那串8000个数字,切成“25毫秒一帧”,每帧之间重叠10毫秒(避免遗漏声音)。

比如“你好”0.5秒,就会切成40帧左右,每帧大概包含400个数字(16000Hz×0.025s=400)。每帧就是一个“小片段声音”,比如第1帧是[x0~x399],第2帧是[x160~x559],以此类推。

2. FFT:把“时间上的声音”变成“频率上的声音”

每帧的400个数字,代表的是“不同时间点的声音大小”(时域),我们看不出规律。FFT(快速傅里叶变换)的作用,就是把每帧的时域信号,转换成“频率信号”(频域)——简单说,就是找出这一帧声音里,哪些频率强、哪些频率弱。

比如“你”字的发音(nǐ),对应特定的频率组合,FFT就能把这个组合提取出来;“好”字(hǎo)的频率组合和“你”不同,FFT也能区分开。这一步,我们就把每帧的数字,变成了“频率特征”。

3. MFCC:模拟人耳,提炼最关键的特征

FFT得到的频率特征太多、太杂乱,而且人耳对不同频率的敏感度不一样(比如对中频敏感,对高频不敏感)。MFCC(梅尔频率倒谱系数)的作用,就是“模拟人耳的听觉习惯”,从FFT的频率特征里,提炼出最关键的40维特征(可以理解为40个“声音关键词”)。

这样一来,每一帧声音,就变成了一个40维的向量(比如[1.23, 0.45, -0.67, ..., 0.89])。

4. 拼成矩阵:声音的“数字身份证”

我们的例子“你好,欢迎使用AI录音助手”,大概2秒,会切成180帧左右,每帧对应一个40维向量。把这180个向量按顺序拼起来,就得到了一个180行、40列的矩阵(记为(T, D),T是帧数180,D是特征维度40)。

这个矩阵,就是“你好,欢迎使用AI录音助手”这句话的“数字身份证”——电脑看不懂声音,但能看懂这个矩阵,接下来就是最核心的一步:把矩阵翻译成文字。

第三步:把矩阵变成文字——算法的核心操作(Transformer+CTC)

拿到180×40的矩阵后,电脑要做的,就是“解读”这个矩阵,输出对应的文字。这一步是语音转文字的灵魂,用到的核心算法是Transformer(编码器)+ CTC(解码)——前者负责“理解”矩阵,后者负责“翻译”成文字,我们还是结合例子来讲。

1. Transformer:给矩阵“赋予上下文,判断每帧是什么”

Transformer(就是我们做AI项目时常用的Transformer架构)的作用,是“读懂”这个180×40的矩阵,核心能力是“自注意力机制”——简单说,它能看到所有帧的特征,判断出“这一帧的声音,和前后帧的声音有什么关联”。

结合我们的例子:

比如矩阵中第30~50帧,对应“你”字的发音,Transformer会结合前后帧的特征,判断出“这几帧最可能对应‘你’字”;第51~80帧对应“好”字,它会区分开“你”和“好”的发音差异,不会混淆。

具体来说,Transformer会对每帧输出一个“概率分布”——比如第35帧,输出“你”的概率是0.85,“好”的概率是0.03,“我”的概率是0.02,还有一个“空白符_”的概率是0.1(空白符的作用后面说)。

最终,Transformer会输出一个“帧-字符概率矩阵”:180帧,每帧对应所有汉字+空白符的概率,这一步,就完成了“矩阵到字符概率”的转换。

2. CTC:去掉冗余,拼出完整文字

Transformer输出的概率矩阵,有个问题:同一個字的发音,会对应多帧(比如“你”字对应20帧,每帧都输出“你”的概率),而且会有很多空白符。CTC(连接时序分类)的作用,就是“清理冗余,拼出正确的文字”,只做两件事:

① 合并连续重复的字符;② 去掉所有空白符“_”。

我们结合例子,看具体过程:

Transformer输出的帧-字符序列(简化版):

_, 你, 你, 你, _, 好, 好, _, 欢, 欢, 迎, 迎, _, 使, 用, _, AI, AI, _, 录, 音, 助, 手, _

第一步:合并连续重复字符(比如3个“你”合并成1个“你”,2个“好”合并成1个“好”):

_, 你, _, 好, _, 欢, 迎, _, 使, 用, _, AI, _, 录, 音, 助, 手, _

第二步:去掉所有空白符“_”:

你, 好, 欢, 迎, 使, 用, AI, 录, 音, 助, 手

拼接起来,就是我们说的那句话:“你好,欢迎使用AI录音助手”——到这里,语音转文字就完成了!

全文总结:一句话讲透,再关联实际应用

我们用“你好,欢迎使用AI录音助手”这个例子,完整走了一遍语音转文字的流程,核心逻辑就是:

1. 声音(声波)→ 采样+量化 → 一串数字;

2. 数字 → 分帧+FFT+MFCC → 特征矩阵;

3. 特征矩阵 → Transformer(算概率)+ CTC(去冗余) → 文字。

这里面的核心算法(采样、FFT、MFCC、Transformer、CTC),不是什么高深的玄学,都是工程化的实现——就像我做的AI录音助手,底层用的就是阿里云ASR,本质就是把这些算法封装成了API,我们只需要调用API,就能快速实现“录音转文字+AI总结”的功能。

对普通人来说,你不需要懂这些算法,只要知道“AI能听懂你说话,是因为它把声音变成了数字,再用算法翻译成了文字”;对程序员来说,这些算法就是我们做AI工具的基础——掌握了这个逻辑,不管是调用API,还是自己做简单的ASRdemo,都能得心应手。

最后补充一句:现在的语音转文字(比如阿里云、百度ASR),之所以准确率那么高,核心是Transformer模型经过了海量语音数据的训练(比如千万小时的普通话录音),能精准识别不同音色、不同语速、甚至轻微噪音下的发音——但底层原理,和我们今天用“你好”这个例子讲的,完全一样。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐