Transformers 文件
Pop2Piano
並獲得增強的文件體驗
開始使用
Pop2Piano
概述
Pop2Piano 模型由 Jongho Choi 和 Kyogu Lee 在Pop2Piano: 基於流行音樂音訊的鋼琴翻彈生成中提出。
流行音樂的鋼琴翻彈廣受歡迎,但從音樂生成它們並非易事。它需要豐富的鋼琴演奏專業知識以及對歌曲不同特徵和旋律的瞭解。使用 Pop2Piano,您可以直接從歌曲的音訊波形生成翻彈。它是第一個無需旋律和和絃提取模組即可直接從流行音樂音訊生成鋼琴翻彈的模型。
Pop2Piano 是一個基於T5的編碼器-解碼器Transformer模型。輸入音訊被轉換為其波形並傳遞給編碼器,編碼器將其轉換為潛在表示。解碼器使用這些潛在表示以自迴歸方式生成令牌ID。每個令牌ID對應四種不同令牌型別之一:時間、速度、音符和“特殊”。然後將令牌ID解碼為等效的MIDI檔案。
論文摘要如下:
流行音樂的鋼琴翻彈深受許多人的喜愛。然而,自動生成流行音樂鋼琴翻彈的任務仍未得到充分研究。這部分是由於缺乏同步的{流行音樂,鋼琴翻彈}資料對,這使得應用最新的資料密集型深度學習方法變得具有挑戰性。為了利用資料驅動方法的強大功能,我們使用自動化流程製作了大量配對和同步的{流行音樂,鋼琴翻彈}資料。在本文中,我們提出了Pop2Piano,一個在給定流行音樂波形的情況下生成鋼琴翻彈的Transformer網路。據我們所知,這是第一個無需使用旋律和和絃提取模組即可直接從流行音樂音訊生成鋼琴翻彈的模型。我們證明了用我們的資料集訓練的Pop2Piano能夠產生合理的鋼琴翻彈。
該模型由Susnato Dhar貢獻。原始程式碼可在此處找到。
使用技巧
- 要使用 Pop2Piano,您需要安裝 🤗 Transformers 庫以及以下第三方模組
pip install pretty-midi==0.2.9 essentia==2.1b6.dev1034 librosa scipy
請注意,安裝後您可能需要重新啟動執行時。
- Pop2Piano 是一個基於編碼器-解碼器的模型,類似於 T5。
- Pop2Piano 可用於為給定音訊序列生成 MIDI 音訊檔案。
- 在
Pop2PianoForConditionalGeneration.generate()
中選擇不同的作曲家可以產生各種不同的結果。 - 載入音訊檔案時將取樣率設定為 44.1 kHz 可以獲得良好的效能。
- 儘管 Pop2Piano 主要在韓國流行音樂上進行訓練,但它在其他西方流行音樂或嘻哈歌曲上表現也相當不錯。
示例
- 使用 HuggingFace 資料集的示例
>>> from datasets import load_dataset
>>> from transformers import Pop2PianoForConditionalGeneration, Pop2PianoProcessor
>>> model = Pop2PianoForConditionalGeneration.from_pretrained("sweetcocoa/pop2piano")
>>> processor = Pop2PianoProcessor.from_pretrained("sweetcocoa/pop2piano")
>>> ds = load_dataset("sweetcocoa/pop2piano_ci", split="test")
>>> inputs = processor(
... audio=ds["audio"][0]["array"], sampling_rate=ds["audio"][0]["sampling_rate"], return_tensors="pt"
... )
>>> model_output = model.generate(input_features=inputs["input_features"], composer="composer1")
>>> tokenizer_output = processor.batch_decode(
... token_ids=model_output, feature_extractor_output=inputs
... )["pretty_midi_objects"][0]
>>> tokenizer_output.write("./Outputs/midi_output.mid")
- 使用您自己的音訊檔案的示例
>>> import librosa
>>> from transformers import Pop2PianoForConditionalGeneration, Pop2PianoProcessor
>>> audio, sr = librosa.load("<your_audio_file_here>", sr=44100) # feel free to change the sr to a suitable value.
>>> model = Pop2PianoForConditionalGeneration.from_pretrained("sweetcocoa/pop2piano")
>>> processor = Pop2PianoProcessor.from_pretrained("sweetcocoa/pop2piano")
>>> inputs = processor(audio=audio, sampling_rate=sr, return_tensors="pt")
>>> model_output = model.generate(input_features=inputs["input_features"], composer="composer1")
>>> tokenizer_output = processor.batch_decode(
... token_ids=model_output, feature_extractor_output=inputs
... )["pretty_midi_objects"][0]
>>> tokenizer_output.write("./Outputs/midi_output.mid")
- 批次處理多個音訊檔案的示例
>>> import librosa
>>> from transformers import Pop2PianoForConditionalGeneration, Pop2PianoProcessor
>>> # feel free to change the sr to a suitable value.
>>> audio1, sr1 = librosa.load("<your_first_audio_file_here>", sr=44100)
>>> audio2, sr2 = librosa.load("<your_second_audio_file_here>", sr=44100)
>>> model = Pop2PianoForConditionalGeneration.from_pretrained("sweetcocoa/pop2piano")
>>> processor = Pop2PianoProcessor.from_pretrained("sweetcocoa/pop2piano")
>>> inputs = processor(audio=[audio1, audio2], sampling_rate=[sr1, sr2], return_attention_mask=True, return_tensors="pt")
>>> # Since we now generating in batch(2 audios) we must pass the attention_mask
>>> model_output = model.generate(
... input_features=inputs["input_features"],
... attention_mask=inputs["attention_mask"],
... composer="composer1",
... )
>>> tokenizer_output = processor.batch_decode(
... token_ids=model_output, feature_extractor_output=inputs
... )["pretty_midi_objects"]
>>> # Since we now have 2 generated MIDI files
>>> tokenizer_output[0].write("./Outputs/midi_output1.mid")
>>> tokenizer_output[1].write("./Outputs/midi_output2.mid")
- 批次處理多個音訊檔案的示例(使用
Pop2PianoFeatureExtractor
和Pop2PianoTokenizer
)
>>> import librosa
>>> from transformers import Pop2PianoForConditionalGeneration, Pop2PianoFeatureExtractor, Pop2PianoTokenizer
>>> # feel free to change the sr to a suitable value.
>>> audio1, sr1 = librosa.load("<your_first_audio_file_here>", sr=44100)
>>> audio2, sr2 = librosa.load("<your_second_audio_file_here>", sr=44100)
>>> model = Pop2PianoForConditionalGeneration.from_pretrained("sweetcocoa/pop2piano")
>>> feature_extractor = Pop2PianoFeatureExtractor.from_pretrained("sweetcocoa/pop2piano")
>>> tokenizer = Pop2PianoTokenizer.from_pretrained("sweetcocoa/pop2piano")
>>> inputs = feature_extractor(
... audio=[audio1, audio2],
... sampling_rate=[sr1, sr2],
... return_attention_mask=True,
... return_tensors="pt",
... )
>>> # Since we now generating in batch(2 audios) we must pass the attention_mask
>>> model_output = model.generate(
... input_features=inputs["input_features"],
... attention_mask=inputs["attention_mask"],
... composer="composer1",
... )
>>> tokenizer_output = tokenizer.batch_decode(
... token_ids=model_output, feature_extractor_output=inputs
... )["pretty_midi_objects"]
>>> # Since we now have 2 generated MIDI files
>>> tokenizer_output[0].write("./Outputs/midi_output1.mid")
>>> tokenizer_output[1].write("./Outputs/midi_output2.mid")
Pop2PianoConfig
class transformers.Pop2PianoConfig
< source >( vocab_size = 2400 composer_vocab_size = 21 d_model = 512 d_kv = 64 d_ff = 2048 num_layers = 6 num_decoder_layers = None num_heads = 8 relative_attention_num_buckets = 32 relative_attention_max_distance = 128 dropout_rate = 0.1 layer_norm_epsilon = 1e-06 initializer_factor = 1.0 feed_forward_proj = 'gated-gelu' is_encoder_decoder = True use_cache = True pad_token_id = 0 eos_token_id = 1 dense_act_fn = 'relu' **kwargs )
引數
- vocab_size (
int
, 可選, 預設為 2400) —Pop2PianoForConditionalGeneration
模型的詞彙表大小。定義了呼叫 Pop2PianoForConditionalGeneration 時傳遞的inputs_ids
可以表示的不同令牌的數量。 - composer_vocab_size (
int
, 可選, 預設為 21) — 表示作曲家的數量。 - d_model (
int
, 可選, 預設為 512) — 編碼器層和池化層的大小。 - d_kv (
int
, 可選, 預設為 64) — 每個注意力頭的鍵、查詢、值投影的大小。投影層的inner_dim
將定義為num_heads * d_kv
。 - d_ff (
int
, 可選, 預設為 2048) — 每個Pop2PianoBlock
中間前饋層的大小。 - num_layers (
int
, 可選, 預設為 6) — Transformer 編碼器中的隱藏層數量。 - num_decoder_layers (
int
, 可選) — Transformer 解碼器中的隱藏層數量。如果未設定,將使用與num_layers
相同的值。 - num_heads (
int
, 可選, 預設為 8) — Transformer 編碼器中每個注意力層的注意力頭數量。 - relative_attention_num_buckets (
int
, 可選, 預設為 32) — 每個注意力層使用的桶的數量。 - relative_attention_max_distance (
int
, 可選, 預設為 128) — 用於桶分離的較長序列的最大距離。 - dropout_rate (
float
, 可選, 預設為 0.1) — 所有 dropout 層的比率。 - layer_norm_epsilon (
float
, 可選, 預設為 1e-6) — 層歸一化層使用的 epsilon。 - initializer_factor (
float
, 可選, 預設為 1.0) — 用於初始化所有權重矩陣的因子(應保持為 1.0,內部用於初始化測試)。 - feed_forward_proj (
string
, 可選, 預設為"gated-gelu"
) — 要使用的前饋層型別。應為"relu"
或"gated-gelu"
之一。 - use_cache (
bool
, 可選, 預設為True
) — 模型是否應返回最後一個鍵/值注意力(並非所有模型都使用)。 - dense_act_fn (
string
, 可選, 預設為"relu"
) — 用於Pop2PianoDenseActDense
和Pop2PianoDenseGatedActDense
中的啟用函式型別。
這是配置類,用於儲存 Pop2PianoForConditionalGeneration 的配置。它用於根據指定引數例項化 Pop2PianoForConditionalGeneration 模型,定義模型架構。使用預設值例項化配置將生成與 Pop2Piano sweetcocoa/pop2piano 架構類似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請參閱 PretrainedConfig 的文件。
Pop2PianoFeatureExtractor
Pop2PianoForConditionalGeneration
class transformers.Pop2PianoForConditionalGeneration
< source >( config: Pop2PianoConfig )
引數
- config (Pop2PianoConfig) — 包含模型所有引數的模型配置類。使用配置檔案初始化並不會載入與模型相關的權重,只加載配置。請檢視 from_pretrained() 方法來載入模型權重。
Pop2Piano 模型,頂部帶有一個 語言建模
頭。
該模型繼承自 PreTrainedModel。請檢視超類文件,瞭解該庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
該模型也是 PyTorch torch.nn.Module 的子類。請將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件以瞭解所有與一般用法和行為相關的事項。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.FloatTensor] = None decoder_input_ids: typing.Optional[torch.LongTensor] = None decoder_attention_mask: typing.Optional[torch.BoolTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None decoder_head_mask: typing.Optional[torch.FloatTensor] = None cross_attn_head_mask: typing.Optional[torch.Tensor] = None encoder_outputs: typing.Optional[tuple[tuple[torch.Tensor]]] = None past_key_values: typing.Optional[tuple[tuple[torch.Tensor]]] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None input_features: 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 cache_position: typing.Optional[torch.LongTensor] = None ) → transformers.modeling_outputs.Seq2SeqLMOutput 或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
形狀為(batch_size, sequence_length)
) — 詞彙表中輸入序列令牌的索引。Pop2Piano 是一個具有相對位置嵌入的模型,因此您應該能夠在左右兩邊填充輸入。索引可以使用 AutoTokenizer 獲取。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。 什麼是輸入 ID? 要了解如何為預訓練準備input_ids
,請參閱 Pop2Piano 訓練。 - attention_mask (
torch.FloatTensor
形狀為(batch_size, sequence_length)
, 可選) — 避免對填充令牌索引執行注意力的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示令牌**未被掩碼**,
- 0 表示令牌**已被掩碼**。
- decoder_input_ids (
torch.LongTensor
形狀為(batch_size, target_sequence_length)
, 可選) — 解碼器輸入序列令牌在詞彙表中的索引。索引可以使用 AutoTokenizer 獲取。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。 什麼是解碼器輸入 ID? Pop2Piano 使用pad_token_id
作為decoder_input_ids
生成的起始令牌。如果使用past_key_values
,可以選擇只輸入最後一個decoder_input_ids
(那些沒有將過去的鍵值狀態提供給此模型的)(參見past_key_values
)。要了解如何準備 - decoder_attention_mask (
torch.BoolTensor
形狀為(batch_size, target_sequence_length)
, 可選) — 預設行為:生成一個忽略decoder_input_ids
中填充令牌的張量。預設情況下也將使用因果掩碼。 - head_mask (
torch.FloatTensor
形狀為(num_heads,)
或(num_layers, num_heads)
, 可選) — 用於使自注意力模組的選定頭部無效的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示頭部**未被掩碼**,
- 0 表示頭部**已被掩碼**。
- decoder_head_mask (
torch.FloatTensor
形狀為(num_heads,)
或(num_layers, num_heads)
, 可選) — 用於使解碼器中自注意力模組的選定頭部無效的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示頭部**未被掩碼**,
- 0 表示頭部**已被掩碼**。
- cross_attn_head_mask (
torch.Tensor
形狀為(num_heads,)
或(num_layers, num_heads)
, 可選) — 用於使解碼器中交叉注意力模組的選定頭部無效的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示頭部**未被掩碼**,
- 0 表示頭部**已被掩碼**。
- encoder_outputs (
tuple[tuple[torch.Tensor]]
, 可選) — 元組包含 (last_hidden_state
, 可選:hidden_states
, 可選:attentions
)last_hidden_state
形狀為(batch_size, sequence_length, hidden_size)
,可選) 是編碼器最後一層輸出的隱藏狀態序列。用於解碼器的交叉注意力。 - past_key_values (
tuple[tuple[torch.Tensor]]
, 可選) — 預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加快順序解碼。這通常包括模型在解碼上一階段返回的past_key_values
,當use_cache=True
或config.use_cache=True
時。允許兩種格式:
- 一個 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
(那些沒有將過去的鍵值狀態提供給此模型的)的形狀(batch_size, 1)
,而不是所有input_ids
的形狀(batch_size, sequence_length)
。 - inputs_embeds (
torch.FloatTensor
形狀為(batch_size, sequence_length, hidden_size)
, 可選) — 可選地,您可以選擇直接傳遞嵌入表示,而不是傳遞input_ids
。如果您希望對如何將input_ids
索引轉換為相關向量有更多的控制,而不是模型的內部嵌入查詢矩陣,這會很有用。 - input_features (
torch.FloatTensor
形狀為(batch_size, sequence_length, hidden_size)
, 可選) — 與inputs_embeds
執行相同的任務。如果inputs_embeds
不存在但input_features
存在,則input_features
將被視為inputs_embeds
。 - 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,)
, 可選) — 用於計算序列分類/迴歸損失的標籤。索引應在[-100, 0, ..., config.vocab_size - 1]
範圍內。所有設定為-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 而不是普通元組。 - cache_position (
torch.LongTensor
,形狀為(sequence_length)
,可選) — 表示輸入序列標記在序列中的位置的索引。與position_ids
不同,此張量不受填充影響。它用於在正確位置更新快取並推斷完整的序列長度。
返回
transformers.modeling_outputs.Seq2SeqLMOutput 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.Seq2SeqLMOutput 或一個 torch.FloatTensor
的元組 (如果傳入 return_dict=False
或當 config.return_dict=False
時),包含根據配置 (Pop2PianoConfig) 和輸入而定的各種元素。
-
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 之後,用於計算自注意力頭中的加權平均。
Pop2PianoForConditionalGeneration 的 forward 方法,重寫了 __call__
特殊方法。
雖然前向傳播的實現需要在該函式中定義,但在此之後應該呼叫 Module
例項,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
示例
>>> from transformers import AutoProcessor, Pop2PianoForConditionalGeneration
>>> from datasets import load_dataset
>>> import torch
>>> dataset = load_dataset("hf-internal-testing/librispeech_asr_demo", "clean", split="validation")
>>> dataset = dataset.sort("id")
>>> sampling_rate = dataset.features["audio"].sampling_rate
>>> processor = AutoProcessor.from_pretrained("sweetcocoa/pop2piano")
>>> model = Pop2PianoForConditionalGeneration.from_pretrained("sweetcocoa/pop2piano")
>>> # audio file is decoded on the fly
>>> inputs = processor(dataset[0]["audio"]["array"], sampling_rate=sampling_rate, return_tensors="pt")
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> predicted_ids = torch.argmax(logits, dim=-1)
>>> # transcribe speech
>>> transcription = processor.batch_decode(predicted_ids)
>>> transcription[0]
...
>>> inputs["labels"] = processor(text=dataset[0]["text"], return_tensors="pt").input_ids
>>> # compute loss
>>> loss = model(**inputs).loss
>>> round(loss.item(), 2)
...
生成
< 原始碼 >( input_features attention_mask = None composer = 'composer1' generation_config = None **kwargs ) → ModelOutput 或 torch.LongTensor
引數
- input_features (
torch.FloatTensor
,形狀為(batch_size, sequence_length, hidden_size)
,可選) — 這是由Pop2PianoFeatureExtractor
生成的音訊的特徵化版本。 - attention_mask — 對於批次生成,
input_features
被填充以使所有示例具有相同的形狀。attention_mask
有助於確定哪些區域被填充,哪些沒有被填充。- 1 表示未填充的標記,
- 0 表示填充的標記。
- composer (
str
,可選,預設為"composer1"
) — 此值被傳遞給Pop2PianoConcatEmbeddingToMel
以針對每個"composer"
生成不同的嵌入。請確保composer
值存在於generation_config
中的composer_to_feature_token
中。例如,請參見 https://huggingface.co/sweetcocoa/pop2piano/blob/main/generation_config.json。 - generation_config (
~generation.GenerationConfig
,可選) — 用作生成呼叫基礎引數化的生成配置。傳遞給 generate() 且與generation_config
屬性匹配的**kwargs
將覆蓋它們。如果未提供generation_config
,將使用預設值,其載入優先順序如下:1) 如果存在,從generation_config.json
模型檔案載入;2) 從模型配置載入。請注意,未指定的引數將繼承 GenerationConfig 的預設值,應查閱其文件以引數化生成。 - kwargs —
generate_config
的臨時引數化和/或將轉發給模型forward
函式的額外模型特定 kwargs。如果模型是編碼器-解碼器模型,則編碼器特定 kwargs 不應加字首,解碼器特定 kwargs 應加 decoder_ 字首。
返回
ModelOutput 或 torch.LongTensor
一個 ModelOutput (如果 return_dict_in_generate=True
或當 config.return_dict_in_generate=True
時) 或一個 torch.FloatTensor
。由於 Pop2Piano 是一個編碼器-解碼器模型 (model.config.is_encoder_decoder=True
),可能的 ModelOutput 型別是
為 MIDI 輸出生成 token id。
大多數生成控制引數都在 generation_config
中設定,如果未傳入,則會設定為模型的預設生成配置。您可以透過向 generate() 傳入相應的引數來覆蓋任何 generation_config
,例如 .generate(inputs, num_beams=4, do_sample=True)
。有關生成策略和程式碼示例的概述,請查閱以下指南。