模型简介
模型特点
模型能力
使用案例
🚀 OuteTTS版本1.0
OuteTTS 1.0版本在语音合成和语音克隆方面带来了显著改进,以紧凑的规模提供了更强大、准确且用户友好的体验。
🚀 快速开始
安装
👉 安装说明
基础用法
import outetts
# Initialize the interface
interface = outetts.Interface(
config=outetts.ModelConfig.auto_config(
model=outetts.Models.VERSION_1_0_SIZE_1B,
# For llama.cpp backend
backend=outetts.Backend.LLAMACPP,
quantization=outetts.LlamaCppQuantization.FP16
# For transformers backend
# backend=outetts.Backend.HF,
)
)
# Load the default speaker profile
speaker = interface.load_default_speaker("EN-FEMALE-1-NEUTRAL")
# Or create your own speaker profiles in seconds and reuse them instantly
# speaker = interface.create_speaker("path/to/audio.wav")
# interface.save_speaker(speaker, "speaker.json")
# speaker = interface.load_speaker("speaker.json")
# Generate speech
output = interface.generate(
config=outetts.GenerationConfig(
text="Hello, how are you doing?",
generation_type=outetts.GenerationType.CHUNKED,
speaker=speaker,
sampler_config=outetts.SamplerConfig(
temperature=0.4
),
)
)
# Save to file
output.save("output.wav")
更多配置选项
如需高级设置和自定义,请访问官方仓库:
👉 interface_usage.md
✨ 主要特性
1. 提示改进与依赖移除
- 自动单词对齐:模型现在可在内部执行单词对齐。只需输入原始文本,无需预处理,模型会处理其余操作,简化工作流程。为获得最佳效果,请使用规范化、易读且无换行符的文本(outetts库会自动进行轻度规范化)。
- 原生多语言文本支持:直接支持多种语言的原生文本,无需罗马化。
- 增强元数据集成:更新后的提示系统在全局和单词级别整合了额外的元数据(时间、能量、频谱质心、音高),改善了说话者的流畅度和合成质量。
- 音频码本特殊令牌:新增了c1(码本1)和c2(码本2)的特殊令牌。
2. 新音频编码器模型
- DAC编码器:集成了来自ibm-research/DAC.speech.v1.0的DAC音频编码器,利用两个码本进行高质量音频重建。
- 性能权衡:提高音频保真度使令牌生成速率从每秒75个提高到150个。这种权衡优先考虑了质量,特别是对于多语言应用。
3. 语音克隆
- 单样本语音克隆:通常,模型只需约10秒的参考音频即可实现准确的语音克隆。
- 提高准确性:新的编码器和额外的训练元数据使语音克隆更加自然和精确。
4. 自动文本对齐与数字支持
- 自动文本对齐:即使对于没有明确边界的语言(如日语、中文),模型也能根据预处理的训练数据在单词级别对齐原始文本。
- 直接数字输入:内置的多语言数字支持允许在提示中直接使用数字,无需进行文本转换(模型通常会选择占主导地位的语言。在单个提示中混合使用多种语言可能会导致错误)。
5. 多语言能力
- 支持的语言:OuteTTS根据训练数据的暴露程度,在多种语言上提供不同水平的熟练度。
- 高训练数据语言:这些语言经过大量训练:英语、阿拉伯语、中文、荷兰语、法语、德语、意大利语、日语、韩语、立陶宛语、俄语、西班牙语。
- 中等训练数据语言:这些语言经过中等程度的训练,表现良好,但偶尔会有局限性:葡萄牙语、白俄罗斯语、孟加拉语、格鲁吉亚语、匈牙利语、拉脱维亚语、波斯语、波兰语、斯瓦希里语、泰米尔语、乌克兰语。
- 未支持语言:模型可以在未训练的语言中生成语音,但效果可能不佳。可以尝试未列出的语言,但结果可能不理想。
📦 安装指南
👉 安装说明
💻 使用示例
基础用法
import outetts
# Initialize the interface
interface = outetts.Interface(
config=outetts.ModelConfig.auto_config(
model=outetts.Models.VERSION_1_0_SIZE_1B,
# For llama.cpp backend
backend=outetts.Backend.LLAMACPP,
quantization=outetts.LlamaCppQuantization.FP16
# For transformers backend
# backend=outetts.Backend.HF,
)
)
# Load the default speaker profile
speaker = interface.load_default_speaker("EN-FEMALE-1-NEUTRAL")
# Or create your own speaker profiles in seconds and reuse them instantly
# speaker = interface.create_speaker("path/to/audio.wav")
# interface.save_speaker(speaker, "speaker.json")
# speaker = interface.load_speaker("speaker.json")
# Generate speech
output = interface.generate(
config=outetts.GenerationConfig(
text="Hello, how are you doing?",
generation_type=outetts.GenerationType.CHUNKED,
speaker=speaker,
sampler_config=outetts.SamplerConfig(
temperature=0.4
),
)
)
# Save to file
output.save("output.wav")
高级用法
如需高级设置和自定义,请访问官方仓库:
👉 interface_usage.md
📚 详细文档
使用建议
说话者参考
模型设计为使用说话者参考。如果没有参考,模型会生成随机的语音特征,通常会导致输出质量下降。模型会继承参考说话者的情感、风格和口音。当使用同一说话者转录到其他语言时,可能会发现模型保留了原始口音。
多语言应用
建议使用目标语言创建说话者配置文件,这有助于在该特定语言中获得最佳效果,包括语调、口音和语言特征。虽然模型支持跨语言语音,但仍依赖于参考说话者。如果说话者有明显的口音(如英式英语),其他语言可能也会带有该口音。
最佳音频长度
- 最佳性能:单次运行生成约42秒的音频(约8192个令牌)。建议在生成时不要接近此窗口的限制。通常,最多7000个令牌可获得最佳效果。
- 使用说话者参考时的上下文减少:如果说话者参考为10秒长,则有效上下文将减少到约32秒。
温度设置建议
测试表明,温度设置为0.4是准确性的理想起点(使用以下采样设置)。然而,某些语音参考可能受益于更高的温度以增强表现力,或稍低的温度以实现更精确的语音复制。
验证说话者编码
如果克隆语音质量不佳,请检查编码后的说话者样本。
interface.decode_and_save_speaker(speaker=your_speaker, path="speaker.wav")
DAC音频重建模型是有损的,带有削波、过大音量或异常语音特征的样本可能会引入编码问题,影响输出质量。
采样配置
为获得此TTS模型的最佳效果,请使用以下采样设置。
参数 | 值 |
---|---|
温度 | 0.4 |
重复惩罚 | 1.1 |
重复范围 | 64 |
前k个 | 40 |
前p个 | 0.9 |
最小p值 | 0.05 |
模型规格
属性 | 详情 |
---|---|
训练数据 | 基于约60000小时的音频进行训练 |
上下文长度 | 支持最大8192个令牌的上下文窗口 |
训练参数
预训练
属性 | 详情 |
---|---|
优化器 | AdamW |
批量大小 | 100万个令牌 |
最大学习率 | 3e - 4 |
最小学习率 | 3e - 5 |
上下文长度 | 8192 |
微调
属性 | 详情 |
---|---|
优化器 | AdamW |
最大学习率 | 1e - 5 |
最小学习率 | 5e - 6 |
数据 | 10000个多样化、高质量的示例 |
🔧 技术细节
重要采样注意事项
使用OuteTTS 1.0版本时,务必使用采样配置部分指定的设置。
重复惩罚实现尤为重要——此模型需要对最近的64个令牌窗口应用惩罚,而不是对整个上下文窗口应用惩罚。对整个上下文进行惩罚会导致模型产生破碎或低质量的输出。
目前,llama.cpp默认提供最可靠和一致的输出质量。llama.cpp和EXL2都支持这种窗口化采样方法,而Transformers不支持。
为解决这一限制,我在OuteTTS库中为Hugging Face Transformers后端实现了窗口化重复惩罚,这显著提高了输出质量并解决了采样问题,提供了与llama.cpp相当的结果。
📄 许可证
- 初始Llama3.2组件:Llama 3.2社区许可协议
- 我们的持续预训练、微调及其他组件:CC - BY - NC - SA - 4.0
致谢
- 非常感谢Hugging Face通过其资助计划提供的持续资源支持!
- 音频编码和解码使用了ibm - research/DAC.speech.v1.0
- OuteTTS基于Llama3.2 - 1B作为基础模型,并进行了持续的预训练和微调。
道德使用指南
此文本转语音模型旨在用于合法应用,以增强可访问性、创造力和沟通;禁止的用途包括未经同意的模仿、故意创建误导性内容、生成有害或骚扰性材料、在未适当披露的情况下分发合成音频、未经许可的语音克隆,以及任何违反适用法律、法规或版权的用途。
⚠️ 重要提示
使用OuteTTS版本1.0时,务必使用采样配置部分指定的设置。重复惩罚需应用于64个令牌的最近窗口,而非整个上下文窗口,否则会导致输出质量下降。目前,llama.cpp默认输出质量最可靠,OuteTTS库为Hugging Face Transformers后端实现的窗口化重复惩罚可显著提升输出质量。
💡 使用建议
建议使用目标语言创建说话者配置文件以获得最佳多语言效果;单次生成音频约42秒(约8192个令牌)性能最佳;温度设置0.4是准确性的理想起点;若克隆语音质量不佳,可检查编码后的说话者样本。




