Transformers documentation
ShieldGemma 2
نُشر هذا النموذج في أوراق HF في 2025-04-01 وسُهم به في Hugging Face Transformers في 2025-03-20.
ShieldGemma 2
نظرة عامة
قُدِّم نموذج ShieldGemma 2 في تقرير تقني من Google. يُبنى ShieldGemma 2 على Gemma 3، وهو نموذج يحتوي على 4 مليارات (4B) من المعاملات، يفحص سلامة كلٍّ من الصور الاصطناعية والطبيعية مقابل فئات رئيسية لمساعدتك في بناء مجموعات بيانات ونماذج قوية. ومع إضافة هذا النموذج إلى عائلة نماذج Gemma، أصبح بإمكان الباحثين والمطورين الآن تقليل مخاطر المحتوى الضار في نماذجهم بسهولة عبر مجالات الضرر الرئيسية كما هو موضح أدناه:
- لا يُسمح بمحتوى جنسي صريح: يجب ألا يحتوي الصورة على محتوى يصوّر أفعالاً جنسية صريحة أو بذيئة (مثل: الإباحية، العُري الإباحي، تصوير الاغتصاب أو الاعتداء الجنسي).
- لا توجد محتويات خطيرة: يجب ألا تحتوي الصورة على محتوى يسهّل أو يشجّع على أنشطة قد تسبب ضرراً في العالم الحقيقي (مثل: تصنيع الأسلحة النارية والأجهزة المتفجرة، الترويج للإرهاب، تعليمات الانتحار).
- لا يُسمح بمحتوى عنيف أو دموي: يجب ألا يحتوي الصورة على محتوى يصوّر عنفاً صادماً أو مثيراً للجدل أو عنفاً مفرطاً بلا مبرر (مثل: كميات كبيرة من الدم والجروح، أو عنف مفرط ضد الحيوانات، أو إصابات بالغة أو لحظة الوفاة).
نوصي باستخدام ShieldGemma 2 كمرشّح للمدخلات لنماذج اللغة البصرية، أو كمرشّح للمخرجات لأنظمة توليد الصور. ولتدريب نموذج أمان صور قوي، قمنا بتجهيز مجموعات بيانات تدريبية من الصور الطبيعية والاصطناعية، وضبطنا Gemma 3 بالتعليمات لتُظهر أداءً قوياً.
تمت مساهمة هذا النموذج من قِبل Ryan Mullins.
مثال على الاستخدام
- يوفر ShieldGemma 2 معالجًا (Processor) يقبل قائمة من
imagesوقائمة اختيارية منpoliciesكمدخلات، ويبني دفعة من الأوامر (prompts) كجداء هاتين القائمتين باستخدام قالب المحادثة (chat template) المُقدَّم. - يمكنك توسيع السياسات المدمجة في ShieldGemma باستخدام معامل
custom_policiesالخاص بالمعالج (Processor). استخدام المفتاح نفسه لأحد السياسات المدمجة سيؤدي إلى استبدال تلك السياسة بتعريفك المخصص. - لا يدعم ShieldGemma 2 قدرات اقتصاص الصور المستخدمة في Gemma 3.
التصنيف مقابل السياسات المدمجة
import requests
from PIL import Image
from transformers import AutoProcessor, ShieldGemma2ForImageClassification
model_id = "google/shieldgemma-2-4b-it"
model = ShieldGemma2ForImageClassification.from_pretrained(model_id, device_map="auto")
processor = AutoProcessor.from_pretrained(model_id)
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg"
image = Image.open(requests.get(url, stream=True).raw)
inputs = processor(images=[image], return_tensors="pt").to(model.device)
output = model(**inputs)
print(output.probabilities)التصنيف مقابل السياسات المخصصة
import requests
from PIL import Image
from transformers import AutoProcessor, ShieldGemma2ForImageClassification
model_id = "google/shieldgemma-2-4b-it"
model = ShieldGemma2ForImageClassification.from_pretrained(model_id, device_map="auto")
processor = AutoProcessor.from_pretrained(model_id)
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg"
image = Image.open(requests.get(url, stream=True).raw)
custom_policies = {
"key_a": "description_a",
"key_b": "description_b",
}
inputs = processor(
images=[image],
custom_policies=custom_policies,
policies=["dangerous", "key_a", "key_b"],
return_tensors="pt",
).to(model.device)
output = model(**inputs)
print(output.probabilities)ShieldGemma2Processor
فئة transformers.ShieldGemma2Processor
< source >( image_processortokenizerchat_template = Noneimage_seq_length = 256policy_definitions = None**kwargs )
__call__
< source >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = Nonetext = None**kwargs: *<class 'transformers.models.shieldgemma2.processing_shieldgemma2.ShieldGemma2ProcessorKwargs'> )
المعاملات
- images — صورة واحدة أو قائمة من الصور لإدراجها في الدفعة.
- text — غير مدعوم.
- videos — غير مدعوم.
- audio — غير مدعوم.
- kwargs — قاموس اختياري لحجج الكلمات المفتاحية لضبط المعالج. تشمل القيم الممكنة:
custom_policies: تعريفات سياسات إضافية تُكمّلself.policy_definitionsالمُمرّرة إلى مُنشئ الكائن. لاحظ أنcustom_policiesالتي تشترك في مفتاح معself.policy_definitionsستُلغي وصف السياسة الأصلي.policies: (اختياري) قائمة بمفاتيح من قاموسself.policy_definitions | custom_policiesالمشترك، وهي مفاتيح ذات اهتمام خاص للصور المُقدَّمة. إذا كانت القائمة فارغة أو None، فسيتم توليد الأوامر (prompts) لكل مفتاح في القاموس المشترك.
يولّد دفعة من المدخلات من الصور المُقدَّمة.
تم تدريب ShieldGemma على تصنيف محتوى الصور من حيث الامتثال للسياسات باستخدام بناء محدد للموجّهات. يولّد هذا المعالج دفعة من هذه الموجّهات من الصور المُقدَّمة من خلال:
- إنشاء قائمة بالمحادثات، محادثة واحدة لكل زوج
<image, policy>؛ - تحويل هذه المحادثات إلى نص باستخدام
self.apply_chat_template()؛ - ترميز المحادثات والصور باستخدام نفس التقنيات المستخدمة في
Gemma3Processor.
ShieldGemma2Config
فئة transformers.ShieldGemma2Config
< 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: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonevision_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonemm_tokens_per_image: int = 256boi_token_index: int = 255999eoi_token_index: int = 256000image_token_index: int = 262144initializer_range: float = 0.02tie_word_embeddings: bool = False )
المعاملات
- text_config (
Union[dict, ~configuration_utils.PreTrainedConfig]، اختياري) — كائن الإعدادات أو قاموس العمود الفقري النصي. - vision_config (
Union[dict, ~configuration_utils.PreTrainedConfig], اختياري) — كائن الإعدادات أو قاموس العمود الفقري البصري. - mm_tokens_per_image (
int، اختياري، القيمة الافتراضية 256) — عدد الرموز لكل تضمين صورة. - boi_token_index (
int، اختياري، القيمة الافتراضية 255999) — مؤشر رمز بداية الصورة (begin-of-image) المستخدم لتغليف موجه الصورة. - eoi_token_index (
int، اختياري، القيمة الافتراضية 256000) — مؤشر رمز نهاية الصورة (end-of-image token index) المستخدم لتغليف موجه الصورة. - image_token_index (
int، اختياري، القيمة الافتراضية262144) — مؤشر رمز الصورة المستخدم كعلامة مؤقتة للصور المدخلة. - initializer_range (
float، اختياري، القيمة الافتراضية0.02) — الانحراف المعياري لـ truncated_normal_initializer المستخدم في تهيئة جميع مصفوفات الأوزان. - tie_word_embeddings (
bool, اختياري) — ما إذا كان يجب ربط ترميزات الكلمات. القيمة الافتراضية هي قيمةtext_config.tie_word_embeddingsإذا لم يتم تعيينها.
هذه فئة الإعدادات المخزنة لإعدادات نموذج Shieldgemma2Model. تُستخدم لتوليد نموذج Shieldgemma2 وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن إنشاء إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ google/shieldgemma-2-4b-it
ترث كائنات التهيئة من PreTrainedConfig ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ PreTrainedConfig لمزيد من المعلومات.
مثال:
>>> from transformers import ShieldGemma2ForConditionalGeneration, ShieldGemma2Config, SiglipVisionConfig, ShieldGemma2TextConfig
>>> # Initializing a Siglip-like vision config
>>> vision_config = SiglipVisionConfig()
>>> # Initializing a ShieldGemma2 Text config
>>> text_config = ShieldGemma2TextConfig()
>>> # Initializing a ShieldGemma2 gemma-3-4b style configuration
>>> configuration = ShieldGemma2Config(vision_config, text_config)
>>> # Initializing a model from the gemma-3-4b style configuration
>>> model = ShieldGemma2TextConfig(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configShieldGemma2ForImageClassification
فئة transformers.ShieldGemma2ForImageClassification
< source >( config: ShieldGemma2Config )
المعاملات
- config (ShieldGemma2Config) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعدادات إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.
نموذج Shieldgemma2 مع رأس تصنيف الصور في الأعلى، على سبيل المثال لـ ImageNet.
يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).
هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Nonepixel_values: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Nonetoken_type_ids: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneuse_cache: bool | None = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = Nonelogits_to_keep: typing.Union[int, torch.Tensor] = 0**kwargs )
المعاملات
- input_ids (
torch.LongTensorبشكل(batch_size, sequence_length), اختياري) — مؤشرات رموز تسلسل الإدخال في قاموس الكلمات. سيتم تجاهل الحشو افتراضيًا.يمكن الحصول على الفهارس باستخدام AutoTokenizer. راجع PreTrainedTokenizer.encode() و PreTrainedTokenizer.call() للتفاصيل.
- pixel_values (
torch.Tensorمن الشكل(batch_size, num_channels, image_size, image_size)، اختياري) — المصفوفات المقابلة للصور المدخلة. يمكن الحصول على قيم البكسل باستخدامimage_processor_class. راجعimage_processor_class.__call__للتفاصيل (processor_classيستخدمimage_processor_classلمعالجة الصور). - 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). - token_type_ids (
torch.LongTensorبشكل(batch_size, sequence_length), اختياري) — مؤشرات رموز المقاطع لتحديد الجزء الأول والثاني من المدخلات. يتم اختيار المؤشرات من[0, 1]:- 0 يتوافق مع رمز sentence A،
- 1 يتوافق مع رمز sentence B.
- inputs_embeds (
torch.Tensorمن الشكل(batch_size, sequence_length, hidden_size)، اختياري) — اختياريًا، بدلاً من تمريرinput_ids، يمكنك اختيار تمرير تمثيل مضمّن مباشرة. وهذا مفيد إذا كنت ترغب في الحصول على مزيد من التحكم في كيفية تحويل فهارسinput_idsإلى المتجهات المرتبطة بها، مقارنةً بمصفوفة البحث المضمّنة الداخلية للنموذج. - labels (
torch.LongTensorof shape(batch_size,), اختياري) — التسميات لحساب خسارة تصنيف الصور/الانحدار. يجب أن تكون الفهارس ضمن[0, ..., config.num_labels - 1]. إذا كانconfig.num_labels == 1يتم حساب خسارة الانحدار (خسارة متوسط المربع)، وإذا كانconfig.num_labels > 1يتم حساب خسارة التصنيف (الإنتروبيا المتقاطعة). - use_cache (
bool، اختياري) — إذا تم تعيينه إلىTrue، تُعاد حالات المفاتيح والقيمpast_key_valuesويمكن استخدامها لتسريع فك الترميز (انظرpast_key_values). - output_attentions (
bool، اختياري) — ما إذا كان يجب إرجاع تensors الانتباه لجميع طبقات الانتباه أم لا. راجعattentionsضمن tensors المُرجعة لمزيد من التفاصيل. - output_hidden_states (
bool، اختياري) — ما إذا كان يجب إرجاع حالات الطبقات المخفية لجميع الطبقات. راجعhidden_statesضمن الموترات المُرجعة للحصول على مزيد من التفاصيل. - return_dict (
bool، اختياري) — ما إذا كان يجب إرجاع ModelOutput بدلاً من tuple عادي. - logits_to_keep (
Union[int, torch.Tensor]، اختياري، القيمة الافتراضية0) — إذا كانint، يتم حساب logits لآخرlogits_to_keepرموز. إذا كانت القيمة0، يتم حساب logits لجميعinput_ids(حالة خاصة). لا يُحتاج إلى logits إلا للرمز الأخير في عملية التوليد، ويمكن أن يوفر حسابها لذلك الرمز وحده ذاكرة كبيرة، وهو أمر مهم بشكل ملحوظ للتسلسلات الطويلة أو حجم المفردات الكبير. إذا كانtorch.Tensor، يجب أن يكون بعدًا واحدًا (1D) ويتوافق مع الفهارس التي يجب الاحتفاظ بها في بُعد طول التسلسل. يكون هذا مفيدًا عند استخدام تنسيق المصفوفات المعبأة (packed tensor format) (بعد واحد لكل من الدفعة وطول التسلسل).
تتجاوز طريقة ShieldGemma2ForImageClassification الخاصة بالتقديم (forward) الطريقة الخاصة __call__.
على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن
Moduleبدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.