PocketTTS-ZH-6L(R21)中文语音克隆模型
中文语音合成(TTS)模型,支持语音克隆与数字/中英混读,CPU 优先设计,权重原生 int8 量化。
基于 Kyutai Pocket TTS 架构:6 层 FlowLM(d_model 1024)+ Mimi 神经音频编解码器(24 kHz),端到端流式推理。本版本(R21)相对上一代的核心变化:
- 原生 int8 交付:FlowLM 注意力与 FFN 权重已离线量化打包,无需运行时转换,体积 223 MB,CPU 速度提升约 1 倍
- 9174 token 词表:官方英文 BPE-4000 基底 + 追加单字汉字/全角标点,byte_fallback 兜底生僻字符
- 内置文本规范化(TN):阿拉伯数字、金额、日期、订单号自动转中文读法(
368.5 → 三百六十八点五,16 位订单号逐位读出)
- 中英混读:APP、VIP、5G、WiFi 等英文术语按中文习惯读法
English summary: A Mandarin Chinese TTS model with voice cloning, built on
the Pocket TTS architecture (6-layer flow transformer + Mimi codec).
Weights ship pre-quantized int8 (223 MB, no runtime conversion needed):
0.18× real-time single-threaded on an i7-12700KF (≈5.5× faster than
real-time audio production), 0.16× with 4 threads. Built-in text
normalization reads Arabic digits, amounts, dates and order numbers in
Mandarin (digit-by-digit for serial numbers). 9174-token SentencePiece
vocabulary. Intended for customer-service dialogue and short-form Mandarin
speech. See Performance and Limitations below.
快速开始
pip install pocket-tts soundfile wetext
cd <本目录>
python demo.py --prompt your_voice.wav --text "您的订单编号是20260918123456,退款368.5元预计三个工作日内到账。" --out out.wav
- TN 默认开启:数字、金额、日期、订单号自动转中文读法;
--no-tn 可关闭
- 模型为预量化 int8 权重(
model_int8.pt),加载即用,无需 quantize=True
或有界面演示(需 pip install gradio):
python demo.py --gradio
界面中可看到 TN 规范化后的文本,并可选关闭 TN。
Python API:
import sys
sys.path.insert(0, "<本目录>")
from demo import load # int8 加载 + TN
from tn import normalize_tn
model = load()
state = model.get_state_for_audio_prompt("your_voice.wav") # 3~10 秒干净普通话
text = normalize_tn("您的订单编号是20260918123456") # TN 显式调用(可选,demo.synthesize 默认已含)
audio = model.generate_audio(state, text)
- 参考音频:3~10 秒、干净、单说话人普通话,效果最佳
- 采样温度
temp=0.3(默认);文本越长对参考音频质量越敏感
性能
文本准确性用 whisper-small 对合成音频转写后计算字错误率(CER),每个场景 10 次独立采样取均值,生产配置(单步采样)。数值越低越好。
主指标:客服业务长句(52 字),语音克隆(客服参考音色)
| 指标 |
CER (n=10) |
| 客服长句(主指标) |
8.1%(上一代 13.65%) |
| 数字订单句(16 位订单号 + 金额) |
0%(ASR 逐字核对通过) |
| 中英混读句(APP/VIP/官网) |
ASR 全对 |
分文本长度(客服参考音色,n=10)
| 文本 |
CER (n=10) |
| 短句未见(9 字) |
17.1% |
| 中句未见(15 字) |
6.2% |
| 长句未见(31 字) |
6.4% |
速度与资源(int8 权重)
测试环境:Intel i7-12700KF,生成 52 字客服长句(约 8.5 秒音频),每档 3 次取均值。
| 项目 |
数值 |
| CPU 推理速度(单线程,库默认) |
0.18× 实时(生成 1 秒音频约需 0.18 秒) |
| CPU 推理速度(2 线程) |
0.17× 实时 |
| CPU 推理速度(4 线程) |
0.16× 实时 |
| 权重文件 |
223 MB(model_int8.pt,FlowLM int8 + Mimi fp32) |
| FlowLM 参数量 |
约 89M(注意力 + FFN 已 int8) |
| 采样率 |
24 kHz |
示例音频
参考音频:客服目标音色(kefu_long / digits_order / codeswitch / short_unseen)与 AISHELL-3 说话人 A/B(speakerA_long / speakerB_long,仅用于演示音色克隆,不在交付范围内)。均由交付的 int8 模型 + TN 默认配置生成。
| 场景 |
文本 |
试听 |
| 客服长句 |
您好,非常抱歉给您带来了不好的使用体验,麻烦您先提供一下订单编号,我这边马上帮您查询订单信息和售后政策。 |
| 数字订单 |
您的订单编号是20260918123456,退款368.5元预计三个工作日内到账。 |
| 中英混读 |
请打开APP查看您的VIP会员状态,或者登录官网查询订单详情。 |
| 短句 |
今天天气很好,适合外出散步。 |
| 说话人 A |
请问您反映的问题我们已经记录下来,稍后会有专员与您联系,请保持电话畅通。 |
| 说话人 B |
人工智能正在改变我们的生活方式。 |
输入文本说明
- TN 默认开启(推荐):阿拉伯数字、金额、日期、电话、订单号/运单号/航班号自动转中文口语读法;订单号类编号逐位读出(如
20260918123456 → 二零二六零九一八一二三四五六)
- 关闭 TN(
--no-tn)时,请自行使用中文数字写法;词表虽有数字 token,但训练数据全部经过 TN,关闭后数字读法不受控
- 网址(URL)、邮箱等复合符号朗读不稳定,建议预处理或避免
- 纯英文句子不受支持(可能输出静音),中英混读仅限常见术语词汇
局限性与已知问题
- 极短句 + 语音克隆可能不稳定:约 9 字且无标点的文本,在嘈杂/电话信道参考音频下可能输出静音或复述参考音频内容(建议参考此类文本时实测);demo 已内置静音检测自动换 seed 重试
- 未见说话人泛化有限:对全新音色克隆长业务句 CER 明显高于已适应音色,建议参考音频清晰、时长 5 秒以上
- 必须提供参考音频(语音克隆是本模型的设计形态);无参考音频的直接合成质量不可用
- 方言、外语、唱歌不适用;情绪化/高表现力朗读能力有限
- 音色相似度未做定量评测,建议实际试听
伦理与使用限制
- 本模型仅用于已获得合法授权的语音合成。未经声音主体明确同意,禁止克隆其声音
- 禁止用于冒充、欺诈、制造虚假信息或任何违法用途
- 合成内容应明确标识为 AI 生成
文件清单
| 文件 |
说明 |
model_int8.pt |
预量化 int8 权重(FlowLM int8 + Mimi fp32),223 MB |
config.yaml |
模型架构配置(自包含,不含权重路径依赖) |
tokenizer.model |
SentencePiece 分词器(9174 词,含 byte_fallback) |
tn.py |
文本规范化(TN)模块,wetext + 业务规则 |
demo.py |
推理演示(int8 加载 + TN,CLI + Gradio) |
samples/ |
示例音频(见上表) |
README.md |
本文件 |