GPT-SoVITS 闽南语 TTS 踩坑全记录

发布时间:2026/7/3 2:49:29
GPT-SoVITS 闽南语 TTS 踩坑全记录 GPT-SoVITS 闽南语 TTS 踩坑全记录deepseek生成 背景试图在 GPT-SoVITS 中加入闽南语台语支持最终发现这条路比想象中复杂得多。本文记录了从零开始尝试的所有坑。️ 踩坑全记录按时间顺序坑 1盲目复制粤语方案时间第一天现象粤语能加音素为什么闽南语不行照着粤语的方式改symbols2.py添加min_symbols。真相粤语有现成的预训练模型支持闽南语没有。GPT-SoVITS 的预训练模型音素表是固定的732个添加新音素后变成 2966 个和预训练模型不兼容。教训不同语言的集成方案不能直接复制需要确认预训练模型是否支持。坑 2text_normalize把声调数字转成中文时间数据处理阶段现象taibun输出的 TLPA 是Gua2 cit8 miau2经过text_normalize后变成Gua二 cit八 miau二。原因TextNormalizer()会把数字转成中文2→二8→八这对中文是好事但对 TLPA 是灾难。教训闽南语的text_normalize只能做标点替换不能调用通用的TextNormalizer。坑 3assert len(norm_text) len(word2ph)断言失败时间训练数据准备阶段现象大量数据被跳过2-name2text.txt里只有几十条。原因norm_text是 TLPA 字符串Li2 ho2长度 6word2ph是[2, 2]长度 2。6 ≠ 2断言失败数据被丢弃。教训这个断言只对「汉字输入」有效对「拼音输入」会误判。坑 4min_symbols包含 4000 无用音素时间构建音素表阶段现象从taibun词库直接导入了 4000 音素包含大量无关内容英文单词、汉字、缩写。真相音素表应该从训练数据中提取而不是从词库中导入。训练数据只有 3000 句实际音素只有 500-800 个。教训音素表要「数据驱动」不要「词典驱动」。坑 5拆分声母韵母导致 UNK时间测试阶段现象python min.py测试正常但训练时出现大量UNK。真相测试不检查音素表训练会检查。min.py把Li2拆成[L, i2]但音素表里只有YLi2没有YL和Yi2。教训对 GPT-SoVITS不拆分声母韵母直接用完整音节作为音素。坑 6v2Pro和symbols2.py不兼容时间训练前夜现象size mismatch for enc_p.text_embedding.weight: copying a param with shape torch.Size([732, 192]) from checkpoint, the shape in current model is torch.Size([2966, 192]).真相v2Pro的预训练模型是用 732 个音素训练的但symbols2.py加了min_symbols后有 2966 个。教训要么放弃min_symbols用 732 音素要么放弃预训练模型从头训练。坑 7训练数据应该是拼音还是汉字时间数据处理阶段现象标注文件里写的是Hit4 ho7 ……拼音但训练时g2p又把拼音当汉字处理。真相GPT-SoVITS 的cleaner.py会根据语言调用对应的g2p。如果g2p内部又调用taibun转换就会把 TLPA 当作汉字二次转换。教训明确区分「训练输入是什么」和「推理输入是什么」。坑 8inp_wav_dir路径设置错误时间数据预处理阶段现象找不到音频文件1-get-text.py报错。真相list文件里写的是ImTong/SuiSiann_0001.wav如果inp_wav_dir填了/root/.../ImTong/系统会找/root/.../ImTong/ImTong/SuiSiann_0001.wav。教训inp_wav_dir应该指向list中路径的上级目录。坑 9BERT特征缺失时间数据处理阶段现象3-bert/*.pt文件没有生成。真相1-get-text.py里只对zh提取 BERT 特征。闽南语没有 BERT 模型所以跳过。教训BERT 特征对 TTS 有帮助但不是必须的闽南语可以跳过。坑 10taibun库安装位置不对时间刚开始现象ModuleNotFoundError: No module named taibun真相WebUI 运行在GPTSoVitsconda 环境中但taibun装在了 base 或其他环境里。教训确认运行环境在正确的位置安装依赖。 核心结论问题结论闽南语能否加入 GPT-SoVITS✅ 能但有代价要用预训练模型吗用 → 只能 732 音素不用 → 可以自定义音素但需要大量数据最小可行方案732 音素 预训练模型 → 快速出声音发音不纯最优方案收集至少 100 小时闽南语数据 → 从头训练 2966 音素模型 → 发音准确8 小时数据够吗够跑通流程效果一般 给后来者的建议先跑通再优化先用 732 音素跑一个模型听到声音再决定要不要深入音素表从数据生成不要从taibun词库导入从训练数据中提取不要拆分声母韵母直接用完整音节作为音素text_normalize只做标点替换不要调用TextNormalizer确认版本兼容性v2Pro不支持自定义音素表用v2或v4准备好数据标注wav_name|speaker|language|textlanguage必须匹配 最终结论在 GPT-SoVITS 中加入闽南语最核心的问题是预训练模型的音素表是固定的732个。要自定义音素必须从头训练而从头训练需要海量数据和算力。如果你只有几小时的数据用 732 音素 预训练模型是唯一现实的选择。记录时间2026年7月2日