Transformers documentation
MusicGen
このモデルは2023年6月8日にHF papersで公開され、2023年6月29日にHugging Face Transformersに貢献されました。
MusicGen
概要
MusicGenモデルは、Jade Copet、Felix Kreuk、Itai Gat、Tal Remez、David Kant、Gabriel Synnaeve、Yossi Adi、Alexandre Défossez による論文 Simple and Controllable Music Generation で提案されました。
MusicGen は、テキストの説明やオーディオのプロンプトを条件として、高品質な音楽サンプルを生成できる単一ステージの自己回帰型 Transformer モデルです。テキストの説明は、凍結されたテキストエンコーダーモデルを通過させることで、隠れ状態の表現のシーケンスが得られます。その後、MusicGen はこれらの隠れ状態を条件として、離散的なオーディオトークン、すなわち オーディオコード を予測するように学習されます。これらのオーディオトークンは、EnCodec などのオーディオ圧縮モデルを用いてデコードされ、オーディオ波形が復元されます。
効率的なトークンインターリーブパターンにより、MusicGenはテキスト/オーディオプロンプトの自己教師ありセマンティック表現を必要としません。これにより、コードブックのセットを予測するために複数のモデルをカスケード接続する(階層的に、またはアップサンプリングする)必要がなくなります。代わりに、単一のフォワードパスですべてのコードブックを生成できます。
論文の抄録は以下の通りです。
本稿では、条件付き音楽生成タスクに取り組む。我々は、圧縮された離散音楽表現(すなわちトークン)の複数のストリーム上で動作する単一の言語モデル(LM)である MusicGen を提案する。先行研究とは異なり、MusicGen は単一ステージの Transformer LM と効率的なトークンインターリーブパターンで構成されており、階層的な処理やアップサンプリングなど、複数のモデルをカスケードさせる必要を排除する。このアプローチにより、MusicGen がテキストの説明やメロディックな特徴を条件として、高品質なサンプルを生成できることを示す。これにより、生成される出力に対するより良い制御が可能となる。我々は、自動評価と人間による評価の両方を考慮した広範な実証評価を実施し、標準的なテキストから音楽への生成ベンチマークにおいて、提案手法が評価対象のベースラインを上回ることを示した。アブレーションスタディを通じて、MusicGen を構成する各コンポーネントの重要性について考察する。
このモデルは sanchit-gandhi によって提供されました。元のコードは こちら で確認できます。事前学習済みチェックポイントは Hugging Face Hub で利用できます。
使用のコツ
- こちらから元のチェックポイントをダウンロードした後、
src/transformers/models/musicgen/convert_musicgen_transformers.pyにある 変換スクリプト を使用して、以下のコマンドで変換できます。
python src/transformers/models/musicgen/convert_musicgen_transformers.py \
--checkpoint small --pytorch_dump_folder /output/path生成
MusicGen は、greedy と sampling の 2 つの生成モードに対応しています。実際には、sampling は greedy よりもはるかに優れた結果をもたらすため、可能な限り sampling モードの使用を推奨します。sampling はデフォルトで有効になっており、MusicgenForConditionalGeneration.generate() の呼び出しで do_sample=True を設定することで明示的に指定できます。また、モデルの生成設定を上書きすることでも指定できます(下記を参照)。
は正弦波位置埋め込みにより30秒の入力に制限されています。つまり、MusicGenは30秒(1503トークン)を超えるオーディオを生成できません。また、Audio-Prompted Generationで渡される入力オーディオもこの制限にカウントされるため、20秒のオーディオを入力した場合、MusicGenが追加で生成できるのは最大10秒までとなります。
Transformers は、MusicGen のモノラル(1チャネル)版とステレオ(2チャネル)版の両方をサポートしています。モノラル版は、1組のコードブックを生成します。一方、ステレオ版は、左右の各チャネル用に1組ずつ、合計2組のコードブックを生成します。各コードブックのセットは、オーディオ圧縮モデルを通じて独立してデコードされます。各チャネルのオーディオストリームが結合され、最終的なステレオ出力が得られます。
無条件生成
無条件(または「null」)生成の入力は、MusicgenForConditionalGeneration.get_unconditional_inputs() メソッドを通じて取得できます。
from transformers import MusicgenForConditionalGeneration
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small", device_map="auto")
unconditional_inputs = model.get_unconditional_inputs(num_samples=1)
audio_values = model.generate(**unconditional_inputs, do_sample=True, max_new_tokens=256)オーディオ出力は、(batch_size, num_channels, sequence_length) の形状を持つ3次元の Torch テンソルです。生成されたオーディオサンプルを再生するには、ipynb ノートブックで再生できます。
from IPython.display import Audio
sampling_rate = model.config.audio_encoder.sampling_rate
Audio(audio_values[0].numpy(), rate=sampling_rate)または、scipyなどのサードパーティ製ライブラリを使用して.wavファイルとして保存します:
import scipy
sampling_rate = model.config.audio_encoder.sampling_rate
scipy.io.wavfile.write("musicgen_out.wav", rate=sampling_rate, data=audio_values[0, 0].numpy())テキスト条件付き生成
モデルは、MusicgenProcessor を使用して入力を前処理することにより、テキストプロンプトに条件付けられた音声サンプルを生成できます:
from transformers import AutoProcessor, MusicgenForConditionalGeneration
processor = AutoProcessor.from_pretrained("facebook/musicgen-small")
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small", device_map="auto")
inputs = processor(
text=["80s pop track with bassy drums and synth", "90s rock song with loud guitars and heavy drums"],
padding=True,
return_tensors="pt",
)
audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256)guidance_scale は、classifier free guidance (CFG) で使用され、条件付き logits(テキストプロンプトから予測されるもの)と無条件 logits(無条件プロンプトまたは「null」プロンプトから予測されるもの)の間の重みを設定します。guidance scale を高くすると、モデルは入力プロンプトとより密接に関連するサンプルを生成するようになり、通常は音声品質の低下を伴います。CFG は guidance_scale > 1 を設定することで有効になります。最適な結果を得るには、guidance_scale=3(デフォルト)を使用してください。
オーディオプロンプトによる生成
同じMusicgenProcessorを使用して、オーディオ継続に使用されるオーディオプロンプトの前処理を行うことができます。次の例では、以下のコマンドでpipインストールできる🤗 Datasetsライブラリを使用してオーディオファイルを読み込みます。
pip install --upgrade pip pip install datasets[audio]
from datasets import load_dataset
from transformers import AutoProcessor, MusicgenForConditionalGeneration
processor = AutoProcessor.from_pretrained("facebook/musicgen-small")
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small", device_map="auto")
dataset = load_dataset("sanchit-gandhi/gtzan", split="train", streaming=True)
sample = next(iter(dataset))["audio"]
# take the first half of the audio sample
sample["array"] = sample["array"][: len(sample["array"]) // 2]
inputs = processor(
audio=sample["array"],
sampling_rate=sample["sampling_rate"],
text=["80s blues track with groovy saxophone"],
padding=True,
return_tensors="pt",
)
audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256)バッチ処理による音声プロンプト付き生成では、MusicgenProcessor クラスを使用して後処理を行うことで、生成されたaudio_valuesからパディングを除去できます。
from datasets import load_dataset
from transformers import AutoProcessor, MusicgenForConditionalGeneration
processor = AutoProcessor.from_pretrained("facebook/musicgen-small")
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small", device_map="auto")
dataset = load_dataset("sanchit-gandhi/gtzan", split="train", streaming=True)
sample = next(iter(dataset))["audio"]
# take the first quarter of the audio sample
sample_1 = sample["array"][: len(sample["array"]) // 4]
# take the first half of the audio sample
sample_2 = sample["array"][: len(sample["array"]) // 2]
inputs = processor(
audio=[sample_1, sample_2],
sampling_rate=sample["sampling_rate"],
text=["80s blues track with groovy saxophone", "90s rock song with loud guitars and heavy drums"],
padding=True,
return_tensors="pt",
)
audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256)
# post-process to remove padding from the batched audio
audio_values = processor.batch_decode(audio_values, padding_mask=inputs.padding_mask)生成設定
サンプリング、ガイダンススケール、生成トークン数など、生成プロセスを制御するデフォルトのパラメータは、モデルの生成設定に格納されており、必要に応じて更新できます。
from transformers import MusicgenForConditionalGeneration
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small", device_map="auto")
# inspect the default generation config
model.generation_config
# increase the guidance scale to 4.0
model.generation_config.guidance_scale = 4.0
# decrease the max length to 256 tokens
model.generation_config.max_length = 256generate メソッドに渡される引数は、generation config の設定を上書きします。したがって、generate の呼び出しでdo_sample=Falseを設定すると、generation config 内のmodel.generation_config.do_sampleの設定が上書きされます。
モデル構造
MusicGenモデルは、3つの異なる段階に分解できます。
- Text encoder: テキスト入力を、隠れ状態の表現のシーケンスにマッピングします。事前学習済みの MusicGen モデルは、T5 または Flan-T5 のいずれかの凍結された text encoder を使用しています。
- MusicGen デコーダー: エンコーダーの隠れ状態表現を条件として、オートレグレッシブにオーディオトークン(またはコード)を生成する言語モデル(LM)
- Audio encoder/decoder: プロンプトとして使用するトークンにオーディオプロンプトをエンコードし、デコーダーが予測したオーディオトークンからオーディオ波形を復元するために使用されます
したがって、MusicGenモデルは、クラスMusicgenForCausalLMに対応する単体のデコーダーモデルとして使用することも、クラスMusicgenForConditionalGenerationに対応するテキストエンコーダーとオーディオエンコーダー/デコーダーを含む複合モデルとして使用することもできます。デコーダーのみを事前学習済みチェックポイントから読み込む必要がある場合は、まず適切なconfigを指定して読み込むか、複合モデルの.decoder属性を介してアクセスできます。
from transformers import AutoConfig, MusicgenForCausalLM, MusicgenForConditionalGeneration
# Option 1: get decoder config and pass to `.from_pretrained`
decoder_config = AutoConfig.from_pretrained("facebook/musicgen-small").decoder
decoder = MusicgenForCausalLM.from_pretrained("facebook/musicgen-small", **decoder_config, device_map="auto")
# Option 2: load the entire composite model, but only return the decoder
decoder = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small", device_map="auto").decoder学習中はテキストエンコーダーとオーディオエンコーダー/デコーダーモデルが固定されるため、MusicGenデコーダーであるMusicgenForCausalLMは、エンコーダーの隠れ状態とオーディオコードのデータセット上で単独で学習できます。推論時には、学習済みのデコーダーを固定されたテキストエンコーダーおよびオーディオエンコーダー/デコーダーと組み合わせることで、複合モデルであるMusicgenForConditionalGenerationを再構築できます。
ヒント:
- MusicGen は、Encodec の 32kHz チェックポイントで学習されています。互換性のあるバージョンの Encodec モデルを使用することを確認してください。
- Sampling モードは greedy よりも良い結果をもたらす傾向があります。
MusicgenForConditionalGeneration.generate()の呼び出し内で変数do_sampleを切り替えることで、sampling を有効化できます。
MusicgenDecoderConfig
class transformers.MusicgenDecoderConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonevocab_size: int = 2048max_position_embeddings: int = 2048num_hidden_layers: int = 24ffn_dim: int = 4096num_attention_heads: int = 16layerdrop: float | int = 0.0use_cache: bool = Trueactivation_function: str = 'gelu'hidden_size: int = 1024dropout: float | int = 0.1attention_dropout: float | int = 0.0activation_dropout: float | int = 0.0initializer_factor: float = 0.02scale_embedding: bool = Falsenum_codebooks: int = 4audio_channels: int = 1pad_token_id: int | None = 2048bos_token_id: int | None = 2048eos_token_id: int | list[int] | None = Nonetie_word_embeddings: bool = Falseis_decoder: bool = Falseadd_cross_attention: bool = Falsecross_attention_hidden_size: int | None = None )
パラメータ
- vocab_size (
int、任意、デフォルトは2048) — モデルの語彙サイズ。input_idsで表現できるトークンの種類数を定義します。 - max_position_embeddings (
int、任意、デフォルトは2048) — このモデルが使用される可能性のある最大シーケンス長です。 - num_hidden_layers (
int、任意、デフォルトは24) — Transformer デコーダーの隠れ層の数。 - ffn_dim (
int、任意、デフォルトは4096) — MLP 表現の次元数です。 - num_attention_heads (
int、任意、デフォルトは16) — Transformer デコーダーの各アテンション層におけるアテンションヘッドの数。 - layerdrop (
Union[float, int]、任意、デフォルトは0.0) — LayerDrop の確率です。詳細は [LayerDrop の論文](https://huggingface.co/papers/1909.11556 を参照)をご覧ください。 - use_cache (
bool、任意、デフォルトはTrue) — モデルが最後のキー/バリューの注意を返すかどうか(すべてのモデルで利用されるわけではありません)。config.is_decoder=Trueの場合、またはモデルがデコーダー専用の生成モデルである場合にのみ関連します。 - activation_function (
str、任意、デフォルトはgelu) — デコーダーで使用する非線形活性化関数(関数または文字列)。例えば、"gelu"、"relu"、"silu"など。 - hidden_size (
int、任意、デフォルトは1024) — 隠れ表現の次元数。 - dropout (
Union[float, int]、任意、デフォルト値は0.1) — すべての dropout レイヤーの比率です。 - attention_dropout (
Union[float, int]、任意、デフォルトは0.0) — アテンション確率のドロップアウト率です。 - activation_dropout (
Union[float, int]、任意、デフォルトは0.0) — 全結合層内の活性化に対する dropout 率です。 - initializer_factor (
float、任意、デフォルトは0.02) — すべての重み行列の初期化に用いる係数です(1 に保つ必要があります。初期化のテスト用に内部で使用されます)。 - scale_embedding (
bool、任意、デフォルトはFalse) — 埋め込みを sqrt(d_model) で割ることでスケーリングするかどうか。 - num_codebooks (
int、任意、デフォルトは4) — モデルが使用する並列コードブックの数です。 - audio_channels (
int、任意、デフォルトは1) — 入力チャネル数です。 - pad_token_id (
int、任意、デフォルトは2048) — 語彙内でパディングに使用されるトークン ID。 - bos_token_id (
int、任意、デフォルトは2048) — 語彙におけるストリーム開始に使用されるトークン ID。 - eos_token_id (
Union[int, list[int]], 省略可) — 語彙内でストリーム終了に使用されるトークン ID。 - tie_word_embeddings (
bool、任意、デフォルトはFalse) — モデルのtied_weights_keysマッピングに従って重み埋め込みを共有するかどうかを指定します。 - is_decoder (
bool、任意、デフォルトはFalse) — モデルがデコーダーとして使用されるかどうかを示します。Falseの場合、モデルはエンコーダーとして使用されます。 - add_cross_attention (
bool、任意、デフォルトはFalse) — モデルにクロスアテンション層を追加するかどうか。 - cross_attention_hidden_size (
int, 任意) — エンコーダーの出力を、デコーダーのクロスアテンションのキー/バリュー空間に射影するための隠れ層サイズ。エンコーダーとデコーダーの隠れ層サイズが異なる場合に使用します。
これはMusicgenModelの設定を保存するための設定クラスです。指定された引数に基づいてMusicgenモデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、facebook/musicgen-smallと類似した設定が得られます。
設定オブジェクトはPreTrainedConfigを継承し、モデルの出力を制御するために使用できます。詳細については、PreTrainedConfigのドキュメントを参照してください。
MusicgenConfig
class transformers.MusicgenConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonetext_encoder: dict | transformers.configuration_utils.PreTrainedConfig | None = Noneaudio_encoder: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonedecoder: dict | transformers.configuration_utils.PreTrainedConfig | None = Noneinitializer_factor: float = 0.02 )
パラメータ
- text_encoder (
Union[dict,PretrainedConfig]) — テキストエンコーダーの設定を定義する設定オブジェクトのインスタンスです。 - audio_encoder (
Union[dict,PretrainedConfig]) — オーディオエンコーダーの設定を定義する設定オブジェクトのインスタンスです。 - decoder (
Union[dict,PretrainedConfig]) — デコーダーの設定を定義する設定オブジェクトのインスタンスです。 - initializer_factor (
float、任意、デフォルトは0.02) — すべての重み行列の初期化に用いる係数です(1 に保つ必要があります。初期化のテスト用に内部で使用されます)。
これはMusicgenModelの設定を保存するための設定クラスです。指定された引数に基づいてMusicgenモデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、facebook/musicgen-smallと類似した設定が得られます。
設定オブジェクトはPreTrainedConfigを継承し、モデルの出力を制御するために使用できます。詳細については、PreTrainedConfigのドキュメントを参照してください。
例:
>>> from transformers import (
... MusicgenConfig,
... MusicgenDecoderConfig,
... T5Config,
... EncodecConfig,
... MusicgenForConditionalGeneration,
... )
>>> # Initializing text encoder, audio encoder, and decoder model configurations
>>> text_encoder_config = T5Config()
>>> audio_encoder_config = EncodecConfig()
>>> decoder_config = MusicgenDecoderConfig()
>>> configuration = MusicgenConfig(
... text_encoder=text_encoder_config,
... audio_encoder=audio_encoder_config,
... decoder=decoder_config,
... )
>>> # Initializing a MusicgenForConditionalGeneration (with random weights) from the facebook/musicgen-small style configuration
>>> model = MusicgenForConditionalGeneration(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
>>> config_text_encoder = model.config.text_encoder
>>> config_audio_encoder = model.config.audio_encoder
>>> config_decoder = model.config.decoder
>>> # Saving the model, including its configuration
>>> model.save_pretrained("musicgen-model")
>>> # loading model and config from pretrained folder
>>> musicgen_config = MusicgenConfig.from_pretrained("musicgen-model")
>>> model = MusicgenForConditionalGeneration.from_pretrained("musicgen-model", config=musicgen_config)MusicgenProcessor
class transformers.MusicgenProcessor
< source >( feature_extractortokenizer )
を構築します。このクラスは、フィーチャーエクストラクターとトークナイザーを単一のプロセッサーにラップします。
MusicgenProcessor は、EncodecFeatureExtractor と T5Tokenizer のすべての機能を提供します。詳細については、~EncodecFeatureExtractor および ~T5Tokenizer を参照してください。
__call__
< source >( *args**kwargs )
パラメータ
- return_tensors (
strまたは TensorType, 省略可) — 設定すると、特定のフレームワークのテンソルを返します。使用可能な値は以下の通りです:'pt': PyTorchのtorch.Tensorオブジェクトを返します。'np': NumPyのnp.ndarrayオブジェクトを返します。
MusicgenModel
class transformers.MusicgenModel
< source >( config: MusicgenDecoderConfig )
パラメータ
- config (MusicgenDecoderConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
特定のヘッドを上に配置せずに、生の隠れ状態を出力する素の Musicgen モデル。
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneencoder_hidden_states: typing.Optional[torch.FloatTensor] = Noneencoder_attention_mask: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.FloatTensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPastAndCrossAttentions or tuple(torch.FloatTensor)
パラメータ
- input_ids (
torch.LongTensorの形状(batch_size * num_codebooks, sequence_length)) — 語彙における入力シーケンスのトークンインデックスであり、オーディオコードのシーケンスに対応します。インデックスは、EncodecModel などのオーディオエンコーダーモデルでオーディオプロンプトをエンコードしてオーディオコードを予測することで取得できます。詳細は EncodecModel.encode() を参照してください。
input_idsは、forward passにおいて、自動的に(batch_size * num_codebooks, target_sequence_length)の形状から(batch_size, num_codebooks, target_sequence_length)の形状に変換されます。EncodecModelなどの音声エンコーディングモデルから音声コードを取得する場合は、フレーム数が1であること、およびinput_idsとして渡す前に、音声コードを(frames, batch_size, num_codebooks, target_sequence_length)から(batch_size * num_codebooks, target_sequence_length)にリシェイプすることを確実に行ってください。 - attention_mask (
torch.Tensorの形状(batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。[0, 1]:- マスクされていないトークンに対して1
- マスクされたトークンに対しては 0 です。
- encoder_hidden_states (
torch.FloatTensor、形状(batch_size, encoder_sequence_length, hidden_size)、任意) — エンコーダーの最終層の出力における隠れ状態のシーケンスです。デコーダーのクロスアテンションで使用されます。 - encoder_attention_mask (
torch.LongTensorの形状(batch_size, encoder_sequence_length), 、任意) — encoder の input_ids の padding トークンに対する cross-attention を回避するためのマスク。マスクの値は[0, 1]:- マスクされていないトークンに対して1
- マスクされたトークンに対しては 0 です。
- past_key_values (
~cache_utils.Cache, 省略可) — 逐次デコードを高速化するために使用できる、事前計算された隠れ状態(自己アテンションブロックおよびクロスアテンションブロックのキーとバリュー)。通常、これはデコードの以前の段階でモデルが返したpast_key_valuesであり、use_cache=Trueまたはconfig.use_cache=True.入力として許可されるのは Cache インスタンスのみです。kv cache ガイドを参照してください。
past_key_valuesが渡されない場合、デフォルトで DynamicCache が初期化されます。モデルは、入力として与えられたのと同じキャッシュ形式を出力します。
past_key_valuesを使用する場合、すべてのinput_ids(形状(batch_size, sequence_length))ではなく、このモデルに過去のキー・バリュー状態が与えられていない未処理のinput_ids(形状(batch_size, unprocessed_length))のみを入力することになります。 - inputs_embeds (
torch.FloatTensor、形状(batch_size, sequence_length, hidden_size)、任意) —input_idsを渡す代わりに、埋め込み表現を直接渡すこともできます。これは、モデル内部の埋め込みルックアップ行列よりも、input_idsのインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。 - use_cache (
bool、任意) —Trueに設定すると、past_key_valuesのキーバリュー状態が返され、デコーディングの高速化に利用できます(past_key_valuesを参照)。
戻り値
BaseModelOutputWithPastAndCrossAttentions または tuple(torch.FloatTensor)
torch.FloatTensor のタプル(return_dict=False が渡された場合、または config.return_dict=False の場合)、または BaseModelOutputWithPastAndCrossAttentions。設定(MusicgenConfig)と入力に応じて、さまざまな要素で構成されます。
MusicgenModelのforwardメソッドは、__call__特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
last_hidden_state (
torch.FloatTensor、shape(batch_size, sequence_length, hidden_size)) — モデルの最終層の出力における隠れ状態のシーケンス。past_key_valuesが使用されている場合、出力されるのは、形状(batch_size, 1, hidden_size)のシーケンスの最後の隠れ状態のみです。past_key_values (
Cache、任意、use_cache=Trueが渡された場合またはconfig.use_cache=Trueの場合に返されます) — Cache のインスタンスです。詳細については、kv cache ガイドを参照してください。自己アテンションブロック(および
config.is_encoder_decoder=Trueの場合、クロスカレンションブロック)の事前計算済みヒドゥンステート(キーとバリュー)を保持します。これらは逐次デコーディングを高速化するために使用できます(past_key_values入力参照)。hidden_states (
tuple(torch.FloatTensor)、optional、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返されます)—torch.FloatTensorのタプル(埋め込み層を持つモデルの場合、埋め込みの出力が 1 つ、各層の出力がそれぞれ 1 つずつ)で、形状は(batch_size, sequence_length, hidden_size)です。各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。
attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます)—torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。アテンションのsoftmax後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。
cross_attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合、またはconfig.add_cross_attention=Trueが渡された場合、またはconfig.output_attentions=Trueの場合に返されます)—torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。クロスアテンション層のアテンション重みは、アテンションのsoftmax適用後に計算され、クロスアテンションヘッドにおける加重平均の計算に使用されます。
MusicgenForCausalLM
クラス transformers.MusicgenForCausalLM
< source >( config: MusicgenDecoderConfig )
パラメータ
- config (MusicgenDecoderConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
言語モデリングヘッドを上部に備えた MusicGen デコーダーモデル。
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneencoder_hidden_states: typing.Optional[torch.FloatTensor] = Noneencoder_attention_mask: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.FloatTensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → CausalLMOutputWithCrossAttentions or tuple(torch.FloatTensor)
パラメータ
- input_ids (
torch.LongTensorの形状(batch_size * num_codebooks, sequence_length)) — 語彙における入力シーケンスのトークンインデックスであり、オーディオコードのシーケンスに対応します。インデックスは、EncodecModel などのオーディオエンコーダーモデルでオーディオプロンプトをエンコードしてオーディオコードを予測することで取得できます。詳細は EncodecModel.encode() を参照してください。
input_idsは、forward passにおいて、自動的に(batch_size * num_codebooks, target_sequence_length)の形状から(batch_size, num_codebooks, target_sequence_length)の形状に変換されます。EncodecModelなどの音声エンコーディングモデルから音声コードを取得する場合は、フレーム数が1であること、およびinput_idsとして渡す前に、音声コードを(frames, batch_size, num_codebooks, target_sequence_length)から(batch_size * num_codebooks, target_sequence_length)にリシェイプすることを確実に行ってください。 - attention_mask (
torch.Tensorの形状(batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。[0, 1]:- マスクされていないトークンに対して1
- マスクされたトークンに対しては 0 です。
- encoder_hidden_states (
torch.FloatTensor、形状(batch_size, encoder_sequence_length, hidden_size)、任意) — エンコーダーの最終層の出力における隠れ状態のシーケンスです。デコーダーのクロスアテンションで使用されます。 - encoder_attention_mask (
torch.LongTensorの形状(batch_size, encoder_sequence_length), 、任意) — encoder の input_ids の padding トークンに対する cross-attention を回避するためのマスク。マスクの値は[0, 1]:- マスクされていないトークンに対して1
- マスクされたトークンに対しては 0 です。
- past_key_values (
~cache_utils.Cache, 省略可) — 逐次デコードを高速化するために使用できる、事前計算された隠れ状態(自己アテンションブロックおよびクロスアテンションブロックのキーとバリュー)。通常、これはデコードの以前の段階でモデルが返したpast_key_valuesであり、use_cache=Trueまたはconfig.use_cache=True.入力として許可されるのは Cache インスタンスのみです。kv cache ガイドを参照してください。
past_key_valuesが渡されない場合、デフォルトで DynamicCache が初期化されます。モデルは、入力として与えられたのと同じキャッシュ形式を出力します。
past_key_valuesを使用する場合、すべてのinput_ids(形状(batch_size, sequence_length))ではなく、このモデルに過去のキー・バリュー状態が与えられていない未処理のinput_ids(形状(batch_size, unprocessed_length))のみを入力することになります。 - inputs_embeds (
torch.FloatTensor、形状(batch_size, sequence_length, hidden_size)、任意) —input_idsを渡す代わりに、埋め込み表現を直接渡すこともできます。これは、モデル内部の埋め込みルックアップ行列よりも、input_idsのインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。 - labels (
torch.LongTensor、形状(batch_size, sequence_length, num_codebooks)、任意) — 言語モデリング用のラベルです。モデル内部でラベルはシフトされるため、labels = input_idsと設定できます。インデックスは[-100, 0, ..., config.vocab_size]から選択されます。-100に設定されたすべてのラベルは無視(マスク)され、損失は[0, ..., config.vocab_size]内のラベルに対してのみ計算されます。 - use_cache (
bool、任意) —Trueに設定すると、past_key_valuesのキーバリュー状態が返され、デコーディングの高速化に利用できます(past_key_valuesを参照)。
戻り値
CausalLMOutputWithCrossAttentions または tuple(torch.FloatTensor)
torch.FloatTensor のタプル(return_dict=False が渡された場合、または config.return_dict=False の場合)、または CausalLMOutputWithCrossAttentions。設定(MusicgenConfig)や入力に応じて、さまざまな要素で構成されます。
MusicgenForCausalLMのforwardメソッドは、__call__特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
loss (
torch.FloatTensor、shape(1,)、optional、labelsが指定された場合に返されます) — 言語モデリングの損失(次のトークン予測用)。logits (
torch.FloatTensor、shape(batch_size, sequence_length, config.vocab_size)) — 言語モデリングヘッドの予測スコア(SoftMax 適用前の各語彙トークンのスコア)。hidden_states (
tuple(torch.FloatTensor)、optional、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返されます)—torch.FloatTensorのタプル(埋め込み層を持つモデルの場合、埋め込みの出力が 1 つ、各層の出力がそれぞれ 1 つずつ)で、形状は(batch_size, sequence_length, hidden_size)です。各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。
attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます)—torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。アテンションのsoftmax後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。
cross_attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返される) —torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。アテンションのsoftmax後のクロスアテンションの重み。クロスアテンションヘッドにおける加重平均の計算に使用されます。
past_key_values (
Cache、任意、use_cache=Trueが渡された場合またはconfig.use_cache=Trueの場合に返されます) — Cache のインスタンスです。詳細については、kv cache ガイドを参照してください。シーケンシャルなデコーディングを高速化するために使用できる(
past_key_values入力参照)、事前計算済みの hidden-states(アテンションブロック内のキーとバリュー)が含まれます。
MusicgenForConditionalGeneration
クラス transformers.MusicgenForConditionalGeneration
< source >( config: transformers.models.musicgen.configuration_musicgen.MusicgenConfig | None = Nonetext_encoder: transformers.modeling_utils.PreTrainedModel | None = Noneaudio_encoder: transformers.modeling_utils.PreTrainedModel | None = Nonedecoder: transformers.models.musicgen.modeling_musicgen.MusicgenForCausalLM | None = None )
パラメータ
- config (MusicgenConfig、任意) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
- text_encoder (
PreTrainedModel、任意) — テキストを条件付け用の隠れ状態にエンコードするテキストエンコーダーモデルです。 - audio_encoder (
PreTrainedModel、任意) — 条件付けのためにオーディオを隠れ状態にエンコードするオーディオエンコーダーモデルです。 - decoder (
MusicgenForCausalLM、任意) — 条件付けシグナルに基づいてオーディオトークンを生成するデコーダーモデルです。
テキストエンコーダー、オーディオエンコーダー、Musicgenデコーダーを備えた複合Musicgenモデル、
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.BoolTensor] = Noneinput_values: typing.Optional[torch.FloatTensor] = Nonepadding_mask: typing.Optional[torch.BoolTensor] = Nonedecoder_input_ids: typing.Optional[torch.LongTensor] = Nonedecoder_attention_mask: typing.Optional[torch.BoolTensor] = Noneencoder_outputs: tuple[torch.FloatTensor] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.FloatTensor] = Nonedecoder_inputs_embeds: typing.Optional[torch.FloatTensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → Seq2SeqLMOutput or tuple(torch.FloatTensor)
パラメータ
- input_ids (
torch.LongTensorの形状(batch_size, sequence_length), 、省略可) — 語彙における入力シーケンスのトークンインデックスです。デフォルトではパディングは無視されます。インデックスはAutoTokenizerを使用して取得できます。詳細については、PreTrainedTokenizer.encode()およびPreTrainedTokenizer.call()を参照してください。
- attention_mask (
torch.BoolTensorの形状(batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。[0, 1]:- マスクされていないトークンに対して1
- マスクされたトークンに対しては 0 です。
- input_values (
torch.FloatTensor、shape(batch_size, sequence_length)、任意) — 入力生の音声波形の浮動小数点値。値は、.flacまたは.wav形式のオーディオファイルを読み込み、list[float]、numpy.ndarray、またはtorch.Tensor型の配列に変換することで取得できます。例えば、torchcodec ライブラリ(pip install torchcodec)や soundfile ライブラリ(pip install soundfile)を通じて行います。 配列をinput_valuesに整えるには、パディングとtorch.FloatTensor型への変換のために AutoProcessor を使用してください。詳細は MusicgenProcessor.call() を参照してください。 - padding_mask (
torch.BoolTensorの形状(batch_size, sequence_length), 、任意) — — パディングトークンのインデックスに対してアテンションを実行しないためのマスク。マスクの値は [0, 1] から選択します: マスクされていないトークンは 1、マスクされているトークンは 0。アテンションマスクとは何ですか?[0, 1]:- マスクされていないトークンに対して1
- マスクされたトークンに対しては 0 です。
- decoder_input_ids (
torch.LongTensorの形状(batch_size * num_codebooks, target_sequence_length), 、省略可) — 語彙におけるデコーダー入力シーケンスのトークンインデックス。オーディオコードのシーケンスに対応します。インデックスは、EncodecModel などのオーディオエンコーダーモデルでオーディオプロンプトをエンコードしてオーディオコードを予測することで取得できます。詳細は EncodecModel.encode() を参照してください。
decoder_input_idsは、forward pass において自動的に形状(batch_size * num_codebooks, target_sequence_length)から(batch_size, num_codebooks, target_sequence_length)に変換されます。EncodecModel のような音声エンコーディングモデルから音声コードを取得する場合は、フレーム数が 1 であること、およびdecoder_input_idsとして渡す前に、音声コードを(frames, batch_size, num_codebooks, target_sequence_length)から(batch_size * num_codebooks, target_sequence_length)にリシェイプすることを確実に行ってください。 - decoder_attention_mask (
torch.LongTensor、形状(batch_size, target_sequence_length)、任意) — デフォルトの動作:decoder_input_ids内の pad トークンを無視するテンソルを生成します。デフォルトでは、causal mask も使用されます。 - encoder_outputs (
tuple[torch.FloatTensor], 任意) —last_hidden_state、任意:hidden_states、任意:attentionsのタプルです。last_hidden_stateは形状(batch_size, sequence_length, hidden_size)、任意)であり、エンコーダーの最終層の出力における隠れ状態のシーケンスです。デコーダーのクロスアテンションで使用されます。 - past_key_values (
~cache_utils.Cache, 省略可) — 逐次デコードを高速化するために使用できる、事前計算された隠れ状態(自己アテンションブロックおよびクロスアテンションブロックのキーとバリュー)。通常、これはデコードの以前の段階でモデルが返したpast_key_valuesであり、use_cache=Trueまたはconfig.use_cache=True.入力として許可されるのは Cache インスタンスのみです。kv cache ガイドを参照してください。
past_key_valuesが渡されない場合、デフォルトで DynamicCache が初期化されます。モデルは、入力として与えられたのと同じキャッシュ形式を出力します。
past_key_valuesを使用する場合、すべてのinput_ids(形状(batch_size, sequence_length))ではなく、このモデルに過去のキー・バリュー状態が与えられていない未処理のinput_ids(形状(batch_size, unprocessed_length))のみを入力することになります。 - inputs_embeds (
torch.FloatTensor、形状(batch_size, sequence_length, hidden_size)、任意) —input_idsを渡す代わりに、埋め込み表現を直接渡すこともできます。これは、モデル内部の埋め込みルックアップ行列よりも、input_idsのインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。 - decoder_inputs_embeds (
torch.FloatTensorの形状(batch_size, target_sequence_length, hidden_size), 、任意) — 、任意で、decoder_input_idsの代わりに、埋め込み表現を直接渡すこともできます。past_key_valuesを使用する場合、最後のdecoder_inputs_embedsのみを入力すればよい場合があります(past_key_values). 。これは、モデル内部の埋め込みルックアップマトリックスよりも、decoder_input_idsインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に便利です。decoder_input_idsとdecoder_inputs_embedsの両方が設定されていない場合、decoder_inputs_embedsはinputs_embedsの値を採ります。 - labels (
torch.LongTensor、形状(batch_size, sequence_length, num_codebooks)、任意) — 言語モデリング用のラベルです。モデル内部でラベルはシフトされるため、labels = input_idsと設定できます。インデックスは[-100, 0, ..., config.vocab_size]から選択されます。-100に設定されたすべてのラベルは無視(マスク)され、損失は[0, ..., config.vocab_size]内のラベルに対してのみ計算されます。 - use_cache (
bool、任意) —Trueに設定すると、past_key_valuesのキーバリュー状態が返され、デコーディングの高速化に利用できます(past_key_valuesを参照)。
戻り値
Seq2SeqLMOutput または tuple(torch.FloatTensor)
torch.FloatTensor のタプル、または Seq2SeqLMOutput(return_dict=False が渡された場合、または config.return_dict=False の場合)。設定(MusicgenConfig)や入力に応じて、さまざまな要素で構成されます。
MusicgenForConditionalGenerationのforwardメソッドは、__call__特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
loss (
torch.FloatTensor、shape(1,)、optional、labelsが指定された場合に返されます)— 言語モデリングの損失。logits (
torch.FloatTensor、shape(batch_size, sequence_length, config.vocab_size)) — 言語モデリングヘッドの予測スコア(SoftMax 適用前の各語彙トークンのスコア)。past_key_values (
EncoderDecoderCache、任意、use_cache=Trueが渡された場合またはconfig.use_cache=Trueの場合に返されます) — EncoderDecoderCache のインスタンスです。詳細については、kv cache ガイドを参照してください。自己注意ブロックおよび相互注意ブロック内のキーとバリューの事前計算済み隠れ状態(hidden-states)を保持しており、シーケンシャルデコーディングを高速化するために使用できます(
past_key_values入力参照)。decoder_hidden_states (
tuple(torch.FloatTensor)、optional、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返される) —torch.FloatTensorのタプル(埋め込み層を持つモデルの場合、埋め込みの出力用が 1 つ、各層の出力用が 1 つずつ)で、形状は(batch_size, sequence_length, hidden_size)です。各層の出力および初期埋め込み出力における、デコーダーの隠れ状態。
decoder_attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます) —torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。自己アテンションヘッドにおける加重平均を計算するために使用される、アテンションのsoftmax後のデコーダーのアテンション重み。
cross_attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返される) —torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。クロスアテンション層のアテンション重みは、アテンションのsoftmax適用後に計算され、クロスアテンションヘッドにおける加重平均の計算に使用されます。
encoder_last_hidden_state (
torch.FloatTensor、shape(batch_size, sequence_length, hidden_size)、optional) — モデルのエンコーダーの最終層の出力における、隠れ状態のシーケンス。encoder_hidden_states (
tuple(torch.FloatTensor)、optional、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返される) —torch.FloatTensorのタプル(埋め込み層を持つモデルの場合、埋め込みの出力が 1 つ、各層の出力がそれぞれ 1 つずつ)で、形状は(batch_size, sequence_length, hidden_size)です。各層の出力および初期埋め込み出力におけるエンコーダーの隠れ状態。
encoder_attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返される) —torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。アテンションのsoftmaxを適用した後のエンコーダーのアテンション重み。自己アテンションヘッドにおける加重平均の計算に使用されます。
例:
>>> from transformers import AutoProcessor, MusicgenForConditionalGeneration
>>> import torch
>>> processor = AutoProcessor.from_pretrained("facebook/musicgen-small")
>>> model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")
>>> inputs = processor(
... text=["80s pop track with bassy drums and synth", "90s rock song with loud guitars and heavy drums"],
... padding=True,
... return_tensors="pt",
... )
>>> pad_token_id = model.generation_config.pad_token_id
>>> decoder_input_ids = (
... torch.ones((inputs.input_ids.shape[0] * model.decoder.num_codebooks, 1), dtype=torch.long)
... * pad_token_id
... )
>>> logits = model(**inputs, decoder_input_ids=decoder_input_ids).logits
>>> logits.shape # (bsz * num_codebooks, tgt_len, vocab_size)
torch.Size([8, 1, 2048])