NeMo Speech G2P 实战:基于 ByT5 与 G2P-Conformer 的字素到音素(Grapheme-to-Phoneme)转换模型训练与推理指南
发布时间:2026/9/14 22:40:33 锦皓数字建站
转换模型训练与推理指南`)
NeMo Speech G2P 实战基于 ByT5 与 G2P-Conformer 的字素到音素Grapheme-to-Phoneme转换模型训练与推理指南【免费下载链接】SpeechA scalable generative AI framework built for researchers and developers working on Large Language Models, Multimodal, and Speech AI (Automatic Speech Recognition and Text-to-Speech)项目地址: https://gitcode.com/GitHub_Trending/nem/Speech字素到音素转换Grapheme-to-Phoneme, G2P是 TTS 语音合成链路中决定发音正确性的关键一环。本文以 NeMo Speech 仓库中的 g2p.rst 文档为主体系统讲解两种受支持的 G2P 模型——ByT5 G2P 与 G2P-Conformer CTC——的架构差异、manifest 数据格式、训练 / 评估 / 推理的完整命令行操作以及句子级数据集的自动标注管道。读完本文你将能够基于该仓库独立训练、评测并部署一个可纠正 OOV词表外词与异义词heteronym发音的 G2P 模型并将其接入音素输入的 TTS 流程。为什么 TTS 需要 G2P背景与动机现代 TTS 合成模型虽然可以直接从原始文本与对应音频中学习发音但若在训练时只依赖字素输入模型将无法提供一种可靠的手段来修正错误发音。正因如此许多 TTS 系统在训练阶段就采用音素输入从而在推理阶段能够直接访问并纠正发音。G2P 模型在此扮演的角色是将词表外词Out-of-Vocabulary, OOV——例如专有名词、外来词——以及**异义词heteronym**转换为其音素形式以提升合成文本的质量。其中异义词指拼写相同但发音不同的词例如I willreadthe book.读作 /riːd/Shereadher project last week.读作 /rɛd/一个能够同时处理 OOV 与异义词、并替代字典查询的单一模型可以显著简化 TTS 流程并提升合成语音的质量。文档中给出的典型示例为Swifts, flushed from chimneys … → ˈswɪfts, ˈfɫəʃt ˈfɹəm ˈtʃɪmniz …。两种受支持模型的架构对比仓库的 G2P 实现位于 nemo/collections/tts/g2p/models/子目录下同时包含面向不同语言场景的派生实现如en_us_arpabet.py、i18n_ipa.py、ja_jp_ipa.py、zh_cn_pinyin.py本文聚焦文档主线上的两个训练型模型ByT5 G2P文本到文本模型ByT5 G2P 是一个基于 ByT5 架构的 text-to-text 模型。从其源码 nemo/collections/tts/g2p/models/t5.py 可见模型在__init__中通过AutoTokenizer.from_pretrained与T5ForConditionalGeneration.from_pretrained从 Hugging Face 加载预训练权重forward直接透传 T5 的条件生成损失# nemo/collections/tts/g2p/models/t5.py self.model_name cfg.model_name self._tokenizer AutoTokenizer.from_pretrained(self.model_name) ... self.model T5ForConditionalGeneration.from_pretrained(self.model_name) typecheck() def forward(self, input_ids, attention_mask, labels): outputs self.model(input_idsinput_ids, attention_maskattention_mask, labelslabels) return outputs.loss配置项model_name支持google/byt5-small/base/large/xl或t5-small/base/large/3b/11b系列。G2P-Conformer CTC非自回归 CTC 模型G2P-Conformer 采用 Conformer 编码器源码见 nemo/collections/tts/g2p/models/ctc.py后接线性解码器并以 CTC 损失训练。文档明确说明G2P-Conformer 的参数数量约为 ByT5 模型的 1/20且为非自回归模型推理速度更快。其配置中编码器直接复用 ASR 集合的nemo.collections.asr.modules.ConformerEncoder解码器复用nemo.collections.asr.modules.ConvASRDecoder——这正是文档Requirements一节要求安装 ASR collection 的原因。数据格式Manifest 规范两种模型的训练输入均为.jsonmanifest 格式且需要独立的训练集与验证集 manifest。每行格式如下{text_graphemes: Swifts, flushed from chimneys., text: ˈswɪfts, ˈfɫəʃt ˈfɹəm ˈtʃɪmniz.}字段说明字段含义textmanifest 中真实音素ground truth phonemes所在字段名text_graphemesmanifest 中输入字素文本grapheme text所在字段名模型可以处理带或不带标点符号的输入。训练 / 验证 / 测试三个数据集的字段名统一由配置中的phoneme_field: text与grapheme_field: text_graphemes指定。训练与端到端评估统一入口脚本为 examples/tts/g2p/g2p_train_and_evaluate.py。其内部通过配置中的name字段决定实例化哪个模型——get_model定义于 examples/tts/g2p/utils.py中T5G2P对应T5G2PModelG2P-Conformer-CTC对应CTCG2PModel其他名称直接抛出ValueError。脚本支持do_training与do_testing两个开关当do_testingTrue且do_trainingFalse时会从pretrained_model指定的.nemo文件或模型名恢复权重进行测试。注意评估 / 测试阶段建议构建单 GPU、无 DDP 的 Trainer 以获得准确结果脚本源码中亦有此注释。训练 ByT5 G2P 模型python examples/tts/g2p/g2p_train_and_evaluate.py \ # (可选: --config-path配置目录 --config-name不含 .yaml 的配置名) \ model.train_ds.manifest_filepath训练 manifest 路径 \ model.validation_ds.manifest_filepath验证 manifest 路径 \ model.test_ds.manifest_filepath测试 manifest 路径 \ trainer.devices1 \ do_trainingTrue \ do_testingTrue对应配置文件为 examples/tts/g2p/conf/g2p_t5.yaml。其关键参数model.model_namegoogle/byt5-small可换为google/byt5-base/large/xl或t5-small/base/large/3b/11bmodel.max_source_len: 256、model.max_target_len: 512输入 / 输出序列最大长度model.do_lower: false是否将字素小写化数据集nemo.collections.tts.g2p.data.t5.T5G2PDatasetbatch_size: 20、num_workers: 4优化器AdamWlr: 2e-4、weight_decay: 0.01调度器WarmupAnnealingwarmup_ratio: 0.1并以val_token_precision作为监控指标检查点exp_manager.checkpoint_callback_params中monitor: val_per、mode: min、save_top_k: 1、save_best_model: true。训练 G2P-Conformer 模型python examples/tts/g2p/g2p_train_and_evaluate.py \ # (可选: --config-path配置目录 --config-name不含 .yaml 的配置名) \ model.train_ds.manifest_filepath训练 manifest 路径 \ model.validation_ds.manifest_filepath验证 manifest 路径 \ model.test_ds.manifest_filepath测试 manifest 路径 \ model.tokenizer.dir预训练 tokenizer 目录 \ model.tokenizer_grapheme.do_lowerFalse \ model.tokenizer_grapheme.add_punctuationTrue \ trainer.devices1 \ do_trainingTrue \ do_testingTrue对应配置文件为 examples/tts/g2p/conf/g2p_conformer_ctc.yaml。其关键参数model.model_name: conformer_bpe、model.max_source_len: 512字素 tokenizernemo.collections.common.tokenizers.char_tokenizer.CharTokenizer其中unk_token: ҂训练期间用于掩蔽 OOV 的特殊符号do_lower: true、add_punctuation: true决定是否小写化与是否加入标点符号音素 tokenizermodel.tokenizer.dir指向包含tokenizer.modelBPE或vocab.txtWPE的目录model.tokenizer.type: bpe训练时vocab_file与num_classes等字段会被自动填充嵌入与编码器embedding.d_model: 300ConformerEncoder配置为n_layers: 16、d_model: 176、ff_expansion_factor: 4、self_attention_model: rel_pos、n_heads: 4、att_context_size: [-1, -1]无限上下文、conv_kernel_size: 31、conv_norm_type: batch_norm、各模块dropout: 0.1数据集nemo.collections.tts.g2p.data.ctc.CTCG2PBPEDatasetbatch_size: 32优化器AdamWlr: 2.0、betas: [0.9, 0.98]、weight_decay: 1e-3调度器NoamAnnealingwarmup_steps: 10000、min_lr: 1e-6检查点监控同样为val_per最小化。使用预训练模型进行评估若要直接评估一个已训练好的 G2P 模型.nemo文件或G2PModel.list_available_models()中的模型名运行python examples/tts/g2p/g2p_train_and_evaluate.py \ # (可选: --config-path配置目录 --config-name不含 .yaml 的配置名) \ pretrained_model.nemo 文件路径或 list_available_models() 中的模型名 \ model.test_ds.manifest_filepath测试 manifest 路径 \ trainer.devices1 \ do_trainingFalse \ do_testingTrue脚本会通过restore_from本地.nemo或from_pretrained模型名恢复模型再调用setup_multiple_test_data与trainer.test完成评测。推理g2p_inference.py 与底层调用使用 examples/tts/g2p/g2p_inference.py 可对任意 manifest 批量推理python examples/tts/g2p/g2p_inference.py \ pretrained_model.nemo 文件路径或 list_available_models() 中的 G2PModel 模型名 \ manifest_filepath输入 .json manifest 路径 \ output_file保存预测结果的 .json manifest 路径 \ batch_size32 \ num_workers4 \ pred_fieldpred_text预测结果会写入output_file的pred_field字段中。脚本的几个实用行为output_file缺省时自动生成将输入 manifest 文件名的.json替换为_phonemes.json若额外传入phoneme_field推理完成后会自动调用 examples/tts/g2p/utils.py 中的get_metrics打印 PER / WER 指标pretrained_model既可以是本地.nemo路径走restore_from也可以是模型名走from_pretrained否则抛错并列出可选模型。底层推理由基类G2PModel.convert_graphemes_to_phonemes完成nemo/collections/tts/models/base.py该方法在torch.no_grad()下按grapheme_field读取 manifest以指定batch_size/num_workers构造 DataLoader 并调用_infer最后将每条预测写回原行的pred_field字段并落盘为新的 manifest。评估指标PER 与 WERget_metrics对输出 manifest 计算两类指标见 examples/tts/g2p/utils.pyPER音素错误率通过word_error_rate(..., use_cerTrue)计算WER词错误率通过word_error_rate(...)计算。对于同一字素条目对应多个参考音素的重复样本异义词评测中的常见情况脚本会保留与该条预测 PER 最低的那一行用于统计其余重复行被剔除从而以最佳匹配的方式评估异义词消解能力。句子级数据集准备管道上述模型支持单词级与句子级两种输入。若以句子级输入训练模型可以在单次前向中同时处理 OOV、异义词与无歧义词汇。原文档给出如下数据标注流程总览完整的自动音素标注流程分为三步字典查表将已知无歧义词汇通过字典如 CMU 字典查询转换为音素发音异义词自动消解使用预训练 Aligner 模型自动标注异义词的读音。仓库中提供了异义词消解脚本 examples/tts/aligner_heteronym_disambiguation.py以及对齐器 examples/tts/aligner.py可据此对同形异义词按上下文选择正确发音OOV 掩蔽将词表外词用特殊掩蔽 token 替换。数据管道图中以unk示意而在 G2P 模型训练配置中实际使用的是model.tokenizer_grapheme.unk_token҂这一特殊符号。这一强制掩蔽训练机制的语义在于训练时该未知 token 迫使模型输出同样的掩蔽 token 作为其音素表示而在推理阶段只要字素输入中不包含该 token模型就会为 OOV 词生成真实的音素预测从而实现对未见词的泛化。相关实现与测试可在 nemo/collections/tts/g2p/data/ 与 tests/collections/tts/g2p/如test_modules.py、data/test_g2p_data_utils.py中进一步查阅。安装要求G2P 依赖 NeMo ASR collection 中的组件例如 G2P-Conformer 复用的ConformerEncoder与ConvASRDecoder以及指标计算模块nemo.collections.asr.metrics.wer。因此安装 NeMo Speech 时需包含asrextra即pip install nemo_toolkit[asr]一类方式详见仓库文档 docs/source/index.rst 中的安装指引。更多资源从示例到源码若希望进一步深入可按如下路径在仓库中继续探索示例与配置examples/tts/g2p/g2p_train_and_evaluate.py、examples/tts/g2p/g2p_inference.py、examples/tts/g2p/conf/g2p_t5.yaml、examples/tts/g2p/conf/g2p_conformer_ctc.yaml模型实现nemo/collections/tts/g2p/models/t5.py、nemo/collections/tts/g2p/models/ctc.py、nemo/collections/tts/models/base.py数据集实现nemo/collections/tts/g2p/data/t5.py、nemo/collections/tts/g2p/data/ctc.py指标与工具examples/tts/g2p/utils.py测试用例tests/collections/tts/g2p/test_modules.py、tests/collections/tts/g2p/data/test_g2p_data_utils.py。将 G2P 输出接入 TTS 时可参考 FastPitch 等模型对音素输入的支持nemo/collections/tts/models/fastpitch.py形成文本 → 音素 → 语音的完整可控合成链路。【免费下载链接】SpeechA scalable generative AI framework built for researchers and developers working on Large Language Models, Multimodal, and Speech AI (Automatic Speech Recognition and Text-to-Speech)项目地址: https://gitcode.com/GitHub_Trending/nem/Speech创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。