Transformers documentation
Pop2Piano
نُشر هذا النموذج في أوراق HF في 2022-11-02 وسُهم به في Hugging Face Transformers في 2023-08-21.
Pop2Piano
نظرة عامة
قُدِّم نموذج Pop2Piano في Pop2Piano : Pop Audio-based Piano Cover Generation من قِبل Jongho Choi وKyogu Lee.
تُعدّ التغطيات الكلاسيكية لأغاني البوب شائعة الاستمتاع على نطاق واسع، لكن توليدها من الموسيقى ليس مهمة بسيطة. فهي تتطلب خبرة كبيرة في عزف البيانو إلى جانب الإلمام بالخصائص المختلفة ولحن الأغنية. مع Pop2Piano يمكنك توليد تغطية مباشرة من الموجة الصوتية للأغنية. وهو أول نموذج يولّد تغطية بيانو مباشرة من صوت البوب دون الحاجة إلى وحدات استخراج اللحن والأوتار.
Pop2Piano هو نموذج Transformer من نوع المُشفِّر-المُفكِّك مبني على T5. يتم تحويل الصوت المُدخل إلى شكل موجته ثم يُمرَّر إلى المُشفِّر الذي يحوّله إلى تمثيل كامن. يستخدم المُفكِّك هذه التمثيلات الكامنة لتوليد معرّفات الرموز (token ids) بطريقة ذاتية التراجع (autoregressive). يتوافق كل معرّف رمز مع أحد أربعة أنواع مختلفة من الرموز: الوقت، السرعة، النغمة، و«خاص». ثم تُفكَّك معرّفات الرموز إلى ملف MIDI المكافئ لها.
المستخلص من الورقة البحثية هو كالتالي:
تُستمتع العديد من الأشخاص بتعزيفات البيانو لأغاني البوب. ومع ذلك، لا تزال مهمة توليد تعزيفات بيانو تلقائية لأغاني البوب غير مدروسة بشكل كافٍ. ويعود ذلك جزئيًا إلى ندرة أزواج البيانات المتزامنة {البوب، تعزيف البيانو}، مما جعل من الصعب تطبيق أحدث الأساليب المعتمدة على التعلم العميق والتي تتطلب كميات كبيرة من البيانات. وللاستفادة من قوة النهج المعتمد على البيانات، قمنا بإنشاء كميات كبيرة من أزواج البيانات المتزامنة {البوب، تعزيف البيانو} باستخدام خط أنابيب آلي. في هذه الورقة، نقدم Pop2Piano، وهو شبكة Transformer تولّد تعزيفات بيانو بناءً على الموجات الصوتية لأغاني البوب. وإلى حدّ علمنا، هذا هو النموذج الأول الذي يولّد تعزيف بيانو مباشرةً من صوت البوب دون استخدام وحدات استخراج اللحن والأوتار. نُظهر أن Pop2Piano، المدرَّب على مجموعتنا من البيانات، قادر على إنتاج تعزيفات بيانو معقولة.
تمت مساهمة هذا النموذج من قِبل Susnato Dhar. يمكن العثور على الكود الأصلي هنا.
نصائح للاستخدام
- لاستخدام Pop2Piano، ستحتاج إلى تثبيت مكتبة 🤗 Transformers، بالإضافة إلى الوحدات الطرفية التالية:
pip install pretty-midi==0.2.9 essentia==2.1b6.dev1034 librosa scipy
يرجى ملاحظة أنه قد يكون من الضروري إعادة تشغيل بيئة التشغيل بعد التثبيت.
- نموذج Pop2Piano هو نموذج مبني على معمارية المُشفِّر-المُفكِّك (Encoder-Decoder) مثل T5.
- يمكن استخدام Pop2Piano لتوليد ملفات midi-audio لسلسلة صوتية محددة.
- يمكن أن يؤدي اختيار مؤلفين مختلفين في
Pop2PianoForConditionalGeneration.generate()إلى تنوع في النتائج المختلفة. - يمكن أن يؤدي ضبط معدل العينة على 44.1 كيلو هرتز عند تحميل ملف الصوت إلى أداء جيد.
- على الرغم من أن Pop2Piano تم تدريبه بشكل رئيسي على موسيقى البوب الكورية، إلا أنه يؤدي أداءً جيدًا بشكل ملحوظ على أغاني البوب الغربية أو الهيب هوب الأخرى.
أمثلة
- مثال باستخدام مجموعة بيانات HuggingFace:
from datasets import load_dataset
from transformers import Pop2PianoForConditionalGeneration, Pop2PianoProcessor
model = Pop2PianoForConditionalGeneration.from_pretrained("sweetcocoa/pop2piano", device_map="auto")
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", device_map="auto")
processor = Pop2PianoProcessor.from_pretrained("sweetcocoa/pop2piano")
inputs = processor(audio=audio, sampling_rate=sr, return_tensors="pt").to(model.device)
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", device_map="auto")
processor = Pop2PianoProcessor.from_pretrained("sweetcocoa/pop2piano")
inputs = processor(audio=[audio1, audio2], sampling_rate=[sr1, sr2], return_attention_mask=True, return_tensors="pt").to(model.device)
# 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 Pop2PianoFeatureExtractor, Pop2PianoForConditionalGeneration, 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", device_map="auto")
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
فئة transformers.Pop2PianoConfig
< source >( 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 = 0id2label: 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 = Noneis_encoder_decoder: bool = Truevocab_size: int = 2400composer_vocab_size: int = 21d_model: int = 512d_kv: int = 64d_ff: int = 2048num_layers: int = 6num_decoder_layers: int | None = Nonenum_heads: int = 8relative_attention_num_buckets: int = 32relative_attention_max_distance: int = 128dropout_rate: float | int = 0.1layer_norm_epsilon: float = 1e-06initializer_factor: float = 1.0feed_forward_proj: str = 'gated-gelu'use_cache: bool = Truepad_token_id: int | None = 0eos_token_id: int | list[int] | None = 1dense_act_fn: str = 'relu'is_decoder: bool = Falsetie_word_embeddings: bool = True )
المعاملات
- is_encoder_decoder (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان النموذج يُستخدم كمُشفِّر/مُفكِّك أم لا. - vocab_size (
int، اختياري، القيمة الافتراضية2400) — حجم مفردات النموذج. يحدد عدد الرموز المختلفة التي يمكن تمثيلها بواسطةinput_ids. - composer_vocab_size (
int، اختياري، القيمة الافتراضية 21) — يحدد عدد الملحنين. - d_model (
int، اختياري، القيمة الافتراضية512) — حجم طبقات المُشفِّر وطبقة المُجمِّع. - d_kv (
int، اختياري، القيمة الافتراضية64) — حجم إسقاطات المفتاح والاستعلام والقيمة لكل رأس انتباه. سيتم تعريفinner_dimلطبقة الإسقاط على أنهnum_heads * d_kv. - d_ff (
int، اختياري، القيمة الافتراضية2048) — بعد تمثيلات MLP. - 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 (
Union[float, int]، اختياري، القيمة الافتراضية0.1) — النسبة لجميع طبقات dropout. - layer_norm_epsilon (
float, اختياري، القيمة الافتراضية1e-06) — قيمة الإيبسلون المستخدمة في طبقات تطبيع الطبقة. - initializer_factor (
float، اختياري، القيمة الافتراضية1.0) — عامل لتجميع جميع مصفوفات الأوزان (يجب إبقاؤه عند 1، ويُستخدم داخليًا لاختبارات التهيئة). - feed_forward_proj (
string، اختياري، الافتراضي"gated-gelu") — نوع طبقة التقدّم الأمامي (feed forward) التي سيتم استخدامها. يجب أن يكون أحد"relu"أو"gated-gelu". - use_cache (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب على النموذج إرجاع قيم المفاتيح/القيم الأخيرة للانتباه (لا تستخدمها جميع النماذج). لا ينطبق إلا إذا كانconfig.is_decoder=Trueأو إذا كان النموذج نموذجًا توليديًا يعتمد على المُفكِّك فقط. - pad_token_id (
int، اختياري، القيمة الافتراضية0) — معرّف الرمز المستخدم للتعبئة في المفردات. - eos_token_id (
Union[int, list[int]]، اختياري، القيمة الافتراضية1) — معرّف الرمز المستخدم لنهاية التدفق في المفردات. - dense_act_fn (
string، اختياري، القيمة الافتراضية"relu") — نوع دالة التنشيط (Activation Function) المستخدمة فيPop2PianoDenseActDenseوفيPop2PianoDenseGatedActDense. - is_decoder (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان النموذج يُستخدم كمفكّك (decoder) أم لا. إذا كانت القيمةFalse، يُستخدم النموذج كمُرمِّز (encoder). - tie_word_embeddings (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب ربط ترميزات الأوزان (weight embeddings) وفقاً لخريطةtied_weights_keysالخاصة بالنموذج.
هذه فئة الإعدادات المخزنة لإعدادات نموذج Pop2PianoModel. تُستخدم لاستحداث نموذج Pop2Piano وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ sweetcocoa/pop2piano
ترث كائنات التهيئة من PreTrainedConfig ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ PreTrainedConfig لمزيد من المعلومات.
Pop2PianoFeatureExtractor
فئة transformers.Pop2PianoFeatureExtractor
< source >( sampling_rate: int = 22050padding_value: int = 0window_size: int = 4096hop_length: int = 1024min_frequency: float = 10.0feature_size: int = 512num_bars: int = 2**kwargs )
المعاملات
- sampling_rate (
int, اختياري، القيمة الافتراضية 22050) — معدل أخذ العينات المستهدف للإشارة الصوتية. وهو معدل أخذ العينات الذي يتم تمريره إلى النموذج. - padding_value (
int، اختياري، القيمة الافتراضية 0) — قيمة الحشو المستخدمة لحشو الصوت. يجب أن تتوافق مع الصمت. - window_size (
int, اختياري، القيمة الافتراضية 4096) — طول النافذة بالعينات التي تُطبَّق عليها تحويل فورييه. - hop_length (
int، اختياري، القيمة الافتراضية 1024) — حجم الخطوة بين كل نافذة من نوافذ الموجة، مقاساً بعدد العينات. - min_frequency (
float، اختياري، القيمة الافتراضية 10.0) — أدنى تردد سيُستخدم في طيف log-mel. - feature_size (
int، اختياري، القيمة الافتراضية 512) — أبعاد الميزات للميزات المستخرجة. - num_bars (
int، اختياري، القيمة الافتراضية 2) — يحدد الفاصل الزمني بين كل تسلسل.
ينشئ مستخرج ميزات Pop2Piano.
يرث مستخرج الميزات هذا من SequenceFeatureExtractor الذي يحتوي على معظم الطرق الرئيسية. ينبغي للمستخدمين الرجوع إلى هذه الفئة الأصلية لمزيد من المعلومات حول تلك الطرق.
تستخرج هذه الفئة الإيقاع وتعالج الصوت مسبقاً قبل تمريره إلى النموذج. أولاً، يُمرَّر الصوت إلى خوارزمية RhythmExtractor2013 التي تستخرج beat_times ومواقع الإيقاع وتقدير درجة ثقتها، وكذلك السرعة الإيقاعية بوحدة bpm، ثم يتم استيفاء beat_times للحصول على beatsteps. لاحقاً، نحسب extrapolated_beatsteps من ذلك لاستخدامها في tokenizer. من ناحية أخرى، يُعاد أخذ عينات الصوت بمعدل self.sampling_rate ويُعالج مسبقاً، ثم يُحسب طيف log mel spectogram منه لاستخدامه في نموذج transformer الخاص بنا.
__call__
< source >( audio: numpy.ndarray | list[float] | list[numpy.ndarray] | list[list[float]]sampling_rate: int | list[int]steps_per_beat: int = 2resample: bool | None = Truereturn_attention_mask: bool | None = Falsereturn_tensors: str | transformers.utils.generic.TensorType | None = None**kwargs )
المعاملات
- audio (
np.ndarray,List) — الصوت أو دفعة من الأصوات المراد معالجتها. يمكن أن يكون كل صوت مصفوفة numpy، أو قائمة من قيم float، أو قائمة من مصفوفات numpy، أو قائمة من قوائم قيم float. - sampling_rate (
int) — معدل أخذ العينات الذي تم به أخذ عينات مدخلaudio. يُوصى بشدة بتمريرsampling_rateعند استدعاء الأمامي لمنع الأخطاء الصامتة. - steps_per_beat (
int، اختياري، القيمة الافتراضية 2) — يُستخدم في الاستيفاء لـbeat_times. - resample (
bool، اختياري، القيمة الافتراضيةTrue) — يحدد ما إذا كان يجب إعادة أخذ عينات الصوت إلىsampling_rateقبل المعالجة أم لا. يجب أن تكون القيمة True أثناء الاستدلال. - return_attention_mask (
boolاختياري، القيمة الافتراضيةFalse) — يحدد ما إذا كان سيتم تقديم attention_mask الخاص بـ input_features وbeatsteps وextrapolated_beatstep كإخراج أم لا. يتم ضبطه تلقائيًا على True للمدخلات المجمعة. - return_tensors (
strأو TensorType, اختياري) — إذا تم تعيينه، فسيُرجع تينسورات بدلاً من قائمة من الأعداد الصحيحة في بايثون. القيم المقبولة هي:'pt': إرجاع كائناتtorch.Tensorمن PyTorch.'np': إرجاع كائناتnp.ndarrayمن نوع Numpy. إذا لم يتم تحديد شيء، فسيتم إرجاع قائمة من مصفوفاتnp.ndarray.
الطريقة الرئيسية لتحويل البيانات إلى ميزات وتجهيزها للنموذج.
Pop2PianoForConditionalGeneration
فئة transformers.Pop2PianoForConditionalGeneration
< source >( config: Pop2PianoConfig )
المعاملات
- config (Pop2PianoConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعدادات إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.
نموذج Pop2Piano مع رأس language modeling في الأعلى.
يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).
هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Nonedecoder_input_ids: typing.Optional[torch.LongTensor] = Nonedecoder_attention_mask: typing.Optional[torch.BoolTensor] = Noneencoder_outputs: tuple[tuple[torch.Tensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneinput_features: 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'> ) → Seq2SeqLMOutput or tuple(torch.Tensor)
المعاملات
- input_ids (
torch.LongTensorof shape(batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس النموذج. نظرًا لأن Pop2Piano هو نموذج يستخدم تضمينات الموضع النسبي، فيمكنك ملء المدخلات من الجانبين الأيمن والأيسر. يمكن الحصول على الفهارس باستخدام AutoTokenizer. راجع PreTrainedTokenizer.encode() و PreTrainedTokenizer.call() للتفاصيل. ما هي معرّفات الإدخال؟ لمعرفة المزيد حول كيفية تحضيرinput_idsللتدريب المسبق، اطّلع على Pop2Piano Training. - attention_mask (
torch.Tensorبشكل(batch_size, sequence_length), اختياري) — قناع لتجنب تنفيذ الانتباه على فهارس رموز الحشو. القيم المختارة للقناع هي[0, 1]:- 1 للرموز التي لم تُقنَّع،
- 0 للرموز التي تم إخفاؤها.
- decoder_input_ids (
torch.LongTensorof shape(batch_size, target_sequence_length), اختياري) — فهارس رموز تسلسل مدخلات المُفكِّك في قاموس الكلمات. يمكن الحصول على الفهارس باستخدام AutoTokenizer. راجع PreTrainedTokenizer.encode() و PreTrainedTokenizer.call() للتفاصيل. ما هي معرّفات مدخلات المُفكِّك؟ يستخدم Pop2Pianopad_token_idكرمز بداية لتوليدdecoder_input_ids. إذا تم استخدامpast_key_values، فيجب إدخالdecoder_input_idsالأخيرة فقط بشكل اختياري (راجعpast_key_values). لمعرفة المزيد حول كيفية التحضير - decoder_attention_mask (
torch.BoolTensorof shape(batch_size, target_sequence_length), اختياري) — السلوك الافتراضي: توليد متجه يتجاهل رموز الحشو فيdecoder_input_ids. كما سيتم استخدام قناع سببي (Causal mask) افتراضيًا. - encoder_outputs (
tuple[tuple[torch.Tensor]]، اختياري) — مجموعة (توبل) تتكون من (last_hidden_state، اختياري:hidden_states، اختياري:attentions)last_hidden_stateذو الشكل(batch_size, sequence_length, hidden_size)، اختياري) هو تسلسل من حالات المخفية (hidden-states) عند مخرج الطبقة الأخيرة من المشفر. يُستخدم في الانتباه المتقاطع (cross-attention) داخل المُفكِّك (decoder). - past_key_values (
~cache_utils.Cache, اختياري) — حالات مخفية محسوبة مسبقًا (المفاتيح والقيم في كتل الانتباه الذاتي وكتل الانتباه المتقاطع) يمكن استخدامها لتسريع فك الترميز التسلسلي. يتكون هذا عادةً منpast_key_valuesالذي يعيده النموذج في مرحلة سابقة من فك الترميز، عندماuse_cache=Trueأوconfig.use_cache=True.يُسمح فقط بمرجع Cache كمدخل، راجع دليل ذاكرة kv لدينا. إذا لم يتم تمرير
past_key_values، فسيتم تهيئة DynamicCache افتراضياً.سيُخرج النموذج نفس صيغة الكاش التي تُمرَّر كمدخل.
عند استخدام
past_key_values، يُتوقَّع من المستخدم إدخالinput_idsغير المعالجة فقط (تلك التي لم تُقدَّم حالات مفاتيحها وقيمها السابقة إلى هذا النموذج) بأبعاد(batch_size, unprocessed_length)بدلاً من جميعinput_idsبأبعاد(batch_size, sequence_length). - inputs_embeds (
torch.Tensorمن الشكل(batch_size, sequence_length, hidden_size)، اختياري) — اختياريًا، بدلاً من تمريرinput_ids، يمكنك اختيار تمرير تمثيل مضمّن مباشرة. وهذا مفيد إذا كنت ترغب في الحصول على مزيد من التحكم في كيفية تحويل فهارسinput_idsإلى المتجهات المرتبطة بها، مقارنةً بمصفوفة البحث المضمّنة الداخلية للنموذج. - input_features (
torch.Tensorمن الشكل(batch_size, sequence_length, feature_dim)، اختياري) — المصفوفات المقابلة لميزات الصوت المدخلة. يمكن الحصول على ميزات الصوت باستخدام Pop2PianoFeatureExtractor. راجع Pop2PianoFeatureExtractor.call() للتفاصيل (Pop2PianoProcessor يستخدم Pop2PianoFeatureExtractor لمعالجة الملفات الصوتية). - 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من الشكل(batch_size,)، اختياري) — التسميات لحساب خسارة تصنيف/الانحدار التسلسلي. يجب أن تكون الفهارس ضمن[-100, 0, ..., config.vocab_size - 1]. يتم تجاهل (إخفاء) جميع التسميات المضبوطة على-100، ولا تُحسب الخسارة إلا للتسميات ضمن[0, ..., config.vocab_size] - use_cache (
bool، اختياري) — إذا تم تعيينه إلىTrue، تُعاد حالات المفاتيح والقيمpast_key_valuesويمكن استخدامها لتسريع فك الترميز (انظرpast_key_values).
يعيد
Seq2SeqLMOutput أو tuple(torch.Tensor)
Seq2SeqLMOutput أو مجموعة مرتبة من
torch.Tensor (في حال تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة اعتماداً على الإعداد (Pop2PianoConfig) والمدخلات.
تتجاوز طريقة Pop2PianoForConditionalGeneration الخاصة بالتقديم (forward) الطريقة الخاصة __call__.
على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن
Moduleبدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.
loss (
torch.Tensorof shape(1,), اختياري, يُعاد عند توفيرlabels) — خسارة نمذجة اللغة.logits (
torch.Tensorمن الشكل(batch_size, sequence_length, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة (درجات لكل رمز في المفردات قبل SoftMax).past_key_values (
EncoderDecoderCache، اختياري، يُعاد عند تمريرuse_cache=Trueأو عند تعيينconfig.use_cache=True) — إنه كائن من نوع EncoderDecoderCache. لمزيد من التفاصيل، راجع دليل ذاكرة kv.تحتوي على حالات مخفية محسوبة مسبقًا (المفاتيح والقيم في كتل الانتباه الذاتي وكتل الانتباه المتقاطع) يمكن استخدامها (انظر مدخل
past_key_values) لتسريع فك الترميز التسلسلي.decoder_hidden_states (
tuple(torch.Tensor)، اختياري، يُعاد عند تمريرoutput_hidden_states=Trueأو عند تعيينconfig.output_hidden_states=True) — مجموعة منtorch.Tensor(واحدة لإخراج الطبقات المضمنة، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لإخراج كل طبقة) بأبعاد(batch_size, sequence_length, hidden_size).حالات المخفية (Hidden states) لمفكّك الترميز (decoder) عند مخرج كل طبقة بالإضافة إلى مخرجات التضمين الأولي (initial embedding).
decoder_attentions (
tuple(torch.Tensor)، اختياري، يُعاد عند تمريرoutput_attentions=Trueأو عند تعيينconfig.output_attentions=True) — مجموعة منtorch.Tensor(واحدة لكل طبقة) بأبعاد(batch_size, num_heads, sequence_length, sequence_length).أوزان الانتباه في المُفكِّك، بعد تطبيق دالة softmax على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.
cross_attentions (
tuple(torch.Tensor)، اختياري، يُعاد عند تمريرoutput_attentions=Trueأو عند تعيينconfig.output_attentions=True) — مجموعة منtorch.Tensor(واحدة لكل طبقة) بأبعاد(batch_size, num_heads, sequence_length, sequence_length).أوزان الانتباه لطبقة الانتباه المتقاطع في المُفكِّك، بعد تطبيق دالة softmax على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه المتقاطع.
encoder_last_hidden_state (
torch.Tensorمن الشكل(batch_size, sequence_length, hidden_size)، اختياري) — تسلسل حالات مخفية عند مخرج الطبقة الأخيرة من مُشفِّر النموذج.encoder_hidden_states (
tuple(torch.Tensor)، اختياري، يُعاد عند تمريرoutput_hidden_states=Trueأو عند تعيينconfig.output_hidden_states=True) — مجموعة منtorch.Tensor(واحدة لإخراج الطبقات المضمنة، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لإخراج كل طبقة) من الشكل(batch_size, sequence_length, hidden_size).حالات المخفية للمشفّر عند مخرج كل طبقة بالإضافة إلى مخرجات التضمين الأولي.
encoder_attentions (
tuple(torch.Tensor)، اختياري، يُعاد عند تمريرoutput_attentions=Trueأو عند تعيينconfig.output_attentions=True) — مجموعة منtorch.Tensor(واحدة لكل طبقة) بأبعاد(batch_size, num_heads, sequence_length, sequence_length).أوزان الانتباه في المُشفِّر، بعد تطبيق دالة softmax على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.
مثال:
>>> 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)
...generate
< source >( input_featuresattention_mask = Nonecomposer = 'composer1'generation_config = None**kwargs ) → ModelOutput or torch.LongTensor
المعاملات
- input_features (
torch.Tensorمن الشكل(batch_size, sequence_length, hidden_size)، اختياري) — هذا هو التمثيل المميّز للصوت الذي تولّدهPop2PianoFeatureExtractor. - attention_mask —
للتوليد الدُفعي
input_featuresتُملأ حتى تتطابق في الشكل عبر جميع الأمثلة.attention_maskيساعد في تحديد المناطق التي تم ملؤها وتلك التي لم يتم ملؤها.- 1 للرموز التي لم تُملأ،
- 0 للرموز التي تم تعبئتها.
- composer (
str، اختياري، القيمة الافتراضية"composer1") — تُمرَّر هذه القيمة إلىPop2PianoConcatEmbeddingToMelلتوليد تمثيلات مختلفة لكل"composer". يرجى التأكد من وجود قيمة composer فيcomposer_to_feature_tokenضمنgeneration_config. لمثال على ذلك، يرجى الاطلاع على https://huggingface.co/sweetcocoa/pop2piano/blob/main/generation_config.json . - generation_config (
~generation.GenerationConfig، اختياري) — إعدادات التوليد التي تُستخدم كإعدادات أساسية لاستدعاء التوليد. أي**kwargsتُمرَّر إلى generate وتطابق سماتgeneration_configستُلغي قيمها. إذا لم يُقدَّمgeneration_config، فسيُستخدم الإعداد الافتراضي، والذي له أولوية تحميل كالتالي: 1) من ملف النموذجgeneration_config.json، إذا كان موجودًا؛ 2) من إعدادات النموذج. يُرجى ملاحظة أن المعاملات غير المحددة ستورث القيم الافتراضية لـ GenerationConfig، ويجب الرجوع إلى توثيقها لضبط توليد المعاملات. - kwargs —
تحديد معلمات بشكل مؤقت لـ
generate_configو/أو معلمات إضافية خاصة بالنموذج سيتم تمريرها إلى دالةforwardفي النموذج. إذا كان النموذج من نوع المُشفِّر-المُفكِّك (encoder-decoder)، فيجب ألا تُضاف بادئة للمعلمات الخاصة بالمُشفِّر، بينما يجب إضافة بادئة decoder_ للمعلمات الخاصة بالمُفكِّك.
يعيد
ModelOutput أو torch.LongTensor
ModelOutput (إذا كان return_dict_in_generate=True
أو عندما يكون config.return_dict_in_generate=True) أو torch.Tensor.
بما أن Pop2Piano هو نموذج مُشفِّر-مُفكِّك (model.config.is_encoder_decoder=True)، فإن أنواع
ModelOutput الممكنة هي:
يولّد معرّفات الرموز (token ids) للمخرجات الموسيقية بصيغة MIDI.
تُضبط معظم المعلمات التي تتحكم في التوليد في
generation_config، والتي إذا لم تُمرَّر، فسيتم ضبطها على إعدادات التوليد الافتراضية للنموذج. يمكنك تجاوز أيgeneration_configعن طريق تمرير المعلمات المقابلة إلى generate()، على سبيل المثال.generate(inputs, num_beams=4, do_sample=True). للحصول على نظرة عامة على استراتيجيات التوليد وأمثلة الأكواد، راجع الدليل التالي.
Pop2PianoTokenizer
فئة transformers.Pop2PianoTokenizer
< source >( vocabdefault_velocity = 77num_bars = 2unk_token = '-1'eos_token = '1'pad_token = '0'bos_token = '2'**kwargs )
المعاملات
- vocab (
str) — مسار ملف المفردات الذي يحتوي على المفردات. - default_velocity (
int، اختياري، القيمة الافتراضية 77) — يحدد السرعة الافتراضية المستخدمة عند إنشاء نوتات midi. - num_bars (
int، اختياري، القيمة الافتراضية 2) — يحدد cutoff_time_idx لكل رمز. - unk_token (
strأوtokenizers.AddedToken، اختياري، القيمة الافتراضية"-1") — رمز المجهول. الرمز الذي لا يوجد في المفردات لا يمكن تحويله إلى معرّف، فيتم تعيينه ليكون هذا الرمز بدلاً من ذلك. - eos_token (
strأوtokenizers.AddedToken، اختياري، القيمة الافتراضية 1) — رمز نهاية التسلسل. - pad_token (
strأوtokenizers.AddedToken، اختياري، القيمة الافتراضية 0) — رمز خاص يُستخدم لجعل مصفوفات الرموز متساوية الحجم لأغراض الدفع (batching). ثم يتم تجاهله من قبل آليات الانتباه أو حساب الخسارة. - bos_token (
strأوtokenizers.AddedToken، اختياري، القيمة الافتراضية 2) — رمز بداية التسلسل الذي تم استخدامه أثناء التدريب المسبق. يمكن استخدامه كرمز لتصنيف التسلسل.
ينشئ مُجزِّئ Pop2Piano. لا يتطلب هذا المُجزِّئ تدريباً.
يرث هذا المُجزِّئ من PreTrainedTokenizer الذي يحتوي على معظم الطرق الرئيسية. ينبغي للمستخدمين الرجوع إلى هذه الفئة الأصلية لمزيد من المعلومات حول تلك الطرق.
__call__
< source >( notes: numpy.ndarray | list[pretty_midi.Note] | list[list[pretty_midi.Note]]padding: bool | str | transformers.utils.generic.PaddingStrategy = Falsetruncation: bool | str | transformers.tokenization_utils_base.TruncationStrategy | None = Nonemax_length: int | None = Nonepad_to_multiple_of: int | None = Nonereturn_attention_mask: bool | None = Nonereturn_tensors: str | transformers.utils.generic.TensorType | None = Noneverbose: bool = True**kwargs )
المعاملات
- notes (
numpy.ndarrayبشكل[batch_size, max_sequence_length, 4]أوlistقائمة منpretty_midi.Noteكائنات) — يمثل هذا نوتات MIDI.إذا كان
notesمن نوعnumpy.ndarray:- يجب أن تحتوي كل تسلسل على 4 قيم، وهي
onset idxوoffset idxوpitchوvelocity. إذا كانnotesعبارة عنlistيحتوي على كائناتpretty_midi.Note: - يجب أن تحتوي كل تسلسل على أربعة سمات، وهي
startوendوpitchوvelocity.
- يجب أن تحتوي كل تسلسل على 4 قيم، وهي
- padding (
bool,strأو PaddingStrategy, اختياري, الافتراضي هوFalse) — يُفعّل التحكم في الحشو. يقبل القيم التالية:Trueأو'longest': يتم ملء التسلسلات حتى أطول تسلسل في الدفعة (أو لا يتم أي ملء إذا تم تقديم تسلسل واحد فقط).'max_length': يتم ملء النص حتى الطول الأقصى المحدد عبر الحجةmax_lengthأو حتى الطول الأقصى المقبول لإدخال النموذج إذا لم تُقدَّم تلك الحجة.Falseأو'do_not_pad'(الافتراضي): لا يوجد حشو (أي، يمكن إخراج دفعة تحتوي على تسلسلات بطول مختلف).
- truncation (
bool,strأو TruncationStrategy, اختياري, الافتراضي هوFalse) — تفعيل التحكم في القص. يقبل القيم التالية:Trueأو'longest_first': يُقصّ النص إلى الحد الأقصى للطول المحدد عبر الحجةmax_lengthأو إلى الحد الأقصى المقبول لطول الإدخال للنموذج إذا لم تُقدَّم تلك الحجة. يتم هذا القص رمزًا تلو الآخر، حيث يُزال رمز من أطول تسلسل في الزوج إذا كان قد قُدِّم زوج من التسلسلات (أو دفعة من الأزواج).'only_first': يُقصّ النص إلى الحد الأقصى للطول المحدد عبر الحجةmax_lengthأو إلى الحد الأقصى المقبول لطول الإدخال للنموذج إذا لم تُقدَّم تلك الحجة. لن يُقصّ هذا الخيار سوى التسلسل الأول من الزوج إذا قُدِّم زوج من التسلسلات (أو دفعة من الأزواج).'only_second': يُقصّ النص إلى الحد الأقصى للطول المحدد عبر الحجةmax_lengthأو إلى الحد الأقصى المقبول لطول الإدخال للنموذج إذا لم تُقدَّم تلك الحجة. لن يتم قصّ النص الثاني من الزوج إلا إذا قُدِّم زوج من النصوص (أو دفعة من الأزواج).Falseأو'do_not_truncate'(الافتراضي): لا يوجد اقتطاع (أي، يمكن إخراج دفعة بأطوال تسلسلات أكبر من الحد الأقصى المقبول لحجم الإدخال في النموذج).
- max_length (
int, اختياري) — يتحكم في الحد الأقصى للطول الذي سيستخدمه أحد معاملات القص/الحشو. إذا تُرك غير مضبوط أو ضُبط علىNone، فسيتم استخدام الحد الأقصى للطول المحدد مسبقًا للنموذج إذا كان أحد معاملات القص/الحشو يتطلب حدًا أقصى للطول. إذا لم يكن للنموذج حد أقصى محدد لطول الإدخال (مثل XLNet) فسيتم تعطيل القص/الحشو إلى حد أقصى للطول. - pad_to_multiple_of (
int، اختياري) — إذا تم ضبطه، سيتم توسيط التسلسل إلى مضاعف للقيمة المُقدَّمة. وهذا مفيد بشكل خاص لتفعيل استخدام نوى Tensor على أجهزة NVIDIA التي تتمتع بقابلية معالجة>= 7.5(Volta). - return_attention_mask (
bool, اختياري) — ما إذا كان يجب إرجاع قناع الانتباه. إذا تُركت القيمة الافتراضية، فسيتم إرجاع قناع الانتباه وفقًا للقيمة الافتراضية الخاصة بمجزّئ الرموز المحدد، كما هو معرّف بواسطةreturn_outputsالخاصية. - return_tensors (
strأو TensorType, اختياري) — إذا تم تعيينه، فسيُعاد تينسورات بدلاً من قائمة من الأعداد الصحيحة في Python. القيم المقبولة هي:'pt': إرجاع كائناتtorch.Tensorمن PyTorch.'np': إرجاع كائناتnp.ndarrayمن نوع Numpy.
- verbose (
bool، اختياري، الافتراضيTrue) — ما إذا كان يجب طباعة مزيد من المعلومات والتحذيرات أم لا.
هذا هو أسلوب __call__ الخاص بـ Pop2PianoTokenizer. يقوم بتحويل نوتات midi إلى معرّفات الرموز التي يولّدها نموذج التحويل.
Pop2PianoProcessor
فئة transformers.Pop2PianoProcessor
< source >( feature_extractortokenizer )
ينشئ Pop2PianoProcessor الذي يجمع بين مستخرج الميزات ومجزئ الرموز في معالج واحد.
يوفر Pop2PianoProcessor جميع وظائف Pop2PianoFeatureExtractor وtokenizer_class. راجع ~Pop2PianoFeatureExtractor و~tokenizer_class لمزيد من المعلومات.
__call__
< source >( audio: numpy.ndarray | list[float] | list[numpy.ndarray] = Nonesampling_rate: int | list[int] | None = Nonesteps_per_beat: int = 2resample: bool | None = Truenotes: list | transformers.utils.generic.TensorType = Nonepadding: bool | str | transformers.utils.generic.PaddingStrategy = Falsetruncation: bool | str | transformers.tokenization_utils_base.TruncationStrategy = Nonemax_length: int | None = Nonepad_to_multiple_of: int | None = Noneverbose: bool = True**kwargs )
المعاملات
- audio (
Union[numpy.ndarray, list[float], list[numpy.ndarray]], اختياري) — الصوت أو مجموعة الأصوات التي يجب تحضيرها. يمكن أن يكون كل صوت مصفوفة NumPy أو متجه PyTorch. في حالة استخدام مصفوفة NumPy أو متجه PyTorch، يجب أن يكون شكل كل صوت (C, T)، حيث C هو عدد القنوات، وT هو طول العينة للصوت. - sampling_rate (
intأوlist[int]، اختياري) — معدل أخذ العينات للصوت المدخل بالهرتز. يجب أن يتطابق هذا المعدل مع معدل أخذ العينات المستخدم في مستخرج الميزات. إذا لم يُقدَّم، فسيتم استخدام معدل أخذ العينات الافتراضي من إعدادات المعالج. - steps_per_beat (
int، اختياري، القيمة الافتراضية2) — عدد خطوات الزمن لكل نبضة موسيقية. يتحكم هذا المعامل في الدقة الزمنية للتمثيل الموسيقي. توفر القيمة الأعلى حبيبية زمنية أدق لكنها تزيد من طول التسلسل. يُستخدم عند معالجة الصوت لاستخراج الميزات الموسيقية. - resample (
bool، اختياري، القيمة الافتراضيةTrue) — مرشح إعادة العينة المستخدم عند تغيير حجم الصورة. يمكن أن يكون أحد قيم enumPILImageResampling. لا يؤثر إلا إذا كانت قيمةdo_resizeهيTrue. - notes (
listأوTensorType، اختياري) — ملاحظات موسيقية مستخرجة مسبقًا بصيغة MIDI. عند توفيرها، يتخطى المعالج استخراج ميزات الصوت ويعالج الملاحظات مباشرةً عبر المرمّز. يجب أن تكون كل ملاحظة ممثلةً بقائمة أو متجه يحتوي على معلومات عن النغمة، والشدة، والتوقيت. - padding (bool أو str أو PaddingStrategy, اختياري, الافتراضي هو
False) — يُفعّل التحكم في الحشو. يقبل القيم التالية:Trueأو'longest': يتم ملء التسلسلات حتى أطول تسلسل في الدفعة (أو لا يتم أي ملء إذا تم تقديم تسلسل واحد فقط).'max_length': يتم ملء النص حتى الطول الأقصى المحدد عبر الحجةmax_lengthأو حتى الطول الأقصى المقبول لإدخال النموذج إذا لم تُقدَّم تلك الحجة.Falseأو'do_not_pad'(الافتراضي): لا يوجد حشو (أي، يمكن إخراج دفعة تحتوي على تسلسلات بطول مختلف).
- truncation (bool أو str أو TruncationStrategy, اختياري) —
يُفعّل التحكم في القص. يقبل القيم التالية:
Trueأو'longest_first': يُقصّ النص إلى الحد الأقصى للطول المحدد عبر الحجةmax_lengthأو إلى الحد الأقصى المقبول لطول الإدخال للنموذج إذا لم تُقدَّم تلك الحجة. يتم هذا القص رمزًا تلو الآخر، حيث يُزال رمز من أطول تسلسل في الزوج إذا كان قد قُدِّم زوج من التسلسلات (أو دفعة من الأزواج).'only_first': يُقصّ النص إلى الحد الأقصى للطول المحدد عبر الحجةmax_lengthأو إلى الحد الأقصى المقبول لطول الإدخال للنموذج إذا لم تُقدَّم تلك الحجة. لن يُقصّ هذا الخيار سوى التسلسل الأول من الزوج إذا قُدِّم زوج من التسلسلات (أو دفعة من الأزواج).'only_second': يُقصّ النص إلى الحد الأقصى للطول المحدد عبر الحجةmax_lengthأو إلى الحد الأقصى المقبول لطول الإدخال للنموذج إذا لم تُقدَّم تلك الحجة. لن يتم قصّ النص الثاني من الزوج إلا إذا قُدِّم زوج من النصوص (أو دفعة من الأزواج).Falseأو'do_not_truncate'(الافتراضي): لا يوجد اقتطاع (أي، يمكن إخراج دفعة بأطوال تسلسلات أكبر من الحد الأقصى المقبول لحجم الإدخال في النموذج).
- max_length (
int, اختياري) — يتحكم في الحد الأقصى للطول الذي ستستخدمه إحدى معاملات القص/الحشو.إذا تُرك غير مُعيَّن أو عُدِّل إلى
None، فسيتم استخدام الطول الأقصى المُعرَّف مسبقًا للنموذج إذا كان أحد معاملات القص/الحشو يتطلب طولًا أقصى. وإذا لم يكن للنموذج طول إدخال أقصى محدد (مثل XLNet)، فسيتم تعطيل القص/الحشو إلى طول أقصى. - pad_to_multiple_of (
int, اختياري) — إذا تم ضبطه، سيتم توسيط التسلسل إلى مضاعف للقيمة المُقدَّمة. يتطلب تفعيلpadding. يُعدّ هذا مفيدًا بشكل خاص لتمكين استخدام نوى Tensor على أجهزة NVIDIA التي تتمتع بقابلية معالجة>= 7.5(Volta). - verbose (
bool، اختياري، الافتراضيTrue) — ما إذا كان يجب طباعة مزيد من المعلومات والتحذيرات أم لا. - return_tensors (
strأو TensorType, اختياري) — إذا تم تعيينه، فسيُعاد تينسورات من إطار عمل محدد. القيم المقبولة هي:'pt': إرجاع كائناتtorch.Tensorمن PyTorch.'np': إرجاع كائناتnp.ndarrayمن NumPy.