Transformers 文档

点唱机

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

Jukebox

PyTorch

该模型目前仅处于维护模式,我们不接受任何更改其代码的新拉取请求(PR)。如果您在运行此模型时遇到任何问题,请重新安装支持此模型的最后一个版本:v4.40.2。您可以通过运行以下命令来完成此操作:pip install -U transformers==4.40.2

概述

Jukebox 模型由 Prafulla Dhariwal、Heewoo Jun、Christine Payne、Jong Wook Kim、Alec Radford 和 Ilya Sutskever 在论文 Jukebox: A generative model for music 中提出。它引入了一个生成式音乐模型,可以生成长达一分钟的样本,并且可以根据艺术家、流派和歌词进行条件生成。

论文摘要如下:

我们介绍 Jukebox,这是一个在原始音频域中生成带有人声音乐的模型。我们通过使用多尺度 VQ-VAE 将其压缩为离散代码来处理原始音频的长上下文,并使用自回归 Transformer 对这些代码进行建模。我们证明,大规模的组合模型可以生成高保真、多样化且连贯长达数分钟的歌曲。我们可以根据艺术家和流派来引导音乐和声乐风格,并根据未对齐的歌词使歌唱更具可控性。我们发布了数千个未经挑选的样本,以及模型权重和代码。

如下图所示,Jukebox 由 3 个 先验模型 (priors) 组成,它们是仅解码器模型。它们遵循 Generating Long Sequences with Sparse Transformers 中描述的架构,并经过修改以支持更长的上下文长度。首先,使用自编码器对文本歌词进行编码。接下来,第一个(也称为 top_prior)先验模型关注从歌词编码器中提取的最后隐藏状态。这些先验模型分别通过 AudioConditioner 模块与前一个先验模型相连。AudioConditioner 将前一个先验模型的输出上采样为特定音频帧率下的原始标记。诸如*艺术家、流派和时间*等元数据被传递给每个先验模型,形式为起始标记和用于时间数据的位置嵌入。隐藏状态被映射到 VQVAE 中最近的码本向量,以便将它们转换为原始音频。

JukeboxModel

该模型由 Arthur Zucker 贡献。原始代码可以在这里找到。

使用技巧

  • 该模型仅支持推理。这有几个原因,主要是因为它需要极大量的内存来进行训练。欢迎随时提交拉取请求(PR)并添加缺少的内容,以便与 Hugging Face Trainer 实现完全集成!
  • 此模型非常慢,在 V100 GPU 上使用 5b 的 top prior 模型生成一分钟长的音频需要 8 小时。为了自动处理模型应该在哪个设备上执行,请使用 accelerate
  • 与论文相反,先验模型的顺序从 01,因为这样感觉更直观:我们从 0 开始采样。
  • 引导采样(基于原始音频进行条件采样)比祖先采样需要更多内存,应将 fp16 设置为 True

该模型由 Arthur Zucker 贡献。原始代码可以在这里找到。

JukeboxConfig

class transformers.JukeboxConfig

< >

( vqvae_config = None prior_config_list = None nb_priors = 3 sampling_rate = 44100 timing_dims = 64 min_duration = 0 max_duration = 600.0 max_nb_genres = 5 metadata_conditioning = True **kwargs )

参数

  • vqvae_config (JukeboxVQVAEConfig, 可选) — JukeboxVQVAE 模型的配置。
  • prior_config_list (List[JukeboxPriorConfig], 可选) — 模型中每个 JukeboxPrior 的配置列表。原始架构使用 3 个先验模型。
  • nb_priors (int, 可选, 默认为 3) — 将顺序采样标记的先验模型数量。每个先验模型都是条件自回归(解码器)模型,除了顶级先验模型外,它可以包含一个歌词编码器。可用的模型是使用一个顶级先验模型和两个上采样先验模型进行训练的。
  • sampling_rate (int, 可选, 默认为 44100) — 原始音频的采样率。
  • timing_dims (int, 可选, 默认为 64) — JukeboxRangeEmbedding 层的维度,它等同于传统的位置嵌入层。时间嵌入层将当前采样音频中的绝对和相对位置转换为长度为 `timing_dims` 的张量,该张量将与音乐标记相加。
  • min_duration (int, 可选, 默认为 0) — 生成音频的最小持续时间
  • max_duration (float, 可选, 默认为 600.0) — 生成音频的最大持续时间
  • max_nb_genres (int, 可选, 默认为 5) — 可用于为单个样本提供条件的最大流派数量。
  • metadata_conditioning (bool, 可选, 默认为 True) — 是否使用元数据条件,对应于艺术家、流派和最小/最大持续时间。

这是用于存储 JukeboxModel 配置的配置类。

配置对象继承自 PretrainedConfig,可用于控制模型输出。有关更多信息,请阅读 PretrainedConfig 的文档。使用默认值实例化配置将产生与 openai/jukebox-1b-lyrics 架构类似的配置。

下采样和步幅用于确定输入序列的下采样。例如,downsampling = (5,3) 和 strides = (2, 2) 将音频下采样 2^5 = 32 以获得第一级代码,以及 2**8 = 256 以获得第二级代码。这主要适用于训练顶级先验模型和上采样器。

示例

>>> from transformers import JukeboxModel, JukeboxConfig

>>> # Initializing a Jukebox configuration
>>> configuration = JukeboxConfig()

>>> # Initializing a model from the configuration
>>> model = JukeboxModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

from_configs

< >

( prior_configs: list vqvae_config: JukeboxVQVAEConfig **kwargs ) JukeboxConfig

返回

JukeboxConfig

一个配置对象的实例

根据 CLIP 文本模型配置和 CLIP 视觉模型配置实例化一个 JukeboxConfig(或其派生类)。

JukeboxPriorConfig

class transformers.JukeboxPriorConfig

< >

( act_fn = 'quick_gelu' level = 0 alignment_head = 2 alignment_layer = 68 attention_multiplier = 0.25 attention_pattern = 'enc_dec_with_lyrics' attn_dropout = 0 attn_res_scale = False blocks = 64 conv_res_scale = None num_layers = 72 emb_dropout = 0 encoder_config = None encoder_loss_fraction = 0.4 hidden_size = 2048 init_scale = 0.2 is_encoder_decoder = True lyric_vocab_size = 80 mask = False max_duration = 600 max_nb_genres = 1 merged_decoder = True metadata_conditioning = True metadata_dims = [604, 7898] min_duration = 0 mlp_multiplier = 1.0 music_vocab_size = 2048 n_ctx = 6144 n_heads = 2 nb_relevant_lyric_tokens = 384 res_conv_depth = 3 res_conv_width = 128 res_convolution_multiplier = 1 res_dilation_cycle = None res_dilation_growth_rate = 1 res_downs_t = [3, 2, 2] res_strides_t = [2, 2, 2] resid_dropout = 0 sampling_rate = 44100 spread = None timing_dims = 64 zero_out = False **kwargs )

参数

  • act_fn (str, 可选, 默认为 "quick_gelu") — 激活函数。
  • alignment_head (int, 可选, 默认为 2) — 负责歌词和音乐对齐的头。仅用于计算歌词到音频的对齐。
  • alignment_layer (int, 可选, 默认为 68) — 负责歌词和音乐对齐的层的索引。仅用于计算歌词到音频的对齐。
  • attention_multiplier (float, 可选, 默认为 0.25) — 用于定义注意力层隐藏维度的乘数系数。0.25 表示将使用模型宽度的 0.25 倍。
  • attention_pattern (str, 可选, 默认为 "enc_dec_with_lyrics") — 用于解码器的注意力模式。
  • attn_dropout (int, 可选, 默认为 0) — 解码器中后注意力层 dropout 的概率。
  • attn_res_scale (bool, 可选, 默认为 False) — 是否缩放注意力条件模块中的残差。
  • blocks (int, 可选, 默认为 64) — block_attn 中使用的块数。在 JukeboxAttention 层中,长度为 seq_len 的序列被分解为 [blocks, seq_len // blocks]
  • conv_res_scale (int, 可选) — 是否缩放条件模块中的残差。由于顶层先验模型没有条件模块,默认值为 None,不应修改。
  • num_layers (int, 可选, 默认为 72) — Transformer 架构的层数。
  • emb_dropout (int, 可选, 默认为 0) — 歌词解码器中使用的嵌入丢弃率。
  • encoder_config (JukeboxPriorConfig, 可选) — 编码器的配置,用于为歌词建模先验。
  • encoder_loss_fraction (float, 可选, 默认为 0.4) — 用于歌词编码器损失前的乘法因子。
  • hidden_size (int, 可选, 默认为 2048) — 注意力层的隐藏维度。
  • init_scale (float, 可选, 默认为 0.2) — 先验模型模块的初始化尺度。
  • is_encoder_decoder (bool, 可选, 默认为 True) — 先验模型是否为编码器-解码器模型。如果不是,且 nb_relevant_lyric_tokens 大于 0,则应为歌词编码指定 encoder 参数。
  • mask (bool, 可选, 默认为 False) — 是否在注意力中屏蔽先前的位置。
  • max_duration (int, 可选, 默认为 600) — 生成歌曲支持的最大时长(秒)。
  • max_nb_genres (int, 可选, 默认为 1) — 可用于模型条件生成的最大音乐流派数量。
  • merged_decoder (bool, 可选, 默认为 True) — 解码器和编码器输入是否合并。这用于分离的编码器-解码器架构。
  • metadata_conditioning (bool, 可选, 默认为 True) — 是否根据艺术家和音乐流派元数据进行条件生成。
  • metadata_dims (List[int], 可选, 默认为 [604, 7898]) — 用于训练先验模型嵌入层的音乐流派数量和艺术家数量。
  • min_duration (int, 可选, 默认为 0) — 模型训练所使用的生成音频的最小持续时间。
  • mlp_multiplier (float, 可选, 默认为 1.0) — 用于定义 MLP 层隐藏维度的乘法系数。0.25 表示将使用模型宽度的 0.25 倍。
  • music_vocab_size (int, 可选, 默认为 2048) — 不同音乐标记的数量。应与 JukeboxVQVAEConfig.nb_discrete_codes 类似。
  • n_ctx (int, 可选, 默认为 6144) — 每个先验模型的上下文标记数量。上下文标记是在生成音乐标记时所关注的音乐标记。
  • n_heads (int, 可选, 默认为 2) — 注意力头的数量。
  • nb_relevant_lyric_tokens (int, 可选, 默认为 384) — 在采样长度为 n_ctx 的单个窗口时使用的歌词标记数量。
  • res_conv_depth (int, 可选, 默认为 3) — JukeboxMusicTokenConditioner 中用于上采样先前采样音频的 JukeboxDecoderConvBock 的深度。
  • res_conv_width (int, 可选, 默认为 128) — JukeboxMusicTokenConditioner 中用于上采样先前采样音频的 JukeboxDecoderConvBock 的宽度。
  • res_convolution_multiplier (int, 可选, 默认为 1) — 用于缩放 JukeboxResConv1DBlockhidden_dim 的乘数。
  • res_dilation_cycle (int, 可选) — 用于定义 JukeboxMusicTokenConditioner 的扩张周期。通常与 VQVAE 对应层级中使用的扩张周期类似。第一个先验模型不使用它,因为它不依赖于上层标记。
  • res_dilation_growth_rate (int, 可选, 默认为 1) — 在 JukeboxMusicTokenConditioner 的每个卷积块之间使用的扩张增长率。
  • res_downs_t (List[int], 可选, 默认为 [3, 2, 2]) — 音频条件网络中使用的下采样率。
  • res_strides_t (List[int], 可选, 默认为 [2, 2, 2]) — 音频条件网络中使用的步幅。
  • resid_dropout (int, 可选, 默认为 0) — 注意力模式中使用的残差丢弃率。
  • sampling_rate (int, 可选, 默认为 44100) — 用于训练的采样率。
  • spread (int, 可选) — summary_spread_attention 模式中使用的扩展值。
  • timing_dims (int, 可选, 默认为 64) — 时间嵌入的维度。
  • zero_out (bool, 可选, 默认为 False) — 是否在初始化时将卷积权重置零。

这是用于存储 JukeboxPrior 配置的配置类。它用于根据指定的参数实例化一个 JukeboxPrior,定义模型架构。使用默认值实例化一个配置将产生与 [openai/jukebox-1b-lyrics](https://huggingface.co/openai/jukebox -1b-lyrics) 架构中顶层先验模型相似的配置。

配置对象继承自 PretrainedConfig,可用于控制模型输出。有关更多信息,请阅读 PretrainedConfig 的文档。

JukeboxVQVAEConfig

class transformers.JukeboxVQVAEConfig

< >

( act_fn = 'relu' nb_discrete_codes = 2048 commit = 0.02 conv_input_shape = 1 conv_res_scale = False embed_dim = 64 hop_fraction = [0.125, 0.5, 0.5] levels = 3 lmu = 0.99 multipliers = [2, 1, 1] res_conv_depth = 4 res_conv_width = 32 res_convolution_multiplier = 1 res_dilation_cycle = None res_dilation_growth_rate = 3 res_downs_t = [3, 2, 2] res_strides_t = [2, 2, 2] sample_length = 1058304 init_scale = 0.2 zero_out = False **kwargs )

参数

  • act_fn (str, 可选, 默认为 "relu") — 模型的激活函数。
  • nb_discrete_codes (int, 可选, 默认为 2048) — VQVAE 的码本大小。
  • commit (float, 可选, 默认为 0.02) — 提交损失的乘数。
  • conv_input_shape (int, 可选, 默认为 1) — 音频通道数。
  • conv_res_scale (bool, 可选, 默认为 False) — 是否缩放 JukeboxResConv1DBlock 的残差。
  • embed_dim (int, 可选, 默认为 64) — 码本向量的嵌入维度。
  • hop_fraction (List[int], 可选, 默认为 [0.125, 0.5, 0.5]) — 继续采样过程中使用的非重叠窗口的比例。
  • levels (int, 可选, 默认为 3) — VQVAE 中使用的层级数量。
  • lmu (float, 可选, 默认为 0.99) — 用于码本更新的指数移动平均系数。更多细节请参考原始 VQVAE 论文的附录 A.1。
  • multipliers (List[int], 可选, 默认为 [2, 1, 1]) — 用于每个层级的深度和宽度乘数。作用于 res_conv_widthres_conv_depth
  • res_conv_depth (int, 可选, 默认为 4) — 编码器和解码器块的深度。如果不使用 multipliers,则每个层级的深度相同。
  • res_conv_width (int, 可选, 默认为 32) — 编码器和解码器块的宽度。如果不使用 multipliers,则每个层级的宽度相同。
  • res_convolution_multiplier (int, 可选, 默认为 1) — JukeboxResConv1DBlock 中使用的隐藏维度的缩放因子。
  • res_dilation_cycle (int, 可选) — JukeboxResnet 中使用的扩张周期值。如果使用整数,每个新的 Conv1 块的深度将减少 res_dilation_cycle 的幂次方。
  • res_dilation_growth_rate (int, 可选, 默认为 3) — VQVAE 中使用的 ResNet 扩张增长率(dilation_growth_rate ** depth)。
  • res_downs_t (List[int], 可选, 默认为 [3, 2, 2]) — 分层 VQ-VAE 每个层级的下采样率。
  • res_strides_t (List[int], 可选, 默认为 [2, 2, 2]) — 分层 VQ-VAE 每个层级使用的步幅。
  • sample_length (int, 可选, 默认为 1058304) — 提供 VQVAE 的最大输入形状。用于计算每个层级的输入形状。
  • init_scale (float, 可选, 默认为 0.2) — 初始化尺度。
  • zero_out (bool, 可选, 默认为 False) — 是否在初始化时将卷积权重置零。

这是一个配置类,用于存储 JukeboxVQVAE 的配置。它根据指定的参数实例化一个 `JukeboxVQVAE`,从而定义模型架构。使用默认值实例化配置将产生与 openai/jukebox-1b-lyrics 架构中的 VQVAE 类似的配置。

配置对象继承自 PretrainedConfig,可用于控制模型输出。有关更多信息,请阅读 PretrainedConfig 的文档。

JukeboxTokenizer

class transformers.JukeboxTokenizer

< >

( artists_file genres_file lyrics_file version = ['v3', 'v2', 'v2'] max_n_lyric_tokens = 512 n_genres = 5 unk_token = '<|endoftext|>' **kwargs )

参数

  • artists_file (str) — 包含艺术家和 ID 之间映射关系的词汇表文件路径。默认文件同时支持“v2”和“v3”。
  • genres_file (str) — 包含音乐流派和 ID 之间映射关系的词汇表文件路径。
  • lyrics_file (str) — 包含歌词分词所接受字符的词汇表文件路径。
  • version (list[str], optional, 默认为 ["v3", "v2", "v2"]) — 分词器版本列表。`5b-lyrics` 的顶层先验模型使用 `v3` 而非 `v2` 进行训练。
  • n_genres (int, optional, 默认为 1) — 用于创作的音乐流派最大数量。
  • max_n_lyric_tokens (int, optional, 默认为 512) — 要保留的最大歌词词元数量。
  • unk_token (str, optional, 默认为 "<|endoftext|>") — 未知词元。不在词汇表中的词元无法转换为 ID,将被设置为此词元。

构建一个 Jukebox 分词器。Jukebox 可以基于 3 种不同的输入进行条件化:

  • 艺术家:根据提供的字典为每位艺术家关联唯一的 ID。
  • 音乐流派:根据提供的字典为每种音乐流派关联唯一的 ID。
  • 歌词:基于字符的分词。必须使用词汇表内的字符列表进行初始化。

此分词器不需要训练。它应该能够处理不同数量的输入,因为模型可以基于这三种不同的查询进行条件化。如果未提供任何输入,将使用默认值。

取决于模型应该基于的音乐流派数量(`n_genres`)。

>>> from transformers import JukeboxTokenizer

>>> tokenizer = JukeboxTokenizer.from_pretrained("openai/jukebox-1b-lyrics")
>>> tokenizer("Alan Jackson", "Country Rock", "old town road")["input_ids"]
[tensor([[   0,    0,    0, 6785,  546,   41,   38,   30,   76,   46,   41,   49,
           40,   76,   44,   41,   27,   30]]), tensor([[  0,   0,   0, 145,   0]]), tensor([[  0,   0,   0, 145,   0]])]

您可以通过在实例化此分词器时或在对某些文本调用它时传递 add_prefix_space=True 来绕过此行为,但由于模型并非以这种方式进行预训练,这可能会导致性能下降。

如果未提供任何信息,音乐流派和艺术家将被随机选择或设置为 None。

此分词器继承自 PreTrainedTokenizer,其中包含了大部分主要方法。用户应参考此超类以获取有关这些方法的更多信息。

然而,代码不允许这样做,仅支持从多种音乐流派进行创作。

save_vocabulary

< >

( save_directory: str filename_prefix: typing.Optional[str] = None )

参数

  • save_directory (str) — 要保存的目录路径。如果目录不存在,将会被创建。
  • filename_prefix (Optional[str], optional) — 添加到分词器保存的文件名前的前缀。

将分词器的词汇表字典保存到提供的 save_directory 中。

JukeboxModel

class transformers.JukeboxModel

< >

( config )

参数

  • config (JukeboxConfig) — 包含模型所有参数的模型配置类。使用配置文件进行初始化不会加载与模型相关的权重,仅加载配置。请查阅 from_pretrained() 方法来加载模型权重。

用于音乐生成的裸 JUKEBOX 模型。支持 4 种采样技术:`primed_sample`、`upsample`、`continue_sample` 和 `ancestral_sample`。由于训练不是端到端的,它没有 `forward` 方法。如果你想微调模型,建议使用 `JukeboxPrior` 类并单独训练每个先验模型。

该模型继承自 PreTrainedModel。请查阅超类文档以了解该库为其所有模型实现的通用方法(如下载或保存、调整输入嵌入大小、修剪注意力头等)。

该模型也是一个 PyTorch torch.nn.Module 的子类。可以像常规 PyTorch 模块一样使用它,并参考 PyTorch 文档了解所有与一般用法和行为相关的事项。

ancestral_sample

< >

( labels n_samples = 1 **sampling_kwargs )

参数

  • labels (list[torch.LongTensor]) — 长度为 `n_sample` 的列表,形状为 `(self.levels, 4 + self.config.max_nb_genre + lyric_sequence_length)`,包含元数据,如 `artist_id`、`genre_id` 和完整的歌词词元列表,用于条件化生成过程。
  • n_samples (int, optional, 默认为 1) — 并行生成的样本数量。

根据提供的 `labels` 生成音乐词元。将从所需的先验层级开始,并自动对序列进行上采样。如果你想创建音频,应调用 `model.decode(tokens)`,它将使用 VQ-VAE 解码器将音乐词元转换为原始音频。

示例

>>> from transformers import AutoTokenizer, JukeboxModel, set_seed

>>> model = JukeboxModel.from_pretrained("openai/jukebox-1b-lyrics", min_duration=0).eval()
>>> tokenizer = AutoTokenizer.from_pretrained("openai/jukebox-1b-lyrics")

>>> lyrics = "Hey, are you awake? Can you talk to me?"
>>> artist = "Zac Brown Band"
>>> genre = "Country"
>>> metas = tokenizer(artist=artist, genres=genre, lyrics=lyrics)
>>> set_seed(0)
>>> music_tokens = model.ancestral_sample(metas.input_ids, sample_length=400)

>>> with torch.no_grad():
...     model.decode(music_tokens)[:, :10].squeeze(-1)
tensor([[-0.0219, -0.0679, -0.1050, -0.1203, -0.1271, -0.0936, -0.0396, -0.0405,
    -0.0818, -0.0697]])

primed_sample

< >

( raw_audio labels **sampling_kwargs )

参数

  • raw_audio (长度为 n_sampleslist[torch.Tensor]) — 将用作每个生成样本的条件信息的原始音频列表。
  • labels (长度为 n_sample 且形状为 (self.levels, self.config.max_nb_genre + lyric_sequence_length)list[torch.LongTensor]) — 元数据列表,如 `artist_id`、`genre_id` 和用于条件化生成的完整歌词词元列表。
  • sampling_kwargs (dict[Any]) — 由 `_sample` 函数使用的各种附加采样参数。参数的详细列表可在 `_sample` 函数文档中查看。

根据提供的 `raw_audio` 生成原始音频,该音频在每个生成层级用作条件。音频使用 VQ-VAE 的 3 个层级编码为音乐词元。这些词元用作每个层级的条件,这意味着不需要进行祖先采样。

continue_sample

< >

( music_tokens labels **sampling_kwargs )

参数

  • music_tokens (长度为 self.levelslist[torch.LongTensor]) — 将用作上下文以继续采样过程的音乐词元序列。应包含 `self.levels` 个张量,每个张量对应于特定层级的生成。
  • labels (长度为 n_sample 且形状为 (self.levels, self.config.max_nb_genre + lyric_sequence_length)list[torch.LongTensor]) — 元数据列表,如 `artist_id`、`genre_id` 和用于条件化生成的完整歌词词元列表。
  • sampling_kwargs (dict[Any]) — 由 `_sample` 函数使用的各种附加采样参数。参数的详细列表可在 `_sample` 函数文档中查看。

生成先前生成词元的延续。

upsample

< >

( music_tokens labels **sampling_kwargs )

参数

  • music_tokens (长度为 self.levelslist[torch.LongTensor]) — 将用作上下文以继续采样过程的音乐词元序列。应包含 `self.levels` 个张量,每个张量对应于特定层级的生成。
  • labels (长度为 n_sample 且形状为 (self.levels, self.config.max_nb_genre + lyric_sequence_length)list[torch.LongTensor]) — 元数据列表,如 `artist_id`、`genre_id` 和用于条件化生成的完整歌词词元列表。
  • sampling_kwargs (dict[Any]) — 由 `_sample` 函数使用的各种附加采样参数。参数的详细列表可在 `_sample` 函数文档中查看。

使用层级为 `level` 的先验对音乐词元序列进行上采样。

_sample

< >

( music_tokens labels sample_levels metas = None chunk_size = 32 sampling_temperature = 0.98 lower_batch_size = 16 max_batch_size = 16 sample_length_in_seconds = 24 compute_alignments = False sample_tokens = None offset = 0 save_results = True sample_length = None )

参数

  • music_tokens (list[torch.LongTensor]) — 长度为 `self.levels` 的音乐词元序列,将用作继续采样过程的上下文。应包含 `self.levels` 个张量,每个张量对应于特定层级的生成。
  • labels (list[torch.LongTensor]) — 长度为 `n_sample` 的列表,形状为 `(self.levels, 4 + self.config.max_nb_genre + lyric_sequence_length)`,包含元数据,如 `artist_id`、`genre_id` 和完整的歌词词元列表,用于条件化生成过程。
  • sample_levels (list[int]) — 将进行采样的期望层级列表。一个层级等同于先验在先验列表中的索引。
  • metas (list[Any], optional) — 用于生成 `labels` 的元数据。
  • chunk_size (int, optional, 默认为 32) — 音频块的大小,用于分块填充内存以防止内存溢出(OOM)错误。更大的块意味着更快的内存填充但消耗更多内存。
  • sampling_temperature (float, optional, 默认为 0.98) — 用于调整采样随机性的温度。
  • lower_batch_size (int, optional, 默认为 16) — 较低层级先验的最大批处理大小。
  • max_batch_size (int, optional, 默认为 16) — 顶层先验的最大批处理大小。
  • sample_length_in_seconds (int, optional, 默认为 24) — 生成的期望时长(以秒为单位)。
  • compute_alignments (bool, optional, 默认为 False) — 是否使用顶层先验计算歌词和音频之间的对齐。
  • sample_tokens (int, optional) — 每个层级应采样的确切词元数量。这主要用于运行虚拟实验。
  • offset (int, optional, 默认为 0) — 用作条件的音频偏移量,对应于音乐中的起始采样点。如果偏移量大于 0,歌词将被相应移动以考虑这一点。
  • save_results (bool, optional, 默认为 True) — 是否保存中间结果。如果为 `True`,将生成一个以开始时间命名的文件夹。
  • sample_length (int, optional) — 生成的期望长度(以采样点为单位)。

用于生成音乐词元的核心采样函数。遍历提供的层级列表,并在每一步保存生成的原始音频。

返回:torch.Tensor

示例

>>> from transformers import AutoTokenizer, JukeboxModel, set_seed
>>> import torch

>>> metas = dict(artist="Zac Brown Band", genres="Country", lyrics="I met a traveller from an antique land")
>>> tokenizer = AutoTokenizer.from_pretrained("openai/jukebox-1b-lyrics")
>>> model = JukeboxModel.from_pretrained("openai/jukebox-1b-lyrics", min_duration=0).eval()

>>> labels = tokenizer(**metas)["input_ids"]
>>> set_seed(0)
>>> zs = [torch.zeros(1, 0, dtype=torch.long) for _ in range(3)]
>>> zs = model._sample(zs, labels, [0], sample_length=40 * model.priors[0].raw_to_tokens, save_results=False)
>>> zs[0]
tensor([[1853, 1369, 1150, 1869, 1379, 1789,  519,  710, 1306, 1100, 1229,  519,
      353, 1306, 1379, 1053,  519,  653, 1631, 1467, 1229, 1229,   10, 1647,
     1254, 1229, 1306, 1528, 1789,  216, 1631, 1434,  653,  475, 1150, 1528,
     1804,  541, 1804, 1434]])

JukeboxPrior

class transformers.JukeboxPrior

< >

( config: JukeboxPriorConfig level = None nb_priors = 3 vqvae_encoder = None vqvae_decoder = None )

参数

  • config (JukeboxPriorConfig) — 包含模型所有参数的模型配置类。使用配置文件进行初始化不会加载与模型相关的权重,仅加载配置。请查阅 from_pretrained() 方法来加载模型权重。
  • level (int, optional) — 当前先验模型的层级。应在 `[0, nb_priors]` 范围内。
  • nb_priors (int, optional, 默认为 3) — 先验模型的总数。
  • vqvae_encoder (Callable, 可选) — VQVAE 编码器的编码方法,用于模型的前向传播过程。传递函数而不是 vqvae 模块,以避免获取参数。
  • vqvae_decoder (Callable, 可选) — VQVAE 解码器的解码方法,用于模型的前向传播过程。传递函数而不是 vqvae 模块,以避免获取参数。

JukeboxPrior 类,是各种条件和 transformer 的包装器。JukeboxPrior 可以看作是在音乐上训练的语言模型。它们对下一个 `music token`(音乐标记)预测任务进行建模。如果定义了(歌词)`encoder`(编码器),它也会对歌词进行 `next character`(下一个字符)预测。可以根据时序、艺术家、流派、歌词以及来自较低层级 Priors 的编码进行条件化。

sample

< >

( n_samples music_tokens = None music_tokens_conds = None metadata = None temp = 1.0 top_k = 0 top_p = 0.0 chunk_size = None sample_tokens = None )

参数

  • n_samples (int) — 要生成的样本数量。
  • music_tokens (list[torch.LongTensor], 可选) — 当前层级先前生成的标记。用作生成的上下文。
  • music_tokens_conds (list[torch.FloatTensor], 可选) — 由前一个 prior 模型生成的上层音乐标记。如果生成不以上层标记为条件,则为 `None`。
  • metadata (list[torch.LongTensor], 可选) — 包含元数据张量的列表,其中包含艺术家、流派和歌词标记。
  • temp (float, 可选, 默认为 1.0) — 采样温度。
  • top_k (int, 可选, 默认为 0) — 用于过滤的 top-k 概率。
  • top_p (float, 可选, 默认为 0.0) — 用于过滤的 top-p 概率。
  • chunk_size (int, 可选) — 用于准备 transformer 缓存的块大小。
  • sample_tokens (int, 可选) — 要采样的标记数量。

使用提供的条件和元数据对一个标记窗口进行祖先/引导采样。

forward

< >

( hidden_states: Tensor metadata: typing.Optional[list[torch.LongTensor]] decode: typing.Optional[bool] = False get_preds: typing.Optional[bool] = False )

参数

  • hidden_states (torch.Tensor) — 隐藏状态,应为原始音频
  • metadata (list[torch.LongTensor], 可选) — 包含元数据条件张量的列表,其中包含歌词和元数据标记。
  • decode (bool, 可选, 默认为 False) — 是否解码已编码的标记。
  • get_preds (bool, 可选, 默认为 False) — 是否返回模型的实际预测。

使用 `vqvae` 编码器对隐藏状态进行编码,然后在 `forward_tokens` 函数中预测下一个标记。损失是 `encoder` 损失和 `decoder` 损失之和。

JukeboxVQVAE

class transformers.JukeboxVQVAE

< >

( config: JukeboxVQVAEConfig )

参数

  • config (JukeboxConfig) — 包含模型所有参数的模型配置类。使用配置文件进行初始化不会加载与模型相关的权重,只会加载配置。请查看 from_pretrained() 方法来加载模型权重。

Jukebox 中使用的分层 VQ-VAE 模型。该模型遵循 Will Williams, Sam Ringer, Tom Ash, John Hughes, David MacLeod, Jamie Dougherty 的分层 VQVAE 论文。

该模型继承自 PreTrainedModel。请查阅超类文档以了解该库为其所有模型实现的通用方法(如下载或保存、调整输入嵌入大小、修剪注意力头等)。

该模型也是一个 PyTorch torch.nn.Module 的子类。可以像常规 PyTorch 模块一样使用它,并参考 PyTorch 文档了解所有与一般用法和行为相关的事项。

forward

< >

( raw_audio: FloatTensor )

参数

  • raw_audio (torch.FloatTensor) — 将被编码和解码的音频输入。

VQ-VAE 的前向传播,将 `raw_audio` 编码为潜在状态,然后为每个层级进行解码。计算提交损失(commit loss),该损失确保编码器计算的嵌入与码本向量接近。

示例

>>> from transformers import JukeboxVQVAE, set_seed
>>> import torch

>>> model = JukeboxVQVAE.from_pretrained("openai/jukebox-1b-lyrics").eval()
>>> set_seed(0)
>>> zs = [torch.randint(100, (4, 1))]
>>> model.decode(zs).shape
torch.Size([4, 8, 1])

编码

< >

( input_audio start_level = 0 end_level = None bs_chunks = 1 )

参数

  • input_audio (torch.Tensor) — 将使用码本编码为离散表示的原始音频。将为每个样本序列计算码本中最接近的 `code`。
  • start_level (int, 可选, 默认为 0) — 编码过程将开始的层级。默认为 0。
  • end_level (int, 可选) — 编码过程将开始的层级。默认为 None。
  • bs_chunks (int, 可选, 默认为 1) — 同时处理的原始音频块的数量。

将 `input_audio` 转换为由 `music_tokens` 组成的离散表示。

decode

< >

( music_tokens start_level = 0 end_level = None bs_chunks = 1 )

参数

  • music_tokens (torch.LongTensor) — 音乐标记的张量,将通过使用码本解码为原始音频。每个音乐标记都应该是码本中相应 `code` 向量的索引。
  • start_level (int, 可选) — 解码过程将开始的层级。默认为 0。
  • end_level (int, 可选) — 解码过程将开始的层级。默认为 None。
  • bs_chunks (int, 可选) — 同时处理的块数。

将输入的 `music_tokens` 转换为其 `raw_audio` 表示。

< > 在 GitHub 上更新