温度、top-P、top-K——控制生成多样性的三个采样参数
采样参数的作用
ChatTTS 是自回归生成模型——它逐 token 生成,每个 token 的概率分布由温度、top-P、top-K 三个参数共同决定。这三个参数决定了模型"有多随机"。
三个参数详解
| 参数 | 默认值 | 作用 |
|---|---|---|
temperature | 约 1.0 | 温度越低越保守(总是选概率最高的 token),越高越多样 |
top_P | 约 0.7 | 只在累积概率前 P% 的 token 里采样 |
top_K | 约 20 | 只在概率最高的 K 个 token 里采样 |
注意:不同版本的 ChatTTS 默认值可能略有不同,以下以 0.2.x 版本为准。
效果对比
| 参数组合 | 效果 | 适用场景 |
|---|---|---|
| temp=0.0, top_P=1.0, top_K=0 | 完全确定性,每次输出几乎一模一样 | 需要精确复现时 |
| temp=0.3, top_P=0.7, top_K=20 | 保守稳定 | 日常对话、信息播报 |
| temp=0.8, top_P=0.9, top_K=30 | 较多样,有自然波动 | 创意配音、互动剧情 |
| temp=1.5, top_P=0.95, top_K=50 | 非常随机,可能不连贯 | 采样对比、艺术创作 |
基本用法
params_infer_code = ChatTTS.Chat.InferCodeParams(
temperature=0.3,
top_P=0.7,
top_K=20,
)
wavs = chat.infer("你好,世界", params_infer_code=params_infer_code)
与说话人嵌入配合
rand_spk = chat.sample_random_speaker()
params_infer_code = ChatTTS.Chat.InferCodeParams(
spk_emb=rand_spk,
temperature=0.3,
top_P=0.7,
top_K=20,
)
wavs = chat.infer(
"你好,世界",
params_infer_code=params_infer_code
)
建议值
- 大部分场景:temperature=0.3, top_P=0.7, top_K=20
- 想更自然一点:temperature=0.5, top_P=0.8, top_K=25
- 保守稳定:temperature=0.1, top_P=0.5, top_K=10
temperature 过高(> 1.0)会导致语音出现不连贯的片段或异常韵律,建议从 0.3 开始试。