Transformers documentation

Pop2Piano

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

and get access to the augmented documentation experience

to get started

نُشر هذا النموذج في أوراق 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

< >

( 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

< >

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

< >

( 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

< >

( config: Pop2PianoConfig )

المعاملات

  • config (Pop2PianoConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعدادات إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.

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

يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

forward

< >

( 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.LongTensor of 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.LongTensor of shape (batch_size, target_sequence_length), اختياري) — فهارس رموز تسلسل مدخلات المُفكِّك في قاموس الكلمات. يمكن الحصول على الفهارس باستخدام AutoTokenizer. راجع PreTrainedTokenizer.encode() و PreTrainedTokenizer.call() للتفاصيل. ما هي معرّفات مدخلات المُفكِّك؟ يستخدم Pop2Piano pad_token_id كرمز بداية لتوليد decoder_input_ids. إذا تم استخدام past_key_values، فيجب إدخال decoder_input_ids الأخيرة فقط بشكل اختياري (راجع past_key_values). لمعرفة المزيد حول كيفية التحضير
  • decoder_attention_mask (torch.BoolTensor of 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.Tensor of 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

< >

( 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

< >

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

< >

( 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.
  • 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

< >

( feature_extractortokenizer )

المعاملات

  • feature_extractor (Pop2PianoFeatureExtractor) — مستخرج الميزات هو مدخل إلزامي.
  • tokenizer (tokenizer_class) — مُجزِّئ النص (tokenizer) هو مدخل إلزامي.

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

يوفر Pop2PianoProcessor جميع وظائف Pop2PianoFeatureExtractor وtokenizer_class. راجع ~Pop2PianoFeatureExtractor و~tokenizer_class لمزيد من المعلومات.

__call__

< >

( 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) — مرشح إعادة العينة المستخدم عند تغيير حجم الصورة. يمكن أن يكون أحد قيم enum PILImageResampling. لا يؤثر إلا إذا كانت قيمة 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.
Update on GitHub