vall-e

GitHub
2.2k 333 较难 1 次阅读 2天前Apache-2.0音频语言模型
AI 解读 由 AI 自动生成,仅供参考

VALL-E 是一个基于 PyTorch 实现的开源文本转语音(TTS)项目,复现了微软提出的 VALL-E 神经编解码语言模型。它的核心能力是“零样本”语音合成:只需提供一段短短几秒的参考人声录音,就能让 AI 模仿该说话人的音色、语调和情感来朗读任意新文本,而无需针对特定人物进行重新训练。

这一技术突破了传统 TTS 模型需要大量特定用户数据才能定制声音的局限,极大地降低了高保真语音合成的门槛。VALL-E 将语音生成任务转化为类似自然语言处理的序列预测问题,利用神经编解码器捕捉极其细腻的声学特征,从而生成自然度极高的语音。

该项目特别适合人工智能研究人员、语音技术开发者以及高校学生使用。它不仅提供了完整的训练与推理代码,还详细展示了如何在单张消费级显卡(24GB 显存)上完成模型训练,并支持英文和中文数据集的实战示例。对于希望深入理解前沿语音合成架构、进行二次开发或学术探索的用户来说,VALL-E 是一个极具价值的参考实现。需要注意的是,由于该技术能高度还原说话人身份,项目方出于伦理安全考虑,未提供预训练好的成品模型,旨在鼓励用户在合规前提下进行研究与应用。

使用场景

一家小型独立游戏工作室正在为角色制作多语言配音,但预算有限且无法聘请专业声优录制所有方言版本。

没有 vall-e 时

  • 成本高昂:每增加一种语言或方言,都需要重新聘请配音演员,导致本地化预算迅速超支。
  • 音色不一致:不同语言的配音由不同演员演绎,导致主角在切换语言时声音特征断裂,破坏沉浸感。
  • 迭代周期长:剧本微调后需重新协调演员档期进行补录,严重拖慢开发进度。
  • 小语种资源匮乏:难以找到擅长特定稀有方言的专业配音员,迫使团队放弃部分市场的本地化计划。

使用 vall-e 后

  • 零样本克隆:仅需一段主角的英文录音样本,vall-e 即可直接合成中文、日文等多种语言的语音,无需额外真人录制。
  • 身份保持完美:生成的多语言语音完美保留原说话人的音色、情感及说话习惯,确保角色形象全球统一。
  • 即时修改反馈:策划修改台词后,开发者可在几分钟内重新生成对应语音,大幅缩短测试与迭代循环。
  • 突破语种限制:利用模型强大的泛化能力,轻松生成稀缺方言版本,以极低门槛拓展游戏受众边界。

vall-e 通过零样本语音合成技术,让中小团队也能以极低成本实现高质量、音色统一的多语言角色配音。

运行环境要求

操作系统
  • Linux
  • macOS
GPU

需要 NVIDIA GPU,训练示例要求单卡 24GB 显存,CUDA 11.6

内存

未说明

依赖
notes1. macOS 用户需通过 brew 安装 espeak,Linux 用户需通过 apt-get 安装 espeak-ng。2. k2 库需要安装特定版本的预编译 wheel 文件(匹配 CUDA 11.6 和 Torch 1.13.1)。3. 官方示例显示在单张 24GB 显存的 GPU 上可进行训练。4. 遇到 TensorBoard 报错需手动修改 site-packages 中的源码修复。5. 该项目为非官方复现版本,不提供预训练模型以避免滥用风险。
python3.10
torch==1.13.1
torchaudio==0.13.1
torchmetrics==0.11.1
librosa==0.8.1
phonemizer==3.2.1
pypinyin==0.48.0
lhotse (latest git version)
k2 (custom CUDA build)
icefall
vall-e hero image

快速开始

语言:🇺🇸 | 🇨🇳

VALL-E 的非官方 PyTorch 实现(论文标题:Neural Codec Language Models are Zero-Shot Text to Speech Synthesizers,arXiv:2301.02111)。

我们可以在单块 GPU 上训练 VALL-E 模型。

model

演示

Buy Me A Coffee

更广泛的影响

由于 VALL-E 能够合成保持说话人身份特征的语音,因此该模型可能存在被滥用的风险,例如用于欺骗语音识别系统或冒充特定说话人。

为避免滥用,我们不会提供经过充分训练的模型和服务。

安装依赖

为了快速上手,请按照以下步骤操作:

# PyTorch
pip install torch==1.13.1 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu116
pip install torchmetrics==0.11.1
# fbank
pip install librosa==0.8.1

# phonemizer pypinyin
apt-get install espeak-ng
## OSX: brew install espeak
pip install phonemizer==3.2.1 pypinyin==0.48.0

# lhotse 更新至最新版本
# https://github.com/lhotse-speech/lhotse/pull/956
# https://github.com/lhotse-speech/lhotse/pull/960
pip uninstall lhotse
pip uninstall lhotse
pip install git+https://github.com/lhotse-speech/lhotse

# k2
# 在 https://huggingface.co/csukuangfj/k2 找到合适的版本
pip install https://huggingface.co/csukuangfj/k2/resolve/main/cuda/k2-1.23.4.dev20230224+cuda11.6.torch1.13.1-cp310-cp310-linux_x86_64.whl

# icefall
git clone https://github.com/k2-fsa/icefall
cd icefall
pip install -r requirements.txt
export PYTHONPATH=`pwd`/../icefall:$PYTHONPATH
echo "export PYTHONPATH=`pwd`/../icefall:\$PYTHONPATH" >> ~/.zshrc
echo "export PYTHONPATH=`pwd`/../icefall:\$PYTHONPATH" >> ~/.bashrc
cd -
source ~/.zshrc

# valle
git clone https://github.com/lifeiteng/valle.git
cd valle
pip install -e .

训练与推理

  • 英语示例 examples/libritts/README.md

  • 中文示例 examples/aishell1/README.md

  • NAR 解码器的前缀模式 0 1 2 4

    论文第 5.1 章 “LibriLight 数据集中波形的平均长度为 60 秒。在训练过程中,我们随机截取 10 到 20 秒之间的任意长度。对于 NAR 声学提示标记,我们从同一句话中随机选择一段 3 秒钟的波形。”
    • 0:无声学提示标记
    • 1:当前批次话语中的随机前缀 (推荐使用)
    • 2:当前批次话语中的随机片段
    • 4:与论文一致(因为他们会将长波形随机切割成多个话语,因此“相同话语”指的是同一段长波形中的前后话语。)
      # 如果使用 prefix_mode 4 训练 NAR 解码器
      python3 bin/trainer.py --prefix_mode 4 --dataset libritts --input-strategy PromptedPrecomputedFeatures ...
      

LibriTTS 演示 在一块 24GB 显存的 GPU 上训练完成

cd examples/libritts

# 步骤1 准备数据集
bash prepare.sh --stage -1 --stop-stage 3

# 步骤2 在一块 24GB 显存的 GPU 上训练模型
exp_dir=exp/valle

## 训练 AR 模型
python3 bin/trainer.py --max-duration 80 --filter-min-duration 0.5 --filter-max-duration 14 --train-stage 1 \
      --num-buckets 6 --dtype "bfloat16" --save-every-n 10000 --valid-interval 20000 \
      --model-name valle --share-embedding true --norm-first true --add-prenet false \
      --decoder-dim 1024 --nhead 16 --num-decoder-layers 12 --prefix-mode 1 \
      --base-lr 0.05 --warmup-steps 200 --average-period 0 \
      --num-epochs 20 --start-epoch 1 --start-batch 0 --accumulate-grad-steps 4 \
      --exp-dir ${exp_dir}

## 训练 NAR 模型
cp ${exp_dir}/best-valid-loss.pt ${exp_dir}/epoch-2.pt  # --start-epoch 3=2+1
python3 bin/trainer.py --max-duration 40 --filter-min-duration 0.5 --filter-max-duration 14 --train-stage 2 \
      --num-buckets 6 --dtype "float32" --save-every-n 10000 --valid-interval 20000 \
      --model-name valle --share-embedding true --norm-first true --add-prenet false \
      --decoder-dim 1024 --nhead 16 --num-decoder-layers 12 --prefix-mode 1 \
      --base-lr 0.05 --warmup-steps 200 --average-period 0 \
      --num-epochs 40 --start-epoch 3 --start-batch 0 --accumulate-grad-steps 4 \
      --exp-dir ${exp_dir}

# 步骤3 推理
python3 bin/infer.py --output-dir infer/demos \
    --checkpoint=${exp_dir}/best-valid-loss.pt \
    --text-prompts "KNOT 一点一五英里每小时。" \
    --audio-prompts ./prompts/8463_294825_000043_000000.wav \
    --text "要快速上手,只需按照以下步骤操作。" \

# 演示推理
https://github.com/lifeiteng/lifeiteng.github.com/blob/main/valle/run.sh#L68

train

故障排除

  • SummaryWriter 分段错误(核心转储)
    file=`python  -c 'import site; print(f"{site.getsitepackages()[0]}/tensorboard/summary/writer/event_file_writer.py")'`
    sed -i 's/import tf/import tensorflow_stub as tf/g' $file
    

如何在自定义数据集上训练?

  • 将数据集准备为 lhotse manifests
  • python3 bin/tokenizer.py ...
  • python3 bin/trainer.py ...

贡献

  • 将 bin/tokenizer.py 在多块 GPU 上并行化
  • Buy Me A Coffee

引用

引用本仓库时,请使用以下格式:

@misc{valle,
  author={Feiteng Li},
  title={VALL-E: 一种神经编解码语言模型},
  year={2023},
  url={http://github.com/lifeiteng/vall-e}
}
@article{VALL-E,
  title     = {Neural Codec Language Models are Zero-Shot Text to Speech Synthesizers},
  author    = {Chengyi Wang, Sanyuan Chen, Yu Wu,
               Ziqiang Zhang, Long Zhou, Shujie Liu,
               Zhuo Chen, Yanqing Liu, Huaming Wang,
               Jinyu Li, Lei He, Sheng Zhao, Furu Wei},
  year      = {2023},
  eprint    = {2301.02111},
  archivePrefix = {arXiv},
  volume    = {abs/2301.02111},
  url       = {http://arxiv.org/abs/2301.02111},
}

星标历史

星标历史图表

版本历史

v1.02023/04/14
v0.4.02023/03/02
v0.1.02023/02/18

常见问题

相似工具推荐

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

149.5k|★★☆☆☆|今天
开发框架Agent语言模型

LLMs-from-scratch

LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备

90.1k|★★★☆☆|4天前
语言模型图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|5天前
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85.1k|★★☆☆☆|今天
图像数据工具视频

funNLP

funNLP 是一个专为中文自然语言处理(NLP)打造的超级资源库,被誉为"NLP 民工的乐园”。它并非单一的软件工具,而是一个汇集了海量开源项目、数据集、预训练模型和实用代码的综合性平台。 面对中文 NLP 领域资源分散、入门门槛高以及特定场景数据匮乏的痛点,funNLP 提供了“一站式”解决方案。这里不仅涵盖了分词、命名实体识别、情感分析、文本摘要等基础任务的标准工具,还独特地收录了丰富的垂直领域资源,如法律、医疗、金融行业的专用词库与数据集,甚至包含古诗词生成、歌词创作等趣味应用。其核心亮点在于极高的全面性与实用性,从基础的字典词典到前沿的 BERT、GPT-2 模型代码,再到高质量的标注数据和竞赛方案,应有尽有。 无论是刚刚踏入 NLP 领域的学生、需要快速验证想法的算法工程师,还是从事人工智能研究的学者,都能在这里找到急需的“武器弹药”。对于开发者而言,它能大幅减少寻找数据和复现模型的时间;对于研究者,它提供了丰富的基准测试资源和前沿技术参考。funNLP 以开放共享的精神,极大地降低了中文自然语言处理的开发与研究成本,是中文 AI 社区不可或缺的宝藏仓库。

79.9k|★☆☆☆☆|2天前
语言模型数据工具其他

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|6天前
Agent图像开发框架