数据资产全解析:从 Hangul 词表 G2P 到 MeloTTS 风格 Piper 语音合成)
moonshine-tts 韩语ko数据资产全解析从 Hangul 词表 G2P 到 MeloTTS 风格 Piper 语音合成【免费下载链接】moonshineVery low latency speech to text, intent recognition, and text to speech, for building voice agents and interfaces项目地址: https://gitcode.com/GitHub_Trending/moonshine3/moonshine本文围绕 moonshine-tts 的韩语数据包core/moonshine-tts/data/ko/README.md展开系统讲解韩语发音G2P所需的dict.tsv词表与ko_KR-melotts-mediumPiper 语音模型的格式、来源与重建流程。读完本文你将掌握韩语 TTS 在 C 运行时中的完整数据依赖、ORT 权重拆分与 int8 打包原理并能亲手重现或替换这套韩语资产。数据包概览一份自包含的韩语运行时依赖在 moonshine-tts 中每种语言对应 core/moonshine-tts/data 下的一个独立子目录C 的moonshine-ttsTTS与moonshine-tts-g2p仅 G2P两个 CLI 都通过统一的--model-root指向这些目录。韩语包data/ko/只包含两类核心资产资产作用dict.tsvHangul 词 → IPA首尔标准音系经归一化供 CKoreanRuleG2p使用词表 内部 Hangul 规则管道piper-voices/ko_KR-melotts-medium.model.ort.weights.ort.onnx.jsonPiper VITS22.05 kHzmedium语音模型基于 MeloTTS 风格合成韩语训练供 CPiperTTS--lang ko、moonshine_ttsPiper 回退以及 Pythonspeak.py --engine piper --lang ko使用与其它语言包一致韩语的模型二进制不直接入库Binaries are not checked into git。离线构建或测试前需从 CDN或 Hugging Face 归档镜像拉取# 在仓库根目录执行 scripts/fetch-voice-assets.sh tts运行时 SDK 会按需从https://download.moonshine.ai/tts/下载同一批文件维护者本地编辑数据树后用 scripts/upload-tts-assets.sh 发布更新。dict.tsv韩语词表 G2P 的基石dict.tsv是韩语发音链路中唯一必须的数据文件。它以制表符分隔每行形如Hangul词\tIPA来源是 open-dict-data/ipa-dict 的data/ko.txtMIT 协议。C 侧的加载与归一化KoreanRuleG2p的词典加载逻辑位于 korean.cpp逐行读取跳过空行与#注释行按\t切分表面形式surf与 IPA 值表面形式经 UTF-8 NFC 归一化后作为键存入unordered_mapIPA 值则先通过normalize_korean_ipa归一化再入库重复键保留首个。若dict.tsv不存在或无法打开构造函数直接抛出runtime_errorkorean.cpp可见该词表对韩语 TTS 是硬性依赖。归一化管道从词典 IPA 到 Piper 音素表normalize_korean_ipakorean.cpp是一段非常讲究的字符串规整管道核心目标是把 ipa-dict 的宽式 IPA 映射到 Piper 韩语声码器可用的音素表。关键步骤包括保护紧音与不送气尾音先用哨兵字符临时保护k͈/t͈/p͈/s͈紧音U0348与k̚/t̚/p̚不送气塞音尾U031A避免后续浊化规则误伤——紧音在 Piper 中保持清音连字塞擦音归一t͡ʃh、t͡ɕʰ、d͡ʑʰ等统一到tʃheSpeak 惯例的送气塞擦音t͡ɕ、d͡ʑ、ts等按 Piper 音素表保留送气与清化处理sʰ → s、ɕʰ → tʃh、ʰ → h音素表外音素映射ɭ → ɫ、ɰ → ɯ、ɲ → n、β → b、ɦ → h、ç → h、ɟ → tʃ、ʝ → j、ɸ → h、ø → we、ɘ → ʌ、c → tɕ并移除 UFFFD 替换字符与长度记号ːPiper 声码器不区分元音长度韩语 ㅏ 特化最后一步把a → ɐ近开央元音这与 Piper 韩语声码器的约定一致且必须在其它替换之后执行以避免破坏多字节序列松音浊化仅词表条目voice_lenistrue时执行k→ɡ、p→b、t→d但先保护kh/ph/th及各类塞擦音规则管道输出因已自带正确浊化调用时传false见 korean.cpp。测试用例korean-rule-g2p-test.cpp直接断言了这些行为例如ˈɘːp̚t͈a̠ → ˈʌptɐɘ→ʌ、ː 移除、附标剥离、a→ɐ、kuŋmuɭ → ɡuŋmuɫɭ→ɫ、k→ɡ 松音浊化。查词与规则回退G2P 的完整决策路径g2p_single_fragmentkorean.cpp描述了一个片段的完整发音决策链先 NFC 归一化 → 整词查词表 → 若失败抽取纯 Hangul 部分再查 → 仍未命中则走内部 Hangul 规则管道g2p_hangul_rules_only。规则管道内部先做音节切分text_to_syllables再应用连音apply_linking如 닭이 → dˈɐɫqi末尾 ㄱ 作下一音节声母与边音化apply_lateralization如 ㄹ 在特定环境变为 ɫ最后生成带声调重音记号的 IPA。text_to_ipakorean.cpp还会做重音位置修正Piper ko_KR 声码器约定重音ˈ放在声母之后、元音核之前如ɡˈɯ而非ˈɡɯ并且要跨过w/j滑音直接放在元音前wɐ → wˈɐ、jʌ → jˈʌ。此外韩语 G2P 内建了数字展开能力korean-numbers.cppASCII 数字串按汉字数词读法展开如1,234 → 천이백삼십사、3.14 → 삼점일사、-10 → 마이너스 십、007 → 영영칠测试见 korean-rule-g2p-test.cpp可通过expand_cardinal_digits选项关闭。方言解析与 CLI 使用dialect_resolves_to_korean_ruleskorean.cpp接受ko、ko-KR、ko_kr、korean等方言 IDMoonshineG2P以ko初始化时即路由到KoreanRuleG2p纯规则 词表无 ONNX见测试 korean-rule-g2p-test.cpp。仓库自带韩语 G2P 命令行工具 korean-rule-g2p-cli.cpp用法如下# 默认词表 data/ko/dict.tsv默认音节分隔符 . korean-rule-g2p-cli 안녕하세요 # 显式指定词表、自定义分隔符、关闭数字展开 korean-rule-g2p-cli --dict data/ko/dict.tsv --sep . --no-expand-digits 42 # 从 stdin 读取 echo 여보세요 | korean-rule-g2p-cli --stdinko_KR-melotts-mediumMeloTTS 风格韩语 Piper 语音韩语语音模型ko_KR-melotts-medium是一个Piper VITS22.05 kHz、medium 规模检查点使用 MeloTTS 风格的合成韩语数据训练或续训。一个必须澄清的命名误区ko_KR-melotts-medium.onnx并不是 MeloTTS 模型本身而是用piper_train训练、导出到 ONNX Runtime 的 Piper VITS 检查点只是数据风格来自 MeloTTS 合成语音。.onnx.jsonsidecar 保存 Piper 元数据phoneme_id_map、采样率、推理 scales 等。MeloTTSMIT 协议MyShell 出品在这里扮演的角色是快速开源参考合成器——在构建 Piper 风格数据集时用它引导合成语音或风格目标。ORT 格式int8 权重拆分对韩语语音以 ORT 格式发布为拆分对ko_KR-melotts-medium.model.ortko_KR-melotts-medium.weights.ort。这与 core/moonshine-tts/data/README.md 中描述的布局一致权重放在第二个模型中使反量化dequantize在加载时只运行一次而非每次推理都跑同时避免把权重折叠成 float32 带来的约 4 倍体积增长具体拆分见 scripts/split-model-weights.py权重为int8 打包经onnx-shrink-ray处理见下文无论模型文件叫什么名字JSON sidecar始终保留.onnx.json文件名原始.onnx不再入库但仍保留在 CDNhttps://download.moonshine.ai/tts/ko/piper-voices/ko_KR-melotts-medium.onnx需要重跑转换或与上游piper-tts对比时可从 CDN 获取。补充在完整发布形态下每个 Piper 语音还会被切成*.upstream.*音素 → 声学帧与*.generator.*帧 → 音频两段由 scripts/build-piper-stages.py 驱动只有逐样本复现官方模型的版本才会安装生成器支持按帧区间取帧从而在整句合成完成前就开始播放。使用入口韩语语音在 C 侧由PiperTTS加载采样率 22050见 piper-tts.cpp 中native_sample_rate 22050的读取逻辑通过--lang ko选择moonshine_tts的 Piper 回退路径与 Pythonspeak.py --engine piper --lang ko也走同一套资产。从 MeloTTS 检查点重新导出韩语 ONNX如果需要重建或更新韩语语音模型仓库文档给出了完整的两段式流程。第一步导出 ONNX使用训练脚本training/piper_korean/export_melotts_checkpoint_to_cpp.sh位于父仓库它会写出data/ko/piper-voices/ko_KR-melotts-medium.onnx JSON并刷新data/ko/piper-voices的符号链接。第二步转换为 ORT 拆分格式python scripts/convert-models-to-ort.py core/moonshine-tts/data/koscripts/convert-models-to-ort.py 会完成 ORT 图优化烘焙与权重拆分转换完成后即可删除.onnx。该脚本在 core/moonshine-tts/data/README.md 中被明确说明是 ORT 格式的产出者——ORT 相比 ONNX 把图优化在转换时烘焙进文件加载时跳过 protobuf 解析启动更快。可选int8 权重打包onnx-shrink-ray导出之后或要对 FP32 检查点重新打包时pip install onnx onnx-shrink-ray onnx-graphsurgeon # 在父 monorepo 根目录执行本树是 moonshine-tts 子模块 python scripts/shrink_piper_voice_onnx_weights.py --root moonshine-tts/data --name-contains melotts数据溯源与再生成Provenance资产来源dict.tsvopen-dict-data/ipa-dict 的data/ko.txtMIT由scripts/download_multilingual_ipa_lexicons.py拉取需要特别说明的是data/ko/roberta_korean_morph_upos_onnx/HF 上的 KoichiYasuoka/roberta-base-korean-morph-upos是独立的韩语morph UPOSONNX 导出由scripts/export_korean_ud_onnx.py生成仅用于KoreanTokPosOnnx的词性标注测试对应测试见 korean-tok-pos-onnx-test.cpp并未接入 C 或 Pythonkorean_rule_g2p的主 G2P 路径——正式管线中发音只需要dict.tsv词表。重现命令# 拉取韩语 IPA 词表默认写出 data/ko/dict.tsv 与 data/ko/source.txt python scripts/download_multilingual_ipa_lexicons.py --only ko # 可选韩语 morph ONNX仅供 KoreanTokPosOnnx / 测试使用 python scripts/export_korean_ud_onnx.py # 默认输出 data/ko/roberta_korean_morph_upos_onnx/若单独维护本数据树需把生成的dict.tsv复制到data/ko/目录。注意上述两个脚本位于父 monorepo本仓库为moonshine-tts子模块时规范的 Python 资产通常放在父仓库的data/与models/下命令的当前工作目录约定为父仓库根目录。可复现性验证core/moonshine-tts/data/README.md 记录了 2026-03-30 的一次全量再生成验证download_multilingual_ipa_lexicons.py对包括ko在内的 11 个语言dict.tsv逐字节一致而export_korean_ud_onnx.py属部分一致——meta.json匹配但model.onnx因 int8 收缩 / 导出器版本不同在大小与哈希上有差异。结论是词表类资产对当前上游 URL 是确定性的Transformer ONNX 导出则无法保证跨 PyTorch / transformers / 导出后端字节稳定因此meta.json tokenizer 资产 一致性测试才是维护时的契约。小结韩语数据包的设计折射出 moonshine-tts 多语言 TTS 的一贯思路轻量、确定性的词表 规则管道负责发音dict.tsv→KoreanRuleG2p紧凑的 ORT 拆分模型负责音色int8 权重对 →PiperTTS且全部资产可脚本化重现、可逐字节验证。理解这套资产的格式约定TSV 词表、.model.ort/.weights.ort拆分、.onnx.jsonsidecar、CDN 托管是扩展韩语发音覆盖、替换音色或离线部署韩语 TTS 的起点。【免费下载链接】moonshineVery low latency speech to text, intent recognition, and text to speech, for building voice agents and interfaces项目地址: https://gitcode.com/GitHub_Trending/moonshine3/moonshine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考