模型简介
模型特点
模型能力
使用案例
🚀 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、批处理和流式传输!
- 包含 "非常清晰的音频" 一词以生成最高质量的音频,包含 "非常嘈杂的音频" 以生成高背景噪音的音频。
- 可以使用标点符号来控制生成语音的韵律,例如使用逗号在语音中添加小停顿。
- 其余的语音特征(性别、语速、音调、混响)可以直接通过提示进行控制。




