Transformers documentation

نموذج العالم البرمجي (CWM)

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

<— حقوق النشر 2025 لفريق HuggingFace. جميع الحقوق محفوظة.

مرخّص بموجب ترخيص Apache، الإصدار 2.0 (المُشار إليه بـ «الترخيص»). لا يجوز لك استخدام هذا الملف إلا وفقاً لأحكام الترخيص. يمكنك الحصول على نسخة من الترخيص من

http://www.apache.org/licenses/LICENSE-2.0

ما لم يقتضِ القانون المعمول به خلاف ذلك، أو ما لم يُتفق عليه كتابياً، تُوزَّع البرامج الموزَّعة بموجب الترخيص على أساس "كما هو"، بدون أي ضمانات أو شروط من أي نوع، سواء كانت صريحة أو ضمنية. راجع الترخيص لمعرفة اللغة المحددة التي تحكم الصلاحيات والقيود بموجب الترخيص.

⚠️ يُرجى ملاحظة أن هذا الملف بصيغة Markdown لكنه يحتوي على بنية نحوية محددة لبناء مستنداتنا (مشابهة لـ MDX) قد لا يتم عرضها بشكل صحيح في عارض Markdown الخاص بك.

—> تمت مساهمة هذا النموذج في Hugging Face Transformers في 2025-10-09.

نموذج العالم البرمجي (CWM)

نظرة عامة

قُدِّم نموذج Code World Model (CWM) في CWM: An Open-Weights LLM for Research on Code Generation with World Models من فريق Meta FAIR CodeGen. يُعد CWM نموذجاً لغوياً كبيراً (LLM) لتوليد الأكواد والاستدلال حولها، وقد تم تدريبه بشكل خاص على تمثيل أفضل وفهم أعمق لكيفية تأثير الأكواد والأوامر على حالة البرنامج أو النظام. وتحديداً، قمنا بإجراء تدريب وسيط (mid-training) لنموذج CWM على عدد كبير من مسارات الملاحظة-الإجراء المستمدة من سجلات تنفيذ Python والتفاعلات الوكيلية (agentic) في بيئات حاوية (containerized). كما أجرينا تدريباً لاحقاً (post-training) باستخدام التعزيز التعزيزي متعدد المهام (multi-task RL) على نطاق واسع في بيئات قابلة للتحقق من حيث البرمجة والرياضيات والهندسة البرمجية متعددة الأدوار.

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

نُطلق نموذج Code World Model (CWM)، وهو نموذج لغة كبير مفتوح الأوزان يحتوي على 32 مليار معامل، بهدف تعزيز الأبحاث المتعلقة بتوليد الأكواد باستخدام نماذج العالم. ولتحسين فهم الأكواد بما يتجاوز ما يمكن تعلمه من التدريب على الأكواد الثابتة فقط، قمنا بإجراء تدريب وسيط (mid-train) لنموذج CWM على كمية كبيرة من مسارات الملاحظة-الإجراء (observation-action trajectories) المستمدة من مُفسّر Python وبيئات Docker الوكيلية (agentic)، وأجرينا تدريب تعزيز (RL) مكثفًا متعدد المهام في بيئات قابلة للتحقق تشمل البرمجة والرياضيات والهندسة البرمجية متعددة الأدوار. ومن خلال CWM، نوفر منصة اختبار قوية للباحثين لاستكشاف الفرص التي تمنحها نمذجة العالم لتحسين توليد الأكواد عبر الاستدلال والتخطيط في البيئات الحسابية. نعرض الخطوات الأولى لكيفية استفادة البرمجة الوكيلية من نماذج العالم، وتمكين المحاكاة خطوة بخطوة لتنفيذ أكواد Python، ونُظهر نتائج أولية حول كيفية استفادة الاستدلال من ذلك. CWM هو نموذج لغة كبير كثيف (dense) يعتمد على المُفكك فقط (decoder-only)، وقد تم تدريبه بحجم سياق يصل إلى 131 ألف رمز. وبغض النظر عن قدراته في نمذجة العالم، يقدم CWM أداءً قويًا في مهام البرمجة والرياضيات العامة: حيث يحقق نتائج pass@1 بنسبة 65.8 % في SWE-bench Verified (مع توسيع وقت الاختبار)، و68.9 % في LiveCodeBench، و96.6 % في Math-500، و76.0 % في AIME 2024. ولدعم مزيد من الأبحاث في نمذجة عالم الأكواد، نُطلق نقاط التفتيش (checkpoints) للنموذج بعد التدريب الوسيط، والتدريب الإشرافي (SFT)، وتدريب التعزيز (RL).

نصائح:

يتطلب CWM موجه نظام مخصصًا ليعمل بأفضل أداء أثناء الاستدلال. دون تهيئة الموجه بشكل صحيح، قد تتدهور جودة مخرجات CWM بشكل كبير. يعمل النص التالي كموجه نظام افتراضي لمهام الاستدلال. بالنسبة إلى سير العمل الوكيلية، أضف مواصفات الأدوات ذات الصلة بعد هذا الموجه الأساسي. راجع مستودع الكود الأصلي لمزيد من التفاصيل.

You are a helpful AI assistant. You always reason before responding, using the following format:

<think>
your internal reasoning
</think>
your external response

تمت مساهمة هذا النموذج من قِبل فريق Meta FAIR CodeGen. يمكن العثور على الكود الأصلي هنا.

أمثلة على الاستخدام

from transformers import AutoModelForCausalLM, AutoTokenizer


model_name = 'facebook/cwm'
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    device_map="auto"
)

system_prompt = """
You are a helpful AI assistant. You always reason before responding, using the following format:

<think>
your internal reasoning
</think>
your external response
""".strip()

messages = [
    {"role": "system", "content": system_prompt},
    {"role": "user", "content": "Write a haiku about recursion in programming."}
]


text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True,
    enable_thinking=True, # Switches between thinking and non-thinking modes. Default is True.
    preserve_previous_think=True, # Switches between keeping thinking blocks from previous messages or not. Default is True.
)

model_inputs = tokenizer([text], return_tensors="pt").to(model.device)

generated_ids = model.generate(
    **model_inputs,
    max_new_tokens=1024
)
output_ids = generated_ids[0][len(model_inputs.input_ids[0]):].tolist()
print(tokenizer.decode(output_ids))
Produces the following output:

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

الهايكو قصيدة من ثلاثة أسطر بعدد مقاطع 5-7-5. لذا، أحتاج إلى التقاط جوهر التكرار (Recursion) بطريقة موجزة وشاعرية. لنفكر في العناصر الأساسية للتكرار: الدالة التي تستدعي نفسها، والحالة الأساسية التي توقف التكرار، وفكرة تفكيك المشكلات إلى أجزاء أصغر.

ربما يمكنني استخدام صور مرتبطة بالمرآة أو الانعكاس، لأن التكرار الذاتي غالبًا ما يتضمن دالة تعكس نفسها أو تتكرر. أو بديلًا عن ذلك، يمكنني استخدام صور طبيعية مثل حلزون أو شجرة، مما يوحي بأنماط متشابهة ذاتيًا.

دعني أحاول اقتراح بعض الأفكار. على سبيل المثال، يمكن أن تكون عبارة «الدالة تستدعي نفسها» نقطة انطلاق. لكن كيف نحوّل ذلك إلى هايكو؟ ربما شيء ما على هذا النحو:

تستدعي الدالة نفسها الحالة الأساسية توقف الحلقة اللانهائية حلقة من الكود

حسنًا، هذا بداية. لكن ربما يمكنني جعله أكثر شاعرية. لنفكر في فكرة دالة تستدعي نفسها كنوع من حلقة لا نهائية، لكن مع حالة أساسية توقفها. هذا يشبه حلزونًا يتفكك عند مركزه.

زاوية أخرى: يُستخدم التكرار (Recursion) غالبًا للمسائل التي تمتلك بنية تكرارية، مثل عمليات اجتياز الأشجار أو حسابات المضروب. ربما يمكنني استخدام صورة طبيعية لتمثيل ذلك.

كيف عن

تتفرع الفروع مرة أخرى تتفتح الأوراق في رقص لا ينتهي تُمسك الجذور الحالة الأساسية

هذا أكثر شاعريةً بعض الشيء. فالتشعبات المتفرعة تمثل الاستدعاءات المتكررة، بينما قد يرمز انفتاح الأوراق إلى معالجة كل مشكلة فرعية، والجذور التي تحمل الحالة الأساسية هي ما يوقف التكرار.

بديلًا عن ذلك، ربما يكون هناك شيء أبسط:

مرآة داخل مرآة انعكاسات عميقة لا نهائية الحالة الأساسية تكسر الزجاج

يستخدم هذا تشبيه المرآة لتمثيل استدعاء الدالة لنفسها، حيث تكون الحالة الأساسية هي النقطة التي يتوقف عندها التكرار، مما يكسر الانعكاس اللانهائي.

أعتقد أنني أفضل فكرة المرآة. دعني أحسّنها:

مرآة داخل مرآة انعكاسات لا نهائية ترقص الحالة الأساسية تحطم الزجاج

نعم، يبدو أن هذا يلتقط فكرة التكرار الذاتي بشكل جيد. فالمِرْآة تمثل الدالة التي تستدعي نفسها، والانعكاسات اللانهائية هي الاستدعاءات التكرارية، وكسر الزجاج للحالة الأساسية هو ما يوقف التكرار.

دعني أتحقق من عدد المقاطع:

مرآة داخل مرآة (5 مقاطع: Mir-ror-with-in-mir-ror) انعكاسات لا نهائية ترقص (7 مقاطع: In-fi-nite-ref-lec-tions-dance) الحالة الأساسية تحطم الزجاج (5 مقاطع: Base-case-shat-ters-glass)

نعم، يتوافق ذلك مع بنية 5-7-5. أعتقد أن ذلك هايكو جيد عن التكرار.

</think> Mirror within mirror Infinite reflections dance Base case shatters glass<|eot_id|>

CwmConfig

فئة transformers.CwmConfig

< >

( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonevocab_size: int = 128256hidden_size: int = 6144intermediate_size: int = 21504num_hidden_layers: int = 64num_attention_heads: int = 48num_key_value_heads: int = 8hidden_act: str = 'silu'max_position_embeddings: int = 131072initializer_range: float = 0.02rms_norm_eps: float = 1e-05use_cache: bool = Truepad_token_id: int | None = Nonebos_token_id: int = 128000eos_token_id: int | list[int] | None = Nonepretraining_tp: int = 1tie_word_embeddings: bool = Falserope_parameters: dict | None = Noneattention_dropout: float | int = 0.0mlp_bias: bool = Falsehead_dim: int = 128sliding_window: int = 8192layer_types: list[str] | None = None )

المعاملات

  • vocab_size (int، اختياري، القيمة الافتراضية 128256) — حجم مفردات النموذج. يحدد عدد الرموز المختلفة التي يمكن تمثيلها بواسطة input_ids.
  • hidden_size (int، اختياري، القيمة الافتراضية 6144) — أبعاد التمثيلات المخفية.
  • intermediate_size (int، اختياري، القيمة الافتراضية 21504) — أبعاد تمثيلات MLP.
  • num_hidden_layers (int، اختياري، القيمة الافتراضية 64) — عدد الطبقات المخفية في مُفكِّك Transformer.
  • num_attention_heads (int، اختياري، القيمة الافتراضية 48) — عدد رؤوس الانتباه لكل طبقة انتباه في مُفكِّك Transformer.
  • num_key_value_heads (int، اختياري، القيمة الافتراضية 8) — هذا هو عدد رؤوس key_value التي يجب استخدامها لتنفيذ Grouped Query Attention. إذا كان num_key_value_heads=num_attention_heads، فسيستخدم النموذج Multi Head Attention (MHA)، وإذا كان num_key_value_heads=1 فسيستخدم النموذج Multi Query Attention (MQA)، وإلا فسيتم استخدام GQA. عند تحويل نقطة تفتيش متعددة الرؤوس إلى نقطة تفتيش GQA، يجب بناء كل مجموعة من رؤوس key و value عن طريق تجميع المتوسط لجميع الرؤوس الأصلية داخل تلك المجموعة. لمزيد من التفاصيل، راجع هذا الورقة. إذا لم يتم تحديد القيمة، فستكون القيمة الافتراضية هي num_attention_heads.
  • hidden_act (str، اختياري، القيمة الافتراضية silu) — دالة التنشيط غير الخطية (دالة أو نص) في المُفكِّك. على سبيل المثال، "gelu"، "relu"، "silu"، وغيرها.
  • max_position_embeddings (int، اختياري، القيمة الافتراضية 131072) — أقصى طول تسلسل قد يُستخدم معه هذا النموذج على الإطلاق.
  • initializer_range (float، اختياري، القيمة الافتراضية 0.02) — الانحراف المعياري لـ truncated_normal_initializer المستخدم في تهيئة جميع مصفوفات الأوزان.
  • rms_norm_eps (float، اختياري، القيمة الافتراضية 1e-05) — قيمة الإيبسلون المستخدمة في طبقات تطبيع rms.
  • use_cache (bool، اختياري، القيمة الافتراضية True) — ما إذا كان يجب على النموذج إرجاع قيم المفاتيح/القيم الأخيرة للانتباه (لا تستخدمها جميع النماذج). لا ينطبق إلا إذا كان config.is_decoder=True أو إذا كان النموذج نموذجًا توليديًا يعتمد على المُفكِّك فقط.
  • pad_token_id (int, اختياري) — معرّف الرمز المستخدم للتعبئة في المفردات.
  • bos_token_id (int, اختياري، القيمة الافتراضية 128000) — معرّف الرمز المستخدم لبدء البث في المفردات.
  • eos_token_id (Union[int, list[int]], اختياري) — معرّف الرمز المستخدم لنهاية التدفق في المفردات.
  • pretraining_tp (int، اختياري، القيمة الافتراضية 1) — ميزة تجريبية. ترتيب توازي الموترات (Tensor parallelism rank) المستخدم أثناء التدريب المسبق. يُرجى الرجوع إلى هذا المستند لفهم المزيد حولها. هذه القيمة ضرورية لضمان إعادة إنتاج نتائج التدريب المسبق بشكل دقيق. يُرجى الرجوع إلى هذه المشكلة.
  • tie_word_embeddings (bool، اختياري، القيمة الافتراضية False) — ما إذا كان سيتم ربط ترميزات الأوزان وفقاً لخريطة tied_weights_keys الخاصة بالنموذج.
  • rope_parameters (dict, اختياري) — قاموس يحتوي على معاملات التهيئة الخاصة بتضمينات RoPE. يجب أن يحتوي القاموس على قيمة لـ rope_theta، ومعاملات اختيارية تُستخدم للتصحيح (scaling) في حال رغبتَ في استخدام RoPE مع max_position_embeddings أطول.
  • attention_dropout (Union[float, int]، اختياري، القيمة الافتراضية 0.0) — نسبة إسقاط (dropout) لاحتمالات الانتباه.
  • mlp_bias (bool، اختياري، القيمة الافتراضية False) — ما إذا كان سيتم استخدام انحياز في طبقات up_proj وdown_proj وgate_proj ضمن طبقات MLP.
  • head_dim (int، اختياري، القيمة الافتراضية 128) — بعد رأس الانتباه. إذا كانت القيمة None، فستكون القيمة الافتراضية هي hidden_size // num_attention_heads
  • sliding_window (int، اختياري، القيمة الافتراضية 8192) — حجم نافذة الانتباه المنزلقة. إذا كانت None، فلا تُطبَّق نافذة منزلقة.
  • layer_types (list[str], اختياري) — قائمة تُقرن بشكل صريح كل فهرس طبقة بنوعها. إذا لم تُقدَّم، فسيتم توليدها تلقائيًا بناءً على قيم الإعداد.

هذه فئة الإعدادات المخزنة لإعدادات نموذج CwmModel. تُستخدم لاستحداث نموذج Cwm وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ facebook/cwm

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

>>> from transformers import CwmModel, CwmConfig

>>> # Initializing a Cwm cwm-7b style configuration
>>> configuration = CwmConfig()

>>> # Initializing a model from the cwm-7b style configuration
>>> model = CwmModel(configuration)

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

CwmPreTrainedModel

فئة transformers.CwmPreTrainedModel

< >

( config: PreTrainedConfig*inputs**kwargs )

المعاملات

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

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

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

forward

( *args**kwargs )

قيمة وهمية لمسار منقّط (مثل torch.float32): سلاسل الوصول إلى السمات، والاستدعاءات تتصرف كمُزيّنات (decorators) مرّرة، وrepr هو المسار المنقّط، وعند استخدامه كصنف أساسي يُستبدل بصنف أساسي من نوع type عادي (بموجب __mro_entries__ في PEP 560)، بحيث تحتفظ الصنوف الفرعية الحقيقية بفئة ميتا (metaclass) عادية، وتقرأ inspect.signature دالة __init__ الحقيقية الخاصة بها بدلاً من تلك الوهمية.

CwmModel

فئة transformers.CwmModel

< >

( config: CwmConfig )

المعاملات

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

نموذج Cwm العاري الذي يُخرج حالات مخفية خام دون أي رأس محدد في الأعلى.

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

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

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Noneattention_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] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → CwmModelOutputWithPast or tuple(torch.Tensor)

المعاملات

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

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

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

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

يعيد

CwmModelOutputWithPast أو tuple(torch.Tensor)

CwmModelOutputWithPast أو مجموعة (tuple) من torch.Tensor (إذا تم تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة تعتمد على الإعداد (CwmConfig) والمدخلات.

تُعيد طريقة CwmModel الأمامية تعريف الطريقة الخاصة __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.

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

CwmForCausalLM

فئة transformers.CwmForCausalLM

< >

( config: CwmConfig )

المعاملات

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

نموذج Cwm لنمذجة اللغة السببية.

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

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

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Noneattention_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 = Nonelogits_to_keep: typing.Union[int, torch.Tensor] = 0**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → CausalLMOutputWithPast or tuple(torch.Tensor)

المعاملات

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

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

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

  • attention_mask (torch.Tensor بشكل (batch_size, 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).
  • logits_to_keep (Union[int, torch.Tensor]، اختياري، القيمة الافتراضية 0) — إذا كان int، يتم حساب logits لآخر logits_to_keep رموز. إذا كانت القيمة 0، يتم حساب logits لجميع input_ids (حالة خاصة). لا يُحتاج إلى logits إلا للرمز الأخير في عملية التوليد، ويمكن أن يوفر حسابها لذلك الرمز وحده ذاكرة كبيرة، وهو أمر مهم بشكل ملحوظ للتسلسلات الطويلة أو حجم المفردات الكبير. إذا كان torch.Tensor، يجب أن يكون بعدًا واحدًا (1D) ويتوافق مع الفهارس التي يجب الاحتفاظ بها في بُعد طول التسلسل. يكون هذا مفيدًا عند استخدام تنسيق المصفوفات المعبأة (packed tensor format) (بعد واحد لكل من الدفعة وطول التسلسل).

يعيد

CausalLMOutputWithPast أو tuple(torch.Tensor)

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

تتجاوز طريقة CwmForCausalLM الخاصة بالتقديم (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) — إنه كائن من نوع 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 على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.

مثال:

>>> from transformers import AutoTokenizer, CwmForCausalLM

>>> model = CwmForCausalLM.from_pretrained("meta-cwm/Cwm-2-7b-hf")
>>> tokenizer = AutoTokenizer.from_pretrained("meta-cwm/Cwm-2-7b-hf")

>>> prompt = "Hey, are you conscious? Can you talk to me?"
>>> inputs = tokenizer(prompt, return_tensors="pt")

>>> # Generate
>>> generate_ids = model.generate(inputs.input_ids, max_length=30)
>>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
"Hey, are you conscious? Can you talk to me?\nI'm not conscious, but I can talk to you."
Update on GitHub