在本文中,将探讨多语言多说话者语音合成(TTS)模型的工作原理,并测试一个支持9种印度语言和17个说话者的模型。这种模型能够处理多种语言和说话者,尽管每种印度语言都有其独特的字母表,但将看到它是如何实现的。此外,将列出这些模型的规格,比如支持的采样率,并尝试一些有趣的实验——让不同印度语言的说话者说印地语。如果是这些语言的母语者,请分享对这些声音的看法,无论是在他们各自的语言中还是在印地语中。
文本到语音(TTS)是一个广泛的主题,但需要对其工作原理有一个基本的了解,或者了解其主要组成部分。与依赖特定语言信息作为输入的传统TTS模型不同,现代TTS模型通常使用文本或音素作为输入。大多数现代TTS系统的主要组成部分(即使是更新的全端到端模型,内部也有类似的组成部分)包括:文本预处理模块和清理以及某种形式的文本到音素转录、转录或音译;一个声学模型;一个声码器。现代TTS模型通常依赖于策划的字形或音素作为输入。这个输入然后被传递到一个嵌入层,该层将这个字母表映射到一组张量。通常,Mel频谱图被选作声学模型和声码器的建模单位。简单地说,声学模型将输入文本嵌入转换为Mel频谱图,声码器将其转换为实际的音频。
对于声码器和声学模型,有各种各样的方法和架构(请参阅下面的论文以获得全面的回顾),但这超出了本文的范围。每种印度语言都有自己的字母表,基本上,有两种方式可以将它们组合成一个统一的模型(当然,也可以训练几个不同的模型):使用某种音译或转录方案;将字母表组合在一起并增加嵌入的数量。第二种方法有点问题,因为在使用这种方法的密切相关的语言中,音素非常相似,可能会损害模型的泛化和收敛。此外,每个说话者都应该有自己的嵌入。至于语言——如果说话者的数量不比语言的数量大得多,那么包含语言嵌入是没有意义的。
秘诀在于模型使用ISO罗马化技术,这些技术得到了广泛使用的aksharamukha工具及其Python包的支持。这个过程是音译(不是转录),有些语言的字母有不同的声音,但这足够有效,正如将看到的。要使用这个工具处理所有这些语言,例如使用Python,需要:每种语言的罗马化函数。将输入文本转换为ISO后,现在可以尝试模型。
import torch
from aksharamukha import transliterate
model, example_text = torch.hub.load(repo_or_dir='snakers4/silero-models',
model='silero_tts',
language='indic',
speaker='v3_indic')
orig_text = "प्रसिद्द कबीर अध्येता, पुरुषोत्तम अग्रवाल का यह शोध आलेख, उस रामानंद की खोज करता है"
roman_text = transliterate.process('Devanagari', 'ISO', orig_text)
print(roman_text)
audio = model.apply_tts(roman_text,
speaker='hindi_male')
生成的音频是一个包含48 kHz(默认采样率)音频的PyTorch张量。当然,也提供较低的采样率。罗马化是一个无损过程,对于尝试的大多数文本,可以使用aksharamukha工具来回音译,没有任何错误。
经过一些调整、刺激和测试,可以看到模型:可以生成8000、24000或48000 kHz采样率的音频;在CPU和GPU上都能工作。即使在没有AVX2指令的旧和过时的x86 CPU上也能工作;所有说话者和语言的重量约为50 MB(真的!);如果正确地测量1和4个CPU线程上的模型速度(结果表明增加6个或更多的线程并没有太大帮助),可以看到它相当快(测量了每秒生成的音频秒数):
采样率 | 1个CPU线程 | 4个CPU线程 |
---|---|---|
8 kHz | 15 — 25 | 30 — 60 |
24 kHz | 10 | 15 — 20 |
48 kHz | 5 | 10 |
该模型还支持SSML标记,但对某些标签仍然有点问题。
现在让为每种语言生成一些音频样本并听听它们:[音频样本链接]
不是这些语言的母语者,无法评估语音质量,但就TTS模型而言,大多数这些说话者听起来还可以。最明显的问题可以追溯到源材料——大多数说话速度慢和音频质量(一些音频嘈杂或从较低质量上采样)。
请了一位来自印度的母语者(他说印地语、泰卢固语、泰米尔语,并且在一定程度上理解马拉雅拉姆语、孟加拉语、卡纳达语和古吉拉特语)来评估轶事质量,这是他的回复:
印地语。发音准确。听起来有点机械(像逐句读出),可能是因为数据集中的说话者就是这样说的;泰卢固语。完美。自然流畅,发音准确;泰米尔语。如果为单个句子生成,输出可能更平滑。尽管如此,仍然很好;马拉雅拉姆语。停顿和措辞听起来有点不舒服。女性输出更好,可能是因为速度稍快;孟加拉语。很好。女性样本完美;卡纳达语。男性样本完美。女性的停顿尴尬;古吉拉特语——看起来太机械了;