# GLM-TTS **Repository Path**: mrerror/GLM-TTS ## Basic Information - **Project Name**: GLM-TTS - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-13 - **Last Updated**: 2025-12-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # GLM-TTS: Controllable & Emotion-Expressive Zero-shot TTS with Multi-Reward Reinforcement Learning [Read this in English](README.md)

🤗 HuggingFace   |   🤖 ModelScope   |   🛠️Audio.Z.AI

## 模型介绍 GLM-TTS 是一个基于大型语言模型的高质量文本到语音(TTS)合成系统,支持零样本语音克隆和流式推理。本系统采用两阶段架构:首先使用LLM生成语音token序列,然后使用Flow模型将token转换为高质量的音频波形。通过引入多奖励强化学习(Multi-Reward RL)框架,GLM-TTS能够生成更加富有表现力和情感色彩的语音,显著提升了传统TTS系统的表现力。 ## 更新计划 - **[2025.12.11]** 🎉 GLM-TTS 项目正式开源!包括推理脚本和一系列模型权重。 - **[Coming Soon]** 2D-Vocos声码器更新中。 - **[Coming Soon]** 强化学习优化后的模型权重。 ## 主要特性 - **零样本语音克隆**:仅需3-10秒的提示音频即可克隆任意说话人声音 - **RL-增强的情感控制**:通过多奖励强化学习框架,实现更自然的情感表达和韵律控制 - **流式推理**:支持实时流式音频生成,适用于交互式应用 - **高质量合成**:生成自然、富有表现力的语音,音质媲美商业系统 - **多语言支持**:主要支持中文,同时支持英文混合文本 - **音素级建模**:支持音素级别的文本到语音转换 - **灵活的推理方式**:支持多种采样策略和推理模式 ## 快速开始 ### 环境安装 确保你使用 Python3.10 - Python3.12 版本。 ```bash # 克隆仓库 git clone https://github.com/zai-org/GLM-TTS.git cd GLM-TTS # 安装依赖 pip install -r requirements.txt # 安装强化学习相关依赖(可选) cd grpo/modules git clone https://github.com/s3prl/s3prl git clone https://github.com/omine-me/LaughterSegmentation # 下载 wavlm_large_finetune.pth 并放置在 grpo/ckpt 目录 ``` ### 预训练模型下载 支持从 HuggingFace 或 ModelScope 下载完整模型文件(包含 Tokenizer, LLM, Flow, Vocoder 及 Frontend 模型)。 ```bash # 创建模型目录 mkdir -p ckpt # 方式一:从 HuggingFace 下载 pip install -U huggingface_hub huggingface-cli download zai-org/GLM-TTS --local-dir ckpt # 方式二:从 ModelScope 下载 pip install -U modelscope modelscope download --model ZhipuAI/GLM-TTS --local_dir ckpt ``` ### 运行推理 demo #### 命令行推理 ```bash python glmtts_inference.py \ --data=example_zh \ --exp_name=_test \ --use_cache \ # --phoneme # 如果想要使用phoneme能力,请加上这个参数 ``` #### 使用shell脚本推理 ```bash bash glmtts_inference.sh ``` #### 交互式Web界面 ```bash python -m tools.gradio_app ``` ## 系统架构 ### 整体架构 GLM-TTS 采用两阶段设计:第一阶段,基于Llama架构的大型语言模型(LLM)将输入文本转换为语音token序列;第二阶段,Flow Matching模型将这些token序列转换为高质量的梅尔频谱,最后通过声码器生成音频波形。系统支持零样本语音克隆,通过提示音频提取说话人特征,无需针对特定说话人进行微调。
GLM-TTS Architecture
### 精细化发音控制 (Phoneme-in) 针对教育评测、有声读物等对发音准确性要求严苛的场景,GLM-TTS 引入了 **Phoneme-in** 机制,旨在解决多音字(例如:”行“ 可以被读成 *xíng* / *háng* )和生僻字的自动发音歧义问题。该机制允许模型接受 **"Hybrid Phoneme + Text" (混合音素文本)** 输入,实现对特定词汇发音的定向干预。 - **混合模态训练 (Hybrid Training)** 在训练阶段,对文本中的部分字词随机进行 G2P (Grapheme-to-Phoneme) 转换。这种策略迫使模型适应混合输入序列,既保留了对纯文本的理解能力,又增强了对音素输入的泛化适配性。 - **定向推理 (Targeted Inference)** 推理时采用 `G2P -> 查表替换 -> 混合输入` 的流程: 1. **全局转换**:首先获取待合成文本的完整音素序列。 2. **动态替换**:基于“动态可控词典”,自动识别多音字或生僻字,将其替换为指定的目标音素。 3. **混合生成**:将替换后的音素与原文未替换部分组合,以混合形式输入 GLM-TTS。这确保了在精准控制特定字词发音的同时,依然保持自然流畅的韵律表现。 ### 强化学习优化
GLM-TTS RL
为了解决传统 TTS 情感表达平淡的问题,我们引入了多奖励强化学习框架。该框架通过多个奖励函数(包括相似度奖励、CER奖励、情感奖励、笑声奖励等)对生成的语音进行综合评价,并使用GRPO(Group Relative Policy Optimization)算法优化LLM的生成策略。具体而言: 1. **多奖励设计**:系统设计了多种奖励函数,从不同维度评价生成语音的质量,包括音质、相似度、情感表达等 2. **奖励服务器**:通过分布式奖励服务器计算多个奖励函数,支持并行处理 3. **策略优化**:使用GRPO算法,基于奖励信号优化LLM的生成策略,提升语音的情感表现力 4. **Token级奖励**:支持token级别的细粒度奖励分配,提供更精确的优化信号 通过RL优化,GLM-TTS_RL相比基础模型在CER指标上从1.03降低到0.89,同时保持了较高的相似度,实现了更好的音质和表现力。 ## 核心组件与实现 ### LLM Backend - **文件位置**: [`llm/glmtts.py`](llm/glmtts.py) - **功能**: 基于Llama架构的文本到语音模型,负责将输入文本转换为语音token序列 - **支持模式**: 预训练(PRETRAIN)、微调(SFT)和LoRA三种模式 ### Flow Matching - **文件位置**: [`flow/`](flow/)目录 - **核心文件**: - [`dit.py`](flow/dit.py): Diffusion Transformer实现,支持条件生成 - [`flow.py`](flow/flow.py): 流式推理支持,实现实时音频生成 - **功能**: 将LLM生成的token序列转换为高质量的梅尔频谱 ### Frontend - **文件位置**: [`cosyvoice/cli/frontend.py`](cosyvoice/cli/frontend.py) - **功能**: 文本和语音的预处理,包括文本归一化、音素转换、语音token提取和说话人嵌入提取 - **特点**: 支持中英文混合文本处理 ### 强化学习模块 - **文件位置**: [`grpo/`](grpo/)目录 - **核心文件**: - [`grpo_utils.py`](grpo/grpo_utils.py): GRPO算法实现和批处理推理 - [`reward_func.py`](grpo/reward_func.py): 多奖励函数实现 - [`reward_server.py`](grpo/reward_server.py): 分布式奖励服务器 - **功能**: 通过多奖励强化学习优化TTS系统的情感表达能力 ## 实验结果 在 `seed-tts-eval中文测试集` 上进行评估,为与原版评估保持一致,未使用 `--phoneme` 参数进行推理。 **CER**: 字符错误率 (越低越好 $\downarrow$) | **SIM**: 相似度 (越高越好 $\uparrow$) | Model | CER $\downarrow$ | SIM $\uparrow$ | Open-source | | :--- | :---: | :---: | :---: | | MegaTTS3 | 1.52 | 79.0 | 🔒 No | | DiTAR | 1.02 | 75.3 | 🔒 No | | CosyVoice3 | 1.12 | 78.1 | 🔒 No | | Seed-TTS | 1.12 | **79.6** | 🔒 No | | MiniMax | **0.83** | 78.3 | 🔒 No | | CosyVoice2 | 1.38 | 75.7 | 👐 Yes | | F5-TTS | 1.53 | 76.0 | 👐 Yes | | FireRedTTS-2 | 1.14 | 73.6 | 👐 Yes | | IndexTTS2 | 1.03 | 76.5 | 👐 Yes | | VibeVoice | 1.16 | 74.4 | 👐 Yes | | HiggsAudio-v2 | 1.50 | 74.0 | 👐 Yes | | VoxCPM | 0.93 | 77.2 | 👐 Yes | | **GLM-TTS (Ours)** | 1.03 | 76.1 | 👐 Yes | | **GLM-TTS_RL (Ours)** | **0.89** | 76.4 | 👐 Yes | ## 项目结构 ``` GLM-TTS/ ├── glmtts_inference.py # 主推理脚本,包含完整的推理流程 ├── glmtts_inference.sh # 预训练模型推理脚本 ├── configs/ # 配置文件目录 │ ├── spk_prompt_dict.yaml # 说话人提示字典 │ ├── lora_adapter_configV3.1.json # LoRA适配器配置 │ ├── G2P_able_1word.json # 单字音素转换配置 │ ├── G2P_all_phonemes.json # 全音素列表 │ ├── G2P_replace_dict.jsonl # 音素替换字典 │ └── custom_replace.jsonl # 自定义替换规则 ├── cosyvoice/ # Cosyvoice模块 │ ├── cli/ │ │ └── frontend.py # 文本和语音前端处理 │ └── utils/ # 工具函数 ├── examples/ # 示例数据 │ ├── *.jsonl # 示例jsonl文件 │ └── prompt/ # 提示音频目录 │ ├── *.wav # 提示音频(仅限科研使用) │ └── LICENSE # 音频文件许可证 ├── flow/ # Flow模型相关 │ ├── dit.py # Diffusion Transformer实现 │ ├── flow.py # 流式Flow模型 │ └── modules.py # Flow模型基础模块 ├── grpo/ # 强化学习模块 │ ├── grpo_utils.py # GRPO算法实现 │ ├── reward_func.py # 多奖励函数 │ ├── reward_server.py # 分布式奖励服务器 │ ├── train_ds_grpo.py # GRPO训练脚本 │ └── data/ # 训练数据和配置 ├── llm/ # 大语言模型相关 │ └── glmtts.py # GLM-TTS LLM实现 ├── frontend/ # 前端模型文件 │ ├── campplus.onnx # 说话人嵌入模型 │ └── cosyvoice_frontend.yaml # 前端配置 ├── tools/ # 工具脚本 │ ├── gradio_app.py # Gradio交互界面 │ ├── ffmpeg_speech_control.py # 音频处理工具 │ └── flow_reconstruct.py # 音频重建 └── utils/ # 通用工具 ├── tts_model_util.py # TTS模型工具 ├── yaml_util.py # YAML配置加载工具 ├── audio.py # 音频处理工具 ├── seed_util.py # 随机种子工具 ├── block_mask_util.py # 块掩码工具 ├── vocos_util.py # Vocos声码器工具 ├── hift_util.py # Hift声码器工具 ├── whisper_models/ # Whisper模型相关 └── glm_g2p.py # 文字到音素转换 ``` ## 致谢 我们感谢以下开源项目的支持: - [CosyVoice](https://github.com/FunAudioLLM/CosyVoice) - 提供前端处理框架和高质量声码器 - [Llama](https://github.com/meta-llama/llama) - 提供基础语言模型架构 - [Vocos](https://github.com/charactr-platform/vocos) - 提供高质量声码器 - [GRPO-Zero](https://github.com/policy-gradient/GRPO-Zero) - 强化学习算法实现灵感