- Higgs-Audio-V2
- 简介
- 模型结构
- Higgs Audio Tokenizer
- 优点
- 模型推理部署
- OpenMoss:Moss-TTSD
- 简介
- 模型结构
- 语音离散化: XY-Tokenizer
- 数据工程
- 优势
- 模型inference
- 模型微调
- 测评反馈
- 阿里通义:CosyVoice系列
- 简介
- 模型结构
- Text Tokenizer
- 优势
- 模型推理&&微调
- 测评体验
最近老板临时安排了一个TTS任务,于是顺便将学习成果进一步梳理得到今天的小作文,以便后续查阅。感兴趣的小伙伴也可以了解下。
随着人工智能技术的飞速发展,文本到语音(TTS)合成技术已经从简单的机械式朗读进化到了能够生成几乎与人类无法区分的自然语音的高级阶段。本文将调研当今各类最佳TTS模型(主要面向开源,闭源模型暂不评测),实测其真实效果,并实现本地部署、训练。
- Higgs-Audio-V2 =================
发布时间:July 23, 2025
项目链接: https://github.com/boson-ai/higgs-audio.git
论文链接:暂无
简介
Higgs-Audio-v2 是一个强大的音频基础模型,该模型预先训练了超过1000万小时的音频数据和各种文本数据。尽管没有后期训练或微调,但由于其深厚的语言和声学理解,使得Higgs Audio v2在富有表现力的音频生成方面表现出色。
根据官方Github文档讲述,在Emergentts - eval数据集上,它在“情绪”和“问题”类别上的胜率分别比gpt- 4o-mini- TTS 高75.7%和55.7%。它还在传统的TTS基准测试中获得了最先进的性能,如Seed-TTS评估和情感语音数据集(ESD),具体测评效果如下图所示。此外,该模型还展示了以前系统中很少看到的功能,包括以多种语言生成自然的多说话者对话,在叙述时自动适应韵律,克隆语音的旋律哼唱,以及语音和背景音乐的同时生成。
模型结构
Higgs-Audio-v2的模型建立在LLama-3.2-3B模型上。为了增强模型处理音频token的能力,研究人员将“DualFFN”架构合并为音频适配器。DualFFN充当音频特定专家,以最小的计算开销提高LLM的性能。该架构的实现使得整体pipeline在包含DualFFN的情况下保留了原始LLM训练速度的91%。
由于Higgs-Audio的音频tokenizer基于残差矢量量化(RVQ)并包含多个码本,因此作者采用延迟模式使得流式推理的同时支持不断生成跨码本的code。
Higgs Audio Tokenizer
在Tokenizer的设计中,作者引入了一种新的离散音频tokenizer,与具有两倍比特率的Tokenizer相比,它以每秒25帧的速度运行,同时保持甚至提高音频质量。Higgs-Audio-V2模型是第一个在一个统一的系统中训练24Khz的数据,涵盖语音,音乐和声音事件。它还使用一个简单的非扩散编码器/解码器快速,批量推理。
优点
- 低帧率输入:在25 fps时,Higgs Tokenizer将许多Baselines的帧率减半的情况下,仍然能保持高音频质量。
- 统一的高音质语音训练:输入语音统一规定为24Khz,将语音,音乐和声音事件剪辑混合在一个模型中,捕获语义和声学细节,极大地促进了音频语言模型的训练。
- 快速推理:通过避免扩散步骤,Higgs的Encoder/Decoder可以快速执行Batch批量推理,使其适用于实时或大规模任务。
如何快速部署推理
1、配置环境
git clone https://github.com/boson-ai/higgs-audio.git
cd higgs-audio
conda create -y --prefix ./conda\_env --override-channels --strict-channel-priority --channel "conda-forge" "python==3.10.*"
conda activate ./conda\_env
pip install -r requirements.txt
pip install -e .
# Uninstalling environment:
conda deactivate
conda remove -y --prefix ./conda\_env --all
2、执行Inference脚本
from boson\_multimodal.serve.serve\_engine import HiggsAudioServeEngine, HiggsAudioResponse
from boson\_multimodal.data\_types import ChatMLSample, Message, AudioContent
import torch
import torchaudio
import time
import click
MODEL\_PATH = "bosonai/higgs-audio-v2-generation-3B-base"
AUDIO\_TOKENIZER\_PATH = "bosonai/higgs-audio-v2-tokenizer"
system\_prompt = (
"Generate audio following instruction.\n\n<|scene\_desc\_start|>\nAudio is recorded from a quiet room.\n<|scene\_desc\_end|>"
)
messages = [
Message(
role="system",
content=system\_prompt,
),
Message(
role="user",
content="The sun rises in the east and sets in the west. This simple fact has been observed by humans for thousands of years.",
),
]
device = "cuda"if torch.cuda.is\_available() else"cpu"
serve\_engine = HiggsAudioServeEngine(MODEL\_PATH, AUDIO\_TOKENIZER\_PATH, device=device)
output: HiggsAudioResponse = serve\_engine.generate(
chat\_ml\_sample=ChatMLSample(messages=messages),
max\_new\_tokens=1024,
temperature=0.3,
top\_p=0.95,
top\_k=50,
stop\_strings=["<|end\_of\_text|>", "<|eot\_id|>"],
)
torchaudio.save(f"output.wav", torch.from\_numpy(output.audio)[None, :], output.sampling\_rate)
- OpenMoss:Moss-TTSD =====================
发布时间:June 20, 2025
项目链接: https://www.open-moss.com/cn/moss-ttsd/
论文链接: https://arxiv.org/pdf/2506.23325
简介
MOSS-TTSD (Text to Spoken Dialogue),它能够根据输入的多说话人对话文本,直接生成高质量的对话语音,准确建模对话中的韵律,语调等特性。MOSS-TTSD 基于 Qwen3-1.7B-base 模型进行继续训练,采用离散化的语音序列建模方法,在约一百万小时单说话人语音数据和四十万小时对话语音数据上进行训练,支持中英双语的语音合成。 得益于低比特率 Codec 和高效数据处理 Pipeline, MOSS-TTSD 在海量真实数据上进行了训练,声音自然程度和表现力都达到了业界领先水平,支持双说话人的音色克隆以及长语音生成。
模型结构
基于Qwen3-1.7B-base模型进行训练,使用八层RVQ码本进行语音离散化,使用自回归加Delay Pattern进行语音token生成,最后使用Tokenizer的解码器将语音token还原为语音。
MOSS-TTSD 使用完全离散化的方式进行语音生成。研究人员训练了一个8层 RVQ 的音频 Codec:XY-Tokenizer,来对原始音频进行量化。 XY-Tokenizer 能够同时编码语音的语义和声学信息,并具有较低的比特率(1kbps),这使得LLM能够有效地学习音频序列并建模细节声学特征。 在序列建模方面,受到 MusicGen和 VOICECRAFT的启发,研究人员使用自回归建模加多头 Delay 的方式进行语音 token 生成。
语音离散化: XY-Tokenizer
为了统一建模语音的语义和声学信息,并实现低比特率,研究人员构建了 XY-Tokenizer,它使用了双路 Whisper Encoder 进行语音编码,8层 RVQ 量化,两阶段多任务学习的方式进行训练。实现了 1kbps 的比特率和 12.5Hz 的帧率。
XY-Tokenizer 采用了两阶段多任务学习的方式进行训练。第一阶段(上半部分)训练ASR任务和重建任务,让编码器在编码语义信息的同时保留粗粒度的声学信息。第二阶段(下半部分)我们固定住编码器和量化层部分,只训练解码器部分。通过重建损失和 GAN 损失,利用生成式模型的能力补充细粒度声学信息。
该模型扩展了Codec训练的数据量,使用了10万小时带有转录文本的语音数据进行训练。下表对比了在LibriSpeech测试集上不同 Codec 在语义和声学性能上的表现。WER为ASR探测任务中的词错误率,WER越低表示语音 token 的语义信息与文本对齐程度更好 。粗体为低比特率 Codec 组中的最优或次优性能。
为了更好地编码和重建复杂的对话音频,研究人员扩展了50万小时无转录音频数据进行增强训练,扩展 Codec 对于复杂音频和场景的处理能力。得益于Codec的超低比特率,模型的训练长度最长达到了960秒 的音频,这使得我们的模型可以一次性地生成超长的语音,避免了拼接语音片段之间的不自然过渡。
数据工程
TTS 模型的性能与训练数据的质量和数量有着密切的关系,为了规模化高质量 TTS 数据和 TTSD 数据,研究者设计了高效的数据处理流水线,可以从海量原始音频中准确筛选出单人语音和多人对话语音并进行标注。
对于原始音频,研究者首先使用内部的说话人分离模型进行语音分段和说话人标注。 基于预训练基模,OpenMoss使用的说话人分离模型性能已经优于开源说话人分离模型 pyannote-speaker-diarization-3.1 及其商用版本 pyannoteAI 。
研究者使用 DNSMOS 分数来作为语音质量的评估标准,假设 DNSMOS 分数高的语音大概率不包含背景噪声。 为了保证语音的质量和较少的噪声,只保留 DNSMOS >=2.8的语音片段。 对于高质量的音频片段,研究者直接对语音进行转录,作为 TTS 训练数据。
此外,研究者设计了一套规则来将 Diarization 分离的语音片段组合成双人对话的片段用作 TTSD 训练,这样得到的对话片段我们称之为粗粒度对话片段。 虽然说话人分离模型能够较准确地分离说话人,但是在实验中研究人员发现它对一些较短的 Backchannel 不是特别敏感,存在漏分离的情况。 此外,当前的 ASR 模型无法准确地转录对话中重叠的语音。 因此,受 Parakeet的启发,研究者训练了中文版的 Whisper-d 模型来对中文数据进行细粒度说话人标注和文本转录。对于英文数据直接使用 Parakeet 的开源 Whisper-d。 最终,OpenMoss团队使用说话人分离模型的粗粒度标签和 Whipser-d 模型的细粒度标签来将短对话片段组成长对话片段。
优势
- OpenMoss可以一次性生成长音频,最长960s(16min)。
- 生成对话式语音较为自然,提供了Zero-shot TTS生成方案。
- 高质量的语音训练数据。训练数据收集了10万小时中文对话数据和27万小时英文对话数据。 此外,为了增强模型的说话人切换准确率,合成了4万小时中文对话数据和4万小时英文对话数据。 为了增强模型对于中文标点符号的感知能力,使用 Gemini 对部分数据(约7万小时)中的转录文本进行了修正。
- 提供了Zero-shot TTS生成方案,提供了本地FFT微调和LoRA的脚本。
本地推理inference
本章节将记录Moss-TTSD在本地实现推理及微调的实战。
1、安装conda环境
conda create -n moss\_ttsd python=3.10 -y && conda activate moss\_ttsd
pip install -r requirements.txt
# Flash——Attn需要去线上直接下对应版本的whl安装包, https://github.com/Dao-AILab/flash-attention/releases
pip install flash-attn
2、通过Huggingface.cli下载XY tokenizer的权重,官方文档也提供了其他下载方式。
mkdir -p XY\_Tokenizer/weights
huggingface-cli download fnlp/XY\_Tokenizer\_TTSD\_V0 xy\_tokenizer.ckpt --local-dir ./XY\_Tokenizer/weights/
3、运行本地Inference脚本。
python inference.py --jsonl examples/examples.jsonl --output\_dir outputs --seed 42 --use\_normalize
参数介绍:
--jsonl:包含对话脚本及Speaker Prompt的jsonl文件
--seed:随机数
--output\_dir: 输出文件夹路径
--use\_normalize: 是否对输入文本进行标准化,该参数最好开启,为了更好的对输入文本进行预处理。
--dtype:模型默认训练数据精度为bf16
--attn\_implementation:attention拓展,可以选用flash\_attention等加速模型推理。
本地微调
1、如果我们需要本地微调模型,需进入finetune文件夹目录额外安装新的依赖。
conda create -n moss\_ttsd\_finetune python=3.10 -y && conda activate moss\_ttsd\_finetune
pip install -r finetune/requirements\_finetune.txt
pip install flash-attn
2、根据所给的example,创建训练数据范式,以下是我训练的测试数据样例。
{"file\_path":"/home/ai\_data2/nfs/shervinzhuang-develop/TTS/MOSS-TTSD/outputs/output\_0.wav","full\_transcript": "[S1]诶,跟你说个事儿啊,我最近听了不少那种AI生成的播客,不知道你有没有听过。[S2]哦,听过一些。怎么了,感觉怎么样?[S1]就是……怎么说呢,单听一句话,你觉得,哇,好像跟真人没啥区别。[S2]嗯。[S1]但是,你只要让它说上一段完整的对话,比如俩人聊天那种,那个感觉就立马不对了。..."}
3、执行训练构造脚本,导出训练数据。
python finetune/data\_preprocess.py --jsonl examples/finetune\_example.jsonl --model\_path fnlp/MOSS-TTSD-v0.5/ --output\_dir ./finetune\_outputs --data\_name test
4、执行FFT全参微调脚本,导入我们刚刚生成的训练数据。
python finetune/finetune.py --model\_path fnlp/MOSS-TTSD-v0.5/ --data\_dir finetune\_outputs/ --output\_dir ./training\_result --training\_config finetune/training\_config.yaml
微调链路执行跑通的效果如下图所示。
测评反馈
Moss-TTSD生成长语音对话的能力十分惊艳,在情感自然度、语音流畅度都能有所保证。但目前该模型的微调训练还不支持指定单说话人语音生成,目前仅支持对话场景。根据Github上上Issue的提问回复来看,支持指定任意说话人数量的微调代码将会在下个版本推出。
- 阿里通义:CosyVoice系列(部分开源) =========================
发布时间:CosyVoice2——Dec, 2024
项目链接 :https://github.com/FunAudioLLM/CosyVoice
论文链接 :https://arxiv.org/abs/2412.10117
简介
CosyVoice 是一个语音生成模型,能够合成自然声音,适用于多种应用。模型支持五种语言:中文、英语、日语、粤语和韩语。CosyVoice 包含三个开源模型:
- CosyVoice-base-300M:擅长准确代表说话者身份,无需微调即可适应不同上下文,能够跨语言克隆声音。
- CosyVoice-instruct-300M:能够生成富有情感表现力的语音,允许通过指令文本进行精细调整。
- CosyVoice-sft-300M:已针对七位多语言说话者进行了微调,适合立即部署使用。
作者将流模式合成和非流模式合成统一在一个框架中,提出了统一的文本-语音语言模型和块感知的因果流匹配模型(chunk-aware causal flow matching model),实现了与离线模式相比的无损流模式合成。
通过删除文本编码器和语音嵌入来简化LM架构,允许预先训练的文本大语言模型(LLM)作为骨干,增强上下文理解。
用有限标量量化(FSQ)代替语音tokenizer中的矢量量化(VQ),提高了码本利用率,捕获了更多的语音信息。
支持更多指令,包括情感、口音、角色风格和细粒度控制。在CosyVoice 2中,指令和zero-shot能力被集成到一个模型中,从而实现更灵活和生动的合成。
模型结构
CosyVoice 2.0采用和CosyVoice 1一致的LLM+FM的建模框架,但是在具体实现上进行了如下几个要点的算法优化:
1、LLM backbone:CosyVoice 2.0采用预训练好的文本基座大模型替换了原来的Text Encoder + Random Transformer的结构。采用LLM进行初始化能够更好的进行文本的语义建模,使得在可控生成,音频和文本的情感匹配,多音字发音上会有明显的收益。
2、CosyVoice 1.0采用VQ来提取Supervised semantic codec,码本大小为4096,但是有效码本只有963。CosyVoice 2.0采用了FSQ替换VQ,训练了6561的码本,并且码本100%激活。FSQ-Speech Tokenizer的使用使得CosyVoice 2.0在发音准确性上有明显提升。
3、离线和流式一体化建模方案:目前主流的语音生成大模型(CosyVoice, F5-TTS,MaskGCT,GPT-SoViTs等)均不支持流式语音生成。CosyVoice 2.0提出了如图2所示的离线和流式一体化建模方案,使得LLM和FM均支持流式推理,接收5个文字就可以合成首包音频,延迟大致在150ms。同时合成音质相比于离线合成基本无损。
4、指令可控的音频生成能力升级:优化后的 CosyVoice 2.0 在基模型和指令模型的整合上取得了重要进展,不仅延续了对情感、说话风格和细粒度控制指令的支持,还新增了中文指令的处理能力。其指令控制功能的扩展尤为显著,现已支持多种主要方言,包括粤语、四川话、郑州话、天津话和长沙话等,为用户提供了更丰富的语言选择。此外,CosyVoice 2.0 也引入了角色扮演的功能,如能够模仿机器人、小猪佩奇的风格讲话等。这些功能的提升还伴随着发音准确性和音色一致性的显著改善,为用户带来了更自然和生动的语音体验。
Text Tokenizer
CosyVoice 2直接使用原始文本作为输入,使用基于BPE的文本tokenizer进行分词。这消除了以前模型对前端模型的依赖,它们通过字素到音素(grapheme-to-phoneme,g2p)转换获得音素。
注:BPE(Byte Pair Encoding)是一种用于文本分词(tokenization)的算法,它在自然语言处理(NLP)任务中非常流行,尤其是在处理那些没有明显单词边界的语言(如中文、日文)时。BPE的基本思想是通过迭代地合并最频繁出现的字节对(在文本中连续出现的字节序列)来构建词汇表,从而对文本进行编码。
这种方法不仅简化了数据预处理工作流程,而且使模型能够以端到端的方式学习发音。与文本LLM中常用的tokenizer不同,CosyVoice 2删除了了一对多tokens。这使得令牌的发音不会变得过长,并减少了由数据稀疏引起的边缘效应。具体地说,如果一个BPE令牌编码了多个汉字,它将被屏蔽,并且每个字符将在tokenize过程中单独编码。其他语言,如英语,日语和韩语,不受特殊处理。
注:如果一个BPE(Byte Pair Encoding)分词单元编码了多个字符(例如中文字符),那么这个分词单元会被遮蔽(mask out),即不会被直接使用。相反,每个字符会被单独编码。这样做的目的是为了防止一个分词单元对应过长的发音,减少因数据稀疏性引起的边缘情况。简而言之,就是为了保证模型能够更准确地学习和预测每个字符的发音,而不是将多个字符作为一个整体来处理。这种处理方式有助于提高模型对不同上下文中单词发音的学习效果,并简化数据预处理工作流程。
优势
- 多语言支持:CosyVoice 支持包括中文、英文、日语、粤语和韩语在内的五种语言。
- 零样本学习:能够无需训练即可适应新说话者(zero-shot in-context learning),能够在不同语言之间复制声音。
- 情感共鸣:能够创建情感共鸣的声音, CosyVoice-instruct 版本通过情感指令显著提高了情感控制的准确性。
- 高质量语音合成:生成的样本在词错误率(WER)和说话者相似性方面达到人类水平。
- 语音定制化:能够根据特定说话者生成多语言语音,适应新说话者而无需训练。
- 语音克隆与风格迁移:支持在不同语言之间进行语音克隆和情感风格迁移。
本地推理&&微调
1、拉取仓库,配置conda环境,安装依赖。
git clone --recursive https://github.com/FunAudioLLM/CosyVoice.git
# If you failed to clone the submodule due to network failures, please run the following command until success
cd CosyVoice
git submodule update --init --recursive
conda create -n cosyvoice -y python=3.10
conda activate cosyvoice
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com
# If you encounter sox compatibility issues
# ubuntu
sudo apt-get install sox libsox-dev
# centos
sudo yum install sox sox-devel
2、调用model.zero_shot_inference等函数,运行本地Inference代码。
from cosyvoice.cli.cosyvoice import CosyVoice, CosyVoice2
from cosyvoice.utils.file\_utils import load\_wav
import torchaudio
cosyvoice = CosyVoice2('../pretrained\_models/CosyVoice2-0.5B', load\_jit=True, load\_onnx=False, load\_trt=False) # 导入模型
prompt\_speech\_16k = load\_wav('zero\_shot\_prompt.wav', 16000) # 载入参考音频
# zero-shot生成,其中第一个文本是要生成的文本,第二个文本是参考音频的文本
for i, j in enumerate(cosyvoice.inference\_zero\_shot('收到好友从远方寄来的生日礼物,那份意外的惊喜与深深的祝福让我心中充满了甜蜜的快乐,笑容如花儿般绽放。', '希望你以后能够做的比我还好呦。', prompt\_speech\_16k, stream=False)):
torchaudio.save('zero\_shot\_{}.wav'.format(i), j['tts\_speech'], cosyvoice.sample\_rate)
# fine grained control, 细粒度控制 如笑声
for i, j in enumerate(cosyvoice.inference\_cross\_lingual('在他讲述那个荒诞故事的过程中,他突然[laughter]停下来,因为他自己也被逗笑了[laughter]。', prompt\_speech\_16k, stream=False)):
torchaudio.save('fine\_grained\_control\_{}.wav'.format(i), j['tts\_speech'], cosyvoice.sample\_rate)
# instruct usage 指令控制,如使用四川话
for i, j in enumerate(cosyvoice.inference\_instruct2('收到好友从远方寄来的生日礼物,那份意外的惊喜与深深的祝福让我心中充满了甜蜜的快乐,笑容如花儿般绽放。', '用四川话说这句话', prompt\_speech\_16k, stream=False)):
torchaudio.save('instruct\_{}.wav'.format(i), j['tts\_speech'], cosyvoice.sample\_rate)
测评体验
实测体验,测试几个常见的绕口令的语音,模型生成的语音发音会变得非常生硬,断句及分词或多或少会出现问题。同时,也有一些网友提出了个人体验的错误: 文本生成可能会随机漏字,断句有不少诡异之处;生成语音的语速会莫名逐渐变快;长文本的持续合成输出,目前官方未提供开源的方案细节。