G2P 缩小语音模型

社区文章 发布于 2025 年 2 月 5 日

背景

字素 (Graphemes) 是书写系统的单位(例如,英语中的字母)。音素 (Phonemes) 是独特的发音单位。

G2P (Grapheme-to-Phoneme) 是将字素转换为音素的问题,通常以多对多、语言特定的方式进行。一个字素字符串可以匹配多个音素字符串。

  • 你能替我再读一遍 (reread) 吗:reread => /ɹiɹˈid/ (re-REED)
  • 是的,我替你再读了一遍 (reread)reread => /ɹiɹˈɛd/ (re-RED)
  • 我们再读一遍 (reread)reread => /ɹˈiɹid/ (RE-reed)

多个字素字符串可以匹配相同的音素字符串,例如 cereal, serialate, eight

为了本次讨论的目的:文本模型生成文本,图像模型生成图像,视频模型生成视频,音频模型生成音频。语音模型是音频模型的一个子类型。

generative_models/
├── text/
│   ├── GPT
│   └── ...
├── image/
├── video/
├── ...
└── audio/
    ├── speech/
    │   ├── Kokoro-82M
    │   └── ...
    ├── music/
    ├── sfx/
    └── ...

G2P 压缩假说

假说:G2P 输入预处理能够压缩语音模型,无论是模型大小还是数据集大小。换句话说,如果您在将文本传递给 TTS 模型之前对其进行 G2P 处理,您应该能够以更少的参数和更少的数据获得可比的 Elo 评分。后者是一个推论,因为众所周知,更大的模型对数据需求更大。

这一理解基于我自己的经验观察和体验——我没有消融表可以展示给您。这也很可能不是一个新颖的观察,对许多研究人员来说可能显而易见。

您的数据熵越低,您的模型在达到某些目标性能的同时可以越小。即使是一个微小的数字分类器也能在 MNIST 上获得 99% 的性能。一个性能相似的猫狗图像分类器——其中猫狗可以面向任何方向——将需要大得多。

使用音素而不是原始文本作为输入,大大降低了 TTS 问题的输入熵。

重量级:数十亿参数

进行端到端字素输入、音频输出的语音模型,隐式地将其一部分参数专门用于 G2P。通常,此类模型从学习到的码本中预测潜在音频标记,具有相对较大的参数数量和相应的训练数据集。

长尾鹦鹉 (Parakeet)

例如,Darefsky 等人于 2024 年年中描述的 Parakeet 模型,训练了一个“30 亿参数的编码器-解码器 Transformer 模型”,使用了“约 10 万小时的音频-转录对数据集”,因此展现出卓越的自然度,以及发出笑声、咳嗽等声音的能力。Parakeet 预测潜在标记时“以原始文本为条件”,因此不涉及显式 G2P 预处理。两点旁白:

  • 在机器学习中,一分钱一分货,而模型的参数数量(在很多方面)就是它的价格。
  • 由于 Parakeet 是在播客上训练的,它的一些样本听起来与 NotebookLM 的性质相似。这纯属猜测,但如果 NotebookLM 使用类似的 Transformer+码本方法,我不会感到惊讶,尽管我猜测为了成本效益,它的规模会更小。无论是 Parakeet 还是 NotebookLM 都不是第一个使用这种方法的产品。

拉萨 (Llasa)

Llasa 是一个文本转语音(TTS)系统,它通过整合来自 XCodec2 码本(包含 65,536 个标记)的语音标记来扩展基于文本的 LLaMA(1B、3B 和 8B)语言模型。Llasa 在一个包含 250,000 小时中英文语音数据的数据集上进行了训练。该模型能够仅根据输入文本或利用给定语音提示生成语音。

https://huggingface.co/HKUST-Audio/Llasa-3B

与 XCodec2 码本中的 65k 个标记相比,G2P 预处理后您可能只有几十个音素。

轻量级:数百万参数

那么,如果 Transformer 可以在模型内部通过神经网络解决 G2P 问题,为什么还要在输入端进行 G2P 预处理呢?正如假设中所述:模型压缩。

如果 Parakeet (3B) 代表了 TTS 模型的重量级,那么 Piper 则属于轻量级。一个 Piper 模型拥有 500 万到 3200 万参数,采用 VITS 架构,并以 espeak-ng 音素作为输入,快速生成语音,尽管质量相对较低,但对于如此小的模型来说是预期的。Parakeet 和 Piper 模型的参数数量相差 2-3 个数量级,即 100-1000 倍。

G2P 类型:查找、规则和神经网络

G2P 是实现从重量级到轻量级语音模型(可能存在损耗)压缩的因素之一。值得注意的 G2P 类别包括:

  • CMUdict 这样的发音词典简单但脆弱。如果你的词典完美且发音与上下文无关,那么任何词典匹配都应该是完美的,但词典未命中或上下文相关的发音则需要更复杂的 G2P 解决方案。
  • espeak-ng 是一个基于规则的 G2P 引擎,其 README 中写道:“体积小巧。程序及其数据,包括多种语言,总计约几兆字节。” 基于规则的 G2P 仍然很快,但可能因规则覆盖不足(例如缺少货币或时间的正则表达式)或规则存在例外(罕见/外来词)而失败。
  • 理论上,神经 G2P 的泛化能力应远优于上述两种方法,但通常运行成本更高,并且像其他使用 softmax 的 Transformer 应用一样,可能会以不透明的方式产生幻觉。

我目前正在开发一种名为 Misaki 的混合 G2P 解决方案,它从查找表和一些非常基本的英语规则开始。对于超出词汇的单词,它会回退到可配置的“庄家选择”,这可能是一个基于规则的系统(如 espeak-ng),或者一个神经 seq2seq 模型。在某些特定情况下,例如英语同形异义词 axes bass bow lead tear,G2P 应该升级到神经网络(仍待完成)。希望这种混合解决方案能在速度和性能之间取得良好平衡,同时保持灵活性和可解释性。在这种机制下,G2P 失败不再是某种黑箱无法解释的幻觉,而更像是“它只是不在词典中”。

G2P 不是免费的午餐

就像臭名昭著的草莓分词盲点一样,如果您进行显式 G2P 预处理,那么任何上游的 G2P 细微差别和错误都将对下游产生负面影响,您的语音模型可能无法从中恢复。此外,除非您能找到一种有效的 G2P 方案来处理笑声/咳嗽/叹息等,或者通过其他方式(可能是扩散模型)来模拟这些声音,否则纯粹基于 G2P 的语音模型不太可能像端到端语音模型那样表达清晰和有效。

如果您的 G2P 是神经网络的,您必须在语音模型之前增加神经网络 G2P 的时间和计算成本,这会增加延迟。

到目前为止,我发现 G2P 是一项针对不同语言的任务。拥有一个英语 G2P 引擎并不意味着您也能很好地处理中文 G2P。

脚注

这篇文章缺乏学术论文的严谨性,但它基于实践经验。G2P 假说完全有可能落入“痛苦的教训”。即便没有,改进的硬件和新架构也可能意味着,如果人们能够在未来的手机上以几乎零延迟运行今天的 B 参数语音模型,那么最终,没有人会真正关心 M 参数语音模型,就像现在没有人真正关心教育之外的 K 参数语言模型一样。

但“最终”还没有到来。我怀疑 M 参数语音模型在至少近期内仍将具有相关性。

本文是对“Kokoro TTS 参数如此之少却表现如此出色”这一问题的一个潜在答案。

kokoro

社区

非常好的解释!

很棒,干得好

谢谢分享

对于为低资源语言制作高效的文本转语音模型,这是一个坚实的成果。

喜欢这个解释

比学术论文更容易理解

注意到“live”这个词存在问题,所以我期待你提到的同音异义词神经网络增强。

如果需要任何帮助,请告诉我

注册登录 发表评论