Transformers documentation

MusicGen Melody

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

이 모델은 2023-06-08에 HF papers에 게시되었으며, 2024-03-18에 Hugging Face Transformers에 기여되었습니다.

MusicGen Melody

FlashAttention SDPA

개요

MusicGen Melody 모델은 Jade Copet, Felix Kreuk, Itai Gat, Tal Remez, David Kant, Gabriel Synnaeve, Yossi Adi, Alexandre Défossez가 Simple and Controllable Music Generation에서 제안했습니다.

MusicGen Melody는 텍스트 설명 또는 오디오 프롬프트에 조건부으로 고품질 음악 샘플을 생성할 수 있는 단일 단계 오토레그레시브 Transformer 모델입니다. 텍스트 설명은 동결된 텍스트 인코더 모델을 통해 전달되어 hidden-state 표현의 시퀀스를 얻습니다. MusicGen은 이러한 hidden-state에 조건부으로 이산 오디오 토큰, 즉 오디오 코드를 예측하도록 학습됩니다. 이후 이러한 오디오 토큰은 EnCodec와 같은 오디오 압축 모델을 사용하여 디코딩되어 오디오 웨이브폼을 복원합니다.

효율적인 토큰 인터리빙 패턴을 통해 MusicGen은 텍스트/오디오 프롬프트의 자기지도형 의미 표현이 필요하지 않으므로, 코드북 세트(예: 계층적 방식 또는 업샘플링)를 예측하기 위해 여러 모델을 연쇄적으로 연결할 필요가 없습니다. 대신, 단일 포워드 패스만으로 모든 코드북을 생성할 수 있습니다.

해당 논문의 초록은 다음과 같습니다:

조건부 음악 생성 작업을 다룹니다. 압축된 이산 음악 표현, 즉 토큰의 여러 스트림에서 동작하는 단일 Language Model(LM)인 MusicGen을 소개합니다. 기존 연구와 달리 MusicGen은 단일 단계 transformer LM과 효율적인 토큰 인터리빙 패턴으로 구성되어 있어, 계층적 구조나 업샘플링과 같이 여러 모델을 연쇄적으로 연결할 필요가 없습니다. 이러한 접근 방식을 통해, MusicGen이 텍스트 설명이나 멜로디 특징에 조건부화되어 고품질 샘플을 생성할 수 있음을 보여주며, 생성된 출력에 대한 더 나은 제어가 가능해집니다. 자동 평가와 인간 평가를 모두 포함한 광범위한 실증 평가를 수행하여, 표준 텍스트-음악 벤치마크에서 제안된 접근법이 평가된 베이스라인보다 우수함을 입증합니다. 아블레이션 연구를 통해 MusicGen을 구성하는 각 구성 요소의 중요성을 조명합니다.

이 모델은 ylacombe님이 기여했습니다. 원본 코드는 여기에서 찾을 수 있습니다. 사전 학습된 체크포인트는 Hugging Face Hub에서 찾을 수 있습니다.

MusicGen과의 차이점

MusicGen과의 두 가지 주요 차이점이 있습니다:

  1. 음성 프롬프트는 여기서 생성된 오디오 샘플의 조건부 신호로 사용되며, MusicGen에서는 오디오 연속 생성에 사용됩니다.
  2. MusicGen과 달리, 조건부 텍스트 및 오디오 신호는 cross-attention 신호로 사용되지 않고 decoder의 hidden states에 연결(concatenate)됩니다.

생성

MusicGen Melody는 greedy와 sampling의 두 가지 생성 모드와 호환됩니다. 실제로 sampling은 greedy보다 훨씬 더 나은 결과를 제공하므로, 가능한 경우 sampling 모드를 사용하는 것을 권장합니다. sampling은 기본적으로 활성화되어 있으며, MusicgenMelodyForConditionalGeneration.generate() 호출 시 do_sample=True를 설정하거나 모델의 생성 설정을 재정의하여(아래 참조) 명시적으로 지정할 수 있습니다.

Transformers는 MusicGen Melody의 모노(1채널) 및 스테레오(2채널) 변형을 모두 지원합니다. 모노 채널 버전은 단일 코드북 세트를 생성합니다. 스테레오 버전은 채널(좌/우)별로 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를 사용하려면 다음 스니펫을 사용하기 전에 여기의 설치 단계를 먼저 따라야 합니다.

import torch
from demucs import pretrained
from demucs.apply import apply_model
from demucs.audio import convert_audio


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", device_map="auto")

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", device_map="auto")

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) 형태의 3차원 Torch 텐서입니다. 생성된 오디오 샘플을 청취하려면 ipynb 노트북에서 재생할 수 있습니다:

from IPython.display import Audio


sampling_rate = model.config.audio_encoder.sampling_rate
Audio(audio_values[0].numpy(), rate=sampling_rate)

또는 soundfile과 같은 서드파티 라이브러리를 사용하여 .wav 파일로 저장할 수도 있습니다:

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", device_map="auto")

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은 classifier free guidance(CFG)에서 사용되며, 조건부 logits(텍스트 프롬프트로부터 예측됨)와 무조건부 logits(무조건부 또는 ‘null’ 프롬프트로부터 예측됨) 사이의 가중치를 설정합니다. guidance scale이 높을수록 모델은 입력 프롬프트와 더 밀접하게 연결된 샘플을 생성하도록 유도되며, 일반적으로 이는 오디오 품질 저하를 대가로 합니다. guidance_scale > 1로 설정하면 CFG가 활성화됩니다. 최적의 결과를 위해 guidance_scale=3(기본값)을 사용하세요.

배치로 생성할 수도 있습니다:


from transformers import AutoProcessor, MusicgenMelodyForConditionalGeneration


processor = AutoProcessor.from_pretrained("facebook/musicgen-melody")
model = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody", device_map="auto")

# 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)

무조건 생성

무조건적(또는 ‘null’) 생성에 필요한 입력은 MusicgenMelodyProcessor.get_unconditional_inputs() 메서드를 통해 얻을 수 있습니다:

from transformers import MusicgenMelodyForConditionalGeneration, MusicgenMelodyProcessor


model = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody", device_map="auto")
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)

생성 설정

샘플링, guidance scale, 생성 토큰 수와 같은 생성 과정을 제어하는 기본 매개변수는 모델의 generation config에서 찾을 수 있으며, 필요에 따라 업데이트할 수 있습니다:

from transformers import MusicgenMelodyForConditionalGeneration


model = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody", device_map="auto")

# 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 메서드에 전달된 모든 인수는 generation config의 해당 설정을 우선 적용하므로, generate 호출 시 do_sample=False를 설정하면 generation config의 model.generation_config.do_sample 설정을 덮어씁니다.

모델 구조

MusicGen 모델은 세 가지 서로 다른 단계로 분해할 수 있습니다:

  1. Text encoder: 텍스트 입력을 hidden-state 표현의 시퀀스로 매핑합니다. 사전 학습된 MusicGen 모델은 T5 또는 Flan-T5의 동결된 text encoder를 사용합니다.
  2. MusicGen Melody decoder: 인코더의 hidden-state 표현에 조건부으로 오디오 토큰(또는 코드)을 자기회귀적으로 생성하는 언어 모델(LM)
  3. Audio decoder: decoder가 예측한 audio tokens에서 오디오 웨이브폼을 복원하는 데 사용됩니다.

따라서 MusicGen 모델은 MusicgenMelodyForCausalLM 클래스에 해당하는 독립형 디코더 모델로 사용하거나, 텍스트 인코더와 오디오 인코더를 포함하는 MusicgenMelodyForConditionalGeneration 클래스에 해당하는 복합 모델로 사용할 수 있습니다. 디코더만 사전 학습된 체크포인트에서 로드해야 하는 경우, 올바른 config를 먼저 지정하여 로드하거나, 복합 모델의 .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(), device_map="auto")

# Option 2: load the entire composite model, but only return the decoder
decoder = MusicgenMelodyForConditionalGeneration.from_pretrained("facebook/musicgen-melody", device_map="auto").decoder

학습 과정에서 텍스트 인코더와 오디오 인코더 모델은 고정(frozen)되므로, MusicGen 디코더 MusicgenMelodyForCausalLM은 인코더 hidden-states와 오디오 코드로 구성된 데이터셋에서 단독으로 학습할 수 있습니다. 추론 시에는 학습된 디코더를 고정된 텍스트 인코더와 오디오 인코더와 결합하여 복합 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 모델을 사용하도록 확인하세요.
  • Sampling mode는 greedy보다 더 나은 결과를 제공하는 경향이 있습니다. MusicgenMelodyForConditionalGeneration.generate() 호출 시 do_sample 변수를 통해 sampling을 전환할 수 있습니다.

MusicgenMelodyDecoderConfig

클래스 transformers.MusicgenMelodyDecoderConfig

< >

( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonevocab_size: int = 2048max_position_embeddings: int = 2048num_hidden_layers: int = 24ffn_dim: int = 4096num_attention_heads: int = 16layerdrop: float | int = 0.0use_cache: bool = Trueactivation_function: str = 'gelu'hidden_size: int = 1024dropout: float | int = 0.1attention_dropout: float | int = 0.0activation_dropout: float | int = 0.0initializer_factor: float = 0.02scale_embedding: bool = Falsenum_codebooks: int = 4audio_channels: int = 1pad_token_id: int | None = 2048bos_token_id: int | None = 2048eos_token_id: int | list[int] | None = Nonetie_word_embeddings: bool = Falseis_decoder: bool = Falseadd_cross_attention: bool = False )

매개변수

  • vocab_size (int, 선택 사항, 기본값 2048) — 모델의 어휘 크기입니다. input_ids로 표현할 수 있는 서로 다른 토큰의 수를 정의합니다.
  • max_position_embeddings (int, 선택 사항, 기본값 2048) — 이 모델이 사용될 수 있는 최대 시퀀스 길이입니다.
  • num_hidden_layers (int, 선택 사항, 기본값 24) — Transformer decoder의 숨겨진 레이어 수.
  • ffn_dim (int, 선택 사항, 기본값 4096) — MLP 표현의 차원입니다.
  • num_attention_heads (int, 선택 사항, 기본값 16) — Transformer decoder의 각 attention layer에 사용할 attention head의 수입니다.
  • layerdrop (Union[float, int], 선택 사항, 기본값 0.0) — LayerDrop 확률입니다. 자세한 내용은 [LayerDrop 논문](https://huggingface.co/papers/1909.11556 참조)을 참고하세요.
  • use_cache (bool, 선택 사항, 기본값 True) — 모델이 마지막 key/values attention을 반환할지 여부입니다(모든 모델에서 사용되지 않음). config.is_decoder=True인 경우 또는 모델이 decoder-only 생성 모델인 경우에만 관련이 있습니다.
  • activation_function (str, 선택 사항, 기본값 gelu) — 디코더에서 사용되는 비선형 활성화 함수(함수 또는 문자열)입니다. 예를 들어, "gelu", "relu", "silu" 등이 있습니다.
  • hidden_size (int, 선택 사항, 기본값 1024) — 숨겨진 표현의 차원입니다.
  • dropout (Union[float, int], 선택 사항, 기본값 0.1) — 모든 dropout 레이어에 적용할 비율입니다.
  • attention_dropout (Union[float, int], 선택 사항, 기본값 0.0) — Attention 확률에 적용할 dropout 비율입니다.
  • activation_dropout (Union[float, int], 선택 사항, 기본값 0.0) — 완전 연결 레이어 내부 활성화에 적용할 dropout 비율입니다.
  • initializer_factor (float, 선택 사항, 기본값 0.02) — 모든 가중치 행렬을 초기화하는 데 사용되는 계수입니다(1로 유지해야 하며, 초기화 테스트를 위해 내부적으로 사용됨).
  • scale_embedding (bool, 선택 사항, 기본값 False) — 임베딩을 sqrt(d_model)로 나누어 스케일링할지 여부.
  • num_codebooks (int, 선택 사항, 기본값 4) — 모델이 사용하는 병렬 코드북의 수입니다.
  • audio_channels (int, 선택 사항, 기본값 1) — 모델이 사용하는 오디오 채널 수(모노 또는 스테레오). 스테레오 모델은 좌/우 출력 채널에 대해 별도의 오디오 스트림을 생성합니다. 모노 모델은 단일 오디오 스트림 출력을 생성합니다.
  • pad_token_id (int, 선택 사항, 기본값 2048) — 어휘에서 패딩에 사용되는 토큰 ID입니다.
  • bos_token_id (int, 선택 사항, 기본값 2048) — 어휘에서 스트림 시작에 사용되는 토큰 ID입니다.
  • eos_token_id (Union[int, list[int]], 선택) — 어휘에서 스트림 종료에 사용되는 토큰 ID입니다.
  • tie_word_embeddings (bool, 선택, 기본값 False) — 모델의 tied_weights_keys 매핑에 따라 가중치 임베딩을 묶을지 여부.
  • is_decoder (bool, 선택 사항, 기본값 False) — 모델이 디코더로 사용되는지 여부입니다. False인 경우 모델은 인코더로 사용됩니다.
  • add_cross_attention (bool, 선택 사항, 기본값 False) — 모델에 cross-attention 레이어를 추가할지 여부.

이것은 MusicgenMelodyModel의 설정을 저장하기 위한 설정 클래스입니다. 지정된 인자에 따라 Musicgen Melody 모델을 인스턴스화하고 모델 아키텍처를 정의하는 데 사용됩니다. 기본값으로 설정을 인스턴스화하면 facebook/musicgen-melody와 유사한 설정이 생성됩니다.

Configuration 객체는 PreTrainedConfig를 상속하며 모델 출력을 제어하는 데 사용할 수 있습니다. 자세한 내용은 PreTrainedConfig의 문서를 참고하세요.

MusicgenMelodyProcessor

클래스 transformers.MusicgenMelodyProcessor

< >

( feature_extractortokenizer )

매개변수

  • feature_extractor (MusicgenMelodyFeatureExtractor) — feature extractor는 필수 입력입니다.
  • tokenizer (T5Tokenizer) — 토크나이저는 필수 입력값입니다.

MusicgenMelodyProcessor를 생성하며, feature extractor와 tokenizer를 단일 processor로 래핑합니다.

MusicgenMelodyProcessor는 MusicgenMelodyFeatureExtractor와 T5Tokenizer의 모든 기능을 제공합니다. 자세한 내용은 ~MusicgenMelodyFeatureExtractor와 ~T5Tokenizer를 참고하세요.

__call__

< >

( *args**kwargs )

매개변수

  • return_tensors (str 또는 TensorType, 선택 사항) — 설정된 경우, 특정 프레임워크의 텐서를 반환합니다. 허용되는 값은 다음과 같습니다:
    • 'pt': PyTorch torch.Tensor 객체를 반환합니다.
    • 'np': NumPy np.ndarray 객체를 반환합니다.

get_unconditional_inputs

< >

( num_samples = 1return_tensors = 'pt' )

매개변수

  • num_samples (int, 선택 사항) — 무조건적으로 생성할 오디오 샘플 수.

feature extractor나 tokenizer 없이 모델을 사용할 수 있도록 unconditional generation을 위한 null 입력을 가져오는 Helper function입니다.

예:

>>> 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

class transformers.MusicgenMelodyFeatureExtractor

< >

( feature_size = 12sampling_rate = 32000hop_length = 4096chunk_length = 30n_fft = 16384num_chroma = 12padding_value = 0.0return_attention_mask = Falsestem_indices = [3, 2]**kwargs )

매개변수

  • feature_size (int, 선택 사항, 기본값 12) — 추출된 특징의 차원입니다.
  • sampling_rate (int, 선택 사항, 기본값 32000) — 오디오 파일을 디지털화할 때 사용할 샘플링 레이트를 헤르츠(Hz) 단위로 나타낸 값입니다.
  • hop_length (int, 선택 사항, 기본값 4096) — Mel Frequency 계수를 얻기 위해 사용되는 STFT의 겹치는 윈도우 길이입니다.
  • chunk_length (int, 선택 사항, 기본값 30) — 더 길거나 더 짧은 오디오 시퀀스를 자르고 패딩하는 데 사용되는 sampling_rate 샘플 수의 최대 청크 수입니다.
  • n_fft (int, 선택 사항, 기본값 16384) — 푸리에 변환의 크기.
  • num_chroma (int, 선택 사항, 기본값 12) — 사용할 chroma bin의 수.
  • padding_value (float, 선택 사항, 기본값 0.0) — 오디오 패딩에 사용되는 패딩 값입니다.
  • return_attention_mask (bool, 선택 사항, 기본값은 False) — attention mask를 반환할지 여부. feature extractor를 호출할 때 이 값을 덮어쓸 수 있습니다.

    어텐션 마스크란 무엇인가요?

    Whisper 모델의 경우, 미묘한 버그를 방지하기 위해 배치 추론 시 attention_mask를 항상 전달해야 합니다.

  • stem_indices (list[int], 선택 사항, 기본값 [3, 2]) — demucs 출력이 전달되는 경우 추출할 stem 채널입니다.

MusicgenMelody feature extractor를 생성합니다.

이 feature extractor는 SequenceFeatureExtractor를 상속하며, 이 클래스에는 대부분의 주요 메서드가 포함되어 있습니다. 해당 메서드에 대한 자세한 내용은 이 상위 클래스를 참고하세요.

이 클래스는 Demucs로 처리된 오디오 또는 원시 오디오 웨이브폼에서 크로마 특징을 추출합니다.

MusicgenMelodyConfig

클래스 transformers.MusicgenMelodyConfig

< >

( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonetext_encoder: dict | transformers.configuration_utils.PreTrainedConfig | None = Noneaudio_encoder: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonedecoder: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonenum_chroma: int = 12chroma_length: int = 235initializer_factor: float = 0.02 )

매개변수

  • text_encoder (Union[dict, PretrainedConfig]) — 텍스트 인코더 설정을 정의하는 설정 객체의 인스턴스입니다.
  • audio_encoder (Union[dict, PretrainedConfig]) — 오디오 인코더 설정을 정의하는 설정 객체의 인스턴스입니다.
  • decoder (Union[dict, PretrainedConfig]) — decoder 설정을 정의하는 configuration 객체의 인스턴스입니다.
  • num_chroma (int, 선택 사항, 기본값 12) — 사용할 chroma bin의 수.
  • chroma_length (int, 선택, 기본값 235) — 오디오를 사용하여 모델을 조건화할 때 허용되는 최대 크로마 길이입니다. 학습 시 사용된 최대 길이와 대응됩니다.
  • initializer_factor (float, 선택 사항, 기본값 0.02) — 모든 가중치 행렬을 초기화하는 데 사용되는 계수입니다(1로 유지해야 하며, 초기화 테스트를 위해 내부적으로 사용됨).

이것은 MusicgenMelodyModel의 설정을 저장하기 위한 설정 클래스입니다. 지정된 인자에 따라 Musicgen Melody 모델을 인스턴스화하고 모델 아키텍처를 정의하는 데 사용됩니다. 기본값으로 설정을 인스턴스화하면 facebook/musicgen-melody와 유사한 설정이 생성됩니다.

Configuration 객체는 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(
...     text_encoder=text_encoder_config, audio_encoder=audio_encoder_config, decoder=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)

MusicgenMelodyModel

클래스 transformers.MusicgenMelodyModel

< >

( config: MusicgenMelodyDecoderConfig )

매개변수

  • config (MusicgenMelodyDecoderConfig) — 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하는 것은 모델과 연관된 가중치를 로드하지 않으며, 구성 정보만 로드합니다. 모델 가중치를 로드하려면 from_pretrained() 메서드를 확인하세요.

특정 헤드가 위에 없는 상태에서 원시 hidden-states를 출력하는 기본 Musicgen Melody Model입니다.

이 모델은 PreTrainedModel에서 상속됩니다. 라이브러리가 모든 모델에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 입력 임베딩 크기 조정, 헤드 프루닝 등)에 대한 세부 사항은 상위 클래스 문서를 확인하세요.

이 모델은 또한 PyTorch torch.nn.Module의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법 및 동작과 관련된 모든 사항은 PyTorch 문서를 참조하세요.

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneencoder_hidden_states: typing.Optional[torch.Tensor] = Noneencoder_attention_mask: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPast or tuple(torch.Tensor)

매개변수

  • input_ids (torch.LongTensor 다음 shape의 (batch_size * num_codebooks, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스로, 오디오 코드 시퀀스에 해당합니다. 오디오 인코더 모델(예: EncodecModel)로 오디오 프롬프트를 인코딩하여 오디오 코드를 예측함으로써 인덱스를 얻을 수 있습니다. 자세한 내용은 EncodecModel.encode()를 참조하세요. input ID란 무엇인가요? input_ids는 forward pass에서 자동으로 (batch_size * num_codebooks, target_sequence_length) shape에서 (batch_size, num_codebooks, target_sequence_length) shape으로 변환됩니다. EncodecModel과 같은 오디오 인코딩 모델에서 오디오 코드를 가져오는 경우, 프레임 수가 1과 같도록 하고, input_ids로 전달하기 전에 오디오 코드를 (frames, batch_size, num_codebooks, target_sequence_length)에서 (batch_size * num_codebooks, target_sequence_length)로 reshape하세요.

    인덱스는 EncodecModel과 같은 오디오 인코더 모델로 오디오 프롬프트를 인코딩하여 오디오 코드를 예측함으로써 얻을 수 있습니다. 자세한 내용은 EncodecModel.encode()을 참조하세요.

    입력 ID란 무엇인가요?

    input_ids는 forward pass에서 자동으로 shape (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)로 reshape해야 합니다.

  • attention_mask (torch.Tensor 형상이 (batch_size, sequence_length), 선택 사항) — 패딩 토큰 인덱스에 대한 attention을 수행하지 않도록 방지하는 마스크. [0, 1]에서 선택된 마스크 값: 마스크되지 않은 토큰은 1, 마스크된 토큰은 0. attention mask란 무엇인가요? [0, 1]:
    • 마스크되지 않은 토큰에 대해 1
    • 마스크된 토큰에 대해 0

    어텐션 마스크란 무엇인가요?

  • encoder_hidden_states (torch.Tensor, shape (batch_size, encoder_sequence_length, hidden_size), 선택 사항) — 텍스트 인코더 출력과 처리된 오디오 인코더 출력을 연결한 것을 나타내는 hidden-states 시퀀스입니다. 조건부 신호로 사용되므로, 투영된 decoder_input_ids에 연결됩니다.
  • encoder_attention_mask (torch.LongTensor 다음 형태의 (batch_size, encoder_sequence_length), 선택 사항) — 조건부 hidden state에 attention을 수행하지 않도록 방지하는 mask입니다. [0, 1] 범위에서 선택된 mask 값: mask되지 않은 토큰은 1, mask된 토큰은 0입니다. attention mask란 무엇일까요? [0, 1]:
    • 마스크되지 않은 토큰에 대해 1
    • 마스크된 토큰에 대해 0

    어텐션 마스크란 무엇인가요?

  • past_key_values (~cache_utils.Cache, 선택 사항) — 순차적 디코딩을 가속화할 수 있는 사전 계산된 hidden-states(self-attention 블록과 cross-attention 블록의 key 및 value). 일반적으로 이는 past_key_values 디코딩의 이전 단계에서 모델이 반환한 use_cache=True 또는 config.use_cache=True.

    입력으로 Cache 인스턴스만 허용되며, kv cache 가이드를 참고하세요. past_key_values가 전달되지 않으면 기본적으로 DynamicCache가 초기화됩니다.

    모델은 입력으로 제공된 것과 동일한 캐시 형식을 출력합니다.

    past_key_values를 사용하는 경우, 이 모델에 과거 키 값 상태가 제공되지 않은 input_ids만 입력해야 하며, 이때의 shape은 (batch_size, unprocessed_length)입니다. shape이 (batch_size, sequence_length)인 전체 input_ids를 입력하지 않습니다.

  • inputs_embeds (torch.Tensor, shape (batch_size, sequence_length, hidden_size), 선택) — input_ids를 전달하는 대신 임베딩 표현을 직접 전달할 수 있습니다. 이는 모델 내부의 임베딩 조회 행렬보다 input_ids 인덱스를 관련 벡터로 변환하는 방식에 대해 더 세밀한 제어가 필요한 경우에 유용합니다.
  • use_cache (bool, 선택 사항) — True로 설정하면 past_key_values 키 값 상태가 반환되며, 디코딩 속도를 높이는 데 사용할 수 있습니다( past_key_values 참조).

반환값

BaseModelOutputWithPast 또는 tuple(torch.Tensor)

None 및 입력에 따라 구성이 달라지는 여러 요소로 구성된 BaseModelOutputWithPast 또는 torch.Tensor의 튜플(return_dict=False가 전달되거나 config.return_dict=False인 경우).

MusicgenMelodyModel의 forward 메서드는 __call__ 특수 메서드를 오버라이드합니다.

이 함수 내에서 forward pass의 레시피를 정의해야 하지만, 이후에는 이 함수 대신 Module 인스턴스를 호출해야 합니다. 전자는 전처리 및 후처리 단계를 실행하는 것을 처리하는 반면, 후자는 이를 조용히 무시하기 때문입니다.

  • last_hidden_state (torch.Tensor, shape (batch_size, sequence_length, hidden_size)) — 모델의 마지막 레이어 출력에서 생성된 hidden-state 시퀀스입니다.

    past_key_values가 사용되면, (batch_size, 1, hidden_size) 형태의 시퀀스의 마지막 hidden-state만 출력됩니다.

  • past_key_values (Cache, 선택 사항, use_cache=True가 전달되었거나 config.use_cache=True인 경우 반환됨) — Cache 인스턴스입니다. 자세한 내용은 kv cache 가이드를 참고하세요.

    순차적 디코딩을 가속화하는 데 사용할 수 있는 사전 계산된 hidden-states(셀프 어텐션 블록의 key와 value, 그리고 config.is_encoder_decoder=True인 경우 크로스 어텐션 블록의 key와 value)를 포함합니다(입력 past_key_values 참조).

  • hidden_states (tuple(torch.Tensor), 선택 사항, output_hidden_states=True가 전달되거나 config.output_hidden_states=True인 경우 반환됨) — torch.Tensor의 튜플(모델에 임베딩 레이어가 있는 경우 임베딩 출력 1개 + 각 레이어의 출력 1개)로, 모양은 (batch_size, sequence_length, hidden_size)입니다.

    각 레이어의 출력에서 모델의 Hidden-states와 선택적 초기 임베딩 출력을 포함합니다.

  • attentions (tuple(torch.Tensor), 선택 사항, output_attentions=True가 전달되었거나 config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된 torch.Tensor의 튜플로, 모양은 (batch_size, num_heads, sequence_length, sequence_length)입니다.

    self-attention 헤드에서 가중 평균을 계산하는 데 사용되는 attention softmax 이후의 attention 가중치.

MusicgenMelodyForCausalLM

class transformers.MusicgenMelodyForCausalLM

< >

( config: MusicgenMelodyDecoderConfig )

매개변수

  • config (MusicgenMelodyDecoderConfig) — 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하는 것은 모델과 연관된 가중치를 로드하지 않으며, 구성 정보만 로드합니다. 모델 가중치를 로드하려면 from_pretrained() 메서드를 확인하세요.

언어 모델링 헤드가 위에 있는 Musicgen Melody 디코더 모델입니다.

이 모델은 PreTrainedModel에서 상속됩니다. 라이브러리가 모든 모델에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 입력 임베딩 크기 조정, 헤드 프루닝 등)에 대한 세부 사항은 상위 클래스 문서를 확인하세요.

이 모델은 또한 PyTorch torch.nn.Module의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법 및 동작과 관련된 모든 사항은 PyTorch 문서를 참조하세요.

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneencoder_hidden_states: typing.Optional[torch.Tensor] = Noneencoder_attention_mask: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneuse_cache: bool | None = Nonelabels: typing.Optional[torch.LongTensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → MusicgenMelodyOutputWithPast or tuple(torch.Tensor)

매개변수

  • input_ids (torch.LongTensor 다음 shape의 (batch_size * num_codebooks, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스로, 오디오 코드 시퀀스에 해당합니다. 오디오 인코더 모델(예: EncodecModel)로 오디오 프롬프트를 인코딩하여 오디오 코드를 예측함으로써 인덱스를 얻을 수 있습니다. 자세한 내용은 EncodecModel.encode()를 참조하세요. input ID란 무엇인가요? input_ids는 forward pass에서 자동으로 (batch_size * num_codebooks, target_sequence_length) shape에서 (batch_size, num_codebooks, target_sequence_length) shape으로 변환됩니다. EncodecModel과 같은 오디오 인코딩 모델에서 오디오 코드를 가져오는 경우, 프레임 수가 1과 같도록 하고, input_ids로 전달하기 전에 오디오 코드를 (frames, batch_size, num_codebooks, target_sequence_length)에서 (batch_size * num_codebooks, target_sequence_length)로 reshape하세요.

    인덱스는 EncodecModel과 같은 오디오 인코더 모델로 오디오 프롬프트를 인코딩하여 오디오 코드를 예측함으로써 얻을 수 있습니다. 자세한 내용은 EncodecModel.encode()을 참조하세요.

    입력 ID란 무엇인가요?

    input_ids는 forward pass에서 자동으로 shape (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)로 reshape해야 합니다.

  • attention_mask (torch.Tensor 형상이 (batch_size, sequence_length), 선택 사항) — 패딩 토큰 인덱스에 대한 attention을 수행하지 않도록 방지하는 마스크. [0, 1]에서 선택된 마스크 값: 마스크되지 않은 토큰은 1, 마스크된 토큰은 0. attention mask란 무엇인가요? [0, 1]:
    • 마스크되지 않은 토큰에 대해 1
    • 마스크된 토큰에 대해 0

    어텐션 마스크란 무엇인가요?

  • encoder_hidden_states (torch.Tensor, shape (batch_size, encoder_sequence_length, hidden_size), 선택 사항) — 텍스트 인코더 출력과 처리된 오디오 인코더 출력을 연결한 것을 나타내는 hidden-states 시퀀스입니다. 조건부 신호로 사용되므로, 투영된 decoder_input_ids에 연결됩니다.
  • encoder_attention_mask (torch.LongTensor 다음 형태의 (batch_size, encoder_sequence_length), 선택 사항) — 조건부 hidden state에 attention을 수행하지 않도록 방지하는 mask입니다. [0, 1] 범위에서 선택된 mask 값: mask되지 않은 토큰은 1, mask된 토큰은 0입니다. attention mask란 무엇일까요? [0, 1]:
    • 마스크되지 않은 토큰에 대해 1
    • 마스크된 토큰에 대해 0

    어텐션 마스크란 무엇인가요?

  • past_key_values (~cache_utils.Cache, 선택 사항) — 순차적 디코딩을 가속화할 수 있는 사전 계산된 hidden-states(self-attention 블록과 cross-attention 블록의 key 및 value). 일반적으로 이는 past_key_values 디코딩의 이전 단계에서 모델이 반환한 use_cache=True 또는 config.use_cache=True.

    입력으로 Cache 인스턴스만 허용되며, kv cache 가이드를 참고하세요. past_key_values가 전달되지 않으면 기본적으로 DynamicCache가 초기화됩니다.

    모델은 입력으로 제공된 것과 동일한 캐시 형식을 출력합니다.

    past_key_values를 사용하는 경우, 이 모델에 과거 키 값 상태가 제공되지 않은 input_ids만 입력해야 하며, 이때의 shape은 (batch_size, unprocessed_length)입니다. shape이 (batch_size, sequence_length)인 전체 input_ids를 입력하지 않습니다.

  • inputs_embeds (torch.Tensor, shape (batch_size, sequence_length, hidden_size), 선택) — input_ids를 전달하는 대신 임베딩 표현을 직접 전달할 수 있습니다. 이는 모델 내부의 임베딩 조회 행렬보다 input_ids 인덱스를 관련 벡터로 변환하는 방식에 대해 더 세밀한 제어가 필요한 경우에 유용합니다.
  • use_cache (bool, 선택 사항) — True로 설정하면 past_key_values 키 값 상태가 반환되며, 디코딩 속도를 높이는 데 사용할 수 있습니다( past_key_values 참조).
  • labels (torch.LongTensor, shape (batch_size, sequence_length, num_codebooks), 선택 사항) — 언어 모델링을 위한 라벨입니다. 모델 내부에서 라벨이 시프트되므로, labels = input_ids로 설정할 수 있습니다. 인덱스는 [-100, 0, ..., config.vocab_size] 범위에서 선택됩니다. -100으로 설정된 모든 라벨은 무시(마스크)되며, 손실은 [0, ..., config.vocab_size] 범위의 라벨에 대해서만 계산됩니다.

반환값

MusicgenMelodyOutputWithPast 또는 tuple(torch.Tensor)

MusicgenMelodyOutputWithPast 또는 torch.Tensor의 튜플(return_dict=False가 전달되었거나 config.return_dict=False인 경우)로, 구성(MusicgenMelodyConfig)과 입력에 따라 다양한 요소를 포함합니다.

MusicgenMelodyForCausalLM의 forward 메서드는 __call__ 특수 메서드를 오버라이드합니다.

이 함수 내에서 forward pass의 레시피를 정의해야 하지만, 이후에는 이 함수 대신 Module 인스턴스를 호출해야 합니다. 전자는 전처리 및 후처리 단계를 실행하는 것을 처리하는 반면, 후자는 이를 조용히 무시하기 때문입니다.

  • loss (torch.Tensor, shape (1,), 선택 사항, labels이 제공될 때 반환됨) — 언어 모델링 손실(다음 토큰 예측용).

  • logits (torch.Tensor, shape (batch_size, sequence_length, config.vocab_size)) — 언어 모델링 헤드에서 생성된 예측 점수(SoftMax 적용 전 각 어휘 토큰에 대한 점수).

  • past_key_values (Cache, 선택 사항, use_cache=True가 전달되었거나 config.use_cache=True인 경우 반환됨) — Cache 인스턴스입니다. 자세한 내용은 kv cache 가이드를 참고하세요.

    순차적 디코딩을 가속화하는 데 사용할 수 있는 사전 계산된 hidden-states(셀프 어텐션 블록의 key와 value)를 포함합니다(입력 past_key_values 참조).

  • hidden_states (tuple[torch.Tensor], 선택 사항, output_hidden_states=True가 전달되거나 config.output_hidden_states=True인 경우 반환됨) — torch.Tensor의 튜플(모델에 임베딩 레이어가 있는 경우 임베딩 출력 1개 + 각 레이어의 출력 1개)로, 모양은 (batch_size, sequence_length, hidden_size)입니다.

    각 레이어의 출력에서 모델의 Hidden-states와 선택적 초기 임베딩 출력을 포함합니다.

  • attentions (tuple[torch.Tensor], 선택 사항, output_attentions=True가 전달되었거나 config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된 torch.Tensor의 튜플로, 모양은 (batch_size, num_heads, sequence_length, sequence_length)입니다.

    self-attention 헤드에서 가중 평균을 계산하는 데 사용되는 attention softmax 이후의 attention 가중치.

  • encoder_hidden_states (torch.Tensor, shape (batch_size, encoder_sequence_length, hidden_size), 선택 사항) — 투영된 텍스트 인코더 출력과 투영된 오디오 인코더 출력을 연결한 것을 나타내는 조건부 hidden-state 시퀀스입니다. 조건부 신호로 사용됩니다.

예:

MusicgenMelodyForConditionalGeneration

class transformers.MusicgenMelodyForConditionalGeneration

< >

( config: MusicgenMelodyConfig = Nonetext_encoder: transformers.modeling_utils.PreTrainedModel | None = Noneaudio_encoder: transformers.modeling_utils.PreTrainedModel | None = Nonedecoder: transformers.models.musicgen_melody.modeling_musicgen_melody.MusicgenMelodyForCausalLM | None = None )

매개변수

  • config (MusicgenMelodyConfig, 선택) — 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하는 것은 모델과 연관된 가중치를 로드하지 않으며, 구성 정보만 로드합니다. 모델 가중치를 로드하려면 from_pretrained() 메서드를 확인하세요.
  • text_encoder (PreTrainedModel, 선택 사항) — 조건부 생성을 위해 텍스트를 hidden states로 인코딩하는 텍스트 인코더 모델입니다.
  • audio_encoder (PreTrainedModel, 선택 사항) — 조건부 생성을 위해 오디오를 hidden states로 인코딩하는 오디오 인코더 모델입니다.
  • decoder (MusicgenMelodyForCausalLM, 선택 사항) — 조건부 신호를 기반으로 오디오 토큰을 생성하는 디코더 모델입니다.

다른 모달리티(예: 이미지-텍스트-투-텍스트 생성)에 조건부화된 토큰 생성을 위한 Musicgen Melody Model.

이 모델은 PreTrainedModel에서 상속됩니다. 라이브러리가 모든 모델에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 입력 임베딩 크기 조정, 헤드 프루닝 등)에 대한 세부 사항은 상위 클래스 문서를 확인하세요.

이 모델은 또한 PyTorch torch.nn.Module의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법 및 동작과 관련된 모든 사항은 PyTorch 문서를 참조하세요.

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.BoolTensor] = Noneinput_features: typing.Optional[torch.Tensor] = Nonedecoder_input_ids: typing.Optional[torch.LongTensor] = Nonedecoder_attention_mask: typing.Optional[torch.BoolTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneencoder_hidden_states: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonedecoder_inputs_embeds: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → MusicgenMelodyOutputWithPast or tuple(torch.Tensor)

매개변수

  • input_ids (torch.LongTensor 형상이 (batch_size, sequence_length), 선택 사항) — 어휘(input vocabulary)에서 입력 시퀀스 토큰의 인덱스입니다. 기본적으로 패딩은 무시됩니다.

    AutoTokenizer를 사용하여 인덱스를 얻을 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()를 참조하세요.

    입력 ID란 무엇인가요?

  • attention_mask (torch.BoolTensor 다음 형태의 (batch_size, sequence_length), , 선택 사항) — 패딩 토큰 인덱스에 대한 attention을 수행하지 않도록 하는 마스크. [0, 1]에서 선택된 마스크 값: 마스크되지 않은 토큰은 1, 마스크된 토큰은 0. attention mask란 무엇일까요? [0, 1]:
    • 마스크되지 않은 토큰에 대해 1
    • 마스크된 토큰에 대해 0

    어텐션 마스크란 무엇인가요?

  • input_features (torch.Tensor, shape (batch_size, sequence_length, feature_dim), 선택 사항) — 입력 오디오 특징에 해당하는 텐서입니다. 오디오 특징은 MusicgenMelodyFeatureExtractor를 사용하여 얻을 수 있습니다. 자세한 내용은 MusicgenMelodyFeatureExtractor.__call__()를 참조하세요 (MusicgenMelodyProcessor는 오디오 처리에 MusicgenMelodyFeatureExtractor를 사용합니다).
  • decoder_input_ids (torch.LongTensor 다음 shape를 가진 (batch_size * num_codebooks, target_sequence_length), 선택 사항) — 어휘(decoder input sequence)에서 오디오 코드 시퀀스에 해당하는 토큰의 인덱스입니다. 오디오 인코더 모델(예: EncodecModel)로 오디오 프롬프트를 인코딩하여 오디오 코드를 예측함으로써 인덱스를 얻을 수 있습니다. 자세한 내용은 EncodecModel.encode()를 참고하세요. decoder input ID란 무엇인가요? decoder_input_ids는 forward pass에서 shape (batch_size * num_codebooks, target_sequence_length)에서 (batch_size, num_codebooks, target_sequence_length)로 자동으로 변환됩니다. EncodecModel과 같은 오디오 인코딩 모델에서 오디오 코드를 가져오는 경우, 프레임 수가 1과 같도록 하고, decoder_input_ids로 전달하기 전에 오디오 코드의 shape을 (frames, batch_size, num_codebooks, target_sequence_length)에서 (batch_size * num_codebooks, target_sequence_length)로 reshape하세요.

    인덱스는 EncodecModel과 같은 오디오 인코더 모델로 오디오 프롬프트를 인코딩하여 오디오 코드를 예측함으로써 얻을 수 있습니다. 자세한 내용은 EncodecModel.encode()을 참조하세요.

    디코더 입력 ID란 무엇인가요?

    decoder_input_ids는 forward pass에서 자동으로 shape (batch_size * num_codebooks, target_sequence_length)에서 (batch_size, num_codebooks, target_sequence_length)로 변환됩니다. EncodecModel과 같은 오디오 인코딩 모델에서 오디오 코드를 가져온 경우, 프레임 수가 1과 같도록 하고, decoder_input_ids로 전달하기 전에 오디오 코드의 shape을 (frames, batch_size, num_codebooks, target_sequence_length)에서 (batch_size * num_codebooks, target_sequence_length)로 reshape해야 합니다.

  • decoder_attention_mask (torch.LongTensor, shape (batch_size, target_sequence_length), 선택) — 기본 동작: decoder_input_ids의 pad 토큰을 무시하는 텐서를 생성합니다. 기본적으로 causal mask도 사용됩니다.
  • past_key_values (~cache_utils.Cache, 선택 사항) — 순차적 디코딩을 가속화할 수 있는 사전 계산된 hidden-states(self-attention 블록과 cross-attention 블록의 key 및 value). 일반적으로 이는 past_key_values 디코딩의 이전 단계에서 모델이 반환한 use_cache=True 또는 config.use_cache=True.

    입력으로 Cache 인스턴스만 허용되며, kv cache 가이드를 참고하세요. past_key_values가 전달되지 않으면 기본적으로 DynamicCache가 초기화됩니다.

    모델은 입력으로 제공된 것과 동일한 캐시 형식을 출력합니다.

    past_key_values를 사용하는 경우, 이 모델에 과거 키 값 상태가 제공되지 않은 input_ids만 입력해야 하며, 이때의 shape은 (batch_size, unprocessed_length)입니다. shape이 (batch_size, sequence_length)인 전체 input_ids를 입력하지 않습니다.

  • encoder_hidden_states (torch.Tensor, shape (batch_size, encoder_sequence_length, hidden_size), 선택 사항) — 투영된 텍스트 인코더 출력과 투영된 오디오 인코더 출력을 연결한 것을 나타내는 조건부 hidden-states 시퀀스입니다. 조건부 신호로 사용되므로 투영된 decoder_input_ids에 연결됩니다.
  • inputs_embeds (torch.Tensor, shape (batch_size, sequence_length, hidden_size), 선택) — input_ids를 전달하는 대신 임베딩 표현을 직접 전달할 수 있습니다. 이는 모델 내부의 임베딩 조회 행렬보다 input_ids 인덱스를 관련 벡터로 변환하는 방식에 대해 더 세밀한 제어가 필요한 경우에 유용합니다.
  • decoder_inputs_embeds (torch.Tensor 형상 (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, shape (batch_size, sequence_length, num_codebooks), 선택 사항) — 언어 모델링을 위한 라벨입니다. 모델 내부에서 라벨이 시프트되므로, labels = input_ids로 설정할 수 있습니다. 인덱스는 [-100, 0, ..., config.vocab_size] 범위에서 선택됩니다. -100으로 설정된 모든 라벨은 무시(마스크)되며, 손실은 [0, ..., config.vocab_size] 범위의 라벨에 대해서만 계산됩니다.
  • use_cache (bool, 선택 사항) — True로 설정하면 past_key_values 키 값 상태가 반환되며, 디코딩 속도를 높이는 데 사용할 수 있습니다( past_key_values 참조).

반환값

MusicgenMelodyOutputWithPast 또는 tuple(torch.Tensor)

MusicgenMelodyOutputWithPast 또는 torch.Tensor의 튜플(return_dict=False가 전달되었거나 config.return_dict=False인 경우)로, 구성(MusicgenMelodyConfig)과 입력에 따라 다양한 요소를 포함합니다.

MusicgenMelodyForConditionalGeneration의 forward 메서드는 __call__ 특수 메서드를 오버라이드합니다.

이 함수 내에서 forward pass의 레시피를 정의해야 하지만, 이후에는 이 함수 대신 Module 인스턴스를 호출해야 합니다. 전자는 전처리 및 후처리 단계를 실행하는 것을 처리하는 반면, 후자는 이를 조용히 무시하기 때문입니다.

  • loss (torch.Tensor, shape (1,), 선택 사항, labels이 제공될 때 반환됨) — 언어 모델링 손실(다음 토큰 예측용).

  • logits (torch.Tensor, shape (batch_size, sequence_length, config.vocab_size)) — 언어 모델링 헤드에서 생성된 예측 점수(SoftMax 적용 전 각 어휘 토큰에 대한 점수).

  • past_key_values (Cache, 선택 사항, use_cache=True가 전달되었거나 config.use_cache=True인 경우 반환됨) — Cache 인스턴스입니다. 자세한 내용은 kv cache 가이드를 참고하세요.

    순차적 디코딩을 가속화하는 데 사용할 수 있는 사전 계산된 hidden-states(셀프 어텐션 블록의 key와 value)를 포함합니다(입력 past_key_values 참조).

  • hidden_states (tuple[torch.Tensor], 선택 사항, output_hidden_states=True가 전달되거나 config.output_hidden_states=True인 경우 반환됨) — torch.Tensor의 튜플(모델에 임베딩 레이어가 있는 경우 임베딩 출력 1개 + 각 레이어의 출력 1개)로, 모양은 (batch_size, sequence_length, hidden_size)입니다.

    각 레이어의 출력에서 모델의 Hidden-states와 선택적 초기 임베딩 출력을 포함합니다.

  • attentions (tuple[torch.Tensor], 선택 사항, output_attentions=True가 전달되었거나 config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된 torch.Tensor의 튜플로, 모양은 (batch_size, num_heads, sequence_length, sequence_length)입니다.

    self-attention 헤드에서 가중 평균을 계산하는 데 사용되는 attention softmax 이후의 attention 가중치.

  • encoder_hidden_states (torch.Tensor, shape (batch_size, encoder_sequence_length, hidden_size), 선택 사항) — 투영된 텍스트 인코더 출력과 투영된 오디오 인코더 출력을 연결한 것을 나타내는 조건부 hidden-state 시퀀스입니다. 조건부 신호로 사용됩니다.

예:

>>> 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])
Update on GitHub