🚀 Bark
Bark 是由 Suno 开发的基于 Transformer 的文本转音频模型。Bark 能够生成高度逼真的多语言语音,以及其他类型的音频,包括音乐、背景噪音和简单的音效。该模型还可以生成如笑声、叹息声和哭声等非语言交流声音。为了支持研究社区,我们提供了可用于推理的预训练模型检查点。
原始的 GitHub 仓库和模型卡片可在 此处 找到。
此模型仅用于研究目的。模型输出未经过审查,作者不支持生成内容中的观点。使用时请自行承担风险。
目前发布了两个检查点:
🚀 快速开始
你可以通过以下几种方式亲自体验 Bark:
-
Bark Colab:
-
Hugging Face Colab:
-
Hugging Face Demo:
✨ 主要特性
- 能够生成高度逼真的多语言语音。
- 可以生成包括音乐、背景噪音和简单音效在内的其他音频。
- 支持生成如笑声、叹息声和哭声等非语言交流声音。
📦 安装指南
使用 🤗 Transformers 库
你可以使用 🤗 Transformers 库(版本 4.31.0 及以上)在本地运行 Bark。
- 首先安装 🤗 Transformers 库 和 scipy:
pip install --upgrade pip
pip install --upgrade transformers scipy
使用原始 Bark 库
你也可以通过原始的 Bark 库 在本地运行 Bark。
- 首先安装
bark
库。
💻 使用示例
使用 🤗 Transformers 库
基础用法
通过 Text-to-Speech
(TTS) 管道运行推理。你可以通过几行代码使用 TTS 管道对 Bark 模型进行推理!
from transformers import pipeline
import scipy
synthesiser = pipeline("text-to-speech", "suno/bark-small")
speech = synthesiser("Hello, my dog is cooler than you!", forward_params={"do_sample": True})
scipy.io.wavfile.write("bark_out.wav", rate=speech["sampling_rate"], data=speech["audio"])
高级用法
通过 Transformers 建模代码运行推理。你可以使用处理器 + 生成代码将文本转换为单声道 24 kHz 语音波形,以实现更精细的控制。
from transformers import AutoProcessor, AutoModel
processor = AutoProcessor.from_pretrained("suno/bark-small")
model = AutoModel.from_pretrained("suno/bark-small")
inputs = processor(
text=["Hello, my name is Suno. And, uh — and I like pizza. [laughs] But I also have other interests such as playing tic tac toe."],
return_tensors="pt",
)
speech_values = model.generate(**inputs, do_sample=True)
播放语音样本
在 ipynb 笔记本中播放语音样本:
from IPython.display import Audio
sampling_rate = model.generation_config.sample_rate
Audio(speech_values.cpu().numpy().squeeze(), rate=sampling_rate)
或者使用第三方库(如 scipy
)将其保存为 .wav
文件:
import scipy
sampling_rate = model.config.sample_rate
scipy.io.wavfile.write("bark_out.wav", rate=sampling_rate, data=speech_values.cpu().numpy().squeeze())
使用原始 Bark 库
from bark import SAMPLE_RATE, generate_audio, preload_models
from IPython.display import Audio
preload_models()
text_prompt = """
Hello, my name is Suno. And, uh — and I like pizza. [laughs]
But I also have other interests such as playing tic tac toe.
"""
speech_array = generate_audio(text_prompt)
Audio(speech_array, rate=SAMPLE_RATE)
将 audio_array
保存为 WAV 文件:
from scipy.io.wavfile import write as write_wav
write_wav("/path/to/audio.wav", SAMPLE_RATE, audio_array)
📚 详细文档
模型优化提示
参考此 博客文章 以了解更多关于以下方法及其优势的基准测试。
显著提高速度
使用 🤗 Better Transformer
Better Transformer 是 🤗 Optimum 的一项功能,可在底层执行内核融合。你可以在不降低性能的情况下将速度提高 20% 到 30%。只需一行代码即可将模型导出到 🤗 Better Transformer:
model = model.to_bettertransformer()
请注意,在使用此功能之前必须安装 🤗 Optimum。点击此处查看安装方法。
使用 Flash Attention 2
Flash Attention 2 是之前优化版本的更快、更优化的版本。
model = BarkModel.from_pretrained("suno/bark-small", torch_dtype=torch.float16, use_flash_attention_2=True).to(device)
确保以半精度(例如 torch.float16
)加载模型,并 安装 最新版本的 Flash Attention 2。
注意:Flash Attention 2 仅在较新的 GPU 上可用,如果你的 GPU 不支持,请参考 🤗 Better Transformer。
减少内存占用
使用半精度
通过以半精度(例如 torch.float16
)加载模型,你可以将推理速度提高并将内存占用减少 50%。
使用 CPU 卸载
Bark 由 4 个子模型组成,这些子模型在音频生成过程中按顺序调用。换句话说,当一个子模型正在使用时,其他子模型处于空闲状态。
如果你使用的是 CUDA 设备,一个简单的解决方案是在 GPU 的子模型空闲时将其卸载,从而将内存占用减少 80%。此操作称为 CPU 卸载。你可以使用一行代码来实现。
model.enable_cpu_offload()
请注意,在使用此功能之前必须安装 🤗 Accelerate。点击此处查看安装方法。
🔧 技术细节
模型概述
Bark 是一系列将文本转换为音频的三个 Transformer 模型。
文本到语义标记
语义到粗粒度标记
粗粒度到细粒度标记
- 输入:来自 EnCodec 的前两个码本。
- 输出:来自 EnCodec 的 8 个码本。
架构
模型 |
参数数量 |
注意力机制 |
输出词汇表大小 |
文本到语义标记 |
80/300 M |
因果关系 |
10,000 |
语义到粗粒度标记 |
80/300 M |
因果关系 |
2x 1,024 |
粗粒度到细粒度标记 |
80/300 M |
非因果关系 |
6x 1,024 |
发布日期
2023 年 4 月
📚 更广泛的影响
我们预计该模型的文本转音频功能可用于改进多种语言的无障碍工具。
虽然我们希望此次发布能让用户发挥创造力并构建有益的应用程序,但我们也认识到任何文本转音频模型都有双重用途的可能性。虽然使用 Bark 对知名人物进行语音克隆并非易事,但它仍可能被用于恶意目的。为了进一步降低 Bark 被意外使用的可能性,我们还发布了一个简单的分类器,可高精度地检测 Bark 生成的音频(请参阅主仓库的笔记本部分)。
📄 许可证
Bark 采用 MIT 许可证,这意味着它可用于商业用途。