news 2026/2/11 15:48:40

Fish Speech 1.5开源模型贡献指南:微调中文语音+提交PR全流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Fish Speech 1.5开源模型贡献指南:微调中文语音+提交PR全流程

Fish Speech 1.5开源模型贡献指南:微调中文语音+提交PR全流程

1. 为什么你要关注Fish Speech 1.5的开源协作

你可能已经用过Fish Speech 1.5的Web界面,输入几句话就生成了自然流畅的中文语音——但你有没有想过,那个让你眼前一亮的“小红书风格女声”、那个精准还原方言语调的粤语合成效果、甚至那个能读出古诗韵律起伏的朗读模型,背后其实是成百上千开发者共同打磨的结果?

Fish Speech 1.5不是闭源黑盒,而是一个真正开放、可参与、可进化的开源项目。它由Fish Audio团队发起,但成长靠的是全球开发者的每一次微调、每一行文档修正、每一个问题复现和每一份Pull Request。尤其在中文语音领域,官方虽提供了超30万小时训练数据,但真实场景中的口音差异、行业术语、新媒体语感、儿童/老年声线等长尾需求,恰恰需要一线使用者来填补。

这不是“教你怎么用”,而是“带你一起造轮子”。本文将全程手把手带你完成:从本地环境准备、中文数据集清洗、轻量级LoRA微调,到代码修改、测试验证,最后成功提交一份被上游合并的PR。整个过程不依赖GPU服务器,笔记本显卡即可跑通;不堆砌理论,每一步都对应一个可验证的结果。

你不需要是语音算法专家,只需要会运行命令、看懂Python基础语法、愿意为中文TTS生态添一块砖。

2. 理解Fish Speech 1.5的工程结构与中文适配点

2.1 架构本质:VQ-GAN + Llama,但不止于此

Fish Speech 1.5表面看是“VQ-GAN做声码器 + Llama做文本编码器”的组合,但它的实际工程设计更务实:

  • VQ-GAN部分负责把连续频谱压缩成离散token序列(类似“语音乐高积木”),对中文尤为重要——因为中文声调变化剧烈,传统梅尔频谱建模易失真,而VQ量化后能更好保留音高跃迁特征;
  • Llama部分并非直接套用原始LLM,而是精简后的因果语言模型,专为“文本→语音token”映射优化,支持中英混合tokenization(如<zh><en>标记自动切分);
  • 关键隐藏层fish_speech/models/vqgan/modules/quantize.py中的VectorQuantize类,控制着中文音节边界对齐精度;fish_speech/models/text2semantic/modules/llama.py中的LlamaForCausalLM则决定多音字消歧能力(比如“行长”读zhǎng还是háng)。

这些不是抽象概念,而是你后续微调时真正要动的代码位置。

2.2 中文数据的特殊性:不只是“加数据”,而是“改流程”

官方文档说“中文训练数据>300k小时”,但这300k小时包含大量ASR转录文本+播客音频,存在三类典型问题:

  • 标点缺失:新闻播报音频常无标点,导致模型无法学习停顿节奏;
  • 口语冗余:“呃”、“啊”、“这个那个”等填充词未清洗,影响正式场景输出;
  • 声学偏差:多数数据来自年轻女性主播,儿童、老年、带口音语音覆盖不足。

因此,单纯增加新数据不如先优化数据处理链路。Fish Speech 1.5的data/目录下,preprocess.py脚本就是突破口——它默认使用pypinyin做拼音标注,但对粤语、闽南语等方言支持弱;text_normalization.py对中文数字读法(如“123”该读“一百二十三”还是“一二三”)规则固定,无法按场景切换。

这些,正是你提交PR最有价值的切入点:不追求大模型重训,而聚焦让中文处理链路更鲁棒、更灵活。

3. 本地微调实战:30分钟搞定中文声音定制

3.1 环境准备:避开90%新手踩坑点

不要直接pip install fish-speech——那只是推理包。你需要克隆开发版仓库

git clone https://github.com/fishaudio/fish-speech.git cd fish-speech # 创建干净环境(推荐conda) conda create -n fish15 python=3.10 conda activate fish15 # 安装核心依赖(跳过torch,我们手动指定CUDA版本) pip install -e ".[dev]" # 手动安装匹配你显卡的PyTorch(示例:RTX 4090 + CUDA 12.1) pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

关键避坑提示:

  • 必须用Python 3.10(3.11+会导致llama_cpp兼容问题);
  • pip install -e ".[dev]"中的-e代表“开发模式”,修改代码后无需重新安装;
  • 不要运行setup.py,新版已迁移到pyproject.toml

3.2 数据准备:用你的手机录音打造专属数据集

你不需要收集海量数据。一个高质量的5分钟录音(含不同句式:陈述、疑问、感叹、数字、专有名词)+ 对应文本,足够微调出有辨识度的声音。

操作步骤:

  1. 用手机录音APP录一段清晰语音(避免回声、空调噪音);
  2. 用Whisper.cpp本地转录(无需联网,10秒音频2秒出结果):
# 下载tiny.bin模型(仅75MB) wget https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-tiny.bin # 转录 ./main -m ggml-tiny.bin -f your_audio.wav -otxt
  1. 人工校对文本,重点修正:
    • 多音字(“重庆”不能写成“重qing”);
    • 数字读法(“2024年”应为“二零二四年”,非“两千零二十四年”);
    • 添加标点(根据语义断句,非机械加逗号)。

最终得到一个.csv文件,三列:audio_path,text,languagelanguagezh)。

3.3 LoRA微调:只训练0.3%参数,效果立竿见影

Fish Speech 1.5原生支持LoRA(Low-Rank Adaptation),无需改动主干网络。我们只微调Llama部分的注意力层,目标:让模型更懂你的发音习惯。

修改配置文件configs/t2s/lora_finetune_zh.yaml):

model: name: "t2s" args: lora_rank: 8 # 秩越小,参数越少,适合笔记本 lora_alpha: 16 # 缩放系数,平衡原模型与新知识 lora_dropout: 0.1 # 防止过拟合 target_modules: ["q_proj", "v_proj"] # 只微调Q/V矩阵,省显存

启动训练(单卡3060显存足够):

python tools/train.py \ --config configs/t2s/lora_finetune_zh.yaml \ --dataset your_dataset.csv \ --output_dir ./outputs/zh_custom_voice \ --max_steps 2000 \ --batch_size 2

训练完成后,你会得到:

  • adapter_model.bin(仅12MB,可单独分享);
  • merged_model.pth(合并后的完整模型,约3.2GB)。

验证效果

python tools/inference/t2s_inference.py \ --checkpoint ./outputs/zh_custom_voice/merged_model.pth \ --text "今天天气真好,我们去公园散步吧" \ --output output.wav

听到自己声音的语调、停顿、甚至轻微鼻音被复现出来时,那种“亲手造出声音”的实感,远超任何教程演示。

4. 提交PR:从代码修改到被官方合并的完整路径

4.1 选题策略:什么样的PR更容易被接受?

Fish Audio团队明确表示欢迎三类PR:

  • 修复类(最高优):解决中文场景下的bug,如pypinyin对“厦门”读音错误(应为Xiàmén,非Xiàmén);
  • 增强类(次高优):新增实用功能,如支持<zh-tone>标签控制声调强度;
  • 文档类(快速通过):补充中文数据预处理指南、常见报错解决方案。

避免提交:

  • 大模型架构修改(需先提Issue讨论);
  • 未经测试的实验性功能;
  • 仅修改注释或格式的“无意义PR”。

4.2 实战案例:为中文数字读法添加可配置选项

问题定位
当前fish_speech/utils/text_normalization.py中,数字转换逻辑硬编码:

def normalize_number(text): # 所有数字统一转为“阿拉伯数字读法” return re.sub(r'\d+', lambda m: num_to_chinese(m.group()), text)

但新媒体场景需要“123”读作“一二三”(短视频字幕),教育场景需“一百二十三”(课文朗读)。

修改方案

  1. config.yaml中新增配置项:
text_normalization: number_style: "chinese" # or "arabic", "mixed"
  1. 修改normalize_number函数,读取配置动态选择策略;
  2. tools/preprocess.py中加入参数透传逻辑。

提交前必做三件事

  • 运行pytest tests/test_normalization.py确保原有测试通过;
  • 新增一个测试用例test_number_style_arabic()验证新功能;
  • 更新docs/zh/data_preprocessing.md文档,说明新配置项用法。

PR标题规范(直接影响审核速度):
feat(text-normalization): add configurable number reading style for Chinese
(格式:类型(模块): 简明描述,类型用feat/fix/docs

4.3 PR审查要点:让维护者一眼看懂你的价值

Fish Audio团队每天处理数十个PR,你的描述必须在10秒内传达核心信息。参考这个结构:

## 描述 解决中文数字读法单一问题,支持三种模式:`chinese`(一百二十三)、`arabic`(一二三)、`mixed`(数字+单位组合,如“第123名”读作“第一二三名”) ## 动机 - 当前硬编码逻辑无法满足新媒体/教育等差异化场景 - 用户反馈:小红书配音需短促数字读法,语文课件需标准读法 ## 更改内容 - `utils/text_normalization.py`: 新增`NumberNormalizer`类,支持配置驱动 - `configs/base.yaml`: 添加`text_normalization.number_style`配置项 - `docs/zh/data_preprocessing.md`: 补充使用示例(含截图) ## 测试 - 新增3个单元测试覆盖全部模式 - 所有现有测试100%通过 - 手动验证100+条中文数字样本

没有长篇技术原理,只有“问题-方案-验证”铁三角。这才是开源协作的高效语言。

5. 进阶建议:让贡献可持续、有价值

5.1 建立个人中文语音工具箱

微调只是起点。你可以基于Fish Speech 1.5构建自己的中文语音增强工具:

  • 方言转换器:用粤语数据微调,再用LoRA适配器叠加到普通话模型上,实现“普通话输入→粤语输出”;
  • 情感注入模块:在VQ-GAN解码前插入轻量CNN层,根据文本情感词典(如happy/sad标签)动态调整基频曲线;
  • 实时校对插件:开发VS Code扩展,在编辑文本时实时提示“此处‘长’字建议读zhǎng(如‘生长’)”。

这些不必提交到主库,但可作为独立GitHub项目,形成你的技术品牌。

5.2 参与社区:从PR作者到问题协作者

真正的开源影响力不在代码量,而在连接力:

  • 主动回复中文相关Issue下的提问(哪怕只是提供调试命令);
  • 将你踩过的坑整理成TROUBLESHOOTING_ZH.md,提交文档PR;
  • 在CSDN、知乎等平台写“Fish Speech 1.5中文微调避坑指南”,附上你的GitHub链接。

Fish Audio团队在Discord中明确表示:“最活跃的10位中文贡献者,将获得定制语音模型部署支持。”——这比任何证书都实在。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/10 15:01:01

30B级别最强模型GLM-4.7-Flash在ollama上的表现

30B级别最强模型GLM-4.7-Flash在ollama上的表现 你是否试过在本地跑一个30B级别的大模型&#xff0c;既不卡顿、不烧显存&#xff0c;还能秒级响应&#xff1f;不是“理论上能跑”&#xff0c;而是真正在笔记本或普通工作站上流畅运行——这次我们实测的&#xff0c;正是刚刚发…

作者头像 李华
网站建设 2026/2/9 8:40:16

高效解决B站视频转文字难题:零门槛AI工具bili2text实战指南

高效解决B站视频转文字难题&#xff1a;零门槛AI工具bili2text实战指南 【免费下载链接】bili2text Bilibili视频转文字&#xff0c;一步到位&#xff0c;输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 你是否曾在观看B站教学视频时&#xf…

作者头像 李华
网站建设 2026/2/8 2:58:22

微信群消息自动流转:从手动到智能的协作升级方案

微信群消息自动流转&#xff1a;从手动到智能的协作升级方案 【免费下载链接】wechat-forwarding 在微信群之间转发消息 项目地址: https://gitcode.com/gh_mirrors/we/wechat-forwarding 在当今信息爆炸的工作环境中&#xff0c;微信群已成为团队协作的核心枢纽&#x…

作者头像 李华
网站建设 2026/2/11 8:31:02

Qwen3-ASR-1.7B入门指南:从零开始搭建语音识别系统

Qwen3-ASR-1.7B入门指南&#xff1a;从零开始搭建语音识别系统 导语&#xff1a;你是否还在为会议录音转文字耗时费力而发愁&#xff1f;是否想快速给短视频配上精准字幕&#xff0c;却苦于本地语音识别工具效果不稳定、部署复杂&#xff1f;Qwen3-ASR-1.7B 就是为此而生——它…

作者头像 李华
网站建设 2026/2/8 21:08:21

一位全加器电路图绘制指南:零基础也能懂

从拨码开关亮起的第一盏LED开始&#xff1a;一位全加器&#xff0c;不只是教科书里的公式你有没有试过&#xff0c;在面包板上插好几颗74系列逻辑芯片&#xff0c;接通电源&#xff0c;然后小心翼翼地拨动三个开关——A、B、Cin——再盯着两颗LED&#xff1a;一颗亮了&#xff…

作者头像 李华