模型概述
模型特點
模型能力
使用案例
🚀 Indic Parler-TTS預訓練模型
Indic Parler-TTS預訓練模型 是 Parler-TTS Mini 的多語言印度語擴展版本。它在一個時長為 8385小時 的多語言印度語和英語數據集上進行訓練,並與微調版本 Indic Parler-TTS 一同發佈。該模型可以支持20種印度語言以及英語,為區域語言技術提供了全面的支持。

🚀 快速開始
本項目提供了一個預訓練的文本轉語音(TTS)模型,支持多種印度語言和英語。以下是使用該模型的基本步驟和示例代碼,幫助你快速上手。
安裝
使用Parler-TTS非常簡單,只需執行以下命令安裝庫:
pip install git+https://github.com/huggingface/parler-tts.git
✨ 主要特性
輸入要求
模型接受兩個主要輸入:
- 文本內容(Transcript):需要轉換為語音的文本。
- 描述信息(Caption):對語音輸出的詳細描述,例如 "Leela以高音調、快速且歡快的語調說話,充滿活力和喜悅。錄音質量非常高,沒有背景噪音。"
關鍵特性
- 語言支持
- 官方支持語言:阿薩姆語、孟加拉語、博多語、多格里語、英語、古吉拉特語、印地語、卡納達語、孔卡尼語、邁蒂利語、馬拉雅拉姆語、曼尼普爾語、馬拉地語、尼泊爾語、奧里亞語、梵語、桑塔利語、信德語、泰米爾語、泰盧固語和烏爾都語。
- 非官方支持語言:恰蒂斯加爾語、克什米爾語、旁遮普語。
- 說話人多樣性
- 支持的語言中共有 69種獨特的語音。
- 每種支持的語言都有一組 推薦語音,這些語音在自然度和清晰度方面進行了優化。
- 情感渲染
- 10種語言 官方支持特定情感的提示:阿薩姆語、孟加拉語、博多語、多格里語、卡納達語、馬拉雅拉姆語、馬拉地語、梵語、尼泊爾語和泰米爾語。
- 其他語言也支持情感表達,但尚未經過廣泛測試。
- 可用情感 包括:命令、憤怒、敘述、對話、厭惡、恐懼、快樂、中性、專有名詞、新聞、悲傷和驚訝。
- 口音靈活性
- 模型通過英語語音 官方支持印度英語口音,提供清晰自然的語音輸出。
- 對於其他口音,模型允許通過指定口音細節進行自定義,例如 "一位英國男性說話者" 或 "一位美國女性說話者",使用風格遷移實現更動態和個性化的輸出。
- 可定製輸出
Indic Parler-TTS預訓練模型通過 描述信息(caption)輸入 提供對各種語音特徵的精確控制:
- 背景噪音:調整音頻中的噪音水平,從清晰環境到略有噪音的環境。
- 混響效果:控制語音的感知距離,從近聽起來的語音到遠聽起來的語音。
- 表現力:指定語音的動態程度或單調程度,從富有表現力到略有表現力或單調。
- 音調:修改語音的音調,包括高音、低音或平衡音調。
- 語速:改變說話速度,從慢速到快速。
- 語音質量:控制語音的整體清晰度和自然度,從基本質量到精緻質量。
💻 使用示例
基礎用法
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-pretrained").to(device)
tokenizer = AutoTokenizer.from_pretrained("ai4bharat/indic-parler-tts-pretrained")
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-pretrained").to(device)
tokenizer = AutoTokenizer.from_pretrained("ai4bharat/indic-parler-tts-pretrained")
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等)。要使用特定的說話人,只需在文本描述中指定即可:
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-pretrained").to(device)
tokenizer = AutoTokenizer.from_pretrained("ai4bharat/indic-parler-tts-pretrained")
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 Pretrained %) | 微調模型母語使用者評分(NSS Finetuned %) | 亮點 |
---|---|---|---|
阿薩姆語 | 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發佈時還附帶了以下資源:
- The Parler-TTS repository - 你可以在其中訓練和微調自己的模型版本。
- The Data-Speech repository - 一套用於標註語音數據集的實用腳本。
- The Parler-TTS organization - 你可以在其中找到標註的數據集以及未來的模型檢查點。
訓練數據集
描述
該模型在內部的 Indic-Parler-Dataset 上進行訓練,這是一個大規模的多語言語音語料庫,旨在訓練 Indic Parler-TTS預訓練模型。它全面覆蓋了24種語言,包括印度的所有22種官方語言以及恰蒂斯加爾語和英語,對於專注於該次大陸的語音技術來說是非常寶貴的資源。
關鍵統計信息
數據集 | 時長(小時) | 覆蓋語言數 | 語句數量 | 許可證 |
---|---|---|---|---|
GLOBE | 535.0 | 1 | 581,725 | CC V1 |
IndicTTS | 382.0 | 12 | 220,606 | CC BY 4.0 |
IndicVoices | 2,651.0 | 22 | 1,121,104 | CC BY 4.0 |
IndicVoices-R | 4,067.0 | 22 | 1,749,066 | CC BY 4.0 |
LIMMITS | 568.0 | 7 | 246,008 | CC BY 4.0 |
Rasa | 288.0 | 9 | 155,734 | CC BY 4.0 |
覆蓋語言
該數據集支持印度的 22種官方語言 以及英語和恰蒂斯加爾語,對於區域語言技術來說非常全面。這些語言包括阿薩姆語、孟加拉語、博多語、恰蒂斯加爾語、多格里語、英語、古吉拉特語、印地語、卡納達語、克什米爾語、孔卡尼語、邁蒂利語、馬拉雅拉姆語、曼尼普爾語、馬拉地語、尼泊爾語、奧里亞語、旁遮普語、梵語、桑塔利語、信德語、泰米爾語、泰盧固語和烏爾都語。
按語言的數據細分
語言 | 時長(小時) | 語句數量 |
---|---|---|
阿薩姆語 | 563.87 | 256,102 |
孟加拉語 | 561.18 | 234,663 |
博多語 | 637.79 | 320,584 |
恰蒂斯加爾語 | 80.11 | 38,148 |
多格里語 | 263.22 | 109,348 |
英語 | 765.56 | 711,196 |
古吉拉特語 | 31.68 | 11,845 |
印地語 | 396.75 | 162,343 |
卡納達語 | 364.26 | 154,994 |
克什米爾語 | 216.17 | 93,343 |
孔卡尼語 | 205.16 | 91,804 |
邁蒂利語 | 473.07 | 197,886 |
馬拉雅拉姆語 | 394.33 | 168,281 |
曼尼普爾語 | 112.47 | 57,068 |
馬拉地語 | 333.32 | 142,925 |
尼泊爾語 | 542.69 | 244,007 |
奧里亞語 | 264.16 | 105,469 |
旁遮普語 | 280.48 | 109,795 |
梵語 | 143.12 | 63,908 |
桑塔利語 | 298.19 | 148,184 |
信德語 | 66.62 | 27,578 |
泰米爾語 | 561.92 | 236,293 |
泰盧固語 | 560.76 | 213,858 |
烏爾都語 | 268.46 | 112,932 |
引用
如果你發現這個倉庫很有用,請考慮引用這項工作以及原始的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、批處理和流式傳輸!
- 包含 "非常清晰的音頻" 一詞以生成最高質量的音頻,包含 "非常嘈雜的音頻" 以生成高背景噪音的音頻。
- 可以使用標點符號來控制生成語音的韻律,例如使用逗號在語音中添加小停頓。
- 其餘的語音特徵(性別、語速、音調、混響)可以直接通過提示進行控制。




