Transformers 文件
MusicGen
並獲得增強的文件體驗
開始使用
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 不需要文字/音訊提示的自監督語義表示,從而無需級聯多個模型來預測一組碼本(例如,分層或上取樣)。相反,它能夠在一個前向傳播中生成所有碼本。
論文摘要如下:
我們解決了條件音樂生成的任務。我們介紹了 MusicGen,這是一個單一語言模型(LM),它對多個壓縮的離散音樂表示流(即標記)進行操作。與以往的工作不同,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 --safe_serialization
[!NOTE] 當使用除“eager”之外的所有注意力實現時,`head_mask` 引數會被忽略。如果您有一個 `head_mask` 並希望它生效,請使用 `XXXModel.from_pretrained(model_id, attn_implementation="eager")` 載入模型。
生成
MusicGen 相容兩種生成模式:貪婪模式和取樣模式。在實踐中,取樣模式的結果明顯優於貪婪模式,因此我們鼓勵儘可能使用取樣模式。取樣模式預設啟用,也可以在呼叫 MusicgenForConditionalGeneration.generate()
時透過設定 do_sample=True
來明確指定,或者透過覆蓋模型的生成配置(見下文)。
生成受限於正弦位置嵌入,最多隻能處理30秒的輸入。這意味著,MusicGen 不能生成超過30秒的音訊(1503個標記),並且透過音訊提示生成的輸入音訊也計入此限制。因此,如果輸入了20秒的音訊,MusicGen 最多隻能再生成10秒的音訊。
Transformers 支援 MusicGen 的單聲道(1通道)和立體聲(2通道)版本。單聲道版本生成一組碼本。立體聲版本生成兩組碼本,每個聲道(左/右)一組,每組碼本透過音訊壓縮模型獨立解碼。每個聲道的音訊流合併後得到最終的立體聲輸出。
無條件生成
無條件(或“空”)生成的輸入可以透過 MusicgenForConditionalGeneration.get_unconditional_inputs()
方法獲取。
>>> from transformers import MusicgenForConditionalGeneration
>>> model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")
>>> 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)
的三維 Torch 張量。要收聽生成的音訊樣本,您可以在 ipynb notebook 中播放它們。
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")
>>> 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
用於無分類器指導(CFG),設定條件 logits(從文字提示預測)和無條件 logits(從無條件或“空”提示預測)之間的權重。更高的 guidance scale 會鼓勵模型生成與輸入提示更緊密相關的樣本,但這通常會犧牲音訊質量。透過設定 guidance_scale > 1
來啟用 CFG。為獲得最佳效果,請使用 guidance_scale=3
(預設值)。
音訊提示生成
同樣的 MusicgenProcessor 可用於預處理音訊提示,以進行音訊續寫。在以下示例中,我們使用 🤗 Datasets 庫載入一個音訊檔案,該庫可以透過以下命令進行 pip 安裝。
pip install --upgrade pip pip install datasets[audio]
>>> from transformers import AutoProcessor, MusicgenForConditionalGeneration
>>> from datasets import load_dataset
>>> processor = AutoProcessor.from_pretrained("facebook/musicgen-small")
>>> model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")
>>> 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 transformers import AutoProcessor, MusicgenForConditionalGeneration
>>> from datasets import load_dataset
>>> processor = AutoProcessor.from_pretrained("facebook/musicgen-small")
>>> model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")
>>> 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")
>>> # 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 = 256
請注意,傳遞給 generate 方法的任何引數都將**覆蓋**生成配置中的引數,因此在呼叫 generate 時設定 do_sample=False
將覆蓋生成配置中 model.generation_config.do_sample
的設定。
模型結構
MusicGen 模型可以分解為三個不同的階段:
- 文字編碼器:將文字輸入對映到一系列隱藏狀態表示。預訓練的 MusicGen 模型使用來自 T5 或 Flan-T5 的固定文字編碼器。
- MusicGen 解碼器:一個語言模型(LM),根據編碼器的隱藏狀態表示自迴歸地生成音訊標記(或程式碼)。
- 音訊編碼器/解碼器:用於將音訊提示編碼為提示標記,並從解碼器預測的音訊標記中恢復音訊波形。
因此,MusicGen 模型既可以作為獨立的解碼器模型使用,對應於 MusicgenForCausalLM 類;也可以作為一個包含文字編碼器和音訊編碼器/解碼器的複合模型,對應於 MusicgenForConditionalGeneration 類。如果只需要從預訓練的檢查點載入解碼器,可以透過首先指定正確的配置來載入,或者透過複合模型的 .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)
>>> # Option 2: load the entire composite model, but only return the decoder
>>> decoder = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small").decoder
由於文字編碼器和音訊編碼器/解碼器模型在訓練期間是固定的,因此 MusicGen 解碼器 MusicgenForCausalLM 可以在編碼器隱藏狀態和音訊碼的資料集上獨立訓練。對於推理,訓練好的解碼器可以與固定的文字編碼器和音訊編碼器/解碼器結合,以恢復複合的 MusicgenForConditionalGeneration 模型。
技巧
- MusicGen 是在 Encodec 的 32kHz 檢查點上訓練的。您應確保使用相容版本的 Encodec 模型。
- 取樣模式通常比貪婪模式效果更好——您可以在呼叫
MusicgenForConditionalGeneration.generate()
時使用變數do_sample
來切換取樣模式。
MusicgenDecoderConfig
class transformers.MusicgenDecoderConfig
< 源 >( vocab_size = 2048 max_position_embeddings = 2048 num_hidden_layers = 24 ffn_dim = 4096 num_attention_heads = 16 layerdrop = 0.0 use_cache = True activation_function = 'gelu' hidden_size = 1024 dropout = 0.1 attention_dropout = 0.0 activation_dropout = 0.0 initializer_factor = 0.02 scale_embedding = False num_codebooks = 4 audio_channels = 1 pad_token_id = 2048 bos_token_id = 2048 eos_token_id = None tie_word_embeddings = False **kwargs )
引數
- vocab_size (
int
, 可選, 預設為 2048) — MusicgenDecoder 模型的詞彙表大小。定義了呼叫MusicgenDecoder
時傳遞的inputs_ids
可以表示的不同標記的數量。 - hidden_size (
int
, 可選, 預設為 1024) — 層和池化層的維度。 - num_hidden_layers (
int
, 可選, 預設為 24) — 解碼器層的數量。 - num_attention_heads (
int
, 可選, 預設為 16) — Transformer 塊中每個注意力層的注意力頭數量。 - ffn_dim (
int
, 可選, 預設為 4096) — Transformer 塊中“中間”(通常稱為前饋)層的維度。 - activation_function (
str
或function
, 可選, 預設為"gelu"
) — 解碼器和池化層中的非線性啟用函式(函式或字串)。如果為字串,支援"gelu"
、"relu"
、"silu"
和"gelu_new"
。 - dropout (
float
, 可選, 預設為 0.1) — 嵌入、text_encoder 和池化層中所有全連線層的 dropout 機率。 - attention_dropout (
float
, 可選, 預設為 0.0) — 注意力機率的 dropout 比例。 - activation_dropout (
float
, 可選, 預設為 0.0) — 全連線層內啟用函式的 dropout 比例。 - max_position_embeddings (
int
, 可選, 預設為 2048) — 該模型可能使用的最大序列長度。通常,將其設定為一個較大的值以備不時之需(例如,512、1024 或 2048)。 - initializer_factor (
float
, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的標準差。 - layerdrop (
float
, 可選, 預設為 0.0) — 解碼器的 LayerDrop 機率。更多細節請參閱 [LayerDrop 論文](https://huggingface.co/papers/1909.11556)。 - scale_embedding (
bool
, 可選, 預設為False
) — 透過除以 sqrt(hidden_size) 來縮放嵌入。 - use_cache (
bool
, 可選, 預設為True
) — 模型是否應返回最後一個鍵/值注意力(並非所有模型都使用)。 - num_codebooks (
int
, 可選, 預設為 4) — 傳遞給模型的並行碼本數量。 - tie_word_embeddings(
bool
, 可選, 預設為False
) — 是否應繫結輸入和輸出詞嵌入。 - audio_channels (
int
, 可選, 預設為 1) — 音訊資料中的通道數。對於單聲道為 1,對於立體聲為 2。立體聲模型為左/右輸出聲道生成獨立的音訊流。單聲道模型生成單個音訊流輸出。
這是用於儲存 `MusicgenDecoder` 配置的配置類。它用於根據指定的引數例項化一個 MusicGen 解碼器,定義模型架構。使用預設值例項化配置將產生與 MusicGen facebook/musicgen-small 架構類似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請閱讀 PretrainedConfig 的文件。
MusicgenConfig
class transformers.MusicgenConfig
< 源 >( **kwargs )
引數
- kwargs (可選) — 關鍵字引數字典。主要包括:
- text_encoder (PretrainedConfig, 可選) — 定義文字編碼器配置的配置物件例項。
- audio_encoder (PretrainedConfig, 可選) — 定義音訊編碼器配置的配置物件例項。
- decoder (PretrainedConfig, 可選) — 定義解碼器配置的配置物件例項。
這是用於儲存 MusicgenModel 配置的配置類。它用於根據指定的引數例項化一個 MusicGen 模型,定義文字編碼器、音訊編碼器和 MusicGen 解碼器的配置。
配置物件繼承自 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.from_sub_models_config(
... text_encoder_config, audio_encoder_config, 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)
from_sub_models_config
< 源 >( text_encoder_config: PretrainedConfig audio_encoder_config: PretrainedConfig decoder_config: MusicgenDecoderConfig **kwargs ) → MusicgenConfig
從文字編碼器、音訊編碼器和解碼器配置例項化一個 MusicgenConfig(或其派生類)。
MusicgenProcessor
class transformers.MusicgenProcessor
< 源 >( feature_extractor tokenizer )
引數
- feature_extractor (
EncodecFeatureExtractor
) — EncodecFeatureExtractor 的例項。特徵提取器是必需的輸入。 - tokenizer (
T5Tokenizer
) — T5Tokenizer 的例項。分詞器是必需的輸入。
構造一個 MusicGen 處理器,它將一個 EnCodec 特徵提取器和一個 T5 分詞器包裝成一個單獨的處理器類。
MusicgenProcessor 提供 EncodecFeatureExtractor 和 TTokenizer
的所有功能。有關更多資訊,請參閱 __call__()
和 decode()。
此方法用於解碼 MusicGen 模型的批次音訊輸出,或分詞器的批次標記 ID。在解碼標記 ID 的情況下,此方法將其所有引數轉發給 T5Tokenizer 的 batch_decode()。有關更多資訊,請參閱該方法的文件字串。
MusicgenModel
class transformers.MusicgenModel
< 源 >( config: MusicgenDecoderConfig )
引數
- config (MusicgenDecoderConfig) — 模型配置類,包含模型的所有引數。使用配置檔案初始化不會載入與模型關聯的權重,只會載入配置。請檢視 from_pretrained() 方法來載入模型權重。
基礎的 Musicgen 模型,輸出原始的隱藏狀態,頂部沒有任何特定的頭部。
該模型繼承自 PreTrainedModel。請檢視超類的文件,瞭解該庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
該模型也是一個 PyTorch torch.nn.Module 的子類。可以像常規的 PyTorch Module 一樣使用它,並參考 PyTorch 文件瞭解所有與通用用法和行為相關的事項。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.Tensor] = None encoder_hidden_states: typing.Optional[torch.FloatTensor] = None encoder_attention_mask: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.Tensor] = None cross_attn_head_mask: typing.Optional[torch.Tensor] = None past_key_values: typing.Optional[tuple[tuple[torch.FloatTensor]]] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.modeling_outputs.BaseModelOutputWithPastAndCrossAttentions 或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為(batch_size * num_codebooks, sequence_length)
) — 詞彙表中輸入序列標記的索引,對應於音訊碼序列。可以透過使用音訊編碼器模型(如 EncodecModel)對音訊提示進行編碼來預測音訊碼,從而獲得索引。詳情請參閱 EncodecModel.encode()。
input_ids
將在前向傳遞中自動從(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)
,可選) — 用於避免在編碼器 input_ids 的填充標記索引上執行交叉注意力的掩碼。掩碼值的選擇範圍是[0, 1]
:- 1 表示標記未被遮蓋,
- 0 表示標記已被遮蓋。
- head_mask (
torch.Tensor
,形狀為(num_heads,)
或(num_layers, num_heads)
,可選) — 用於使自注意力模組中選定頭無效的掩碼。掩碼值的選擇範圍是[0, 1]
:- 1 表示頭未被遮蓋,
- 0 表示頭已被遮蓋。
- cross_attn_head_mask (
torch.Tensor
,形狀為(decoder_layers, decoder_attention_heads)
,可選) — 用於使解碼器中交叉注意力模組的選定頭無效的掩碼,以避免對隱藏頭執行交叉注意力。掩碼值的選擇範圍是[0, 1]
:- 1 表示頭未被遮蓋,
- 0 表示頭已被遮蓋。
- past_key_values (
tuple[tuple[torch.FloatTensor]]
,可選) — 預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常是在解碼的先前階段,當use_cache=True
或config.use_cache=True
時,由模型返回的past_key_values
。允許兩種格式:
- Cache 例項,請參閱我們的 kv cache 指南;
- 長度為
config.n_layers
的tuple(torch.FloatTensor)
的元組,每個元組包含 2 個形狀為(batch_size, num_heads, sequence_length, embed_size_per_head)
的張量。這也被稱為傳統快取格式。
模型將輸出與輸入相同的快取格式。如果未傳遞
past_key_values
,則將返回傳統快取格式。如果使用
past_key_values
,使用者可以選擇只輸入最後一個input_ids
(那些沒有為其提供過去鍵值狀態的input_ids
),形狀為(batch_size, 1)
,而不是所有形狀為(batch_size, sequence_length)
的input_ids
。 - inputs_embeds (
torch.FloatTensor
,形狀為(batch_size, sequence_length, hidden_size)
,可選) — 可選地,您可以選擇直接傳遞嵌入表示,而不是傳遞input_ids
。如果您想更好地控制如何將input_ids
索引轉換為關聯向量,而不是使用模型內部的嵌入查詢矩陣,這會很有用。 - use_cache (
bool
,可選) — 如果設定為True
,則返回past_key_values
鍵值狀態,可用於加速解碼(參見past_key_values
)。 - output_attentions (
bool
,可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
。 - output_hidden_states (
bool
,可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。 - return_dict (
bool
,可選) — 是否返回一個 ModelOutput 而不是一個普通的元組。
返回
transformers.modeling_outputs.BaseModelOutputWithPastAndCrossAttentions 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.BaseModelOutputWithPastAndCrossAttentions 或一個 torch.FloatTensor
的元組(如果傳遞了 return_dict=False
或 config.return_dict=False
),包含根據配置 (MusicgenConfig) 和輸入而定的各種元素。
-
last_hidden_state (
torch.FloatTensor
, 形狀為(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)
,可選,在傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入層的輸出,如果模型有嵌入層,+ 每個層一個輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple(torch.FloatTensor)
,可選,在傳遞output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組(每層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
-
cross_attentions (
tuple(torch.FloatTensor)
,可選,在傳遞output_attentions=True
且config.add_cross_attention=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組(每層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。解碼器交叉注意力層的注意力權重,在注意力 softmax 之後,用於計算交叉注意力頭中的加權平均。
MusicgenModel 的前向方法,重寫了 __call__
特殊方法。
儘管前向傳遞的配方需要在此函式內定義,但之後應該呼叫 Module
例項而不是此函式,因為前者會負責執行預處理和後處理步驟,而後者會靜默地忽略它們。
MusicgenForCausalLM
class 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] = None attention_mask: typing.Optional[torch.Tensor] = None encoder_hidden_states: typing.Optional[torch.FloatTensor] = None encoder_attention_mask: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.Tensor] = None cross_attn_head_mask: typing.Optional[torch.Tensor] = None past_key_values: typing.Optional[tuple[tuple[torch.FloatTensor]]] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None labels: typing.Optional[torch.LongTensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None **kwargs ) → transformers.modeling_outputs.CausalLMOutputWithCrossAttentions 或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為(batch_size * num_codebooks, sequence_length)
) — 詞彙表中輸入序列標記的索引,對應於音訊碼序列。可以透過使用音訊編碼器模型(如 EncodecModel)對音訊提示進行編碼來預測音訊碼,從而獲得索引。詳情請參閱 EncodecModel.encode()。
input_ids
將在前向傳遞中自動從(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)
,可選) — 用於避免在編碼器 input_ids 的填充標記索引上執行交叉注意力的掩碼。掩碼值的選擇範圍是[0, 1]
:- 1 表示標記未被遮蓋,
- 0 表示標記已被遮蓋。
- head_mask (
torch.Tensor
,形狀為(num_heads,)
或(num_layers, num_heads)
,可選) — 用於使自注意力模組中選定頭無效的掩碼。掩碼值的選擇範圍是[0, 1]
:- 1 表示頭未被遮蓋,
- 0 表示頭已被遮蓋。
- cross_attn_head_mask (
torch.Tensor
,形狀為(decoder_layers, decoder_attention_heads)
,可選) — 用於使解碼器中交叉注意力模組的選定頭無效的掩碼,以避免對隱藏頭執行交叉注意力。掩碼值的選擇範圍是[0, 1]
:- 1 表示頭未被遮蓋,
- 0 表示頭已被遮蓋。
- past_key_values (
tuple[tuple[torch.FloatTensor]]
,可選) — 預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常是在解碼的先前階段,當use_cache=True
或config.use_cache=True
時,由模型返回的past_key_values
。允許兩種格式:
- Cache 例項,請參閱我們的 kv cache 指南;
- 長度為
config.n_layers
的tuple(torch.FloatTensor)
的元組,每個元組包含 2 個形狀為(batch_size, num_heads, sequence_length, embed_size_per_head)
的張量。這也被稱為傳統快取格式。
模型將輸出與輸入相同的快取格式。如果未傳遞
past_key_values
,則將返回傳統快取格式。如果使用
past_key_values
,使用者可以選擇只輸入最後一個input_ids
(那些沒有為其提供過去鍵值狀態的input_ids
),形狀為(batch_size, 1)
,而不是所有形狀為(batch_size, sequence_length)
的input_ids
。 - 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
)。 - output_attentions (
bool
,可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
。 - output_hidden_states (
bool
,可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。 - return_dict (
bool
,可選) — 是否返回一個 ModelOutput 而不是一個普通的元組。
返回
transformers.modeling_outputs.CausalLMOutputWithCrossAttentions 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.CausalLMOutputWithCrossAttentions 或一個 torch.FloatTensor
的元組(如果傳遞了 return_dict=False
或 config.return_dict=False
),包含根據配置 (MusicgenConfig) 和輸入而定的各種元素。
-
loss (
torch.FloatTensor
形狀為(1,)
,可選,當提供labels
時返回) — 語言建模損失(用於下一個 token 預測)。 -
logits (形狀為
(batch_size, sequence_length, config.vocab_size)
的torch.FloatTensor
) — 語言建模頭部的預測分數(SoftMax 之前的每個詞彙標記的分數)。 -
hidden_states (
tuple(torch.FloatTensor)
,可選,在傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入層的輸出,如果模型有嵌入層,+ 每個層一個輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple(torch.FloatTensor)
,可選,在傳遞output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組(每層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
-
cross_attentions (
tuple(torch.FloatTensor)
,可選,在傳遞output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組(每層一個),形狀為(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
輸入)加速順序解碼。
MusicgenForCausalLM 的前向方法,重寫了 __call__
特殊方法。
儘管前向傳遞的配方需要在此函式內定義,但之後應該呼叫 Module
例項而不是此函式,因為前者會負責執行預處理和後處理步驟,而後者會靜默地忽略它們。
MusicgenForConditionalGeneration
class transformers.MusicgenForConditionalGeneration
< source >( config: typing.Optional[transformers.models.musicgen.configuration_musicgen.MusicgenConfig] = None text_encoder: typing.Optional[transformers.modeling_utils.PreTrainedModel] = None audio_encoder: typing.Optional[transformers.modeling_utils.PreTrainedModel] = None decoder: typing.Optional[transformers.models.musicgen.modeling_musicgen.MusicgenForCausalLM] = 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] = None attention_mask: typing.Optional[torch.BoolTensor] = None input_values: typing.Optional[torch.FloatTensor] = None padding_mask: typing.Optional[torch.BoolTensor] = None decoder_input_ids: typing.Optional[torch.LongTensor] = None decoder_attention_mask: typing.Optional[torch.BoolTensor] = None encoder_outputs: typing.Optional[tuple[torch.FloatTensor]] = None past_key_values: typing.Optional[tuple[tuple[torch.FloatTensor]]] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None decoder_inputs_embeds: typing.Optional[torch.FloatTensor] = None labels: typing.Optional[torch.LongTensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None **kwargs ) → transformers.modeling_outputs.Seq2SeqLMOutput 或 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
,形狀為(batch_size, sequence_length)
,可選) — 輸入原始語音波形的浮點值。可以透過將.flac
或.wav
音訊檔案載入到list[float]
型別的陣列或numpy.ndarray
中獲得值,例如透過 soundfile 庫(pip install soundfile
)。為了將陣列準備成input_values
,應使用 AutoProcessor 進行填充並轉換為torch.FloatTensor
型別的張量。詳情請參閱{processor_class}.__call__
。 - padding_mask (
torch.BoolTensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免在填充標記索引上執行注意力的掩碼。掩碼值的選擇範圍是[0, 1]
:- 1 表示標記未被遮蓋,
- 0 表示標記已被遮蓋。
- decoder_input_ids (
torch.LongTensor
,形狀為(batch_size * num_codebooks, target_sequence_length)
,可選) — 詞彙表中解碼器輸入序列標記的索引,對應於音訊碼序列。可以透過使用音訊編碼器模型(如 EncodecModel)對音訊提示進行編碼來預測音訊碼,從而獲得索引。詳情請參閱 EncodecModel.encode()。
decoder_input_ids
將在前向傳遞中自動從(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 tokens)的張量。預設情況下也會使用因果掩碼(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 (
tuple[tuple[torch.FloatTensor]]
, 可選) — 預計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速序列解碼。這通常包含在解碼的前一個階段,當 `use_cache=True` 或 `config.use_cache=True` 時由模型返回的 `past_key_values`。允許兩種格式:
- 一個 Cache 例項,請參閱我們的 kv 快取指南;
- 一個長度為 `config.n_layers` 的 `tuple(torch.FloatTensor)` 元組,其中每個元組包含 2 個形狀為 `(batch_size, num_heads, sequence_length, embed_size_per_head)` 的張量。這也稱為舊版快取格式。
模型將輸出與輸入相同的快取格式。如果沒有傳遞 `past_key_values`,將返回舊版快取格式。
如果使用 `past_key_values`,使用者可以選擇只輸入最後的 `input_ids`(那些沒有將其過去的鍵值狀態提供給此模型的 `input_ids`),形狀為 `(batch_size, 1)`,而不是所有形狀為 `(batch_size, sequence_length)` 的 `input_ids`。
- 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
)。 - output_attentions (
bool
,可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的 `attentions`。 - output_hidden_states (
bool
,可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的 `hidden_states`。 - return_dict (
bool
,可選) — 是否返回一個 ModelOutput 而不是一個普通的元組。
返回
transformers.modeling_outputs.Seq2SeqLMOutput 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.Seq2SeqLMOutput 或一個 `torch.FloatTensor` 的元組(如果傳遞了 `return_dict=False` 或 `config.return_dict=False`),包含的各種元素取決於配置(MusicgenConfig)和輸入。
-
loss (
torch.FloatTensor
,形狀為(1,)
,可選,當提供labels
時返回) — 語言建模損失。 -
logits (形狀為
(batch_size, sequence_length, config.vocab_size)
的torch.FloatTensor
) — 語言建模頭部的預測分數(SoftMax 之前的每個詞彙標記的分數)。 -
past_key_values (
EncoderDecoderCache
,可選,當傳遞 `use_cache=True` 或 `config.use_cache=True` 時返回) — 這是一個 EncoderDecoderCache 例項。更多詳情,請參閱我們的 kv 快取指南。包含預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於(參見
past_key_values
輸入)加速順序解碼。 -
decoder_hidden_states (`tuple(torch.FloatTensor)`,可選,當傳遞 `output_hidden_states=True` 或 `config.output_hidden_states=True` 時返回) — `torch.FloatTensor` 的元組(如果模型有嵌入層,則一個用於嵌入層的輸出,加上每個層的一個輸出),形狀為 `(batch_size, sequence_length, hidden_size)`。
解碼器在每一層輸出時的隱藏狀態以及初始嵌入輸出。
-
decoder_attentions (`tuple(torch.FloatTensor)`,可選,當傳遞 `output_attentions=True` 或 `config.output_attentions=True` 時返回) — `torch.FloatTensor` 的元組(每層一個),形狀為 `(batch_size, num_heads, sequence_length, sequence_length)`。
解碼器的注意力權重,在注意力 softmax 之後,用於計算自注意力頭中的加權平均。
-
cross_attentions (
tuple(torch.FloatTensor)
,可選,在傳遞output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組(每層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。解碼器交叉注意力層的注意力權重,在注意力 softmax 之後,用於計算交叉注意力頭中的加權平均。
-
encoder_last_hidden_state (
torch.FloatTensor
,形狀為(batch_size, sequence_length, hidden_size)
,可選) — 模型編碼器最後一層輸出的隱藏狀態序列。 -
encoder_hidden_states (`tuple(torch.FloatTensor)`,可選,當傳遞 `output_hidden_states=True` 或 `config.output_hidden_states=True` 時返回) — `torch.FloatTensor` 的元組(如果模型有嵌入層,則一個用於嵌入層的輸出,加上每個層的一個輸出),形狀為 `(batch_size, sequence_length, hidden_size)`。
編碼器在每一層輸出時的隱藏狀態以及初始嵌入輸出。
-
encoder_attentions (`tuple(torch.FloatTensor)`,可選,當傳遞 `output_attentions=True` 或 `config.output_attentions=True` 時返回) — `torch.FloatTensor` 的元組(每層一個),形狀為 `(batch_size, num_heads, sequence_length, sequence_length)`。
編碼器的注意力權重,在注意力 softmax 之後,用於計算自注意力頭中的加權平均。
MusicgenForConditionalGeneration 的 forward 方法覆蓋了 `__call__` 特殊方法。
儘管前向傳遞的配方需要在此函式內定義,但之後應該呼叫 Module
例項而不是此函式,因為前者會負責執行預處理和後處理步驟,而後者會靜默地忽略它們。
示例
>>> 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])