ASR和TTS底层解析

1. ASR(Automatic Speech Recognition)自动语音识别

通过语音模型将人类语音转化为文本

常见开源/知名模型/工具:

  • Whisper (OpenAI):目前最主流的开源选择,支持多语言,识别精度高。

  • FunASR (阿里巴巴达摩院):专注中文场景,对嘈杂环境鲁棒性强。

    • Paraformer-large长音频模型集成VAD、ASR、标点与时间戳功能,可直接对时长为数小时音频进行识别,并输出带标点文字与时间戳

 

ASR的处理流程

# 音频处理流程
原始音频文件(mp3, m4a, wav等)
     ↓
[FFmpeg 解码] → 转换为原始PCM数据
     ↓
[Paraformer 处理] → 语音识别
     ↓
文本结果
原始长音频
     ↓
[VAD模型] → 检测语音活动,分割音频
     ↓
音频片段列表(时间戳标记)
     ↓
[ASR模型] → 每个片段转为文本
     ↓
无标点文本片段
     ↓
[标点模型] → 添加标点符号
     ↓
最终带标点文本(含时间戳)

1)Paraformer ASR模型

功能

  • 核心语音识别:将音频信号转换为文本

  • 声学建模:处理音频特征,识别音素/字词

  • 语言建模:结合语言上下文,提高识别准确性

特点

  • 输入要求:需要预分割的短音频片段

  • 输出格式:纯文本,无标点,无时间戳

  • 适用场景:已分割好的短音频文件

2)VAD模型(vad_model)- 语音活动检测

功能

  • 端点检测:检测音频中有人声的部分

  • 静音去除:过滤背景噪声和静音段

  • 说话人分段:识别说话人切换点

特点

  • 输出:带时间戳的短音频片段

原始音频: [静音10s] [语音5s] [静音3s] [语音8s] [静音...]
VAD处理后:          [片段1]           [片段2]
时间戳:         [10.0-15.0]      [18.0-26.0]

3)标点模型(punc_model)- 标点恢复

功能

  • 标点插入:在识别文本中添加标点符号

  • 文本格式化:提高文本可读性

  • 语义分段:根据语义插入适当标点

特点

  • 输出:带标点符号的文本

支持的标点类型:

,  逗号
.  句号
?  问号
!  感叹号
:  冒号
;  分号
"  引号
、 顿号
《 》书名号
( )括号

 

from funasr import AutoModel
import numpy as np

# 使用一体化模型
model = AutoModel(model=r"E:\03_model\fun-asr-model\speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch",
                  vad_model=r"E:\03_model\fun-asr-model\speech_fsmn_vad_zh-cn-16k-common-pytorch",
                  punc_model=r"E:\03_model\fun-asr-model\punc_ct-transformer_zh-cn-common-vocab272727-pytorch",
                  device="cpu")

# 1. 测试短音频
short_result = model.generate(
    input="vad_example.wav",  # 10秒音频
    batch_size_s=0,  # 不分片
)
print("短音频结果:", short_result[0]["text"])

# 2. 测试长音频
long_result = model.generate(
    input="vad_example.wav",  # 5分钟音频
    batch_size_s=100,  # 启用分片处理
)
print("长音频结果:", long_result[0]["text"])
print("时间戳:", long_result[0]["timestamp"])

 

2. TTS(Text-To-Speech) 文本转语音

通过模型将文本自动转换为可听的语音(合成语音),语音中包含各种风格。

常见开源/知名模型/工具:

  • fun-CosyVoice:目前最主流的开源选择,支持多语言,识别精度高。

 1)TTSFRD(Text-to-Speech Frontend)

TTSFRD 文本前端处理模块,将原始的、用户输入的文本,转换为适合送入语音合成模型(声学模型)的、规范化的语言学特征序列

TTSFRD模块(深度学习模型(如Transformer))通常会执行以下步骤:

  1. 文本正则化:

    • 将非标准书写格式转换为可读的单词。例如:

      • “123元” -> “一百二十三元”

      • “今天气温25℃” -> “今天气温二十五摄氏度”

      • “Dr. Smith @ home” -> “Doctor Smith at home”

  2. 分词与词性标注:

    • 对句子进行分词,并判断每个词的词性(名词、动词等),影响后续确定发音和韵律。

  3. 字形到音素转换:

    • 将单词转换为发音音素序列。例如:

      • “hello” -> “HH AH L OW” (以ARPAbet音标为例)

    • 中文,进行文本转拼音,解决多音字问题。例如:

      • “重量” -> “zhong4 liang4”

      • “重复” -> “chong2 fu4”

  4. 韵律预测:

    • 预测语句中的停顿、重音、语调和节奏(通常用韵律边界和音素时长来表示)。这是让合成语音听起来自然、有感情的关键。

  5. 输出特征:

    • TTSFRD会输出一个结构化的序列,包含每个音素、其对应的韵律边界信息和可能的时长预测,这些信息将直接喂给后端的声学模型(将音素转换为声学特征)和声码器(将声学特征转换为最终音频)。

2)Matcha-TTS

非自回归神经文本转语音(TTS)方法,将文本特征变成语音特征,基于流匹配训练的扩散解码器,它通过预测向量场和ODE求解,实现了高质量、极速的生成。

输入:文本条件向量

由文本编码器产生的。文本编码器的输入是原始的文本预处理结果,通常包括:

  • 音素序列:如 [“HH”, “AH”, “L”, “OW”]

  • 韵律边界信息:标记单词和短语的边界,控制停顿。

  • 音素时长信息:预测每个音素应该持续多久。

输出:声学特征

声音的“视觉化”或“数学化”表 示,包含了重建语音所需的所有信息,梅尔频谱图(二维矩阵)

3)CosyVoice

CosyVoice2-Ex 是一款功能强大的文本转语音(Text-to-Speech,TTS)开源项目,基于 CosyVoice 进行了深度扩展,支持 Windows、Linux 和 MacOS 系统。项目整合了预训练音色、3秒极速复刻、自然语言控制、自动识别、音色保存和 API 等核心功能,为用户提供了一个高效、灵活的语音合成解决方案。

项目还具备以下技术特点:

预训练音色:利用大量音频数据进行预训练,使模型能够生成更自然、流畅的语音。
3秒极速复刻:通过优化算法,实现了在短时间内快速生成语音的功能。
自然语言控制:支持对生成的语音进行自然语言控制,包括语速、语调等。
自动识别:自动识别文本中的标点、语气词等,提高语音合成的准确度。
音色保存:用户可以将喜欢的音色保存下来,方便下次使用。

CosyVoice采用Encoder-Decoder架构(编码器-解码器架构)实现端到端语音合成,其核心流程包括文本编码、韵律预测、语音解码三个阶段。

image

 

image

语音合成过程中的数据转换流程如下:

  • 文本通过Tokenizer转换为4096维词汇表的token序列
  • Transformer编码器输出512维上下文特征
  • 长度调节器将文本特征扩展为80维Mel频谱框架
  • Flow解码器通过条件流匹配生成最终Mel频谱
  • HiFi-GAN将Mel频谱转换为16bit PCM音频

预训练音色

CosyVoice 采用 自回归 和 非自回归 联合训练,能有效解耦内容和音色。

  • 音色编码器:一个核心模块。它接收一段参考语音,输出一个固定长度的 音色向量。这个向量旨在只包含说话人信息,不包含具体说话内容。

  • 训练目标:

    • 自回归 分支:像传统TTS一样,逐个生成语音token。它利用音色向量来“染色”,确保生成的语音具有目标音色。

    • 非自回归 分支:并行生成整个语音序列。这迫使模型必须依赖音色编码器提供的全局音色信息,而不是从历史token中“偷偷”获取内容信息,从而强化了音色与内容的解耦。

  • 通过海量数据训练,音色编码器学会从语音的频谱、共振峰等特征中,提炼说话人最本质、最稳定的声学特征。

在推理时(零样本复刻):

  1. 提供一段 目标音色参考音频(比如,想克隆的明星的3秒钟说话片段)。

  2. 音色编码器会提取出一个高质量的音色向量。

  3. 将此向量与目标文本一起输入到生成模型中。

  4. 模型会输出具有目标音色、说着目标文本的合成语音。

 

参考:https://blog.csdn.net/gitblog_01070/article/details/151330397

posted @ 2025-12-19 17:54  wangssd  阅读(130)  评论(0)    收藏  举报