模型概述
模型特點
模型能力
使用案例
🚀 OuteTTS Version 1.0
OuteTTS Version 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 |
Top-k | 40 |
Top-p | 0.9 |
Min-p | 0.05 |
對於生產或高質量需求,強烈建議使用llama.cpp以獲得最佳效果。
模型規格
- 訓練數據:在約60000小時的音頻上進行訓練
- 上下文長度:支持最大8192個令牌的上下文窗口
訓練參數
預訓練
- 優化器:AdamW
- 批量大小:100萬個令牌
- 最大學習率:3e-4
- 最小學習率:3e-5
- 上下文長度:8192
微調
- 優化器:AdamW
- 最大學習率:1e-5
- 最小學習率:5e-6
- 數據:10000個多樣化、高質量的示例
🔧 技術細節
視頻展示
重要提示
⚠️ 重要提示
OuteTTS Version 1.0 支持多種後端;然而,由於每個後端處理採樣的方式不同,默認情況下,llama.cpp 提供最可靠和一致的輸出質量。為獲得最佳效果,建議使用 llama.cpp 後端與該模型配合使用。
還強烈建議使用 此處 指定的設置使用該模型。偏離這些設置可能會導致輸出質量低下或損壞。此問題主要源於不同後端實現 重複懲罰 的方式。該模型在 窗口化方法(使用 64 令牌窗口)下表現最佳,其中懲罰僅應用於最近的令牌,而不是整個上下文窗口。
Llama.cpp 和 EXL2 支持此類採樣,而 Transformers 不支持。為了解決這個問題,在 OuteTTS 庫中為 Hugging Face Transformers 後端實現了 窗口化重複懲罰,這顯著提高了輸出質量並解決了採樣問題,提供了與 llama.cpp 相當的結果。如果不進行此調整,輸出質量可能會大幅下降。
如果您發現了可以提高性能的替代採樣設置,請通過在 OuteTTS GitHub 上創建一個問題來分享您的發現。
📄 許可證
- 初始Llama3.2組件:Llama 3.2社區許可協議
- 我們的持續預訓練、微調及其他組件:CC-BY-NC-SA-4.0
致謝
- 非常感謝 Hugging Face 通過其資助計劃持續提供資源支持!
- 音頻編碼和解碼使用了 ibm-research/DAC.speech.v1.0
- OuteTTS基於 Llama3.2-1B 作為基礎模型,並進行了持續的預訓練和微調。
道德使用指南
此文本轉語音模型旨在用於合法應用,以增強可訪問性、創造力和通信;禁止的用途包括未經同意的模仿、故意創建誤導性內容、生成有害或騷擾性材料、在未適當披露的情況下分發合成音頻、未經許可進行語音克隆,以及任何違反適用法律、法規或版權的用途。




