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




