模型概述
模型特點
模型能力
使用案例
🚀 Indic Parler-TTS
Indic Parler-TTS 是 Parler-TTS Mini 的多語言印度語擴展版本。它基於 Indic Parler-TTS Pretrained 進行微調,在一個時長為 1806 小時 的多語言印度語和英語數據集上訓練而成。Indic Parler-TTS Mini 官方支持 20 種印度語和英語,為區域語言技術提供了全面的支持。這 21 種語言 包括:阿薩姆語、孟加拉語、博多語、多格里語、英語、古吉拉特語、印地語、卡納達語、孔卡尼語、邁蒂利語、馬拉雅拉姆語、曼尼普爾語、馬拉地語、尼泊爾語、奧里亞語、梵語、桑塔利語、信德語、泰米爾語、泰盧固語和烏爾都語。此外,憑藉其 更出色的提示分詞器,該模型可以輕鬆擴展到其他語言。這個分詞器擁有更大的詞彙量,並能處理字節回退,簡化了多語言訓練過程。
🚀 快速開始
使用 Parler-TTS 非常簡單,只需安裝一次庫即可:
pip install git+https://github.com/huggingface/parler-tts.git
✨ 主要特性
模型輸入
該模型主要接受兩個輸入:
- 文本內容:需要轉換為語音的文本。
- 描述信息:對語音的詳細描述,例如“Leela 以高音調、快節奏且歡快的語氣說話,充滿活力和喜悅。錄音質量非常高,沒有背景噪音。”
關鍵特性
- 語言支持
- 官方支持語言:阿薩姆語、孟加拉語、博多語、多格里語、卡納達語、馬拉雅拉姆語、馬拉地語、梵語、尼泊爾語、英語、泰盧固語、印地語、古吉拉特語、孔卡尼語、邁蒂利語、曼尼普爾語、奧里亞語、桑塔利語、信德語、泰米爾語和烏爾都語。
- 非官方支持語言:恰蒂斯加爾語、克什米爾語、旁遮普語。
- 說話人多樣性
- 在支持的語言中共有 69 種獨特的聲音。
- 每種支持的語言都有一組經過優化的 推薦聲音,以確保自然度和可理解性。
- 情感渲染
- 10 種語言 官方支持特定情感的提示:阿薩姆語、孟加拉語、博多語、多格里語、卡納達語、馬拉雅拉姆語、馬拉地語、梵語、尼泊爾語和泰米爾語。
- 其他語言也支持情感,但尚未經過廣泛測試。
- 可用情感 包括:命令、憤怒、敘述、對話、厭惡、恐懼、快樂、中性、專有名詞、新聞、悲傷和驚訝。
- 口音靈活性
- 該模型通過其英語聲音 官方支持印度英語口音,提供清晰自然的語音。
- 對於其他口音,模型允許通過指定口音細節進行自定義,例如“一位英國男性說話者”或“一位美國女性說話者”,使用風格遷移實現更動態和個性化的輸出。
- 可定製輸出
Indic Parler-TTS 通過 描述信息 輸入,對各種語音特徵提供了精確的控制:
- 背景噪音:調整音頻中的噪音水平,從清晰環境到略有噪音的環境。
- 混響效果:控制語音的感知距離,從聽起來較近的語音到較遠的語音。
- 表現力:指定語音的動態程度或單調程度,從富有表現力到略有表現力或單調。
- 音高:修改語音的音高,包括高音、低音或平衡音。
- 說話速度:改變說話速度,從慢速到快速。
- 語音質量:控制語音的整體清晰度和自然度,從基本質量到精緻質量。
📦 安裝指南
使用以下命令安裝 Parler-TTS 庫:
pip install git+https://github.com/huggingface/parler-tts.git
💻 使用示例
基礎用法
使用隨機聲音生成語音:
import torch
from parler_tts import ParlerTTSForConditionalGeneration
from transformers import AutoTokenizer
import soundfile as sf
device = "cuda:0" if torch.cuda.is_available() else "cpu"
model = ParlerTTSForConditionalGeneration.from_pretrained("ai4bharat/indic-parler-tts").to(device)
tokenizer = AutoTokenizer.from_pretrained("ai4bharat/indic-parler-tts")
description_tokenizer = AutoTokenizer.from_pretrained(model.config.text_encoder._name_or_path)
prompt = "Hey, how are you doing today?"
description = "A female speaker with a British accent delivers a slightly expressive and animated speech with a moderate speed and pitch. The recording is of very high quality, with the speaker's voice sounding clear and very close up."
description_input_ids = description_tokenizer(description, return_tensors="pt").to(device)
prompt_input_ids = tokenizer(prompt, return_tensors="pt").to(device)
generation = model.generate(input_ids=description_input_ids.input_ids, attention_mask=description_input_ids.attention_mask, prompt_input_ids=prompt_input_ids.input_ids, prompt_attention_mask=prompt_input_ids.attention_mask)
audio_arr = generation.cpu().numpy().squeeze()
sf.write("indic_tts_out.wav", audio_arr, model.config.sampling_rate)
高級用法
切換語言
模型會自動適應提示中檢測到的語言,無需指定要使用的語言。例如,要切換到印地語,只需使用印地語提示:
import torch
from parler_tts import ParlerTTSForConditionalGeneration
from transformers import AutoTokenizer
import soundfile as sf
device = "cuda:0" if torch.cuda.is_available() else "cpu"
model = ParlerTTSForConditionalGeneration.from_pretrained("ai4bharat/indic-parler-tts").to(device)
tokenizer = AutoTokenizer.from_pretrained("ai4bharat/indic-parler-tts")
description_tokenizer = AutoTokenizer.from_pretrained(model.config.text_encoder._name_or_path)
prompt = "अरे, तुम आज कैसे हो?"
description = "A female speaker delivers a slightly expressive and animated speech with a moderate speed and pitch. The recording is of very high quality, with the speaker's voice sounding clear and very close up."
description_input_ids = description_tokenizer(description, return_tensors="pt").to(device)
prompt_input_ids = tokenizer(prompt, return_tensors="pt").to(device)
generation = model.generate(input_ids=description_input_ids.input_ids, attention_mask=description_input_ids.attention_mask, prompt_input_ids=prompt_input_ids.input_ids, prompt_attention_mask=prompt_input_ids.attention_mask)
audio_arr = generation.cpu().numpy().squeeze()
sf.write("indic_tts_out.wav", audio_arr, model.config.sampling_rate)
使用特定說話人
為了確保生成過程中說話人的一致性,該模型還在預先確定的說話人上進行了訓練,這些說話人可以通過姓名(例如 Rohit、Karan、Leela、Maya、Sita 等)來指定。要使用特定說話人,只需在文本描述中指定即可:Divya 的聲音單調但語速稍快,錄音非常接近,幾乎沒有背景噪音。
import torch
from parler_tts import ParlerTTSForConditionalGeneration
from transformers import AutoTokenizer
import soundfile as sf
device = "cuda:0" if torch.cuda.is_available() else "cpu"
model = ParlerTTSForConditionalGeneration.from_pretrained("ai4bharat/indic-parler-tts").to(device)
tokenizer = AutoTokenizer.from_pretrained("ai4bharat/indic-parler-tts")
description_tokenizer = AutoTokenizer.from_pretrained(model.config.text_encoder._name_or_path)
prompt = "अरे, तुम आज कैसे हो?"
description = "Divya's voice is monotone yet slightly fast in delivery, with a very close recording that almost has no background noise."
description_input_ids = description_tokenizer(description, return_tensors="pt").to(device)
prompt_input_ids = tokenizer(prompt, return_tensors="pt").to(device)
generation = model.generate(input_ids=description_input_ids.input_ids, attention_mask=description_input_ids.attention_mask, prompt_input_ids=prompt_input_ids.input_ids, prompt_attention_mask=prompt_input_ids.attention_mask)
audio_arr = generation.cpu().numpy().squeeze()
sf.write("indic_tts_out.wav", audio_arr, model.config.sampling_rate)
說話人信息
模型在 18 種官方支持的語言中包含 69 位說話人,每種語言都有一組推薦的聲音以實現最佳性能。以下是每種語言可用說話人和推薦說話人的彙總表:
語言 | 可用說話人 | 推薦說話人 |
---|---|---|
阿薩姆語 | Amit, Sita, Poonam, Rakesh | Amit, Sita |
孟加拉語 | Arjun, Aditi, Tapan, Rashmi, Arnav, Riya | Arjun, Aditi |
博多語 | Bikram, Maya, Kalpana | Bikram, Maya |
恰蒂斯加爾語 | Bhanu, Champa | Bhanu, Champa |
多格里語 | Karan | Karan |
英語 | Thoma, Mary, Swapna, Dinesh, Meera, Jatin, Aakash, Sneha, Kabir, Tisha, Chingkhei, Thoiba, Priya, Tarun, Gauri, Nisha, Raghav, Kavya, Ravi, Vikas, Riya | Thoma, Mary |
古吉拉特語 | Yash, Neha | Yash, Neha |
印地語 | Rohit, Divya, Aman, Rani | Rohit, Divya |
卡納達語 | Suresh, Anu, Chetan, Vidya | Suresh, Anu |
馬拉雅拉姆語 | Anjali, Anju, Harish | Anjali, Harish |
曼尼普爾語 | Laishram, Ranjit | Laishram, Ranjit |
馬拉地語 | Sanjay, Sunita, Nikhil, Radha, Varun, Isha | Sanjay, Sunita |
尼泊爾語 | Amrita | Amrita |
奧里亞語 | Manas, Debjani | Manas, Debjani |
旁遮普語 | Divjot, Gurpreet | Divjot, Gurpreet |
梵語 | Aryan | Aryan |
泰米爾語 | Kavitha, Jaya | Jaya |
泰盧固語 | Prakash, Lalitha, Kiran | Prakash, Lalitha |
描述示例
以下是一些描述示例,展示瞭如何控制語音的特徵:
- Aditi - 高音調、富有表現力的語氣: "Aditi 在近距離環境中以稍高的音調說話。她的聲音清晰,帶有微妙的情感深度,語速正常,錄音質量很高。"
- Sita - 快速、略帶單調: "Sita 語速較快,聲音音調稍低,在近距離環境中清晰錄製,錄音質量極佳。"
- Tapan - 男性、中等語速、略帶單調: "Tapan 以中等語速說話,語氣略帶單調。錄音清晰,聲音接近,只有極小的環境噪音。"
- Sunita - 高音調、歡快的語氣: "Sunita 在近距離環境中以高音調說話。她的聲音清晰,有輕微的動態變化,錄音質量極佳。"
- Karan - 高音調、積極的語氣: "Karan 高音調、富有吸引力的聲音在清晰、近距離的錄音中被捕捉到。他稍慢的語速傳達出積極的語氣。"
- Amrita - 高音調、平淡的語氣: "Amrita 以高音調、慢速說話。她的聲音清晰,錄音質量極佳,只有適度的背景噪音。"
- Aditi - 慢速、略帶表現力: "Aditi 緩慢地以高音調和富有表現力的語氣說話。錄音清晰,展現出她充滿活力和情感的聲音。"
- 年輕男性說話者,美國口音: "一位帶有高音調美國口音的年輕男性說話者在清晰、近距離的錄音中以稍快的語速說話。"
- Bikram - 高音調、緊急的語氣: "Bikram 以較高的音調、快速的語速說話,傳達出緊迫感。錄音清晰、親密,情感深度豐富。"
- Anjali - 高音調、中性的語氣: "Anjali 在清晰、近距離的環境中以高音調、正常語速說話。她的中性語氣通過出色的音頻質量被捕捉到。"
📚 詳細文檔
評估結果
Indic Parler-TTS 已經通過類似 MOS 的框架由母語和非母語使用者進行了評估。結果顯示,該模型在生成自然和可理解的語音方面表現出色,特別是對於印度語言的母語使用者。
NSS 代表 母語使用者評分:
語言 | 預訓練 NSS (%) | 微調後 NSS (%) | 亮點 |
---|---|---|---|
阿薩姆語 | 82.56 ± 1.80 | 87.36 ± 1.81 | 清晰、自然的合成語音,表現力出色。 |
孟加拉語 | 77.41 ± 2.14 | 86.16 ± 1.85 | 高質量輸出,語調流暢。 |
博多語 | 90.83 ± 4.54 | 94.47 ± 4.12 | 對於資源較少的語言,接近完美的準確性。 |
多格里語 | 82.61 ± 4.98 | 88.80 ± 3.57 | 多格里語的合成語音穩健且一致。 |
古吉拉特語 | 75.28 ± 1.94 | 75.36 ± 1.78 | 即使對於較小的語言,也具有很強的清晰度和自然度。 |
印地語 | 83.43 ± 1.53 | 84.79 ± 2.09 | 對於印度使用最廣泛的語言,輸出可靠且富有表現力。 |
卡納達語 | 77.97 ± 3.43 | 88.17 ± 2.81 | 卡納達語的語音非常自然和準確。 |
孔卡尼語 | 87.20 ± 3.58 | 76.60 ± 4.14 | 為不同的說話者生成清晰、自然的輸出。 |
邁蒂利語 | 89.07 ± 4.47 | 95.36 ± 2.52 | 異常準確,展示了微調的成功。 |
馬拉雅拉姆語 | 82.02 ± 2.06 | 86.54 ± 1.67 | 平滑、高質量的合成語音,輸出富有表現力。 |
曼尼普爾語 | 89.58 ± 1.33 | 85.63 ± 2.60 | 自然的語調,錯誤極少。 |
馬拉地語 | 73.81 ± 1.93 | 76.96 ± 1.45 | 在不同說話者之間保持清晰度和自然度。 |
尼泊爾語 | 64.05 ± 8.33 | 80.02 ± 5.75 | 為母語和接近母語的尼泊爾語使用者提供強大的合成語音。 |
奧里亞語 | 90.28 ± 2.52 | 88.94 ± 3.26 | 奧里亞語使用者的表現力和質量很高。 |
梵語 | 99.71 ± 0.58 | 99.79 ± 0.34 | 接近完美的合成語音,適用於古典用例。 |
信德語 | 76.44 ± 2.26 | 76.46 ± 1.29 | 為代表性不足的語言提供清晰、自然的語音。 |
泰米爾語 | 69.68 ± 2.73 | 75.48 ± 2.18 | 提供可理解和富有表現力的語音。 |
泰盧固語 | 89.77 ± 2.20 | 88.54 ± 1.86 | 泰盧固語的音調質量平滑自然。 |
烏爾都語 | 77.15 ± 3.47 | 77.75 ± 3.82 | 儘管資源有限,仍能生成高質量的語音。 |
關鍵優勢
- 對於母語使用者表現出色,邁蒂利語 (95.36)、梵語 (99.79) 和 博多語 (94.47) 得分最高。
- 對於資源較少和非官方支持的語言,如 克什米爾語 (55.30) 和 信德語 (76.46),也取得了有競爭力的結果。
- 能夠適應非母語和匿名說話者的場景,始終保持較高的清晰度。
動機
Parler-TTS 是基於 Dan Lyth 和 Simon King 分別來自 Stability AI 和愛丁堡大學的論文 Natural language guidance of high-fidelity text-to-speech with synthetic annotations 的工作復現。
Parler-TTS 發佈時還附帶了以下資源:
- Parler-TTS 倉庫 - 可以訓練和微調自己的模型版本。
- Data-Speech 倉庫 - 一套用於標註語音數據集的實用腳本。
- Parler-TTS 組織 - 可以找到標註的數據集以及未來的模型檢查點。
訓練數據集
- 描述: 該模型在預訓練版本使用的數據集的一個子集上進行了微調:Indic-Parler 數據集,這是一個大規模的多語言語音語料庫,用於訓練 Indic Parler-TTS 模型。
- 關鍵統計信息: | 數據集 | 時長 (小時) | 涵蓋語言數量 | 語句數量 | 許可證 | | ---- | ---- | ---- | ---- | ---- | | GLOBE | 535.0 | 1 | 581,725 | CC V1 | | IndicTTS | 382.0 | 12 | 220,606 | CC BY 4.0 | | LIMMITS | 568.0 | 7 | 246,008 | CC BY 4.0 | | Rasa | 288.0 | 9 | 155,734 | CC BY 4.0 |
- 涵蓋語言: 該數據集支持印度的 16 種官方語言,以及英語和恰蒂斯加爾語,為區域語言技術提供了全面的支持。這些語言包括阿薩姆語、孟加拉語、博多語、恰蒂斯加爾語、多格里語、英語、古吉拉特語、印地語、卡納達語、馬拉雅拉姆語、曼尼普爾語、馬拉地語、尼泊爾語、奧里亞語、旁遮普語、梵語、泰米爾語和泰盧固語。
- 按語言的數據細分: | 語言 | 時長 (小時) | 語句數量 | | ---- | ---- | ---- | | 阿薩姆語 | 69.78 | 41,210 | | 孟加拉語 | 140.04 | 70,305 | | 博多語 | 49.14 | 27,012 | | 恰蒂斯加爾語 | 80.11 | 38,148 | | 多格里語 | 16.14 | 7,823 | | 英語 | 802.81 | 735,482 | | 古吉拉特語 | 21.24 | 5,679 | | 印地語 | 107.00 | 46,135 | | 卡納達語 | 125.01 | 54,575 | | 馬拉雅拉姆語 | 25.21 | 14,988 | | 曼尼普爾語 | 20.77 | 19,232 | | 馬拉地語 | 122.47 | 54,894 | | 尼泊爾語 | 28.65 | 16,016 | | 奧里亞語 | 19.18 | 11,558 | | 旁遮普語 | 11.07 | 6,892 | | 梵語 | 19.91 | 8,720 | | 泰米爾語 | 52.25 | 29,204 | | 泰盧固語 | 95.91 | 37,405 |
引用
如果您發現這個倉庫有用,請考慮引用這項工作以及原始的 Stability AI 論文:
@misc{lacombe-etal-2024-indic-parler-tts,
author = {Yoach Lacombe, Ashwin Sankar, Sherry Thomas, Praveen Srinivasa Varadhan, Sanchit Gandhi, Mitesh Khapra,
title = {Indic Parler-TTS},
year = {2024},
publisher = {Hugging Face},
journal = {Hugging Face repository},
howpublished = {\url{https://huggingface.co/ai4bharat/indic-parler-tts}}
}
@misc{lacombe-etal-2024-parler-tts,
author = {Yoach Lacombe and Vaibhav Srivastav and Sanchit Gandhi},
title = {Parler-TTS},
year = {2024},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/huggingface/parler-tts}}
}
@misc{lyth2024natural,
title={Natural language guidance of high-fidelity text-to-speech with synthetic annotations},
author={Dan Lyth and Simon King},
year={2024},
eprint={2402.01912},
archivePrefix={arXiv},
primaryClass={cs.SD}
}
📄 許可證
該模型遵循 Apache 2.0 許可證。
💡 使用建議
- 我們已經設置了一個 推理指南,以加快生成速度。可以考慮使用 SDPA、torch.compile、批處理和流式傳輸等技術!
- 在描述中包含“非常清晰的音頻”可以生成最高質量的音頻,包含“非常嘈雜的音頻”則可以生成高背景噪音的音頻。
- 可以使用標點符號來控制生成語音的韻律,例如使用逗號來添加小的停頓。
- 其他語音特徵(性別、說話速度、音高和混響效果)可以直接通過提示進行控制。




