🚀 Bark
Barkは、Sunoによって作成されたTransformerベースのテキストから音声への変換モデルです。Barkは、非常にリアルな多言語音声や、音楽、背景音、簡単な効果音などのその他の音声を生成することができます。また、笑い声、ため息、泣き声などの非言語的なコミュニケーション音も生成できます。研究コミュニティを支援するため、推論に使用できる事前学習済みのモデルチェックポイントを提供しています。
元のGitHubリポジトリとモデルカードはこちらで確認できます。
このモデルは研究目的のみを想定しています。モデルの出力は検閲されておらず、著者は生成された内容の意見を支持するものではありません。自己責任で使用してください。
2つのチェックポイントが公開されています。
🚀 クイックスタート
✨ 主な機能
Barkは、多言語に対応した高度にリアルな音声やその他の音声を生成できるTransformerベースのテキスト音声変換モデルです。非言語的なコミュニケーション音も生成可能で、研究目的で事前学習済みのモデルチェックポイントを提供しています。
📦 インストール
🤗 Transformersを使用する場合
🤗 Transformersライブラリのバージョン4.31.0以降でBarkをローカルで実行できます。
- まず、🤗 Transformersライブラリとscipyをインストールします。
pip install --upgrade pip
pip install --upgrade transformers scipy
Sunoを使用する場合
- まず、
bark
ライブラリをインストールします。
💻 使用例
🤗 Transformersを使用する場合
基本的な使用法
Text-to-Speech
(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のモデリングコードを介して推論を実行すると、より細かい制御が可能です。
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())
Sunoを使用する場合
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)
📚 ドキュメント
モデルの詳細
ここで公開されているモデルに関する追加情報は以下の通りです。
Barkは、テキストを音声に変換する3つのTransformerモデルのシリーズです。
テキストからセマンティックトークンへ
セマンティックトークンから粗いトークンへ
粗いトークンから細かいトークンへ
- 入力: EnCodecの最初の2つのコードブック
- 出力: EnCodecの8つのコードブック
アーキテクチャ
モデル |
パラメータ |
アテンション |
出力語彙サイズ |
テキストからセマンティックトークン |
80/300 M |
因果的 |
10,000 |
セマンティックトークンから粗いトークン |
80/300 M |
因果的 |
2x 1,024 |
粗いトークンから細かいトークン |
80/300 M |
非因果的 |
6x 1,024 |
リリース日
2023年4月
🔧 技術詳細
最適化のヒント
以下の方法とそのベネフィットのベンチマークについては、このブログ記事を参照してください。
大幅な高速化
🤗 Better Transformerを使用する
Better Transformerは、🤗 Optimumの機能で、内部でカーネル融合を行います。パフォーマンスを低下させることなく、20%から30%の速度向上を得ることができます。モデルを🤗 Better Transformerにエクスポートするには、1行のコードだけです。
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つのサブモデルで構成されており、音声生成中に順次呼び出されます。つまり、1つのサブモデルが使用中のとき、他のサブモデルはアイドル状態になります。
CUDAデバイスを使用している場合、メモリ使用量を80%削減する簡単な解決策は、アイドル状態のときにGPUのサブモデルをオフロードすることです。この操作をCPUオフロードと呼びます。1行のコードで使用できます。
model.enable_cpu_offload()
この機能を使用する前に、🤗 Accelerateをインストールする必要があります。インストール方法はこちら。
広範な影響
このモデルのテキストから音声への機能は、様々な言語のアクセシビリティツールの改善に役立つと期待されています。
このリリースがユーザーが創造性を発揮し、良い影響を与えるアプリケーションを構築することを可能にすることを願っていますが、テキストから音声へのモデルは二重使用の可能性があることを認識しています。Barkで既知の人物を声でクローンすることは簡単ではありませんが、悪用される可能性もあります。Barkの意図しない使用の可能性をさらに減らすため、高精度でBarkで生成された音声を検出する簡単な分類器も公開しています(メインリポジトリのノートブックセクションを参照)。
📄 ライセンス
BarkはMITライセンスの下でライセンスされており、商用利用が可能です。