Transformers 文件
點唱機
並獲得增強的文件體驗
開始使用
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 將其壓縮為離散程式碼來處理原始音訊的長上下文,並使用自迴歸 Transformer 對這些程式碼進行建模。我們證明,大規模的組合模型可以生成高保真、多樣化且連貫長達數分鐘的歌曲。我們可以根據藝術家和流派來引導音樂和聲樂風格,並根據未對齊的歌詞使歌唱更具可控性。我們釋出了數千個未經挑選的樣本,以及模型權重和程式碼。
如下圖所示,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 架構類似的配置。
下采樣和步幅用於確定輸入序列的下采樣。例如,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
根據 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) — 用於縮放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]
) — 音訊條件網路中使用的步幅。 - 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_width
和res_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
< source >( 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
< source >( save_directory: str filename_prefix: typing.Optional[str] = None )
將分詞器的詞彙表字典儲存到提供的 save_directory 中。
JukeboxModel
class transformers.JukeboxModel
< source >( 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
< source >( 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
< source >( raw_audio labels **sampling_kwargs )
引數
- raw_audio (長度為
n_samples
的list[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
< source >( music_tokens labels **sampling_kwargs )
引數
- music_tokens (長度為
self.levels
的list[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
< source >( music_tokens labels **sampling_kwargs )
引數
- music_tokens (長度為
self.levels
的list[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
< 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]
, 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
< source >( 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 )
使用 `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 文件瞭解所有與一般用法和行為相關的事項。
VQ-VAE 的前向傳播,將 `raw_audio` 編碼為潛在狀態,然後為每個層級進行解碼。計算提交損失(commit loss),該損失確保編碼器計算的嵌入與碼本向量接近。
編碼
< 原始碼 >( input_audio start_level = 0 end_level = None bs_chunks = 1 )
將 `input_audio` 轉換為由 `music_tokens` 組成的離散表示。
decode
< 原始碼 >( music_tokens start_level = 0 end_level = None bs_chunks = 1 )
將輸入的 `music_tokens` 轉換為其 `raw_audio` 表示。