Jukebox
该模型仅处于维护模式,我们不接受任何更改其代码的新 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 处理原始音频的长期上下文,将其压缩为离散代码,并使用自回归 Transformers 对其进行建模。我们表明,规模化的组合模型可以生成高保真度和多样化的歌曲,其连贯性可达数分钟。我们可以根据艺术家和流派来引导音乐和人声风格,并根据未对齐的歌词来使人声更可控。我们发布了数千个未经精心挑选的样本,以及模型权重和代码。
如图所示,Jukebox 由 3 个仅解码器模型组成的 priors
组成。它们遵循 Generating Long Sequences with Sparse Transformers 中描述的架构,经过修改以支持更长的上下文长度。首先,使用自动编码器对文本歌词进行编码。接下来,第一个(也称为 top_prior
)先验关注从歌词编码器中提取的最后一个隐藏状态。通过 AudioConditioner
模块,分别将先验链接到先前的先验。AudioConditioner
将先前先验的输出上采样到特定音频帧每秒分辨率的原始令牌。诸如艺术家、流派和时间之类的元数据以起始令牌和时间数据的方位嵌入的形式传递到每个先验。为了将隐藏状态转换为原始音频,它们被映射到来自 VQVAE 的最接近代码本向量。
该模型由 Arthur Zucker 贡献。原始代码可以在 此处找到。
使用技巧
- 该模型仅支持推理。这是因为几个原因,主要是因为训练需要大量的内存。随意打开一个 PR 并添加任何缺失的部分,以实现与 hugging face trainer 的完全集成!
- 该模型速度非常慢,在 V100 GPU 上使用 5b top prior 生成一分钟长的音频需要 8 个小时。为了自动处理模型应该执行的设备,请使用
accelerate
。 - 与论文不同,先验的顺序从
0
到1
,因为这样做感觉更直观:我们从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 架构类似的配置。
下采样和步长用于确定输入序列的下采样。例如,下采样 = (5,3),步长 = (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(或派生类)。
JukeboxPriorConfig
class transformers.JukeboxPriorConfig
< source >( 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
, optional, defaults to"quick_gelu"
) — 激活函数。 - alignment_head (
int
, optional, defaults to 2) — 负责歌词和音乐对齐的头部。仅用于计算歌词到音频的对齐。 - alignment_layer (
int
, optional, defaults to 68) — 负责歌词和音乐对齐的层的索引。仅用于计算歌词到音频的对齐。 - attention_multiplier (
float
, optional, defaults to 0.25) — 用于定义注意力层的隐藏维度的乘数系数。0.25 表示将使用模型宽度的 0.25。 - attention_pattern (
str
, optional, defaults to"enc_dec_with_lyrics"
) — 用于解码器的注意力模式。 - attn_dropout (
int
, optional, defaults to 0) — 解码器中注意力层后 dropout 的 dropout 概率。 - attn_res_scale (
bool
, optional, defaults toFalse
) — 是否在注意力调节器块中缩放残差。 - blocks (
int
, optional, defaults to 64) — 在block_attn
中使用的块数。长度为 seq_len 的序列在JukeboxAttention
层中被分解为[blocks, seq_len // blocks]
。 - conv_res_scale (
int
, optional) — 是否在调节器块中缩放残差。由于顶层先验没有调节器,因此默认值为 None,不应修改。 - num_layers (
int
, optional, defaults to 72) — 变压器架构的层数。 - emb_dropout (
int
, optional, defaults to 0) — 歌词解码器中使用的嵌入 dropout。 - encoder_config (
JukeboxPriorConfig
, optional) — 对歌词进行先验建模的编码器的配置。 - encoder_loss_fraction (
float
, optional, defaults to 0.4) — 用于歌词编码器损失前面的乘数因子。 - is_encoder_decoder (
bool
, 可选, 默认值True
) — 先验是否为编码器-解码器模型。如果不是,并且nb_relevant_lyric_tokens
大于 0,则应为歌词编码指定encoder
参数。 - mask (
bool
, 可选, 默认值False
) — 是否在注意力中屏蔽前面的位置。 - max_duration (
int
, 可选, 默认值 600) — 生成的歌曲的最大支持时长(秒)。 - max_nb_genres (
int
, 可选, 默认值 1) — 可用于条件化模型的 genres 的最大数量。 - merged_decoder (
bool
, 可选, 默认值True
) — 解码器和编码器输入是否合并。这用于分离的编码器-解码器架构。 - metadata_conditioning (
bool
, 可选, 默认值True)
— 是否根据艺术家和 genres 元数据进行条件化。 - metadata_dims (
List[int]
, 可选, 默认值[604, 7898]
) — 用于训练先验模型的嵌入层的 genres 数量和艺术家数量。 - min_duration (
int
, 可选, 默认值 0) — 模型训练的生成的音频的最小时长。 - mlp_multiplier (
float
, 可选, 默认值 1.0) — 用于定义 MLP 层的隐藏维度的乘数系数。0.25 表示将使用模型宽度的 0.25 倍。 - 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) — 用于缩放JukeboxResConv1DBlock
的hidden_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]
) — 音频条件网络中使用的步幅。 - spread (
int
, optional) — 在summary_spread_attention
模式中使用的扩展。 - timing_dims (
int
, optional, defaults to 64) — 时序嵌入的维度。 - zero_out (
bool
, optional, defaults toFalse
) — 初始化时是否将卷积权重清零。
这是一个配置类,用于存储一个JukeboxPrior的配置。它用于根据指定的参数实例化一个JukeboxPrior
,定义模型架构。使用默认值实例化配置将产生与[openai/jukebox-1b-lyrics](https://huggingface.co/openai/jukebox -1b-lyrics)架构的顶层先验类似的配置。
配置对象继承自PretrainedConfig,可用于控制模型输出。阅读来自PretrainedConfig的文档以获取更多信息。
JukeboxVQVAEConfig
class transformers.JukeboxVQVAEConfig
< source >( 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
, optional, defaults to"relu"
) — 模型的激活函数。 - nb_discrete_codes (
int
, optional, defaults to 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_width
和res_conv_depth
- res_conv_depth (
int
, 可选, 默认值为 4) — 编码器和解码器块的深度。如果没有使用multipliers
,则每个级别的深度都相同。 - res_conv_width (
int
, 可选, 默认值为 32) — 编码器和解码器块的宽度。如果没有使用multipliers
,则每个级别的宽度都相同。 - res_dilation_growth_rate (
int
, 可选, 默认为 3) — VQVAE 中使用的 Resnet 膨胀增长率 (dilation_growth_rate ** 深度) - 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
, default to["v3", "v2", "v2"]
) — 标记器版本列表。5b-lyrics
的顶层先验模型使用v3
而不是v2
训练。 - n_genres (
int
,optional
, defaults to 1) — 用于组合的最大流派数量。 - max_n_lyric_tokens (
int
,optional
, defaults to 512) — 保留的最大歌词标记数量。 - unk_token (
str
, optional, defaults to"<|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,其中包含大多数主要方法。用户应参考:此超类以获取有关这些方法的更多信息。
但是代码不允许这样做,只支持从不同流派进行创作。
将分词器的词汇字典保存到提供的保存目录。
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
生成音乐令牌。将从所需的先验级别开始,并自动对序列进行上采样。如果你想创建音频,你应该调用 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 (
List[torch.Tensor]
长度为n_samples
) — 一个原始音频列表,将被用作每个将要生成的样本的条件信息。 - labels (
List[torch.LongTensor]
长度为n_sample
,形状为(self.levels, self.config.max_nb_genre + lyric_sequence_length)
— 用于条件生成的元数据列表,例如artist_id
、genre_id
以及完整的歌词标记列表。 - sampling_kwargs (
Dict[Any]
) — 由_sample
函数使用的各种其他采样参数。可以在_sample
函数文档中查看参数的详细列表。
生成一个以提供的 raw_audio
为条件的原始音频,该音频在生成过程的每个级别上都用作条件。音频使用 VQ-VAE 的 3 个级别编码为音乐标记。这些标记用于:作为每个级别的条件,这意味着不需要祖先采样。
continue_sample
< source > ( music_tokens labels **sampling_kwargs )
参数
- music_tokens (
List[torch.LongTensor]
长度为self.levels
) — 将用作继续采样过程的上下文的音乐标记序列。应该有self.levels
个张量,每个张量对应于某个级别的生成。 - labels (
List[torch.LongTensor]
长度为n_sample
,形状为(self.levels, self.config.max_nb_genre + lyric_sequence_length)
— 用于条件生成的元数据列表,例如artist_id
、genre_id
以及完整的歌词标记列表。 - sampling_kwargs (
Dict[Any]
) — 由_sample
函数使用的各种其他采样参数。可以在_sample
函数文档中查看参数的详细列表。
生成先前生成标记的延续。
upsample
< source > ( music_tokens labels **sampling_kwargs )
使用 level
级别的先验对音乐标记序列进行上采样。
_sample
< source > ( 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]
, 可选) — 用于生成labels
的元数据 - chunk_size (
int
, 可选, 默认值为 32) — 音频块的大小,用于以块的形式填充内存,以防止 OOM 错误。更大的块意味着更快的内存填充,但消耗更多。 - sampling_temperature (
float
, 可选, 默认值为 0.98) — 用于调整采样随机性的温度。 - lower_batch_size (
int
, 可选, 默认值为 16) — 较低级别先验的最大批次大小。 - max_batch_size (
int
, optional, defaults to 16) — 最高级别的先验的最大批次大小 - sample_length_in_seconds (
int
, optional, defaults to 24) — 期望的生成长度,以秒为单位 - compute_alignments (
bool
, optional, defaults toFalse
) — 是否计算歌词和音频之间的对齐,使用 top_prior - sample_tokens (
int
, optional) — 在每个级别上应该采样的精确令牌数量。这对于运行虚拟实验很有用 - offset (
int
, optional, defaults to 0) — 用作条件的音频偏移,对应于音乐中的起始样本。如果偏移大于 0,歌词将被偏移以考虑这一点 - save_results (
bool
, optional, defaults toTrue
) — 是否保存中间结果。如果为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
< source >( config: JukeboxPriorConfig level = None nb_priors = 3 vqvae_encoder = None vqvae_decoder = None )
参数
- config (
JukeboxPriorConfig
) — 模型配置类,包含模型的所有参数。使用配置文件进行初始化不会加载与模型关联的权重,只会加载配置。查看 from_pretrained() 方法来加载模型权重。 - level (
int
, optional) — 当前 Prior 的级别。应在范围[0,nb_priors]
内。 - nb_priors (
int
, optional, defaults to 3) — Prior 的总数。 - vqvae_encoder (
Callable
, optional) — 模型前向传递中使用的 VQVAE 编码器的编码方法。传递函数而不是 vqvae 模块,以避免获取参数。 - vqvae_decoder (
Callable
, optional) — 模型前向传递中使用的 VQVAE 解码器的解码方法。传递函数而不是 vqvae 模块,以避免获取参数。
JukeboxPrior 类,它是各种条件和 transformer 的包装器。JukeboxPrior 可以被看作是在音乐上训练的语言模型。它们对下一个 music token
预测任务进行建模。如果定义了 (歌词) encoderù,它也对
下一个字符` 对歌词的预测进行建模。可以根据时间、艺术家、流派、歌词和来自较低级别 Prior 的代码进行条件化。
示例
< source > ( 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]
, optional) — 在当前级别生成的先前标记。用作生成的上下文。 - music_tokens_conds (
List[torch.FloatTensor]
, optional) — 由先前 Prior 模型生成的上一级音乐标记。如果生成不以上一级标记为条件,则为None
。 - metadata (
List[torch.LongTensor]
, optional) — 包含带有艺术家、流派和歌词标记的元数据张量的列表。 - top_p (
float
, 可选, 默认为 0.0) — 用于过滤的概率前 p 个。 - chunk_size (
int
, 可选) — 用于准备transformer缓存的块的大小。 - sample_tokens (
int
, 可选) — 要采样的令牌数量。
使用提供的条件和元数据对令牌窗口进行祖先/初始采样。
forward
< source > ( hidden_states: Tensor metadata: Optional decode: Optional = False get_preds: Optional = False )
使用vqvae
编码器对隐藏状态进行编码,然后在forward_tokens
函数中预测下一个令牌。损失是encoder
损失和decoder
损失的总和。
JukeboxVQVAE
Jukebox 中使用的分层 VQ-VAE 模型。该模型遵循来自 Will Williams、Sam Ringer、Tom Ash、John Hughes、David MacLeod、Jamie Dougherty 的分层 VQVAE 论文。
此模型继承自 PreTrainedModel。查看超类文档,了解库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头等)。
此模型也是 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以了解有关通用用法和行为的所有事项。
VQ-VAE 的前向传递,将 raw_audio
编码为潜在状态,然后为每个级别解码。计算提交损失,以确保编码器计算的嵌入接近码本向量。
encode
< source > ( input_audio start_level = 0 end_level = None bs_chunks = 1 )
将 input_audio
转换为由 music_tokens
组成的离散表示。
decode
< source > ( music_tokens start_level = 0 end_level = None bs_chunks = 1 )
将输入的music_tokens
转换为其raw_audio
表示形式。