MusicGen 旋律
概述
MusicGen Melody 模型由 Jade Copet、Felix Kreuk、Itai Gat、Tal Remez、David Kant、Gabriel Synnaeve、Yossi Adi 和 Alexandre Défossez 在 简单且可控的音乐生成 中提出。
MusicGen Melody 是一个单阶段自回归 Transformer 模型,能够根据文本描述或音频提示生成高质量的音乐样本。文本描述通过一个冻结的文本编码器模型传递,以获得一系列隐藏状态表示。然后,MusicGen 被训练来预测离散的音频标记,或音频代码,这些标记是基于这些隐藏状态的。然后使用音频压缩模型(如 EnCodec)解码这些音频标记,以恢复音频波形。
通过高效的令牌交错模式,MusicGen 不需要文本/音频提示的自监督语义表示,从而消除了级联多个模型来预测一组码本的需求(例如分层或上采样)。相反,它能够在一次前向传递中生成所有码本。
论文的摘要如下:
我们解决了条件音乐生成的任务。我们引入了MusicGen,一个单一的语言模型(LM),它在多个压缩离散音乐表示流(即标记)上运行。与之前的工作不同,MusicGen由一个单阶段的变压器LM和高效的标记交错模式组成,这消除了级联多个模型的需求,例如分层或上采样。通过这种方法,我们展示了MusicGen如何生成高质量的样本,同时可以根据文本描述或旋律特征进行条件生成,从而更好地控制生成的输出。我们进行了广泛的实证评估,考虑了自动和人类研究,表明所提出的方法在标准的文本到音乐基准上优于评估的基线。通过消融研究,我们揭示了组成MusicGen的每个组件的重要性。
该模型由ylacombe贡献。原始代码可以在这里找到。预训练的检查点可以在Hugging Face Hub上找到。
与MusicGen的区别
MusicGen有两个关键区别:
- 音频提示在这里用作生成音频样本的条件信号,而在MusicGen中它用于音频延续。
- 条件文本和音频信号被连接到解码器的隐藏状态,而不是像在MusicGen中那样用作交叉注意力信号。
生成
MusicGen Melody 兼容两种生成模式:贪婪模式和采样模式。实际上,采样模式的结果明显优于贪婪模式,因此我们鼓励尽可能使用采样模式。采样模式默认启用,可以通过在调用 MusicgenMelodyForConditionalGeneration.generate()
时设置 do_sample=True
来明确指定,或者通过覆盖模型的生成配置来启用(见下文)。
Transformers 支持 MusicGen Melody 的单声道(1通道)和立体声(2通道)变体。单声道版本生成一组代码本。立体声版本生成两组代码本,每组对应一个通道(左/右),每组代码本通过音频压缩模型独立解码。每个通道的音频流被组合以生成最终的立体声输出。
音频条件生成
该模型可以通过使用MusicgenMelodyProcessor预处理输入,生成基于文本和音频提示的音频样本。
在以下示例中,我们使用🤗 Datasets库加载一个音频文件,该库可以通过以下命令进行pip安装:
pip install --upgrade pip
pip install datasets[audio]
我们将要使用的音频文件加载如下:
>>> from datasets import load_dataset
>>> dataset = load_dataset("sanchit-gandhi/gtzan", split="train", streaming=True)
>>> sample = next(iter(dataset))["audio"]
音频提示理想情况下应该不包含通常由鼓和贝斯等乐器产生的低频信号。Demucs 模型可以用来将人声和其他信号从鼓和贝斯组件中分离出来。
如果您希望使用Demucs,首先需要在使用以下代码片段之前按照这里的安装步骤进行操作:
from demucs import pretrained
from demucs.apply import apply_model
from demucs.audio import convert_audio
import torch
wav = torch.tensor(sample["array"]).to(torch.float32)
demucs = pretrained.get_model('htdemucs')
wav = convert_audio(wav[None], sample["sampling_rate"], demucs.samplerate, demucs.audio_channels)
wav = apply_model(demucs, wav[None])
然后你可以使用以下代码片段来生成音乐:
>>> from transformers import AutoProcessor, MusicgenMelodyForConditionalGeneration
>>> processor = AutoProcessor.from_pretrained("facebook/musicgen-melody")
>>> model = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody")
>>> inputs = processor(
... audio=wav,
... sampling_rate=demucs.samplerate,
... 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)
你也可以直接传递音频信号而不使用Demucs,尽管生成的质量可能会下降:
>>> from transformers import AutoProcessor, MusicgenMelodyForConditionalGeneration
>>> processor = AutoProcessor.from_pretrained("facebook/musicgen-melody")
>>> model = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody")
>>> 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)
音频输出是一个形状为(batch_size, num_channels, sequence_length)
的三维Torch张量。要收听生成的音频样本,您可以在ipynb笔记本中播放它们:
from IPython.display import Audio
sampling_rate = model.config.audio_encoder.sampling_rate
Audio(audio_values[0].numpy(), rate=sampling_rate)
或者使用第三方库将它们保存为.wav
文件,例如soundfile
:
>>> import soundfile as sf
>>> sampling_rate = model.config.audio_encoder.sampling_rate
>>> sf.write("musicgen_out.wav", audio_values[0].T.numpy(), sampling_rate)
仅文本条件生成
相同的MusicgenMelodyProcessor可以用于预处理仅包含文本的提示。
>>> from transformers import AutoProcessor, MusicgenMelodyForConditionalGeneration
>>> processor = AutoProcessor.from_pretrained("facebook/musicgen-melody")
>>> model = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody")
>>> 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),设置条件对数(从文本提示预测)和无条件对数(从无条件或“空”提示预测)之间的权重。较高的引导比例鼓励模型生成与输入提示更紧密相关的样本,通常以音频质量较差为代价。通过设置 guidance_scale > 1
来启用 CFG。为了获得最佳效果,请使用 guidance_scale=3
(默认值)。
你也可以批量生成:
>>> from transformers import AutoProcessor, MusicgenMelodyForConditionalGeneration
>>> from datasets import load_dataset
>>> processor = AutoProcessor.from_pretrained("facebook/musicgen-melody")
>>> model = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody")
>>> # 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)
无条件生成
无条件(或“空”)生成的输入可以通过方法 MusicgenMelodyProcessor.get_unconditional_inputs() 获得:
>>> from transformers import MusicgenMelodyForConditionalGeneration, MusicgenMelodyProcessor
>>> model = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody")
>>> unconditional_inputs = MusicgenMelodyProcessor.from_pretrained("facebook/musicgen-melody").get_unconditional_inputs(num_samples=1)
>>> audio_values = model.generate(**unconditional_inputs, do_sample=True, max_new_tokens=256)
生成配置
控制生成过程的默认参数,如采样、指导比例和生成的标记数量,可以在模型的生成配置中找到,并根据需要进行更新:
>>> from transformers import MusicgenMelodyForConditionalGeneration
>>> model = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody")
>>> # 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 Melody 解码器:一种语言模型(LM),它根据编码器隐藏状态表示自回归生成音频标记(或代码)
- 音频解码器:用于从解码器预测的音频令牌中恢复音频波形。
因此,MusicGen模型可以作为独立的解码器模型使用,对应于类MusicgenMelodyForCausalLM,或者作为包含文本编码器和音频编码器的复合模型使用,对应于类MusicgenMelodyForConditionalGeneration。如果只需要从预训练检查点加载解码器,可以通过首先指定正确的配置来加载,或者通过复合模型的.decoder
属性访问:
>>> from transformers import AutoConfig, MusicgenMelodyForCausalLM, MusicgenMelodyForConditionalGeneration
>>> # Option 1: get decoder config and pass to `.from_pretrained`
>>> decoder_config = AutoConfig.from_pretrained("facebook/musicgen-melody").decoder
>>> decoder = MusicgenMelodyForCausalLM.from_pretrained("facebook/musicgen-melody", **decoder_config.to_dict())
>>> # Option 2: load the entire composite model, but only return the decoder
>>> decoder = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody").decoder
由于文本编码器和音频编码器模型在训练期间是冻结的,MusicGen解码器MusicgenMelodyForCausalLM可以在编码器隐藏状态和音频代码的数据集上单独训练。在推理时,训练好的解码器可以与冻结的文本编码器和音频编码器结合,以恢复复合的MusicgenMelodyForConditionalGeneration模型。
检查点转换
- 从这里下载原始检查点后,您可以使用
src/transformers/models/musicgen_melody/convert_musicgen_melody_transformers.py
中提供的转换脚本,通过以下命令进行转换:
python src/transformers/models/musicgen_melody/convert_musicgen_melody_transformers.py \
--checkpoint="facebook/musicgen-melody" --pytorch_dump_folder /output/path
提示:
- MusicGen 是在 Encodec 的 32kHz 检查点上训练的。你应该确保使用兼容版本的 Encodec 模型。
- 采样模式通常比贪婪模式提供更好的结果 - 你可以在调用
MusicgenMelodyForConditionalGeneration.generate()
时通过变量do_sample
来切换采样模式。
MusicgenMelodyDecoderConfig
类 transformers.MusicgenMelodyDecoderConfig
< source >( 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
, optional, defaults to 2048) — MusicgenMelodyDecoder模型的词汇表大小。定义了调用MusicgenMelodyDecoder
时传递的inputs_ids
可以表示的不同令牌的数量。 - max_position_embeddings (
int
, optional, 默认为 2048) — 此模型可能使用的最大序列长度。通常,将此设置为较大的值以防万一(例如,512 或 1024 或 2048)。 - num_hidden_layers (
int
, optional, 默认为 24) — 解码器层数. - ffn_dim (
int
, optional, defaults to 4096) — Transformer块中“中间”(通常称为前馈)层的维度。 - num_attention_heads (
int
, optional, defaults to 16) — Transformer 块中每个注意力层的注意力头数。 - layerdrop (
float
, optional, 默认为 0.0) — 解码器的LayerDrop概率。有关更多详细信息,请参阅 [LayerDrop 论文](see https://arxiv.org/abs/1909.11556)。 - use_cache (
bool
, 可选, 默认为True
) — 模型是否应返回最后的键/值注意力(并非所有模型都使用) - activation_function (
str
或function
, 可选, 默认为"gelu"
) — 解码器和池化器中的非线性激活函数(函数或字符串)。如果是字符串,支持"gelu"
、"relu"
、"silu"
和"gelu_new"
。 - hidden_size (
int
, optional, 默认为 1024) — 层的维度和池化层的维度。 - dropout (
float
, optional, defaults to 0.1) — 嵌入层、文本编码器和池化器中所有全连接层的dropout概率。 - attention_dropout (
float
, optional, 默认为 0.0) — 注意力概率的丢弃比例。 - activation_dropout (
float
, optional, defaults to 0.0) — 全连接层内部激活函数的丢弃比例。 - initializer_factor (
float
, optional, 默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。 - scale_embedding (
bool
, optional, defaults toFalse
) — 通过除以 sqrt(hidden_size) 来缩放嵌入。 - num_codebooks (
int
, 可选, 默认为 4) — 转发到模型的并行码本数量。 - audio_channels (
int
, optional, defaults to 1) — 模型使用的音频通道数(单声道或立体声)。立体声模型为左/右输出通道生成单独的音频流。单声道模型生成单个音频流输出。 - pad_token_id (
int
, 可选, 默认为 2048) — 填充 token 的 id. - bos_token_id (
int
, optional, 默认为 2048) — 序列开始标记的 ID。 - eos_token_id (
int
, optional) — 结束序列标记的id. - tie_word_embeddings (
bool
, 可选, 默认为False
) — 是否将词嵌入与文本编码器绑定。
这是用于存储MusicgenMelodyDecoder
配置的配置类。它用于根据指定的参数实例化一个Musicgen Melody解码器,定义模型架构。使用默认值实例化配置将产生类似于Musicgen Melody facebook/musicgen-melody架构的配置。
配置对象继承自PretrainedConfig,可用于控制模型输出。阅读PretrainedConfig的文档以获取更多信息。
MusicgenMelodyProcessor
类 transformers.MusicgenMelodyProcessor
< source >( feature_extractor tokenizer )
参数
- feature_extractor (
MusicgenMelodyFeatureExtractor
) — 一个 MusicgenMelodyFeatureExtractor 的实例。特征提取器是一个必需的输入。 - tokenizer (
T5Tokenizer
) — 一个 T5Tokenizer 的实例。tokenizer 是一个必需的输入。
构建一个MusicGen Melody处理器,它将Wav2Vec2特征提取器(用于原始音频波形处理)和T5分词器封装到一个处理器类中。
MusicgenProcessor 提供了 MusicgenMelodyFeatureExtractor 和 T5Tokenizer 的所有功能。更多信息请参见
__call__()
和 decode()。
get_unconditional_inputs
< source >( num_samples = 1 return_tensors = 'pt' )
辅助函数用于获取无条件生成的空输入,使模型能够在没有特征提取器或分词器的情况下使用。
示例:
>>> from transformers import MusicgenMelodyForConditionalGeneration, MusicgenMelodyProcessor
>>> model = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody")
>>> # get the unconditional (or 'null') inputs for the model
>>> processor = MusicgenMelodyProcessor.from_pretrained("facebook/musicgen-melody")
>>> unconditional_inputs = processor.get_unconditional_inputs(num_samples=1)
>>> audio_samples = model.generate(**unconditional_inputs, max_new_tokens=256)
MusicgenMelodyFeatureExtractor
类 transformers.MusicgenMelodyFeatureExtractor
< source >( feature_size = 12 sampling_rate = 32000 hop_length = 4096 chunk_length = 30 n_fft = 16384 num_chroma = 12 padding_value = 0.0 return_attention_mask = False stem_indices = [3, 2] **kwargs )
参数
- feature_size (
int
, optional, 默认为 12) — 提取特征的特征维度。 - sampling_rate (
int
, optional, defaults to 32000) — 音频文件应被数字化的采样率,以赫兹(Hz)表示。 - hop_length (
int
, optional, 默认为 4096) — 用于获取梅尔频率系数的短时傅里叶变换(STFT)的重叠窗口的长度。 - chunk_length (
int
, 可选, 默认为 30) — 用于修剪和填充较长或较短音频序列的sampling_rate
样本的最大块数。 - n_fft (
int
, optional, defaults to 16384) — 傅里叶变换的大小. - num_chroma (
int
, optional, 默认为 12) — 使用的色度分箱数量。 - padding_value (
float
, optional, 默认为 0.0) — 用于填充音频的填充值。 - return_attention_mask (
bool
, optional, defaults toFalse
) — Whether to return the attention mask. Can be overwritten when calling the feature extractor.对于Whisper模型,
attention_mask
应始终在批量推理时传递,以避免细微的错误。 - stem_indices (
List[int]
, 可选, 默认为[3, 2]
) — 如果传递了demucs输出,则提取的干声通道。
构建一个MusicgenMelody特征提取器。
此特征提取器继承自SequenceFeatureExtractor,其中包含 大部分主要方法。用户应参考此超类以获取有关这些方法的更多信息。
该类从由Demucs处理的音频或直接从原始音频波形中提取色度特征。
_extract_stem_indices
< source >( audio sampling_rate = None )
从Demucs音频分离模型的输出中提取音轨,然后转换为单声道并重新采样到特征提取器的采样率。
MusicgenMelodyConfig
类 transformers.MusicgenMelodyConfig
< source >( num_chroma = 12 chroma_length = 235 **kwargs )
参数
- num_chroma (
int
, 可选, 默认为 12) — 使用的色度分箱数量. - chroma_length (
int
, optional, defaults to 235) — 如果使用音频来调节模型,则为最大色度持续时间。对应于训练期间使用的最大持续时间。 - kwargs (可选) —
关键字参数字典。特别是:
- text_encoder (PretrainedConfig, 可选) — 定义文本编码器配置的配置对象实例。
- audio_encoder (PretrainedConfig, 可选) — 定义音频编码器配置的配置对象实例。
- decoder (PretrainedConfig, 可选) — 定义解码器配置的配置对象实例。
这是用于存储MusicgenMelodyModel配置的配置类。它用于根据指定的参数实例化一个Musicgen Melody模型,定义文本编码器、音频编码器和Musicgen Melody解码器配置。使用默认值实例化配置将产生与facebook/musicgen-melody架构相似的配置。
配置对象继承自PretrainedConfig,可用于控制模型输出。阅读PretrainedConfig的文档以获取更多信息。
示例:
>>> from transformers import (
... MusicgenMelodyConfig,
... MusicgenMelodyDecoderConfig,
... T5Config,
... EncodecConfig,
... MusicgenMelodyForConditionalGeneration,
... )
>>> # Initializing text encoder, audio encoder, and decoder model configurations
>>> text_encoder_config = T5Config()
>>> audio_encoder_config = EncodecConfig()
>>> decoder_config = MusicgenMelodyDecoderConfig()
>>> configuration = MusicgenMelodyConfig.from_sub_models_config(
... text_encoder_config, audio_encoder_config, decoder_config
... )
>>> # Initializing a MusicgenMelodyForConditionalGeneration (with random weights) from the facebook/musicgen-melody style configuration
>>> model = MusicgenMelodyForConditionalGeneration(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_melody-model")
>>> # loading model and config from pretrained folder
>>> musicgen_melody_config = MusicgenMelodyConfig.from_pretrained("musicgen_melody-model")
>>> model = MusicgenMelodyForConditionalGeneration.from_pretrained("musicgen_melody-model", config=musicgen_melody_config)
from_sub_models_config
< source >( text_encoder_config: PretrainedConfig audio_encoder_config: PretrainedConfig decoder_config: MusicgenMelodyDecoderConfig **kwargs ) → MusicgenMelodyConfig
从文本编码器、音频编码器和解码器配置实例化一个MusicgenMelodyConfig(或派生类)。
MusicgenMelodyModel
类 transformers.MusicgenMelodyModel
< source >( config: MusicgenMelodyDecoderConfig )
参数
- config (MusicgenMelodyConfig) — 包含模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained() 方法以加载模型权重。
裸的MusicgenMelody解码器模型输出原始隐藏状态,没有任何特定的头部。
Musicgen Melody 模型由 Jade Copet、Felix Kreuk、Itai Gat、Tal Remez、David Kant、Gabriel Synnaeve、Yossi Adi 和 Alexandre Défossez 在 Simple and Controllable Music Generation 中提出。它是一个仅解码器的变压器,训练用于条件音乐生成任务。
该模型继承自PreTrainedModel。请查看超类文档以了解库为其所有模型实现的通用方法(如下载或保存、调整输入嵌入的大小、修剪头部等)。
该模型也是一个PyTorch torch.nn.Module 子类。 将其作为常规的PyTorch模块使用,并参考PyTorch文档以获取与一般使用和行为相关的所有信息。
前进
< source >( input_ids: 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 past_key_values: typing.Optional[typing.Tuple[typing.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 )
参数
- input_ids (
torch.LongTensor
of shape(batch_size * num_codebooks, sequence_length)
) — Indices of input sequence tokens in the vocabulary, corresponding to the sequence of audio codes.可以通过使用音频编码器模型对音频提示进行编码来获取索引,以预测音频代码,例如使用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
of shape(batch_size, sequence_length)
, optional) — Mask to avoid performing attention on padding token indices. Mask values selected in[0, 1]
:- 1 for tokens that are not masked,
- 0 for tokens that are masked.
- encoder_hidden_states (
torch.FloatTensor
of shape(batch_size, encoder_sequence_length, hidden_size)
, optional) — 表示文本编码器输出和处理后的音频编码器输出连接的隐藏状态序列。 用作条件信号,因此将被连接到投影的decoder_input_ids
。 - encoder_attention_mask (
torch.LongTensor
of shape(batch_size, encoder_sequence_length)
, optional) — Mask to avoid performing attention on conditional hidden states. Mask values selected in[0, 1]
:- 1 for tokens that are not masked,
- 0 for tokens that are masked.
- head_mask (
torch.Tensor
of shape(decoder_layers, decoder_attention_heads)
, optional) — 用于屏蔽注意力模块中选定头部的掩码。掩码值在[0, 1]
中选择:- 1 表示头部 未被屏蔽,
- 0 表示头部 被屏蔽.
- past_key_values (
tuple(tuple(torch.FloatTensor))
, optional, returned whenuse_cache=True
is passed or whenconfig.use_cache=True
) — Tuple oftuple(torch.FloatTensor)
of lengthconfig.n_layers
, with each tuple having 2 tensors of shape(batch_size, num_heads, sequence_length, embed_size_per_head)
)`.包含预先计算的隐藏状态(自注意力块中的键和值),可用于(参见
past_key_values
输入)加速顺序解码。如果使用了
past_key_values
,用户可以选择只输入形状为(batch_size, 1)
的最后一个decoder_input_ids
(那些没有将其过去键值状态提供给此模型的),而不是形状为(batch_size, sequence_length)
的所有decoder_input_ids
。 - inputs_embeds (
torch.FloatTensor
形状为(batch_size, sequence_length, hidden_size)
, 可选) — 可选地,您可以选择直接传递嵌入表示,而不是传递input_ids
。 如果您希望对如何将input_ids
索引转换为相关向量有更多控制,而不是使用模型的内部嵌入查找矩阵,这将非常有用。 - output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
。 - output_hidden_states (
bool
, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回一个 ModelOutput 而不是一个普通的元组。
MusicgenMelodyModel 的前向方法,重写了 __call__
特殊方法。
尽管前向传递的配方需要在此函数内定义,但之后应该调用Module
实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
MusicgenMelodyForCausalLM
类 transformers.MusicgenMelodyForCausalLM
< source >( config: MusicgenMelodyDecoderConfig )
参数
- config (MusicgenMelodyConfig) — 包含模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained() 方法以加载模型权重。
带有语言建模头的Musicgen Melody解码器模型。
Musicgen Melody 模型由 Jade Copet、Felix Kreuk、Itai Gat、Tal Remez、David Kant、Gabriel Synnaeve、Yossi Adi 和 Alexandre Défossez 在 Simple and Controllable Music Generation 中提出。它是一个仅解码器的变压器,训练用于条件音乐生成任务。
该模型继承自PreTrainedModel。请查看超类文档以了解库为其所有模型实现的通用方法(如下载或保存、调整输入嵌入的大小、修剪头部等)。
该模型也是一个PyTorch torch.nn.Module 子类。 将其作为常规的PyTorch模块使用,并参考PyTorch文档以获取与一般使用和行为相关的所有信息。
前进
< source >( input_ids: 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 past_key_values: typing.Optional[typing.Tuple[typing.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 labels: typing.Optional[torch.LongTensor] = None ) → transformers.models.musicgen_melody.modeling_musicgen_melody.MusicgenMelodyOutputWithPast
或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
of shape(batch_size * num_codebooks, sequence_length)
) — Indices of input sequence tokens in the vocabulary, corresponding to the sequence of audio codes.可以通过使用音频编码器模型对音频提示进行编码来获取索引,以预测音频代码,例如使用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
of shape(batch_size, sequence_length)
, optional) — Mask to avoid performing attention on padding token indices. Mask values selected in[0, 1]
:- 1 for tokens that are not masked,
- 0 for tokens that are masked.
- encoder_hidden_states (
torch.FloatTensor
of shape(batch_size, encoder_sequence_length, hidden_size)
, optional) — 表示文本编码器输出和处理后的音频编码器输出连接的隐藏状态序列。 用作条件信号,因此将连接到投影的decoder_input_ids
。 - encoder_attention_mask (
torch.LongTensor
of shape(batch_size, encoder_sequence_length)
, optional) — Mask to avoid performing attention on conditional hidden states. Mask values selected in[0, 1]
:- 1 for tokens that are not masked,
- 0 for tokens that are masked.
- head_mask (
torch.Tensor
形状为(decoder_layers, decoder_attention_heads)
, 可选) — 用于屏蔽注意力模块中选定的头部的掩码。掩码值在[0, 1]
中选择:- 1 表示头部 未被屏蔽,
- 0 表示头部 被屏蔽.
- past_key_values (
tuple(tuple(torch.FloatTensor))
, optional, returned whenuse_cache=True
is passed or whenconfig.use_cache=True
) — Tuple oftuple(torch.FloatTensor)
of lengthconfig.n_layers
, with each tuple having 2 tensors of shape(batch_size, num_heads, sequence_length, embed_size_per_head)
)`.包含预先计算的隐藏状态(自注意力块中的键和值),可用于(参见
past_key_values
输入)加速顺序解码。如果使用了
past_key_values
,用户可以选择只输入形状为(batch_size, 1)
的最后一个decoder_input_ids
(那些没有将其过去键值状态提供给此模型的),而不是形状为(batch_size, sequence_length)
的所有decoder_input_ids
。 - inputs_embeds (
torch.FloatTensor
of shape(batch_size, sequence_length, hidden_size)
, optional) — 可选地,您可以选择直接传递嵌入表示,而不是传递input_ids
。 如果您希望对如何将input_ids
索引转换为相关向量有更多控制,而不是使用模型的内部嵌入查找矩阵,这将非常有用。 - output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
。 - output_hidden_states (
bool
, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回一个 ModelOutput 而不是一个普通的元组。 - labels (
torch.LongTensor
of shape(batch_size, sequence_length, num_codebooks)
, optional) — 用于语言建模的标签。请注意,标签在模型内部被移位,即你可以设置labels = input_ids
索引在[-100, 0, ..., config.vocab_size]
中选择。所有设置为-100
的标签 将被忽略(屏蔽),损失仅针对[0, ..., config.vocab_size]
中的标签计算
返回
transformers.models.musicgen_melody.modeling_musicgen_melody.MusicgenMelodyOutputWithPast
或 tuple(torch.FloatTensor)
一个 transformers.models.musicgen_melody.modeling_musicgen_melody.MusicgenMelodyOutputWithPast
或一个由
torch.FloatTensor
组成的元组(如果传递了 return_dict=False
或当 config.return_dict=False
时),包含各种
元素,具体取决于配置(MusicgenMelodyConfig)和输入。
-
loss (
torch.FloatTensor
形状为(1,)
,可选,当提供labels
时返回) — 语言建模损失(用于下一个标记的预测)。 -
logits (
torch.FloatTensor
形状为(batch_size, sequence_length, config.vocab_size)
) — 语言建模头的预测分数(SoftMax 之前每个词汇标记的分数)。 -
past_key_values (
tuple(tuple(torch.FloatTensor))
,可选,当传递use_cache=True
或当config.use_cache=True
时返回) — 长度为config.n_layers
的tuple(torch.FloatTensor)
元组,每个元组包含 2 个形状为(batch_size, num_heads, sequence_length, embed_size_per_head)
的张量。包含预计算的隐藏状态(自注意力块中的键和值),可用于(参见
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 后的注意力权重,用于计算自注意力头中的加权平均值。
-
encoder_hidden_states (
torch.FloatTensor
形状为(batch_size, encoder_sequence_length, hidden_size)
,可选) — 表示投影文本编码器输出和投影音频编码器输出连接的条件的隐藏状态序列。 用作条件信号。
MusicgenMelodyForCausalLM 的前向方法,重写了 __call__
特殊方法。
尽管前向传递的配方需要在此函数内定义,但之后应该调用Module
实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
MusicgenMelodyForConditionalGeneration
类 transformers.MusicgenMelodyForConditionalGeneration
< source >( config: MusicgenMelodyConfig = 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_melody.modeling_musicgen_melody.MusicgenMelodyForCausalLM] = None )
参数
- config (MusicgenMelodyConfig) — 包含模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained() 方法以加载模型权重。
- text_encoder (
Optional[PreTrainedModel]
, optional) — 文本编码器. - audio_encoder (
Optional[PreTrainedModel]
, optional) — 音频编码解码器. - decoder (
Optional[MusicgenMelodyForCausalLM]
, optional) — 用于生成音频代码的MusicGen Melody解码器。
复合的Musicgen Melody模型,包含文本和音频条件模型、MusicgenMelody解码器和音频编码器,用于带有文本和/或音频提示的音乐生成任务。
Musicgen Melody 模型由 Jade Copet、Felix Kreuk、Itai Gat、Tal Remez、David Kant、Gabriel Synnaeve、Yossi Adi 和 Alexandre Défossez 在 Simple and Controllable Music Generation 中提出。它是一个仅解码器的变压器,训练用于条件音乐生成任务。
该模型继承自PreTrainedModel。请查看超类文档以了解库为其所有模型实现的通用方法(如下载或保存、调整输入嵌入的大小、修剪头部等)。
该模型也是一个PyTorch torch.nn.Module 子类。 将其作为常规的PyTorch模块使用,并参考PyTorch文档以获取与一般使用和行为相关的所有信息。
前进
< source >( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.BoolTensor] = None input_features: typing.Optional[torch.FloatTensor] = None decoder_input_ids: typing.Optional[torch.LongTensor] = None decoder_attention_mask: typing.Optional[torch.BoolTensor] = None past_key_values: typing.Tuple[typing.Tuple[torch.FloatTensor]] = None encoder_hidden_states: typing.Optional[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.models.musicgen_melody.modeling_musicgen_melody.MusicgenMelodyOutputWithPast
或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
of shape(batch_size, sequence_length)
) — Indices of input sequence tokens in the vocabulary. Padding will be ignored by default should you provide it.可以使用AutoTokenizer获取索引。详情请参见PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor
of shape(batch_size, sequence_length)
, optional) — Mask to avoid performing attention on padding token indices. Mask values selected in[0, 1]
:- 1 for tokens that are not masked,
- 0 for tokens that are masked.
- input_features (
torch.FloatTensor
of shape(batch_size, audio_sequence_length, num_chroma)
) — 输入音频特征。 这应该由MusicgenMelodyFeatureExtractor类返回,你也可以从AutoFeatureExtractor中获取。详情请参见MusicgenMelodyFeatureExtractor.__call__()
。 - decoder_input_ids (
torch.LongTensor
of shape(batch_size * num_codebooks, target_sequence_length)
, optional) — Indices of decoder input sequence tokens in the vocabulary, corresponding to the sequence of audio codes.可以通过使用音频编码器模型对音频提示进行编码来获取索引,以预测音频代码,例如使用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
of shape(batch_size, target_sequence_length)
, optional) — 默认行为:生成一个忽略decoder_input_ids
中填充标记的张量。默认情况下也会使用因果掩码。 - past_key_values (
tuple(tuple(torch.FloatTensor))
, optional, returned whenuse_cache=True
is passed or whenconfig.use_cache=True
) — Tuple oftuple(torch.FloatTensor)
of lengthconfig.n_layers
, with each tuple having 2 tensors of shape(batch_size, num_heads, encoder_sequence_length + sequence_length, embed_size_per_head)
).包含预先计算的隐藏状态(自注意力块中的键和值),可用于(参见
past_key_values
输入)加速顺序解码。如果使用了
past_key_values
,用户可以选择只输入形状为(batch_size, 1)
的最后一个decoder_input_ids
(那些没有将其过去键值状态提供给此模型的),而不是形状为(batch_size, sequence_length)
的所有decoder_input_ids
。 - encoder_hidden_states (
torch.FloatTensor
of shape(batch_size, encoder_sequence_length, hidden_size)
, optional) — 表示投影文本编码器输出和投影音频编码器输出连接的序列条件隐藏状态。 用作条件信号,因此将连接到投影的decoder_input_ids
。 - inputs_embeds (
torch.FloatTensor
of shape(batch_size, sequence_length, hidden_size)
, optional) — 可选地,您可以选择直接传递嵌入表示,而不是传递input_ids
。 如果您希望对如何将input_ids
索引转换为相关向量有更多控制,而不是使用模型的内部嵌入查找矩阵,这将非常有用。 - decoder_inputs_embeds (
torch.FloatTensor
of shape(batch_size, target_sequence_length, hidden_size)
, optional) — Optionally, instead of passingdecoder_input_ids
you can choose to directly pass an embedded representation. Ifpast_key_values
is used, optionally only the lastdecoder_inputs_embeds
have to be input (seepast_key_values
). This is useful if you want more control over how to convertdecoder_input_ids
indices into associated vectors than the model’s internal embedding lookup matrix.如果
decoder_input_ids
和decoder_inputs_embeds
都未设置,decoder_inputs_embeds
将取inputs_embeds
的值。 - labels (
torch.LongTensor
of shape(batch_size, sequence_length, num_codebooks)
, optional) — 用于语言建模的标签。请注意,标签在模型内部被移位,即你可以设置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
, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
。 - return_dict (
bool
, optional) — 是否返回一个ModelOutput而不是一个普通的元组。
返回
transformers.models.musicgen_melody.modeling_musicgen_melody.MusicgenMelodyOutputWithPast
或 tuple(torch.FloatTensor)
一个 transformers.models.musicgen_melody.modeling_musicgen_melody.MusicgenMelodyOutputWithPast
或一个由
torch.FloatTensor
组成的元组(如果传递了 return_dict=False
或当 config.return_dict=False
时),包含各种
元素,具体取决于配置(MusicgenMelodyConfig)和输入。
-
loss (
torch.FloatTensor
形状为(1,)
, 可选, 当提供labels
时返回) — 语言建模损失(用于下一个标记的预测)。 -
logits (
torch.FloatTensor
形状为(batch_size, sequence_length, config.vocab_size)
) — 语言建模头的预测分数(SoftMax 之前每个词汇标记的分数)。 -
past_key_values (
tuple(tuple(torch.FloatTensor))
, 可选, 当传递use_cache=True
或当config.use_cache=True
时返回) — 长度为config.n_layers
的tuple(torch.FloatTensor)
元组,每个元组包含 2 个形状为(batch_size, num_heads, sequence_length, embed_size_per_head)
的张量包含预计算的隐藏状态(自注意力块中的键和值),可用于(参见
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 后的注意力权重,用于计算自注意力头中的加权平均值。
-
encoder_hidden_states (
torch.FloatTensor
形状为(batch_size, encoder_sequence_length, hidden_size)
, 可选) — 表示投影文本编码器输出和投影音频编码器输出连接的条件的隐藏状态序列。 用作条件信号。
MusicgenMelodyForConditionalGeneration 的前向方法,重写了 __call__
特殊方法。
尽管前向传递的配方需要在此函数内定义,但之后应该调用Module
实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import AutoProcessor, MusicgenMelodyForConditionalGeneration
>>> import torch
>>> processor = AutoProcessor.from_pretrained("facebook/musicgen-melody")
>>> model = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody")
>>> 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, encoder_len + tgt_len, vocab_size)
torch.Size([8, 249, 2048])