# Pop2Piano

## نظرة عامة

قُدِّم نموذج Pop2Piano في [Pop2Piano : Pop Audio-based Piano Cover Generation](https://huggingface.co/papers/2211.00895) من قِبل Jongho Choi وKyogu Lee.

تُستمتع أغلفة البيانو للموسيقى الشعبية على نطاق واسع، لكن توليدها من الموسيقى ليس مهمة بسيطة. فهي تتطلب خبرة كبيرة في عزف البيانو إلى جانب معرفة الخصائص المختلفة والنغمات الخاصة بالأغنية. مع Pop2Piano يمكنك توليد غلاف مباشرة من الموجة الصوتية للأغنية. وهو أول نموذج يولّد غلاف بيانو من الصوت الشعبي مباشرة دون وحدات استخراج النغمات والأصوات.

Pop2Piano هو نموذج Transformer من نوع المُشفِّر-المُفكِّك مبني على [T5](https://huggingface.co/papers/1910.10683). يتم تحويل الصوت المُدخل إلى شكل موجته ثم يُمرَّر إلى المُشفِّر الذي يحوّله إلى تمثيل كامن. يستخدم المُفكِّك هذه التمثيلات الكامنة لتوليد معرّفات الرموز بطريقة ذاتية التراجع. يتوافق كل معرّف رمز مع أحد أربعة أنواع مختلفة من الرموز: الوقت، السرعة، النغمة، و«خاص». ثم تُفكَّك معرّفات الرموز إلى ملف MIDI المكافئ لها.

المستخلص من الورقة البحثية هو كالتالي:

*تُستمتع أغلفة البيانو للموسيقى الشعبية من قِبل كثير من الناس. ومع ذلك، لا يزال مجال توليد أغلفة البيانو للموسيقى الشعبية تلقائيًا غير مدروس بما يكفي. ويعود ذلك جزئيًا إلى ندرة أزواج البيانات المتزامنة {الموسيقى الشعبية، غلاف البيانو}، مما جعل من الصعب تطبيق أحدث الأساليب القائمة على التعلم العميق والتي تعتمد على كميات كبيرة من البيانات. وللاستفادة من قوة النهج القائم على البيانات، قمنا بإنشاء كميات كبيرة من البيانات المتزامنة والمقابلة {الموسيقى الشعبية، غلاف البيانو} باستخدام خط أنابيب آلي. في هذه الورقة، نقدم Pop2Piano، وهو شبكة Transformer تولّد أغلفة بيانو بناءً على الموجات الصوتية للموسيقى الشعبية. وإلى حدّ علمنا، هذا هو النموذج الأول الذي يولّد غلاف بيانو مباشرةً من الصوت الشعبي دون استخدام وحدات استخراج اللحن والأصوات. نُظهر أن Pop2Piano، المُدرَّب على مجموعة بياناتنا، قادر على إنتاج أغلفة بيانو معقولة.*

تمت مساهمة هذا النموذج من قِبل [Susnato Dhar](https://huggingface.co/susnato). يمكن العثور على الكود الأصلي [هنا](https://github.com/sweetcocoa/pop2piano).

## نصائح للاستخدام

* للاستفادة من Pop2Piano، ستحتاج إلى تثبيت مكتبة 🤗 Transformers، بالإضافة إلى الوحدات الطرفية التالية:

```bash
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:

```python
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")
```

- مثال باستخدام ملف الصوت الخاص بك:

```python
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")
```

- مثال على معالجة ملفات صوتية متعددة دفعة واحدة:

```python
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`):

```python
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]]

#### transformers.Pop2PianoConfig[[transformers.Pop2PianoConfig]]

```python
transformers.Pop2PianoConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, is_encoder_decoder: bool = True, vocab_size: int = 2400, composer_vocab_size: int = 21, d_model: int = 512, d_kv: int = 64, d_ff: int = 2048, num_layers: int = 6, num_decoder_layers: int | None = None, num_heads: int = 8, relative_attention_num_buckets: int = 32, relative_attention_max_distance: int = 128, dropout_rate: float | int = 0.1, layer_norm_epsilon: float = 1e-06, initializer_factor: float = 1.0, feed_forward_proj: str = 'gated-gelu', use_cache: bool = True, pad_token_id: int | None = 0, eos_token_id: int | list[int] | None = 1, dense_act_fn: str = 'relu', is_decoder: bool = False, tie_word_embeddings: bool = True)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pop2piano/configuration_pop2piano.py#L24)

**المعاملات:**

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`) : ما إذا كان النموذج يُستخدم كمُفكِّك أم لا. إذا كان `False`، يُستخدم النموذج كمُشفِّر.

tie_word_embeddings (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان يجب ربط ترميزات الأوزان وفقاً لخريطة `tied_weights_keys` الخاصة بالنموذج.

هذه فئة الإعدادات المخزنة لإعدادات نموذج Pop2PianoModel. تُستخدم لاستحداث نموذج Pop2Piano وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى إعدادات مشابهة لتلك الخاصة بـ [sweetcocoa/pop2piano](https://huggingface.co/sweetcocoa/pop2piano)

ترث كائنات الإعداد من [PreTrainedConfig](/docs/transformers/main/ar/main_classes/configuration#transformers.PreTrainedConfig) ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ [PreTrainedConfig](/docs/transformers/main/ar/main_classes/configuration#transformers.PreTrainedConfig) لمزيد من المعلومات.

## Pop2PianoFeatureExtractor[[transformers.Pop2PianoFeatureExtractor]]

#### transformers.Pop2PianoFeatureExtractor[[transformers.Pop2PianoFeatureExtractor]]

```python
transformers.Pop2PianoFeatureExtractor(sampling_rate: int = 22050, padding_value: int = 0, window_size: int = 4096, hop_length: int = 1024, min_frequency: float = 10.0, feature_size: int = 512, num_bars: int = 2, **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pop2piano/feature_extraction_pop2piano.py#L49)

**المعاملات:**

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](/docs/transformers/main/ar/main_classes/feature_extractor#transformers.SequenceFeatureExtractor) الذي يحتوي على معظم الطرق الرئيسية. ينبغي للمستخدمين الرجوع إلى هذه الفئة الأصلية لمزيد من المعلومات حول تلك الطرق.

تستخرج هذه الفئة الإيقاع وتعالج الصوت مسبقًا قبل تمريره إلى النموذج. أولاً، يُمرَّر الصوت إلى خوارزمية `RhythmExtractor2013` التي تستخرج beat_times ومواقع الإيقاعات وتقدير ثقتها، وكذلك الإيقاع بالنبضات في الدقيقة (bpm). ثم يتم استيفاء beat_times للحصول على beatsteps. لاحقًا، نحسب extrapolated_beatsteps من ذلك لاستخدامها في tokenizer. من ناحية أخرى، يُعاد أخذ عينات الصوت بمعدل self.sampling_rate ويُعالج مسبقًا، ثم يُحسب طيف log mel spectogram منه لاستخدامه في نموذج transformer الخاص بنا.

#### __call__[[transformers.Pop2PianoFeatureExtractor.__call__]]

```python
__call__(audio: numpy.ndarray | list[float] | list[numpy.ndarray] | list[list[float]], sampling_rate: int | list[int], steps_per_beat: int = 2, resample: bool | None = True, return_attention_mask: bool | None = False, return_tensors: str | transformers.utils.generic.TensorType | None = None, **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pop2piano/feature_extraction_pop2piano.py#L341)

**المعاملات:**

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](/docs/transformers/main/ar/internal/file_utils#transformers.TensorType)، *اختياري*) : إذا تم تعيينه، فسيُرجع تينسورات بدلاً من قائمة من الأعداد الصحيحة بلغة بايثون. القيم المقبولة هي: - `'pt'`: يُرجع كائنات `torch.Tensor` من PyTorch. - `'np'`: يُرجع كائنات `np.ndarray` من Numpy. إذا لم يتم تحديد شيء، فسيُرجع قائمة من مصفوفات `np.ndarray`.

الطريقة الرئيسية لتحويل البيانات إلى ميزات وتجهيزها للنموذج.

## Pop2PianoForConditionalGeneration[[transformers.Pop2PianoForConditionalGeneration]]

#### transformers.Pop2PianoForConditionalGeneration[[transformers.Pop2PianoForConditionalGeneration]]

```python
transformers.Pop2PianoForConditionalGeneration(config: Pop2PianoConfig)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pop2piano/modeling_pop2piano.py#L763)

**المعاملات:**

config ([Pop2PianoConfig](/docs/transformers/main/ar/model_doc/pop2piano#transformers.Pop2PianoConfig)) : فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. عند التهيئة باستخدام ملف إعدادات، لا يتم تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة [from_pretrained()](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel.from_pretrained) لتحميل أوزان النموذج.

نموذج Pop2Piano مع رأس `language modeling` في الأعلى.

يرث هذا النموذج من [PreTrainedModel](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التنزيل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضاً فئة فرعية من [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

#### forward[[transformers.Pop2PianoForConditionalGeneration.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, decoder_input_ids: typing.Optional[torch.LongTensor] = None, decoder_attention_mask: typing.Optional[torch.BoolTensor] = None, encoder_outputs: tuple[tuple[torch.Tensor]] | None = None, past_key_values: transformers.cache_utils.Cache | None = None, inputs_embeds: typing.Optional[torch.Tensor] = None, input_features: typing.Optional[torch.Tensor] = None, decoder_inputs_embeds: typing.Optional[torch.Tensor] = None, labels: typing.Optional[torch.LongTensor] = None, use_cache: bool | None = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pop2piano/modeling_pop2piano.py#L851)

**المعاملات:**

input_ids (`torch.LongTensor` من الشكل `(batch_size, sequence_length)`) : فهارس رموز تسلسل الإدخال في قاموس الكلمات. Pop2Piano هو نموذج يحتوي على تضمينات موضع نسبي، لذا يجب أن تكون قادرًا على ملء المدخلات على كلا الجانبين الأيمن والأيسر. يمكن الحصول على الفهارس باستخدام [AutoTokenizer](/docs/transformers/main/ar/model_doc/auto#transformers.AutoTokenizer). راجع [PreTrainedTokenizer.encode()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) و [PreTrainedTokenizer.__call__()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) للتفاصيل. [ما هي معرّفات الإدخال؟](../glossary#input-ids) لمعرفة المزيد حول كيفية تحضير `input_ids` للتدريب المسبق، اطّلع على [Pop2Piano Training](./Pop2Piano#training).

attention_mask (`torch.Tensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : قناع لتجنب تنفيذ الانتباه على فهارس رموز الحشو. قيم القناع المختارة من `[0, 1]`: - 1 للرموز التي **ليست مقنّعة**، - 0 للرموز التي **مقنّعة**.  [ما هي أقنعة الانتباه؟](../glossary#attention-mask)

decoder_input_ids (`torch.LongTensor` من الشكل `(batch_size, target_sequence_length)`، *اختياري*) : فهارس رموز تسلسل مدخلات المُفكِّك في قاموس الكلمات. يمكن الحصول على الفهارس باستخدام [AutoTokenizer](/docs/transformers/main/ar/model_doc/auto#transformers.AutoTokenizer). راجع [PreTrainedTokenizer.encode()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) و [PreTrainedTokenizer.__call__()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) للتفاصيل. [ما هي معرّفات مدخلات المُفكِّك؟](../glossary#decoder-input-ids) يستخدم 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`. سيتم استخدام القناع السببي أيضًا بشكل افتراضي.

encoder_outputs (`tuple[tuple[torch.Tensor]]`، *اختياري*) : يتكوّن المصفوفة من (`last_hidden_state`، *اختياري*: `hidden_states`، *اختياري*: `attentions`) `last_hidden_state` من الشكل `(batch_size, sequence_length, hidden_size)`، *اختياري*) هو تسلسل من حالات الإخفاء عند مخرج الطبقة الأخيرة من المُشفِّر. يُستخدم في الانتباه المتقاطع (cross-attention) في المُفكِّك.

past_key_values (`~cache_utils.Cache`، *اختياري*) : حالات مخفية محسوبة مسبقًا (المفاتيح والقيم في كتل الانتباه الذاتي وكتل الانتباه المتقاطع) يمكن استخدامها لتسريع فك الترميز التسلسلي. يتكوّن هذا عادةً من `past_key_values` التي يعيدها النموذج في مرحلة سابقة من فك الترميز، عندما يكون `use_cache=True` أو `config.use_cache=True`. يُسمح فقط بتمرير كائن [Cache](/docs/transformers/main/ar/internal/generation_utils#transformers.Cache) كمدخل، راجع [دليل ذاكرة kv](https://huggingface.co/docs/transformers/en/kv_cache). إذا لم يتم تمرير `past_key_values`، فسيتم تهيئة [DynamicCache](/docs/transformers/main/ar/internal/generation_utils#transformers.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](/docs/transformers/main/ar/model_doc/pop2piano#transformers.Pop2PianoFeatureExtractor). راجع [Pop2PianoFeatureExtractor.__call__()](/docs/transformers/main/ar/model_doc/pop2piano#transformers.Pop2PianoFeatureExtractor.__call__) للتفاصيل ([Pop2PianoProcessor](/docs/transformers/main/ar/model_doc/pop2piano#transformers.Pop2PianoProcessor) يستخدم [Pop2PianoFeatureExtractor](/docs/transformers/main/ar/model_doc/pop2piano#transformers.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](/docs/transformers/main/ar/main_classes/output#transformers.modeling_outputs.Seq2SeqLMOutput) أو `tuple(torch.Tensor)`

[Seq2SeqLMOutput](/docs/transformers/main/ar/main_classes/output#transformers.modeling_outputs.Seq2SeqLMOutput) أو مجموعة من `torch.Tensor` (إذا تم تمرير `return_dict=False` أو عندما يكون `config.return_dict=False`) وتتضمن عناصر مختلفة اعتماداً على الإعداد ([Pop2PianoConfig](/docs/transformers/main/ar/model_doc/pop2piano#transformers.Pop2PianoConfig)) والمدخلات.

تتجاوز طريقة [Pop2PianoForConditionalGeneration](/docs/transformers/main/ar/model_doc/pop2piano#transformers.Pop2PianoForConditionalGeneration) الخاصة بالتقديم (forward) الطريقة الخاصة `__call__`.

على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن `Module` بدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.

- **loss** (`torch.Tensor` من الشكل `(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](/docs/transformers/main/ar/internal/generation_utils#transformers.EncoderDecoderCache). لمزيد من التفاصيل، راجع [دليل ذاكرة kv](https://huggingface.co/docs/transformers/en/kv_cache).

  تحتوي على حالات مخفية محسوبة مسبقًا (مفاتيح وقيم في كتل الانتباه الذاتي وكتل الانتباه المتقاطع) يمكن استخدامها (انظر مدخل `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 للانتباه، المُستخدَمة لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.

مثال:

```python
>>> 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[[transformers.Pop2PianoForConditionalGeneration.generate]]

```python
generate(input_features, attention_mask = None, composer = 'composer1', generation_config = None, **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pop2piano/modeling_pop2piano.py#L953)

**المعاملات:**

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_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](/docs/transformers/main/ar/main_classes/text_generation#transformers.GenerationConfig)، والتي يجب الرجوع إلى توثيقها لإعداد التوليد.

kwargs : تخصيص مؤقت لـ `generate_config` و/أو معاملات إضافية خاصة بالنموذج سيتم تمريرها إلى دالة `forward` في النموذج. إذا كان النموذج من نوع المُشفِّر-المُفكِّك (encoder-decoder)، فيجب ألا تُضاف بادئة للمعاملات الخاصة بالمُشفِّر، بينما يجب أن تُضاف بادئة *decoder_* للمعاملات الخاصة بالمُفكِّك.

**يعيد:** [ModelOutput](/docs/transformers/main/ar/main_classes/output#transformers.utils.ModelOutput) أو `torch.LongTensor`

[ModelOutput](/docs/transformers/main/ar/main_classes/output#transformers.utils.ModelOutput) (إذا كان `return_dict_in_generate=True` أو عندما يكون `config.return_dict_in_generate=True`) أو `torch.Tensor`. بما أن Pop2Piano هو نموذج مُشفِّر-مُفكِّك (`model.config.is_encoder_decoder=True`)، فإن أنواع [ModelOutput](/docs/transformers/main/ar/main_classes/output#transformers.utils.ModelOutput) الممكنة هي:
- [GenerateEncoderDecoderOutput](/docs/transformers/main/ar/internal/generation_utils#transformers.generation.GenerateEncoderDecoderOutput)،
- [GenerateBeamEncoderDecoderOutput](/docs/transformers/main/ar/internal/generation_utils#transformers.generation.GenerateBeamEncoderDecoderOutput)

يولّد معرّفات الرموز (token ids) للمخرجات الموسيقية بصيغة MIDI.

تُضبط معظم المعلمات التي تتحكم في التوليد في `generation_config`، والتي إذا لم تُمرَّر، فسيتم ضبطها على إعداد التوليد الافتراضي للنموذج. يمكنك تجاوز أي `generation_config` عن طريق تمرير المعلمات المقابلة إلى generate()، على سبيل المثال `.generate(inputs, num_beams=4, do_sample=True)`. للحصول على نظرة عامة على استراتيجيات التوليد وأمثلة الأكواد، راجع [الدليل التالي](./generation_strategies).

## Pop2PianoTokenizer[[transformers.Pop2PianoTokenizer]]

#### transformers.Pop2PianoTokenizer[[transformers.Pop2PianoTokenizer]]

```python
transformers.Pop2PianoTokenizer(vocab, default_velocity = 77, num_bars = 2, unk_token = '-1', eos_token = '1', pad_token = '0', bos_token = '2', **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pop2piano/tokenization_pop2piano.py#L62)

**المعاملات:**

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](/docs/transformers/main/ar/main_classes/tokenizer#transformers.PythonBackend) التي تحتوي على معظم الطرق الرئيسية. ينبغي للمستخدمين الرجوع إلى هذه الفئة الأصلية لمزيد من المعلومات حول تلك الطرق.

#### __call__[[transformers.Pop2PianoTokenizer.__call__]]

```python
__call__(notes: numpy.ndarray | list[pretty_midi.Note] | list[list[pretty_midi.Note]], padding: bool | str | transformers.utils.generic.PaddingStrategy = False, truncation: bool | str | transformers.tokenization_utils_base.TruncationStrategy | None = None, max_length: int | None = None, pad_to_multiple_of: int | None = None, return_attention_mask: bool | None = None, return_tensors: str | transformers.utils.generic.TensorType | None = None, verbose: bool = True, **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pop2piano/tokenization_pop2piano.py#L473)

**المعاملات:**

notes (`numpy.ndarray` من الشكل `[batch_size, max_sequence_length, 4]` أو `list` من كائنات `pretty_midi.Note`) : يمثل هذا النوتات الموسيقية. إذا كان `notes` من نوع `numpy.ndarray`: - يجب أن تحتوي كل تسلسلة على 4 قيم، وهي `onset idx`، `offset idx`، `pitch` و`velocity`. إذا كان `notes` من نوع `list` يحتوي على كائنات `pretty_midi.Note`: - يجب أن تحتوي كل تسلسلة على 4 سمات، وهي `start`، `end`، `pitch` و`velocity`.

padding (`bool` أو `str` أو [PaddingStrategy](/docs/transformers/main/ar/internal/file_utils#transformers.utils.PaddingStrategy)، *اختياري*، القيمة الافتراضية `False`) : يُفعّل التحكم في الحشو. يقبل القيم التالية:  - `True` أو `'longest'`: الحشو حتى أطول تسلسل في الدفعة (أو بدون حشو إذا تم تقديم تسلسل واحد فقط). - `'max_length'`: الحشو حتى الحد الأقصى للطول المحدد بواسطة الحجة `max_length` أو حتى الحد الأقصى المقبول لطول الإدخال للنموذج إذا لم تُقدَّم تلك الحجة. - `False` أو `'do_not_pad'` (الافتراضي): بدون حشو (أي، يمكنه إخراج دفعة تحتوي على تسلسلات بطول مختلف).

truncation (`bool` أو `str` أو [TruncationStrategy](/docs/transformers/main/ar/internal/tokenization_utils#transformers.tokenization_utils_base.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 Cores) على أجهزة NVIDIA التي تتمتع بقابلية معالجة `>= 7.5` (Volta).

return_attention_mask (`bool`، *اختياري*) : ما إذا كان يجب إرجاع قناع الانتباه. إذا تُركت القيمة الافتراضية، فسيتم إرجاع قناع الانتباه وفقاً للقيمة الافتراضية الخاصة بمجزّئ الرموز المعني، كما هو معرّف بواسطة الخاصية `return_outputs`.  [ما هي أقنعة الانتباه؟](../glossary#attention-mask)

return_tensors (`str` أو [TensorType](/docs/transformers/main/ar/internal/file_utils#transformers.TensorType)، *اختياري*) : إذا تم تعيينه، فسيُرجع تينسورات بدلاً من قائمة من الأعداد الصحيحة بلغة بايثون. القيم المقبولة هي: - `'pt'`: يُرجع كائنات `torch.Tensor` من PyTorch. - `'np'`: يُرجع كائنات `np.ndarray` من Numpy.

verbose (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان يجب طباعة مزيد من المعلومات والتنبيهات أم لا.

**يعيد:**

`BatchEncoding` يحتوي على token_ids.

هذا هو أسلوب `__call__` الخاص بـ `Pop2PianoTokenizer`. يقوم بتحويل نوتات midi إلى معرّفات الرموز التي يولّدها النموذج التحويلي.

## Pop2PianoProcessor[[transformers.Pop2PianoProcessor]]

#### transformers.Pop2PianoProcessor[[transformers.Pop2PianoProcessor]]

```python
transformers.Pop2PianoProcessor(feature_extractor, tokenizer)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pop2piano/processing_pop2piano.py#L29)

**المعاملات:**

feature_extractor (`Pop2PianoFeatureExtractor`) : مُستخرج الميزات هو مدخل مطلوب.

tokenizer (`tokenizer_class`) : مُجزِّئ النص (tokenizer) هو مدخل إلزامي.

ينشئ Pop2PianoProcessor الذي يجمع بين مستخرج الميزات ومجزئ الرموز في معالج واحد.

يوفر [Pop2PianoProcessor](/docs/transformers/main/ar/model_doc/pop2piano#transformers.Pop2PianoProcessor) جميع وظائف [Pop2PianoFeatureExtractor](/docs/transformers/main/ar/model_doc/pop2piano#transformers.Pop2PianoFeatureExtractor) و`tokenizer_class`. راجع [~Pop2PianoFeatureExtractor](/docs/transformers/main/ar/model_doc/pop2piano#transformers.Pop2PianoFeatureExtractor) و`~tokenizer_class` لمزيد من المعلومات.

#### __call__[[transformers.Pop2PianoProcessor.__call__]]

```python
__call__(audio: numpy.ndarray | list[float] | list[numpy.ndarray] = None, sampling_rate: int | list[int] | None = None, steps_per_beat: int = 2, resample: bool | None = True, notes: list | transformers.utils.generic.TensorType = None, padding: bool | str | transformers.utils.generic.PaddingStrategy = False, truncation: bool | str | transformers.tokenization_utils_base.TruncationStrategy = None, max_length: int | None = None, pad_to_multiple_of: int | None = None, verbose: bool = True, **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/pop2piano/processing_pop2piano.py#L33)

**المعاملات:**

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`) : مرشح إعادة العينة المستخدم عند تغيير حجم الصورة. يمكن أن يكون أحد قيم التعداد `PILImageResampling`. لا يؤثر إلا إذا كانت قيمة `do_resize` هي `True`.

notes (`list` أو `TensorType`، *اختياري*) : ملاحظات موسيقية مستخرجة مسبقًا بصيغة MIDI. عند توفيرها، يتخطى المعالج استخراج السمات الصوتية ويعالج الملاحظات مباشرةً عبر المُرمِّز. يجب أن تُمثَّل كل ملاحظة كقائمة أو متجه يحتوي على معلومات عن النغمة، والشدة، والتوقيت.

padding (bool أو str أو [PaddingStrategy](/docs/transformers/main/ar/internal/file_utils#transformers.utils.PaddingStrategy)، *اختياري*، القيمة الافتراضية `False`) : يُفعّل التحكم في الحشو. يقبل القيم التالية: - `True` أو `'longest'`: حشو حتى أطول تسلسل في الدفعة (أو بدون حشو إذا تم تقديم تسلسل واحد فقط). - `'max_length'`: حشو حتى الحد الأقصى للطول المحدد بالحجة `max_length` أو حتى الحد الأقصى المقبول لطول الإدخال للنموذج إذا لم تُقدَّم تلك الحجة. - `False` أو `'do_not_pad'` (الافتراضي): بدون حشو (أي، يمكن إخراج دفعة تحتوي على تسلسلات بطول مختلف).

truncation (bool, str or [TruncationStrategy](/docs/transformers/main/ar/internal/tokenization_utils#transformers.tokenization_utils_base.TruncationStrategy), *optional*) : يُفعّل التحكم في القص. يقبل القيم التالية: - `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 Cores على أجهزة NVIDIA التي تتمتع بقابلية معالجة `>= 7.5` (Volta).

verbose (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان يجب طباعة مزيد من المعلومات والتنبيهات أم لا.

return_tensors (`str` أو [TensorType](/docs/transformers/main/ar/internal/file_utils#transformers.TensorType)، *اختياري*) : إذا تم تعيينه، فسيُرجع تينسورات من إطار عمل محدد. القيم المقبولة هي:  - `'pt'`: يُرجع كائنات `torch.Tensor` من PyTorch. - `'np'`: يُرجع كائنات `np.ndarray` من NumPy.

**يعيد:**

`Union[~feature_extraction_utils.BatchFeature, ~tokenization_utils_base.BatchEncoding]`

