人工智能语音音频NLP媒体生成【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/paddlepaddle/PaddleSpeech点击查看免费下载导读本文围绕 PaddleSpeech 仓库中的paddlespeech.t2s.frontend.g2pw.onnx_api模块展开深入讲解基于 BERT 的中文多音字polyphonic character注音模型 G2PW 的 ONNX 推理实现。读完本文你将掌握G2PWOnnxConverter的构造参数与调用方式、模型自动下载与版本管理机制、ONNX 输入特征的组织方式以及它如何作为中文 TTS 前端zh_frontend.py中的 g2p 引擎为「你好世界」这类中文文本生成高质量拼音注音。一、模块定位G2PW 在 PaddleSpeech TTS 前端中的角色onnx_api是 PaddleSpeech 文本前端中负责「字到音Grapheme-to-Phoneme, G2P」的核心模块之一。中文 TTS 前端需要把汉字文本转换为带声调的拼音/注音序列才能进一步映射为音素phoneme输入声学模型。这一转换的难点在于多音字消歧——例如「银行」的「行」读hang2而「行走」的「行」读xing2仅靠词典无法覆盖所有上下文。PaddleSpeech 前端在 zh_frontend.py 中允许通过g2p_model参数在三套方案间切换pypinyin纯词典/规则方案速度最快但多音字准确率有限g2pM基于传统模型的 G2P 方案g2pW基于 BERT 上下文化的多音字注音模型准确率最高。当选择g2pW时前端会实例化本模块的G2PWOnnxConverter见 zh_frontend.pyelif self.g2p_model g2pW: # use pypinyin as backup for non polyphonic characters in g2pW self._init_pypinyin() self.corrector Polyphonic() self.g2pM_model G2pM() self.g2pW_model G2PWOnnxConverter( stylepinyin, enable_non_tradional_chineseTrue) self.pinyin2phone generate_lexicon( with_toneTrue, with_erhuaFalse)从源码结构看g2pW 采用混合策略只对句子中的多音字调用 BERT 模型做上下文预测其余单音字则用 pypinyin 或内置的monophonic_chars_dict词典直接注音从而在准确率与速度之间取得平衡。二、G2PWOnnxConverter核心推理类详解G2PWOnnxConverter定义在 onnx_api.py是整个 ONNX 推理 API 的门面。其源码声明基于开源项目 g2pW 修改而来见文件头部 Credits 注释。2.1 构造函数参数G2PWOnnxConverter( model_dirMODEL_HOME, # 模型存放根目录默认 ~/.paddlespeech stylebopomofo, # 输出风格bopomofo注音符号或 pinyin拼音 model_sourceNone, # BERT tokenizer 来源None 时读取模型 config.py enable_non_tradional_chineseFalse # 是否启用 OpenCC 繁体转简体 )各参数的实际作用对应 onnx_api.py参数默认值说明model_dirMODEL_HOME模型根目录。若该目录下缺少g2pW.onnx会自动下载并解压模型包stylebopomofo预测结果的输出风格。bopomofo返回注音符号如ㄒㄧㄥˊpinyin返回带声调数字的拼音如xing2。前端集成时传pinyinmodel_sourceNoneBERT 预训练模型名如bert-base-chinese用于加载BertTokenizer。为None时回退到模型包内config.py中的model_sourceenable_non_tradional_chineseFalse为True时用 OpenCCs2tw模式将繁体输入转为简体后再注音并断言转换前后字长一致2.2 初始化时加载的资源构造过程会完成四类资源加载ONNX 会话使用onnxruntime.InferenceSession加载g2pW.onnx并显式设置graph_optimization_level ORT_ENABLE_ALL开启全部图优化、execution_mode ORT_SEQUENTIAL顺序执行、intra_op_num_threads 2单算子内 2 线程配置通过load_config()加载模型包内config.py缺失字段自动填充 utils.py 中的default_config_dict默认值如window_size32、use_maskTrue、use_char_phonemeFalse、model_sourcebert-base-chinese标签与字符表读取模型包内POLYPHONIC_CHARS.txt多音字→音素候选表与MONOPHONIC_CHARS.txt单音字→音素表并根据config.use_char_phoneme选择get_char_phoneme_labels或get_phoneme_labels实现见 dataset.py词典加载bopomofo_to_pinyin_wo_tune_dict.json注音→拼音映射与char_bopomofo_dict.json单字→注音。值得注意的细节是代码还维护了两组人工修正表onnx_api.pynon_polyphonic如「一、不、和、差、听」等 18 个字从多音字集合中剔除避免模型误判non_monophonic如「似、攒」从单音字词典中剔除强制走模型预测。2.3 直接调用__call__转换器本身可调用输入为字符串或字符串列表输出为List[List[str]]——每个句子的逐字注音结果converter G2PWOnnxConverter(stylepinyin) result converter(我住在一栋大楼里银行就在旁边。) # result: [[wo3, zhu4, zai4, yi1, dong4, da4, lou2, ...]]调用流程onnx_api.py为若启用 OpenCC先将繁体句转为简体_prepare_data()逐句处理用 pypinyinneutral_tone_with_fiveTrue, styleStyle.TONE3为每个字生成带调号拼音作为回退结果同时挑出需要模型预测的多音字位置若没有任何多音字直接返回 pypinyin 结果不触发 ONNX 推理对应代码注释sentences no polyphonic words否则构造prepare_onnx_input()输入调用predict()批量推理把模型预测结果回填到对应位置其余字保持 pypinyin/词典结果。三、模型自动下载与版本管理模型无需手动准备。get_g2pw_model_path()onnx_api.py会在model_dir下检查G2PWModel_1.1/g2pW.onnx是否存在不存在时调用download_and_decompress()自动下载并解压。版本与下载地址登记在 pretrained_models.py 的g2pw_onnx_models字典中当前仓库内置两个版本版本下载包MD5 校验值1.0G2PWModel_1.0.zip7e049a55547da840502cf99e8a64f20e1.1默认见model_version 1.1G2PWModel_1.1.zipf8b60501770bff92ed6ce90860a610e6模型包解压后目录中至少包含g2pW.onnxONNX 模型、config.py推理配置、POLYPHONIC_CHARS.txt、MONOPHONIC_CHARS.txt、bopomofo_to_pinyin_wo_tune_dict.json、char_bopomofo_dict.json。四、ONNX 输入特征prepare_onnx_input 详解prepare_onnx_input()dataset.py把「句子 待预测字位置」转换为 ONNX 会话可消费的张量字典共 6 个特征输入键类型含义input_idsint64BERT token 序列的 id[CLS] tokens [SEP]token_type_idsint64分段 id全 0单句输入attention_masksint64注意力掩码全 1phoneme_masksfloat32音素候选掩码use_maskTrue时仅允许该字在其char2phonemes候选音素上取值否则全 1char_idsint64目标汉字在chars表中的下标作为辅助特征position_idsint64目标字对应 token 的位置text2token[query_id] 1因[CLS]占据 0 号位预处理链路中两个关键映射函数位于 utils.pywordize_and_map()把文本切成「英文/数字词 单字」同时维护「字位置 ↔ 词位置」双向映射tokenize_and_map()对每个词用BertTokenizer切 subword token处理##前缀、[UNK]回退并建立「字位置 ↔ token 位置」映射供position_ids计算使用。对于超长文本prepare_onnx_input还支持两种截断策略默认不启用因window_sizeNone、max_len512window_size窗口截断_truncate_texts以目标字为中心截取左右各window_size // 2的上下文max_lentoken 截断_truncate在 token 级别以目标字为中心截取max_len - 2个 token并同步修正text2token/token2text映射与query_id保证中心字始终在窗口内。五、predict 推理与标签解码predict()onnx_api.py执行一次session.run将上述 6 个张量送入模型取输出概率矩阵probs session.run([], { input_ids: onnx_input[input_ids], token_type_ids: onnx_input[token_type_ids], attention_mask: onnx_input[attention_masks], phoneme_mask: onnx_input[phoneme_masks], char_ids: onnx_input[char_ids], position_ids: onnx_input[position_ids] })[0]解码规则对每个样本取np.argmax(probs, axis1)得到标签下标用下标在labels中取回音素标签当use_char_phonemeTrue时标签形如行 xing2需再split( )[1]去掉汉字前缀同时返回每个预测的置信度最大概率值便于上层做阈值过滤或调试。六、输出风格bopomofo 与 pinyinstyle参数通过style_convert_func决定最终输出onnx_api.pybopomofo恒等映射直接输出注音符号如ㄒㄧㄥˊpinyin调用_convert_bopomofo_to_pinyin()利用bopomofo_to_pinyin_wo_tune_dict.json把注音符号转为带声调数字的拼音如xing2转换失败时打印Warning: ... cannot convert to pinyin并返回None。由于模型原生输出注音符号pinyin本质上是注音→拼音的后处理转换。__call__返回的List[List[str]]与输入句子逐字对齐可无缝衔接下游pinyin2phone词典生成声母/韵母。七、实战在中文 TTS 前端中的完整集成链路在 PaddleSpeech 文本前端中g2pW 的完整调用链路如下构造ZhFrontend时指定g2p_modelg2pW前端自动创建G2PWOnnxConverter首次运行会自动下载模型包默认存于~/.paddlespeech_g2p()阶段按标点切分句子对每个片段调用 g2pW 注音zh_frontend.py 起g2pW 只对多音字做 BERT 预测单音字回退到 pypinyin/词典兼顾准确率与推理开销得到的带调拼音经pinyin2phonegenerate_lexicon(with_toneTrue, with_erhuaFalse)转换为声母/韵母最终组成音素序列送入 TTS 声学模型。需要说明的是g2pW 方案依赖onnxruntime、paddlenlpBertTokenizer、pypinyin、opencc等依赖库在不满足依赖的环境中可退回pypinyin或g2pM方案。从 zh_frontend.py 的assert g2p_model in (pypinyin, g2pM, g2pW)可以看出三者是并列可选方案。八、总结paddlespeech.t2s.frontend.g2pw.onnx_api是 PaddleSpeech 中文 TTS 前端中高质量 G2P 能力的落地实现核心价值在于上下文消歧借助 BERT 对整句上下文建模精准预测多音字读音开箱即用模型自动下载、版本校验、MD5 管理用户零手工配置工程化设计混合注音策略、窗口截断、音素掩码、注音/拼音双输出风格兼顾准确率与推理性能。如需深入阅读实现细节建议依次查看 onnx_api.py、dataset.py、utils.py以及前端集成入口 zh_frontend.py 和模型版本登记表 pretrained_models.py。赞分享人工智能语音音频NLP媒体生成【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/paddlepaddle/PaddleSpeech点击查看免费下载相关推荐PaddleSpeech TTSExecutor 源码级解析从 paddlespeech tts 命令行到 Python API 的语音合成推理全指南PaddleSpeech TTSExecutor 源码级解析从 paddlespeech tts 命令行到 Python API 的语音合成推理全指南 本篇技人工智能语音音频PaddleSpeech多音字问题解决方案详解PaddleSpeech多音字问题解决方案详解 问题背景 在使用PaddleSpeech进行中文语音合成 TTS 时开发者可能会遇到多音字发音不准确的问题。例人工智能语音音频7个实战技巧轻松突破PaddleSpeech中Wav2vec2多语音推理瓶颈7个实战技巧轻松突破PaddleSpeech中Wav2vec2多语音推理瓶颈 PaddleSpeech是一款功能强大的语音工具包集成了自监督学习模型、SOT人工智能语音音频上一篇Logto MFA 可信设备可配置策略、设备生命周期管理与 Webhook 事件下一篇Kubernetes SIG Apps 2023 年度报告解读工作负载 API 稳定化与批处理工作负载演进创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
