Transformers documentation

Qwen2Audio

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 في 15 يوليو 2024، وأُضيف إلى مكتبة Hugging Face Transformers في 8 أغسطس 2024.

Qwen2Audio

FlashAttention SDPA

نظرة عامة

تُعدّ Qwen2-Audio سلسلة النماذج الجديدة من نماذج اللغة الصوتية الكبيرة من فريق Qwen. تتمتع Qwen2-Audio بالقدرة على استقبال مدخلات إشارات صوتية متنوعة، وأداء التحليل الصوتي أو تقديم ردود نصية مباشرة فيما يتعلق بتعليمات الكلام. نُقدّم هنا وضعين متميزين للتفاعل الصوتي:

  • المحادثة الصوتية: يمكن للمستخدمين التفاعل بحرية مع Qwen2-Audio عبر الصوت دون الحاجة إلى إدخال نص
  • تحليل الصوت: يمكن للمستخدمين تقديم الصوت وتعليمات نصية للتحليل أثناء التفاعل

قُدم في التقرير التقني الخاص بـ Qwen2-Audio من قِبل Yunfei Chu وJin Xu وQian Yang وHaojie Wei وXipin Wei وZhifang Guo وYichong Leng وYuanjun Lv وJinzheng He وJunyang Lin وChang Zhou وJingren Zhou.

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

نقدّم أحدث تطورات Qwen-Audio، وهو نموذج لغوي صوتي كبير الحجم يُدعى Qwen2-Audio، ويتميز بقدرته على استقبال مدخلات إشارات صوتية متنوعة، وأداء تحليل صوتي أو تقديم ردود نصية مباشرة استجابةً لتعليمات صوتية. وعلى عكس الوسوم الهرمية المعقدة، قمنا بتبسيط عملية ما قبل التدريب من خلال استخدام أوامر لغوية طبيعية للبيانات والمهام المختلفة، كما وسّعنا حجم البيانات بشكل أكبر. وقد عززنا قدرة Qwen2-Audio على اتباع التعليمات، ونفّذنا وضعين مختلفين للتفاعل الصوتي: أحدهما للدردشة الصوتية والآخر للتحليل الصوتي. في وضع الدردشة الصوتية، يمكن للمستخدمين التفاعل صوتياً مع Qwen2-Audio بحرية دون الحاجة إلى إدخال نصي. أما في وضع التحليل الصوتي، فيمكن للمستخدمين تقديم تعليمات صوتية ونصية للتحليل أثناء التفاعل. تجدر الإشارة إلى أننا لا نستخدم أي أوامر نظام للتبديل بين وضعي الدردشة الصوتية والتحليل الصوتي. فـ Qwen2-Audio قادر على الفهم الذكي للمحتوى داخل الصوت، واتباع الأوامر الصوتية للرد بشكل مناسب. فعلى سبيل المثال، في مقطع صوتي يحتوي في الوقت نفسه على أصوات، ومحادثات متعددة المتحدثين، وأمر صوتي، يمكن لـ Qwen2-Audio فهم الأمر مباشرةً وتقديم تفسير واستجابة للصوت. بالإضافة إلى ذلك، حسّن DPO أداء النموذج من حيث الدقة الواقعية والالتزام بالسلوك المطلوب. ووفقاً لنتائج التقييم من AIR-Bench، تفوّق Qwen2-Audio على أحدث النماذج السابقة (SOTAs)، مثل Gemini-1.5-pro، في الاختبارات التي تركز على قدرات اتباع التعليمات المرتكزة على الصوت. وقد تم إصدار Qwen2-Audio كمصدر مفتوح بهدف تعزيز تقدم مجتمع اللغة متعددة الوسائط.

اضبط use_kernels=True في from_pretrained() لاستبدال الطبقات المدعومة بنوى مُحسَّنة من Hub. راجع تحميل النوى لمعرفة المزيد.

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

يمكن العثور على Qwen2-Audio-7B وQwen2-Audio-7B-Instruct على Huggingface Hub

الاستدلال

from io import BytesIO
from urllib.request import urlopen

import librosa

from transformers import AutoProcessor, Qwen2AudioForConditionalGeneration


model = Qwen2AudioForConditionalGeneration.from_pretrained("Qwen/Qwen2-Audio-7B", trust_remote_code=True, device_map="auto")
processor = AutoProcessor.from_pretrained("Qwen/Qwen2-Audio-7B", trust_remote_code=True)

prompt = "<|audio_bos|><|AUDIO|><|audio_eos|>Generate the caption in English:"
url = "https://huggingface.co/datasets/hf-internal-testing/transformers-synthetic-assets/resolve/main/audio/glass_breaking.mp3"
audio, sr = librosa.load(BytesIO(urlopen(url).read()), sr=processor.feature_extractor.sampling_rate)
inputs = processor(text=prompt, audio=audio, return_tensors="pt").to(model.device)

generate_ids = model.generate(**inputs, max_length=256)
generate_ids = generate_ids[:, inputs.input_ids.size(1):]

response = processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]

# We can also omit the audio_bos and audio_eos tokens
prompt = "<|AUDIO|>Generate the caption in English:"
inputs = processor(text=prompt, audio=audio, return_tensors="pt").to(model.device)

generate_ids = model.generate(**inputs, max_length=256)
generate_ids = generate_ids[:, inputs.input_ids.size(1):]

response = processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]

فيما يلي، نُبيّن كيفية استخدام Qwen2-Audio-7B-Instruct للاستدلال، مع دعم كلٍّ من وضعي دردشة الصوت وتحليل الصوت. يُشار إلى أننا استخدمنا صيغة ChatML للحوار، وفي هذا العرض التوضيحي نُظهر كيفية الاستفادة من apply_chat_template لهذا الغرض.

استدلال المحادثة الصوتية

في وضع الدردشة الصوتية، يمكن للمستخدمين التفاعل بحرية مع Qwen2-Audio صوتياً دون الحاجة إلى إدخال نص:

from io import BytesIO
from urllib.request import urlopen

import librosa

from transformers import AutoProcessor, Qwen2AudioForConditionalGeneration


processor = AutoProcessor.from_pretrained("Qwen/Qwen2-Audio-7B-Instruct")
model = Qwen2AudioForConditionalGeneration.from_pretrained("Qwen/Qwen2-Audio-7B-Instruct", device_map="auto")

conversation = [
    {"role": "user", "content": [
        {"type": "audio", "audio_url": "https://huggingface.co/datasets/hf-internal-testing/transformers-synthetic-assets/resolve/main/audio/voice_sample.wav"},
    ]},
    {"role": "assistant", "content": "Yes, the speaker is female and in her twenties."},
    {"role": "user", "content": [
        {"type": "audio", "audio_url": "https://huggingface.co/datasets/hf-internal-testing/dummy-audio-samples/resolve/main/mandarin_voxcpm_zh.wav"},
    ]},
]
text = processor.apply_chat_template(conversation, add_generation_prompt=True, tokenize=False)
audios = []
for message in conversation:
    if isinstance(message["content"], list):
        for ele in message["content"]:
            if ele["type"] == "audio":
                audios.append(librosa.load(
                    BytesIO(urlopen(ele['audio_url']).read()),
                    sr=processor.feature_extractor.sampling_rate)[0]
                )

inputs = processor(text=text, audio=audios, return_tensors="pt", padding=True).to(model.device)
inputs.input_ids = inputs.input_ids.to(model.device)

generate_ids = model.generate(**inputs, max_length=256)
generate_ids = generate_ids[:, inputs.input_ids.size(1):]

response = processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]

استدلال تحليل الصوت

في تحليل الصوت، يمكن للمستخدمين تقديم تعليمات صوتية ونصية معًا للتحليل:

from io import BytesIO
from urllib.request import urlopen

import librosa

from transformers import AutoProcessor, Qwen2AudioForConditionalGeneration


processor = AutoProcessor.from_pretrained("Qwen/Qwen2-Audio-7B-Instruct")
model = Qwen2AudioForConditionalGeneration.from_pretrained("Qwen/Qwen2-Audio-7B-Instruct", device_map="auto")

conversation = [
    {'role': 'system', 'content': 'You are a helpful assistant.'},
    {"role": "user", "content": [
        {"type": "audio", "audio_url": "https://huggingface.co/datasets/hf-internal-testing/transformers-synthetic-assets/resolve/main/audio/glass_breaking.mp3"},
        {"type": "text", "text": "What's that sound?"},
    ]},
    {"role": "assistant", "content": "It is the sound of glass shattering."},
    {"role": "user", "content": [
        {"type": "text", "text": "What can you do when you hear that?"},
    ]},
    {"role": "assistant", "content": "Stay alert and cautious, and check if anyone is hurt or if there is any damage to property."},
    {"role": "user", "content": [
        {"type": "audio", "audio_url": "https://huggingface.co/datasets/hf-internal-testing/transformers-synthetic-assets/resolve/main/audio/mr_quiller.flac"},
        {"type": "text", "text": "What does the person say?"},
    ]},
]
text = processor.apply_chat_template(conversation, add_generation_prompt=True, tokenize=False)
audios = []
for message in conversation:
    if isinstance(message["content"], list):
        for ele in message["content"]:
            if ele["type"] == "audio":
                audios.append(
                    librosa.load(
                        BytesIO(urlopen(ele['audio_url']).read()),
                        sr=processor.feature_extractor.sampling_rate)[0]
                )

inputs = processor(text=text, audio=audios, return_tensors="pt", padding=True).to(model.device)
inputs.input_ids = inputs.input_ids.to(model.device)

generate_ids = model.generate(**inputs, max_length=256)
generate_ids = generate_ids[:, inputs.input_ids.size(1):]

response = processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]

الاستدلال الدُفعي

ندعم أيضًا الاستدلال الدُفعي:

from io import BytesIO
from urllib.request import urlopen

import librosa

from transformers import AutoProcessor, Qwen2AudioForConditionalGeneration


processor = AutoProcessor.from_pretrained("Qwen/Qwen2-Audio-7B-Instruct")
model = Qwen2AudioForConditionalGeneration.from_pretrained("Qwen/Qwen2-Audio-7B-Instruct", device_map="auto")

conversation1 = [
    {"role": "user", "content": [
        {"type": "audio", "audio_url": "https://huggingface.co/datasets/hf-internal-testing/transformers-synthetic-assets/resolve/main/audio/glass_breaking.mp3"},
        {"type": "text", "text": "What's that sound?"},
    ]},
    {"role": "assistant", "content": "It is the sound of glass shattering."},
    {"role": "user", "content": [
        {"type": "audio", "audio_url": "https://huggingface.co/datasets/hf-internal-testing/transformers-synthetic-assets/resolve/main/audio/throat_clearing.wav"},
        {"type": "text", "text": "What can you hear?"},
    ]}
]

conversation2 = [
    {"role": "user", "content": [
        {"type": "audio", "audio_url": "https://huggingface.co/datasets/hf-internal-testing/transformers-synthetic-assets/resolve/main/audio/mr_quiller.flac"},
        {"type": "text", "text": "What does the person say?"},
    ]},
]

conversations = [conversation1, conversation2]

text = [processor.apply_chat_template(conversation, add_generation_prompt=True, tokenize=False) for conversation in conversations]

audios = []
for conversation in conversations:
    for message in conversation:
        if isinstance(message["content"], list):
            for ele in message["content"]:
                if ele["type"] == "audio":
                    audios.append(
                        librosa.load(
                            BytesIO(urlopen(ele['audio_url']).read()),
                            sr=processor.feature_extractor.sampling_rate)[0]
                    )

inputs = processor(text=text, audio=audios, return_tensors="pt", padding=True).to(model.device)
inputs['input_ids'] = inputs['input_ids'].to(model.device)
inputs.input_ids = inputs.input_ids.to(model.device)

generate_ids = model.generate(**inputs, max_length=256)
generate_ids = generate_ids[:, inputs.input_ids.size(1):]

response = processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)

Qwen2AudioConfig

فئة transformers.Qwen2AudioConfig

< >

( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Noneaudio_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonetext_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Noneaudio_token_index: int = 151646 )

المعاملات

  • audio_config (Union[dict, ~configuration_utils.PreTrainedConfig], اختياري) — كائن الإعداد أو قاموس العمود الفقري الصوتي.
  • text_config (Union[dict, ~configuration_utils.PreTrainedConfig]، اختياري) — كائن الإعدادات أو قاموس العمود الفقري النصي.
  • audio_token_index (int، اختياري، القيمة الافتراضية 151646) — مؤشر رمز الصوت المستخدم كعنصر نائب (placeholder) للصوت المُدخل.

هذه فئة الإعدادات المخزنة لإعدادات نموذج Qwen2AudioModel. تُستخدم لتوليد نموذج Qwen2 Audio وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن إنشاء إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ Qwen/Qwen2-Audio-7B

ترث كائنات التهيئة من PreTrainedConfig ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ PreTrainedConfig لمزيد من المعلومات.

مثال:

>>> from transformers import Qwen2AudioForConditionalGeneration, Qwen2AudioConfig, Qwen2AudioEncoderConfig, Qwen2Config

>>> # Initializing a Qwen2AudioEncoder config
>>> audio_config = Qwen2AudioEncoderConfig()

>>> # Initializing a Qwen2 config
>>> text_config = Qwen2Config()

>>> # Initializing a Qwen2Audio configuration
>>> configuration = Qwen2AudioConfig(audio_config, text_config)

>>> # Initializing a model from the qwen2-audio style configuration
>>> model = Qwen2AudioForConditionalGeneration(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

Qwen2AudioEncoderConfig

فئة transformers.Qwen2AudioEncoderConfig

< >

( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonenum_mel_bins: int = 128encoder_layers: int = 32encoder_attention_heads: int = 20encoder_ffn_dim: int = 5120encoder_layerdrop: float | int = 0.0d_model: int = 1280dropout: float | int = 0.0attention_dropout: float | int = 0.0activation_function: str = 'gelu'activation_dropout: float | int = 0.0scale_embedding: bool = Falseinitializer_range: float = 0.02max_source_positions: int = 1500 )

المعاملات

  • num_mel_bins (int، اختياري، القيمة الافتراضية 128) — عدد ميزات mel المستخدمة لكل إطار إدخال. يجب أن يتوافق مع القيمة المستخدمة في فئة AutoFeatureExtractor.
  • encoder_layers (int, اختياري، القيمة الافتراضية 32) — عدد الطبقات المخفية في مُشفِّر Transformer. سيستخدم نفس قيمة num_layers إذا لم يتم ضبطه.
  • encoder_attention_heads (int، اختياري، القيمة الافتراضية 20) — عدد رؤوس الانتباه لكل طبقة انتباه في مُشفِّر Transformer.
  • encoder_ffn_dim (int, اختياري، القيمة الافتراضية 5120) — أبعاد طبقة "الوسط" (التي تُسمّى غالبًا بطبقة التغذية الأمامية) في المُشفِّر.
  • encoder_layerdrop (Union[float, int]، اختياري، القيمة الافتراضية 0.0) — احتمال LayerDrop للمُشفِّر. راجع [ورقة LayerDrop](انظر https://huggingface.co/papers/1909.11556) لمزيد من التفاصيل.
  • d_model (int، اختياري، القيمة الافتراضية 1280) — حجم طبقات المُشفِّر وطبقة المُجمِّع.
  • dropout (Union[float, int]، اختياري، القيمة الافتراضية 0.0) — النسبة لجميع طبقات dropout.
  • attention_dropout (Union[float, int]، اختياري، القيمة الافتراضية 0.0) — نسبة إسقاط (dropout) لاحتمالات الانتباه.
  • activation_function (str، اختياري، القيمة الافتراضية gelu) — دالة التنشيط غير الخطية (دالة أو نص) في المُفكِّك. على سبيل المثال، "gelu"، "relu"، "silu"، وغيرها.
  • activation_dropout (Union[float, int]، اختياري، القيمة الافتراضية 0.0) — نسبة dropout للتفعيلات داخل الطبقة المتصلة بالكامل.
  • scale_embedding (bool، اختياري، القيمة الافتراضية False) — ما إذا كان سيتم توسيع التضمينات (embeddings) من خلال القسمة على sqrt(d_model).
  • initializer_range (float، اختياري، القيمة الافتراضية 0.02) — الانحراف المعياري لـ truncated_normal_initializer المستخدم في تهيئة جميع مصفوفات الأوزان.
  • max_source_positions (int، اختياري، القيمة الافتراضية 1500) — أقصى طول تسلسل لميزات مرشحات log-mel filter-bank التي قد يُستخدم هذا النموذج معها.

هذه فئة الإعدادات المخزنة لإعدادات نموذج Qwen2AudioModel. تُستخدم لتوليد نموذج Qwen2 Audio وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن إنشاء إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ Qwen/Qwen2-Audio-7B

ترث كائنات التهيئة من PreTrainedConfig ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ PreTrainedConfig لمزيد من المعلومات.

مثال:

>>> from transformers import Qwen2AudioEncoderConfig, Qwen2AudioEncoder

>>> # Initializing a Qwen2AudioEncoderConfig
>>> configuration = Qwen2AudioEncoderConfig()

>>> # Initializing a Qwen2AudioEncoder (with random weights)
>>> model = Qwen2AudioEncoder(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

Qwen2AudioProcessor

فئة transformers.Qwen2AudioProcessor

< >

( feature_extractor = Nonetokenizer = Nonechat_template = Noneaudio_token = '<|AUDIO|>'audio_bos_token = '<|audio_bos|>'audio_eos_token = '<|audio_eos|>' )

المعاملات

  • feature_extractor (WhisperFeatureExtractor) — مستخرج الميزات هو مدخل إلزامي.
  • tokenizer (Qwen2Tokenizer) — المُجزِّئ مدخل إلزامي.
  • chat_template (str) — قالب Jinja لتحويل قوائم الرسائل في المحادثة إلى نص قابل للتجزئة.
  • audio_token (str، اختياري، القيمة الافتراضية "<|AUDIO|>") — الرمز المستخدم لرموز الصوت.
  • audio_bos_token (str، اختياري، القيمة الافتراضية "<|audio_bos|>") — الرمز المستخدم لرموز بداية الصوت.
  • audio_eos_token (str، اختياري، القيمة الافتراضية "<|audio_eos|>") — الرمز المستخدم لرموز نهاية الصوت.

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

يوفر Qwen2AudioProcessor جميع وظائف WhisperFeatureExtractor وQwen2Tokenizer. راجع ~WhisperFeatureExtractor و~Qwen2Tokenizer لمزيد من المعلومات.

Qwen2AudioEncoder

فئة transformers.Qwen2AudioEncoder

< >

( config: Qwen2AudioEncoderConfig )

المعاملات

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

نموذج الصوت من Qwen2Audio دون أي رأس أو إسقاط في الأعلى.

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

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

forward

< >

( input_features: Tensorattention_mask = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> )

المعاملات

  • input_features (torch.Tensor من الشكل (batch_size, sequence_length, feature_dim)) — المصفوفات المقابلة لميزات الصوت المدخلة. يمكن الحصول على ميزات الصوت باستخدام WhisperFeatureExtractor. راجع WhisperFeatureExtractor.call() للتفاصيل (Qwen2AudioProcessor يستخدم WhisperFeatureExtractor لمعالجة الملفات الصوتية).
  • attention_mask (torch.Tensor), *optional*) -- Qwen2Audio does not support masking of the input_features`, this argument is preserved for compatibility, but it is not used. By default the silence in the input log mel spectrogram are ignored.

تُعيد طريقة Qwen2AudioEncoder الخاصة بالتقديم (forward) تعريف الطريقة الخاصة __call__.

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

Qwen2AudioModel

فئة transformers.Qwen2AudioModel

< >

( config: Qwen2AudioConfig )

المعاملات

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

نموذج Qwen2Audio الذي يتكون من هيكل صوتي ونموذج لغوي، دون رأس لنمذجة اللغة.

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

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

forward

< >

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

المعاملات

  • input_ids (torch.LongTensor بشكل (batch_size, sequence_length), اختياري) — مؤشرات رموز تسلسل الإدخال في قاموس الكلمات. سيتم تجاهل الحشو افتراضيًا.

    يمكن الحصول على الفهارس باستخدام AutoTokenizer. راجع PreTrainedTokenizer.encode() و PreTrainedTokenizer.call() للتفاصيل.

    ما هي معرّفات الإدخال؟

  • input_features (torch.Tensor من الشكل (batch_size, sequence_length, feature_dim)، اختياري) — المصفوفات المقابلة لميزات الصوت المدخلة. يمكن الحصول على ميزات الصوت باستخدام WhisperFeatureExtractor. راجع WhisperFeatureExtractor.call() للتفاصيل (Qwen2AudioProcessor يستخدم WhisperFeatureExtractor لمعالجة الملفات الصوتية).
  • attention_mask (torch.Tensor بشكل (batch_size, sequence_length), اختياري) — قناع لتجنب تنفيذ الانتباه على فهارس رموز الحشو. القيم المختارة للقناع هي [0, 1]:
    • 1 للرموز التي لم تُقنَّع،
    • 0 للرموز التي تم إخفاؤها.

    ما هي أقنعة الانتباه؟

  • feature_attention_mask (torch.Tensor بشكل (batch_size, feature_sequence_length)) — قناع لتجنب تنفيذ الانتباه على فهارس الميزات المعبّأة. القيم المختارة للقناع هي [0, 1]:
    • 1 للرموز التي لم تُقنَّع،
    • 0 للرموز التي تم إخفاؤها.
  • position_ids (torch.LongTensor بشكل (batch_size, sequence_length), اختياري) — مؤشرات مواضع رموز كل تسلسل إدخال في تضمينات المواضع. يتم اختيارها ضمن النطاق [0, config.n_positions - 1].

    ما هي معرّفات المواقع؟

  • 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 إلى المتجهات المرتبطة بها، مقارنةً بمصفوفة البحث المضمّنة الداخلية للنموذج.
  • labels (torch.LongTensor من الشكل (batch_size, sequence_length)، اختياري) — التسميات التي تُحفظ في التوقيع لمسار الدمج القديم الذي قد يعيد محاذاة التسميات مع رموز الصوت. لا يتم حساب الخسارة هنا؛ بل Qwen2AudioForConditionalGeneration هو المسؤول عن ذلك.
  • use_cache (bool، اختياري) — إذا تم تعيينه إلى True، تُعاد حالات المفاتيح والقيم past_key_values ويمكن استخدامها لتسريع فك الترميز (انظر past_key_values).

يعيد

Qwen2AudioModelOutputWithPast أو tuple(torch.Tensor)

Qwen2AudioModelOutputWithPast أو مجموعة مرتبة من torch.Tensor (في حال تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة اعتمادًا على الإعداد (Qwen2AudioConfig) والمدخلات.

تُعيد طريقة Qwen2AudioModel الخاصة بالتقديم (forward) تعريف الطريقة الخاصة __call__.

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

  • last_hidden_state (torch.Tensor من الشكل (batch_size, sequence_length, hidden_size)) — تسلسل حالات مخفية عند مخرج الطبقة الأخيرة من النموذج.

    إذا تم استخدام past_key_values، فإن الحالة المخفية الأخيرة فقط من التسلسلات ذات الشكل (batch_size, 1, hidden_size) هي التي تُخرج.

  • past_key_values (Cache، اختياري، يُعاد عند تمرير use_cache=True أو عند تعيين config.use_cache=True) — إنه كائن من نوع Cache. لمزيد من التفاصيل، راجع دليل ذاكرة kv.

    تحتوي على حالات مخفية محسوبة مسبقًا (المفاتيح والقيم في كتل الانتباه الذاتي) يمكن استخدامها (انظر مدخل past_key_values) لتسريع فك الترميز التسلسلي.

  • hidden_states (tuple(torch.Tensor)، اختياري، يُعاد عند تمرير output_hidden_states=True أو عند تعيين config.output_hidden_states=True) — مجموعة من torch.Tensor (واحدة لإخراج الطبقات المضمنة، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لإخراج كل طبقة) من الشكل (batch_size, sequence_length, hidden_size).

    حالات النموذج المخفية عند مخرج كل طبقة بالإضافة إلى مخرجات التضمين الأولي الاختيارية.

  • attentions (tuple(torch.Tensor)، اختياري، يُعاد عند تمرير output_attentions=True أو عند تعيين config.output_attentions=True) — مجموعة من torch.Tensor (واحدة لكل طبقة) بأبعاد (batch_size, num_heads, sequence_length, sequence_length).

    أوزان الانتباه بعد تطبيق دالة softmax على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.

  • attention_mask (torch.Tensor، اختياري) — قناع الانتباه، وقد يتم تحديثه بواسطة منطق دمج الصوت بحيث تصبح رموز الصوت غير مقنّعة.

  • labels (torch.LongTensor، اختياري) — التسميات، وقد تُعاد محاذاتها بواسطة منطق دمج الصوت القديم. تُعاد هذه التسميات حتى يتمكن رأس نمذجة اللغة من حساب الخسارة مقابل التسلسل الموسّع.

Qwen2AudioForConditionalGeneration

فئة transformers.Qwen2AudioForConditionalGeneration

< >

( config: Qwen2AudioConfig )

المعاملات

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

نموذج QWEN2AUDIO الذي يتكون من هيكل صوتي ونموذج لغوي.

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

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

forward

< >

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

المعاملات

  • input_ids (torch.LongTensor بشكل (batch_size, sequence_length), اختياري) — مؤشرات رموز تسلسل الإدخال في قاموس الكلمات. سيتم تجاهل الحشو افتراضيًا.

    يمكن الحصول على الفهارس باستخدام AutoTokenizer. راجع PreTrainedTokenizer.encode() و PreTrainedTokenizer.call() للتفاصيل.

    ما هي معرّفات الإدخال؟

  • input_features (torch.Tensor من الشكل (batch_size, sequence_length, feature_dim)، اختياري) — المصفوفات المقابلة لميزات الصوت المدخلة. يمكن الحصول على ميزات الصوت باستخدام WhisperFeatureExtractor. راجع WhisperFeatureExtractor.call() للتفاصيل (Qwen2AudioProcessor يستخدم WhisperFeatureExtractor لمعالجة الملفات الصوتية).
  • attention_mask (torch.Tensor بشكل (batch_size, sequence_length), اختياري) — قناع لتجنب تنفيذ الانتباه على فهارس رموز الحشو. القيم المختارة للقناع هي [0, 1]:
    • 1 للرموز التي لم تُقنَّع،
    • 0 للرموز التي تم إخفاؤها.

    ما هي أقنعة الانتباه؟

  • feature_attention_mask (torch.Tensor بشكل (batch_size, feature_sequence_length)) — قناع لتجنب تنفيذ الانتباه على فهارس الميزات المعبّأة. القيم المختارة للقناع هي [0, 1]:
    • 1 للرموز التي لم تُقنَّع،
    • 0 للرموز التي تم إخفاؤها.
  • position_ids (torch.LongTensor بشكل (batch_size, sequence_length), اختياري) — مؤشرات مواضع رموز كل تسلسل إدخال في تضمينات المواضع. يتم اختيارها ضمن النطاق [0, config.n_positions - 1].

    ما هي معرّفات المواقع؟

  • 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 إلى المتجهات المرتبطة بها، مقارنةً بمصفوفة البحث المضمّنة الداخلية للنموذج.
  • labels (torch.LongTensor من الشكل (batch_size, sequence_length)، اختياري) — التسميات لحساب خسارة نمذجة اللغة المقنّعة. يجب أن تكون الفهارس ضمن [0, ..., config.vocab_size] أو -100 (انظر input_ids docstring). يتم تجاهل الرموز التي فهارسها مضبوطة على -100 (مقنّعة)، ولا تُحسب الخسارة إلا للرموز التي تسمياتها ضمن [0, ..., config.vocab_size].
  • use_cache (bool، اختياري) — إذا تم تعيينه إلى True، تُعاد حالات المفاتيح والقيم past_key_values ويمكن استخدامها لتسريع فك الترميز (انظر past_key_values).

يعيد

Qwen2AudioCausalLMOutputWithPast أو tuple(torch.Tensor)

Qwen2AudioCausalLMOutputWithPast أو مجموعة مرتبة من torch.Tensor (في حال تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة تعتمد على الإعداد (Qwen2AudioConfig) والمدخلات.

تتجاوز طريقة Qwen2AudioForConditionalGeneration الخاصة بالتقديم (forward) الطريقة الخاصة __call__.

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

  • loss (torch.Tensor of shape (1,), اختياري, يُعاد عند توفير labels) — خسارة نمذجة اللغة (لتوقع الرمز التالي).

  • logits (torch.Tensor من الشكل (batch_size, sequence_length, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة (درجات لكل رمز في المفردات قبل SoftMax).

  • past_key_values (Cache، اختياري، يُعاد عند تمرير use_cache=True أو عند config.use_cache=True) — حالات مخفية محسوبة مسبقًا يمكن استخدامها لتسريع فك الترميز التلقائي المتسلسل (auto-regressive). يوجد مجموعتان من الحالات المخفية المحسوبة مسبقًا: حالات المفاتيح والقيم في كتل الانتباه الذاتي. تُعاد past_key_values عند تمرير use_cache=True أو عند config.use_cache=True. وهي كائن من Cache.

    إذا تم استخدام past_key_values، يمكن للمستخدم اختيارياً إدخال آخر input_ids فقط (تلك التي لم تُقدَّم حالات مفاتيحها وقيمها السابقة إلى هذا النموذج) بشكل (batch_size, 1) بدلاً من جميع input_ids بشكل (batch_size, sequence_length).

  • hidden_states (tuple[torch.Tensor]، اختياري، يُعاد عند تمرير output_hidden_states=True أو عند تعيين config.output_hidden_states=True) — مجموعة من torch.Tensor (واحدة لإخراج الطبقات المضمنة، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لإخراج كل طبقة) من الشكل (batch_size, sequence_length, hidden_size).

    حالات النموذج المخفية عند مخرج كل طبقة بالإضافة إلى مخرجات التضمين الأولي الاختيارية.

  • attentions (tuple[torch.Tensor]، اختياري، يُعاد عند تمرير output_attentions=True أو عند تعيين config.output_attentions=True) — مجموعة من torch.Tensor (واحدة لكل طبقة) بأبعاد (batch_size, num_heads, sequence_length, sequence_length).

    أوزان الانتباه بعد تطبيق دالة softmax على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.

  • attention_mask (torch.Tensor، اختياري) — قناع الانتباه، يُستخدم لتحديث قناع الانتباه وposition_ids.

مثال:

>>> from io import BytesIO
>>> from urllib.request import urlopen
>>> import librosa
>>> from transformers import AutoProcessor, Qwen2AudioForConditionalGeneration

>>> model = Qwen2AudioForConditionalGeneration.from_pretrained("Qwen/Qwen2-Audio-7B")
>>> processor = AutoProcessor.from_pretrained("Qwen/Qwen2-Audio-7B")

>>> prompt = "<|audio_bos|><|AUDIO|><|audio_eos|>Generate the caption in English:"
>>> url = "https://huggingface.co/datasets/hf-internal-testing/transformers-synthetic-assets/resolve/main/audio/glass_breaking.mp3"
>>> audio, _ = librosa.load(BytesIO(urlopen(url).read()), sr=self.processor.feature_extractor.sampling_rate)

>>> inputs = processor(text=prompt, audio=audio, return_tensors="pt")

>>> # Generate
>>> generate_ids = model.generate(**inputs, max_length=30)
>>> processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
"Generate the caption in English: Glass is breaking."
Update on GitHub