🚀 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 許可證,這意味著它可用於商業用途。