Transformers documentation
مساعد Gemma 4
تمت مساهمة هذا النموذج في Hugging Face Transformers في 2026-05-05.
مساعد Gemma 4
نظرة عامة
Gemma 4 Assistant هو نموذج صغير مخصص للنص فقط، يتيح الترميز التخميني لنماذج Gemma 4 باستخدام طريقة التنبؤ متعدد الرموز (MTP) ومولّد المرشحات المرتبط بها. تتوفر نماذج مُدرَّبة مسبقًا لتنويعات IT من نماذج Gemma 4 E2B وE4B و31B و26B-A4B (MoE).
من حيث البنية، يتشارك مساعد Gemma 4 نفس العمود الفقري Gemma4TextModel مع نماذج Gemma 4 الأخرى، لكنه يختلف في بعض الجوانب الرئيسية:
- يستخدم النموذج بأكمله مشاركة KV. تتيح هذه التقنية، التي عُرضت لأول مرة مع Gemma 3n، للنموذج إعادة استخدام ذاكرة KV المخزنة التي يملؤها النموذج المستهدف الذي يدعمه المساعد، مما يسمح للمساعد بتجاوز مرحلة التعبئة المسبقة بالكامل، ويقلل بشكل كبير من حساب الانتباه أثناء المرور الأمامي.
- قيمة
position_idsثابتة. نظرًا لأن ذاكرة KV مشتركة ولا يملك المساعد طريقة لتحديثها، يتنبأ المساعد بجميع الرموز من معرّف الموضع نفسه. - المدخلات هي دمج التضمينات (embeddings) وحالات الإخفاء (hidden states). للتكيّف مع ذاكرة KV الثابتة و
position_ids، يستقبل النموذج مدخلاته على شكل دمج بينembeddingوhidden_statesلآخر رمز شوهد من النموذج المستهدف، ثم يرميها إلى فضاء نموذج المساعد عبر تحويلnn.Linear. يتغير تعريف آخر رمز شوهد على مدار حلقة فك التشفير المُساعَد. بالنسبة للرمز الأول المُسود بعد مرحلة التعبئة المسبقة (pre-fill)، يكون آخر رمز شوهد هو آخر رمز من الاستدعاء (prompt). أما في خطوات المسودة اللاحقة، فيكون آخر رمز شوهد هو آخر رمز ولّده المساعد (ضمن جولة مسودة) أو آخر رمز قبله النموذج المستهدف (بين جولات المسودة). - يُستخدم الانتباه المتقاطع (Cross-attention) لاستغلال سياق النموذج المستهدف بأفضل شكل. يتيح الانتباه المتقاطع لحالات الاستعلام (query states) التي يولدها المساعد أن تنتبه إلى قيم ذاكرة KV المشتركة من النموذج المستهدف، مما يسمح للمساعد بالتنبؤ بدقة أكبر بعدد الرموز المُسودة (drafted tokens) في كل جولة تدقيق.
يمكنك العثور على جميع نقاط التفتيش الأصلية لنموذج Gemma 4 Assistant ضمن إصدار Gemma 4.
أمثلة على الاستخدام
يُظهر المثال أدناه كيفية توليد النص بناءً على صورة باستخدام Pipeline أو فئة AutoModel.
<hfoptions id="usage"> <hfoption id="Pipeline">import torch
from transformers import pipeline
pipeline = pipeline(
task="image-text-to-text",
model="google/gemma-4-E2B-it",
assistant_model="google/gemma-4-E2B-it-assistant",
)
pipeline(
images="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg",
text="<|image|>\n\nWhat is shown in this image?"
)import torch
from transformers import AutoProcessor, AutoModelForImageTextToText
model = AutoModelForImageTextToText.from_pretrained(
"google/gemma-4-E2B-it",
dtype=torch.bfloat16,
device_map="auto",
)
assistant_model = AutoModelForCausalLM.from_pretrained(
"google/gemma-4-E2B-it-assistant",
dtype=torch.bfloat16,
device_map="auto",
)
processor = AutoProcessor.from_pretrained(
"google/gemma-4-E2B-it",
padding_side="left"
)
messages = [
{
"role": "user", "content": [
{"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"},
{"type": "text", "text": "What is shown in this image?"},
]
},
]
inputs = processor.apply_chat_template(
messages,
tokenize=True,
return_dict=True,
return_tensors="pt",
add_generation_prompt=True,
).to(model.device)
input_len = inputs["input_ids"].shape[-1]
output = model.generate(**inputs, max_new_tokens=50, assistant_model=assistant_model)
print(processor.decode(output[0][input_len:], skip_special_tokens=True))Gemma4AssistantConfig
فئة transformers.Gemma4AssistantConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 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 = Nonetext_config: transformers.configuration_utils.PreTrainedConfig | dict[str, typing.Any] | None = Nonebackbone_hidden_size: int = 1536use_ordered_embeddings: bool = Falsenum_centroids: int = 2048centroid_intermediate_top_k: int = 32tie_word_embeddings: bool = True )
المعاملات
- text_config (
Union[~configuration_utils.PreTrainedConfig, dict[str, Any]], اختياري) — كائن الإعداد أو قاموس العمود الفقري النصي. - backbone_hidden_size (
int، القيمة الافتراضية 1536) — حجم المخفي للنموذج المستهدف الذي تم تدريب هذا المساعد عليه. - use_ordered_embeddings (
bool، القيمة الافتراضية False) — إذا كانت True، فتُستخدم جدول تضمين مرتّب لأداء نموذج المساعد الأمثل، والذي يحتاج إلى إعادة ترتيبه ليتوافق مع النموذج الرئيسي. - num_centroids (
int، القيمة الافتراضية 2048) — إجمالي عدد مراكز العناقيد. - centroid_intermediate_top_k (
int، القيمة الافتراضية 32) — عدد مراكز العناقيد النشطة. - tie_word_embeddings (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب ربط ترميزات الأوزان (weight embeddings) وفقاً لخريطةtied_weights_keysالخاصة بالنموذج.
هذه فئة الإعدادات المخزنة لإعدادات نموذج Gemma4 AssistantModel. تُستخدم لتوليد نموذج Gemma4 Assistant وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن إنشاء إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ google/gemma-4-e2b-it
ترث كائنات التهيئة من PreTrainedConfig ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ PreTrainedConfig لمزيد من المعلومات.
مثال:
>>> from transformers import (
>>> Gemma4AssistantConfig,
>>> Gemma4AssistantForCausalLM,
>>> Gemma4TextConfig,
>>> )
>>> # Initializing a Gemma 4 Text config similar to google/gemma-4-e2b-it-assistant.
>>> text_config = Gemma4TextConfig(...)
>>> # Initializing a Gemma 4 Assistant config similar to google/gemma-4-e2b-it-assistant.
>>> configuration = Gemma4AssistantConfig(text_config)
>>> # Initializing a model from the google/gemma-4-e2b-it-assistant configuration.
>>> model = Gemma4AssistantForCausalLM(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configGemma4AssistantForCausalLM
فئة transformers.Gemma4AssistantForCausalLM
< source >( config: Gemma4AssistantConfig )
المعاملات
- config (Gemma4AssistantConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعدادات إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.
نموذج لتفكيك مُساعَد مبني على التنبؤ متعدد الرموز مع Gemma 4.
يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).
هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.
جهّز أقنعة الانتباه للنموذج المُساعَد؛ حيث يعمل shared_kv_states كذاكرة مؤقتة سابقة في هذه الحالة.
نستخدم أقنعة ثنائية الاتجاه لمراعاة السببية
- لا يوجد فرق في الحالة الحدّية
q_len == 1إذ تعمل كاهتمام كامل بغضّ النظر عن أي شيء - يفسّر SWA النافذة على أنها مستقبلية (قادمة) عندما
q_idx=1وkv>=1- ننتقل من منظور مستقبلي إلى منظور ماضٍ عن طريق قلب محور kv
- لاستيعاب الحشو الذي لا يتأثر بالموضع، نقوم أيضًا بقلب قناع الانتباه الأساسي قبل الإنشاء الأولي
forward
< source >( input_ids: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: dict[str, torch.Tensor] | None = Noneshared_kv_states: dict[str, tuple[torch.Tensor, torch.Tensor]] | None = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> )
المعاملات
- input_ids (
torch.Tensorبشكل(batch_size, sequence_length), اختياري) — مؤشرات رموز تسلسل الإدخال في قاموس الكلمات. سيتم تجاهل الحشو افتراضيًا. يمكن الحصول على المؤشرات باستخدام AutoTokenizer. راجع PreTrainedTokenizer.encode() و PreTrainedTokenizer.call() للتفاصيل. ما هي معرّفات الإدخال؟يمكن الحصول على الفهارس باستخدام AutoTokenizer. راجع PreTrainedTokenizer.encode() و PreTrainedTokenizer.call() للتفاصيل.
- inputs_embeds (
torch.Tensorمن الشكل(batch_size, sequence_length, hidden_size)، اختياري) — اختياريًا، بدلاً من تمريرinput_ids، يمكنك اختيار تمرير تمثيل مضمّن مباشرة. وهذا مفيد إذا كنت ترغب في الحصول على مزيد من التحكم في كيفية تحويل فهارسinput_idsإلى المتجهات المرتبطة بها، مقارنةً بمصفوفة البحث المضمّنة الداخلية للنموذج. - position_ids (
torch.LongTensorبشكل(batch_size, sequence_length), اختياري) — مؤشرات مواضع رموز كل تسلسل إدخال في تضمينات المواضع. يتم اختيارها ضمن النطاق[0, config.n_positions - 1]. - attention_mask (
dict[str, torch.Tensor]بشكل(batch_size, sequence_length), اختياري) — قناع لتجنب تنفيذ الانتباه على فهارس رموز الحشو. قيم القناع المختارة من[0, 1]:- 1 للرموز التي لم تُقنَّع،
- 0 للرموز التي تم إخفاؤها.
- shared_kv_states (
dict[str, torch.Tensorمن الشكل(batch_size, 1, q_len, kv_len)، اختياري) — قاموس يحتوي على قيم KV المحسوبة للطبقة الأخيرة من كلlayer_typeفي هذا النموذج. - use_cache (
bool، اختياري) — إذا تم تعيينه إلىTrue، تُعاد حالات المفاتيح والقيمpast_key_valuesويمكن استخدامها لتسريع فك الترميز (انظرpast_key_values).
تتجاوز طريقة Gemma4AssistantForCausalLM الخاصة بـ forward الطريقة الخاصة __call__.
على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن
Moduleبدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.
مثال:
>>> from transformers import AutoTokenizer, Gemma4AssistantForCausalLM, Gemma4ForCausalLM
>>> model = Gemma4ForCausalLM.from_pretrained("google/gemma-4-e2b-it")
>>> assistant_model = Gemma4AssistantForCausalLM.from_pretrained("google/gemma-4-e2b-it-assistant")
>>> tokenizer = AutoTokenizer.from_pretrained("google/gemma-4-e2b-it")
>>> prompt = "What is your favorite condiment?"
>>> inputs = tokenizer(prompt, return_tensors="pt")
>>> # Generate
>>> generate_ids = model.generate(inputs.input_ids, assistant_model=assistant_model, max_length=30)
>>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True)[0]
"What is your favorite condiment?"