Transformers documentation
Phi-3
نُشر هذا النموذج في أوراق HF في 22 أبريل 2024، وأُضيف إلى مكتبة Hugging Face Transformers في 24 أبريل 2024.
Phi-3
نظرة عامة
قُدِّم نموذج Phi-3 في Phi-3 Technical Report: A Highly Capable Language Model Locally on Your Phone من قِبل Microsoft.
ملخص
المستخلص من ورقة Phi-3 هو على النحو التالي:
نقدّم phi-3-mini، وهو نموذج لغوي يحتوي على 3.8 مليار معامل، تم تدريبه على 3.3 تريليون رمز. تتساوى أدائه الإجمالي، كما يُقاس من خلال المعايير الأكاديمية والاختبارات الداخلية، مع أداء نماذج مثل Mixtral 8x7B وGPT-3.5 (على سبيل المثال، يحقق phi-3-mini نسبة 69% في MMLU و8.38 في MT-bench)، رغم أنه صغير الحجم بما يكفي ليتم نشره على هاتف. تكمن الابتكار بالكامل في مجموعة البيانات الخاصة بالتدريب، وهي نسخة موسّعة من تلك المستخدمة في phi-2، وتتكون من بيانات ويب مُرشَّحة بشدة وبيانات اصطناعية. كما تم مواءمة النموذج بشكل إضافي لتعزيز المتانة والأمان وتنسيق المحادثة. كما نقدم بعض النتائج الأولية لتوسيع المعاملات باستخدام نموذجين بحجم 7B و14B تم تدريبهما على 4.8 تريليون رمز، وهما phi-3-small وphi-3-medium، وكلاهما أكثر قدرة بكثير من phi-3-mini (على سبيل المثال، 75% و78% على التوالي في MMLU، و8.7 و8.9 في MT-bench).
يمكن العثور على الكود الأصلي لـ Phi-3 هنا.
نصائح للاستخدام
- هذا النموذج مشابه جداً لـ
Llamaمع الفارق الرئيسي المتمثل فيPhi3SuScaledRotaryEmbeddingوPhi3YarnScaledRotaryEmbedding، حيث تُستخدم لتمديد سياق التضمينات الدورانية. كما يتم دمج الاستعلام والمفتاح والقيم، وكذلك دمج طبقات الإسقاط الصاعد والبوابة في شبكة MLP. - المُجزِّئ المستخدم لهذا النموذج مطابق تمامًا لـ LlamaTokenizer، باستثناء الرموز الإضافية.
كيفية استخدام Phi-3
تم دمج Phi-3 في الإصدار قيد التطوير (4.40.0.dev) من
transformers. وحتى يتم إصدار النسخة الرسمية عبرpip، تأكد من أنك تقوم بأحد ما يلي:
عند تحميل النموذج، تأكد من تمرير
trust_remote_code=Trueكحجة لدالةfrom_pretrained().حدّث نسخة
transformersالمحلية إلى الإصدار التطويري:pip uninstall -y transformers && pip install git+https://github.com/huggingface/transformers. الأمر السابق بديل عن الاستنساخ والتثبيت من المصدر.
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("microsoft/Phi-3-mini-4k-instruct", device_map="auto")
tokenizer = AutoTokenizer.from_pretrained("microsoft/Phi-3-mini-4k-instruct")
messages = [{"role": "user", "content": "Can you provide ways to eat combinations of bananas and dragonfruits?"}]
inputs = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to(model.device)
outputs = model.generate(inputs, max_new_tokens=32)
text = tokenizer.batch_decode(outputs)[0]
print(text)
<|user|> Can you provide ways to eat combinations of bananas and dragonfruits?<|end|><|assistant|> Certainly! Bananas and dragonfruits can be combined in various delicious ways. Here are some creative ideas for incorporating both fruitsPhi3Config
فئة transformers.Phi3Config
< 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 = Nonevocab_size: int = 32064hidden_size: int = 3072intermediate_size: int = 8192num_hidden_layers: int = 32num_attention_heads: int = 32num_key_value_heads: int | None = Noneresid_pdrop: float | int = 0.0embd_pdrop: float | int = 0.0attention_dropout: float | int = 0.0hidden_act: str = 'silu'max_position_embeddings: int = 4096original_max_position_embeddings: int = 4096initializer_range: float = 0.02rms_norm_eps: float = 1e-05use_cache: bool = Truetie_word_embeddings: bool = Falserope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = Nonebos_token_id: int | None = 1eos_token_id: int | list[int] | None = 32000pad_token_id: int | None = 32000sliding_window: int | None = None )
المعاملات
- vocab_size (
int، اختياري، القيمة الافتراضية32064) — حجم مفردات النموذج. يحدد عدد الرموز المختلفة التي يمكن تمثيلها بواسطةinput_ids. - hidden_size (
int، اختياري، القيمة الافتراضية3072) — أبعاد التمثيلات المخفية. - intermediate_size (
int، اختياري، القيمة الافتراضية8192) — أبعاد تمثيلات MLP. - num_hidden_layers (
int، اختياري، القيمة الافتراضية32) — عدد الطبقات المخفية في مُفكِّك Transformer. - num_attention_heads (
int، اختياري، القيمة الافتراضية32) — عدد رؤوس الانتباه لكل طبقة انتباه في مُفكِّك Transformer. - num_key_value_heads (
int, اختياري) — هذا هو عدد رؤوس 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 عن طريق meanpooling جميع الرؤوس الأصلية داخل تلك المجموعة. لمزيد من التفاصيل، راجع هذا الورقة. إذا لم يتم تحديد القيمة، فسيتم افتراضnum_attention_heads. - resid_pdrop (
Union[float, int]، اختياري، القيمة الافتراضية0.0) — احتمال الإسقاط (dropout) لجميع الطبقات المتصلة بالكامل في التضمينات والمشفّر والمجمّع. - embd_pdrop (
Union[float, int]، اختياري، القيمة الافتراضية0.0) — نسبة الإسقاط (dropout) الخاصة بالتضمينات. - attention_dropout (
Union[float, int]، اختياري، القيمة الافتراضية0.0) — نسبة إسقاط (dropout) لاحتمالات الانتباه. - hidden_act (
str، اختياري، القيمة الافتراضيةsilu) — دالة التنشيط غير الخطية (دالة أو نص) في المُفكِّك. على سبيل المثال،"gelu"،"relu"،"silu"، وغيرها. - max_position_embeddings (
int، اختياري، القيمة الافتراضية4096) — أقصى طول تسلسل قد يُستخدم معه هذا النموذج. - original_max_position_embeddings (
int، اختياري، القيمة الافتراضية 4096) — أقصى طول تسلسل تم تدريب هذا النموذج عليه. يُستخدم هذا لتحديد حجم تضمينات RoPE الأصلية عند استخدام التوسيع الطويل. - initializer_range (
float، اختياري، القيمة الافتراضية0.02) — الانحراف المعياري لـ truncated_normal_initializer المستخدم في تهيئة جميع مصفوفات الأوزان. - rms_norm_eps (
float، اختياري، القيمة الافتراضية1e-05) — قيمة الإيبسلون المستخدمة في طبقات تطبيع rms. - use_cache (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب على النموذج إرجاع قيم المفاتيح/القيم الأخيرة للانتباه (لا تستخدمها جميع النماذج). لا ينطبق إلا إذا كانconfig.is_decoder=Trueأو إذا كان النموذج نموذجًا توليديًا يعتمد على المُفكِّك فقط. - tie_word_embeddings (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم ربط ترميزات الأوزان وفقاً لخريطةtied_weights_keysالخاصة بالنموذج. - rope_parameters (
Union[~modeling_rope_utils.RopeParameters, dict], اختياري) — قائمة تحتوي على معاملات التهيئة الخاصة بتضمينات RoPE. يجب أن تحتوي القائمة على قيمة لـrope_theta، ومعاملات اختيارية تُستخدم للتوسيع في حال رغبتَ في استخدام RoPE معmax_position_embeddingsأطول. - bos_token_id (
int، اختياري، القيمة الافتراضية1) — معرّف الرمز المستخدم لبدء البث في المفردات. - eos_token_id (
Union[int, list[int]]، اختياري، القيمة الافتراضية32000) — معرّف الرمز المستخدم لنهاية البث في المفردات. - pad_token_id (
int، اختياري، القيمة الافتراضية32000) — معرّف الرمز المستخدم للتعبئة في المفردات. - sliding_window (
int، اختياري) — حجم نافذة الانتباه المنزلقة. إذا كانتNone، فلا تُطبَّق نافذة منزلقة.
هذه فئة الإعدادات المخزنة لإعدادات نموذج Phi3Model. تُستخدم لتوليد نموذج Phi3 وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن إنشاء إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ microsoft/Phi-3-mini-4k-instruct
ترث كائنات التهيئة من PreTrainedConfig ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ PreTrainedConfig لمزيد من المعلومات.
مثال:
>>> from transformers import Phi3Model, Phi3Config
>>> # Initializing a Phi-3 style configuration
>>> configuration = Phi3Config.from_pretrained("microsoft/Phi-3-mini-4k-instruct")
>>> # Initializing a model from the configuration
>>> model = Phi3Model(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configتحقق من تكوين rope_parameters.
Phi3Model
فئة transformers.Phi3Model
< source >( config: Phi3Config )
المعاملات
- config (Phi3Config) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعداد إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.
نموذج Phi3 الأساسي الذي يُخرج حالات مخفية خام دون أي رأس محدد في الأعلى.
يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).
هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.
forward
< source >( 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'> ) → BaseModelOutputWithPast 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).
يعيد
BaseModelOutputWithPast أو tuple(torch.Tensor)
BaseModelOutputWithPast أو مجموعة مرتبة من
torch.Tensor (في حال تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة
تعتمد على الإعداد (Phi3Config) والمدخلات.
تتجاوز طريقة Phi3Model الخاصة بالتقديم (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.تحتوي على حالات مخفية محسوبة مسبقًا (المفاتيح والقيم في كتل الانتباه الذاتي، وفي كتل الانتباه المتقاطع اختياريًا إذا كان
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 على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.
Phi3ForCausalLM
فئة transformers.Phi3ForCausalLM
< source >( config: Phi3Config )
المعاملات
- config (Phi3Config) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعداد إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.
نموذج Phi3 لنمذجة اللغة السببية.
يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).
هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.
forward
< source >( 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_idsdocstring). يتم تجاهل الرموز التي فهارسها مضبوطة على-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 أو مجموعة مرتبة من
torch.Tensor (في حال تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة اعتماداً على الإعداد (Phi3Config) والمدخلات.
تتجاوز طريقة Phi3ForCausalLM الخاصة بالتقديم (forward) الطريقة الخاصة __call__.
على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن
Moduleبدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.
loss (
torch.Tensorof 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, Phi3ForCausalLM
>>> model = Phi3ForCausalLM.from_pretrained("meta-phi3/Phi3-2-7b-hf")
>>> tokenizer = AutoTokenizer.from_pretrained("meta-phi3/Phi3-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."generate
< source >( inputs: typing.Optional[torch.Tensor] = Nonegeneration_config: transformers.generation.configuration_utils.GenerationConfig | None = Nonelogits_processor: transformers.generation.logits_process.LogitsProcessorList | None = Nonestopping_criteria: transformers.generation.stopping_criteria.StoppingCriteriaList | None = Noneprefix_allowed_tokens_fn: collections.abc.Callable[[int, torch.Tensor], list[int]] | None = Nonesynced_gpus: bool | None = Noneassistant_model: typing.Optional[ForwardRef('PreTrainedModel')] = Nonestreamer: typing.Optional[ForwardRef('BaseStreamer')] = Nonenegative_prompt_ids: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Nonecustom_generate: str | collections.abc.Callable | None = None**kwargs ) → ModelOutput or torch.LongTensor
المعاملات
- inputs (
torch.Tensorبأشكال متغيرة حسب النمط، اختياري) — التسلسل المستخدم كموجّه للتوليد أو كمدخلات للنموذج إلى المُشفِّر. إذا كانتNoneفسيُهيّئ الدالة هذا التسلسل باستخدامbos_token_idوحجم دفعة يساوي 1. بالنسبة لنماذج المُفكِّك فقط، يجب أن تكونinputsبصيغةinput_ids. أما بالنسبة لنماذج المُشفِّر-المُفكِّك، فيمكن أن يمثل inputs أيّاً منinput_idsأوinput_valuesأوinput_featuresأوpixel_values. - generation_config (GenerationConfig, اختياري) —
إعدادات التوليد التي تُستخدم كإعدادات أساسية لاستدعاء التوليد. أي
**kwargsمرر إلى generate تطابق سماتgeneration_configستُلغي قيمها. إذا لم يُقدَّمgeneration_config، فسيُستخدم الإعداد الافتراضي، الذي له أولوية تحميل كالتالي: 1) من ملف النموذجgeneration_config.json، إن وُجد؛ 2) من إعدادات النموذج. يُرجى ملاحظة أن المعاملات غير المحددة ستورث القيم الافتراضية لـ GenerationConfig، والتي يجب الرجوع إلى توثيقها لتهيئة التوليد. - logits_processor (
LogitsProcessorList، اختياري) — معالجات logits مخصصة تكمل المعالجات الافتراضية المبنية من المعاملات وإعدادات التوليد. إذا تم تمرير معالج logits تم إنشاؤه مسبقًا باستخدام المعاملات أو إعدادات التوليد، فسيتم طرح خطأ. هذه الميزة مخصصة للمستخدمين المتقدمين. - stopping_criteria (
StoppingCriteriaList، اختياري) — معايير إيقاف مخصصة تكمل معايير الإيقاف الافتراضية المبنية من الحجج وإعدادات التوليد. إذا تم تمرير معيار إيقاف تم إنشاؤه مسبقًا باستخدام الحجج أو إعدادات التوليد، فسيتم طرح خطأ. إذا كان معيار الإيقاف الخاص بك يعتمد على مدخلscores، فتأكد من تمريرreturn_dict_in_generate=True, output_scores=Trueإلىgenerate. هذه الميزة مخصصة للمستخدمين المتقدمين. - prefix_allowed_tokens_fn (
Callable[[int, torch.Tensor], list[int]]، اختياري) — إذا تم توفيره، فإن هذه الدالة تُقيّد بحث الحزمة (beam search) على الرموز المسموح بها فقط في كل خطوة. إذا لم يُوفَّر، فلا يُطبَّق أي قيد. تستقبل هذه الدالة حجتين: معرّف الدفعةbatch_idوinput_ids. يجب أن تُرجع قائمة بالرموز المسموح بها لخطوة التوليد التالية، مشروطةً بمعرّف الدفعةbatch_idوالرموز المولَّدة سابقًاinputs_ids. يُعدّ هذا الحُجّة مفيدًا للتوليد المقيد المشروط على البادئة، كما هو موصوف في Autoregressive Entity Retrieval. - synced_gpus (
bool, اختياري) — ما إذا كان يجب مواصلة تشغيل حلقة while حتى max_length. ما لم يتم تجاوز هذا العلم، فسيتم تعيينه إلىTrueعند استخدامFullyShardedDataParallelأو DeepSpeed ZeRO Stage 3 مع عدة وحدات معالجة رسومية لتجنب التعطّل إذا انتهت وحدة معالجة رسومية واحدة من التوليد قبل وحدات المعالجة الرسومية الأخرى. وإلا، فالقيمة الافتراضية هيFalse. - assistant_model (
PreTrainedModel، اختياري) — نموذج مساعد يمكن استخدامه لتسريع عملية التوليد. يجب أن يكون لدى النموذج المساعد نفس المرمّز (tokenizer) تمامًا. يتحقق التسريع عندما يكون التنبؤ بالرموز المرشحة باستخدام النموذج المساعد أسرع بكثير من تشغيل التوليد باستخدام النموذج الذي تستدعي منه generate. وعليه، يجب أن يكون النموذج المساعد أصغر بكثير. - streamer (
BaseStreamer، اختياري) — كائن Streamer الذي سيُستخدم لبثّ التسلسلات المولّدة. يتم تمرير الرموز المولّدة عبرstreamer.put(token_ids)، ويتحمّل الـ streamer مسؤولية أي معالجة إضافية. - negative_prompt_ids (
torch.LongTensorمن الشكل(batch_size, sequence_length)، اختياري) — الموجّه السلبي المطلوب لبعض المعالجات مثل CFG. يجب أن يتطابق حجم الدفعة مع حجم دفعة الإدخال. هذه ميزة تجريبية، وقد تخضع لتغييرات كاسرة في واجهة برمجة التطبيقات في الإصدارات المستقبلية. - negative_prompt_attention_mask (
torch.LongTensorof shape(batch_size, sequence_length), اختياري) — Attention_mask الخاص بـnegative_prompt_ids. - custom_generate (
strأوCallable, اختياري) — أحد ما يلي:str(اسم مستودع Hugging Face Hub): يشغّل دالةgenerateالمخصصة المعرّفة فيcustom_generate/generate.pyداخل ذلك المستودع بدلاً من طريقةgenerateالقياسية. يستبدل المستودع منطق التوليد بالكامل، وقد يختلف نوع الإرجاع.str(مسار المستودع المحلي): نفس ما سبق لكن من مسار محلي. كما تتطلب المجلدات المحليةtrust_remote_code=Trueلأنcustom_generate/generate.pyالمحلي يُنفَّذ.Callable: سيقومgenerateبتنفيذ خطوات إعداد المدخلات المعتادة، ثم استدعاء الدالة القابلة للاستدعاء المُقدَّمة لتشغيل حلقة فك الترميز. لمزيد من المعلومات، راجع التوثيق.
- kwargs (
dict[str, Any], اختياري) — تحديد معلمات بشكل مؤقت لـgeneration_configو/أو معلمات إضافية خاصة بالنموذج سيتم تحويلها إلى دالةforwardالخاصة بالنموذج. إذا كان النموذج من نوع المُشفِّر-المُفكِّك (encoder-decoder)، فيجب عدم إضافة بادئة للمعلمات الخاصة بالمُشفِّر، بينما يجب إضافة بادئة decoder_ للمعلمات الخاصة بالمُفكِّك.
يعيد
ModelOutput أو torch.LongTensor
ModelOutput (إذا كان return_dict_in_generate=True
أو عندما يكون config.return_dict_in_generate=True) أو torch.LongTensor.
إذا لم يكن النموذج نموذجاً من نوع المُشفِّر-المُفكِّك (model.config.is_encoder_decoder=False)، فإن أنواع ModelOutput الممكنة هي:
إذا كان النموذج من نوع مُشفِّر-مُفكِّك (encoder-decoder) (model.config.is_encoder_decoder=True)، فإن أنواع ModelOutput الممكنة هي:
يولّد تسلسلات من معرّفات الرموز (token ids) للنماذج التي تحتوي على رأس لنمذجة اللغة.
تُضبط معظم المعلمات التي تتحكم في التوليد في
generation_config، والتي إذا لم تُمرَّر، فسيتم ضبطها على إعدادات التوليد الافتراضية للنموذج. يمكنك تجاوز أيgeneration_configعن طريق تمرير المعلمات المقابلة إلى generate()، على سبيل المثال.generate(inputs, num_beams=4, do_sample=True).لمراجعة عامة لاستراتيجيات التوليد وأمثلة الأكواد، راجع الدليل التالي.
Phi3ForSequenceClassification
forward
< source >( input_ids: torch.LongTensor | None = Noneattention_mask: torch.Tensor | None = Noneposition_ids: torch.LongTensor | None = Nonepast_key_values: Cache | None = Noneinputs_embeds: torch.Tensor | None = Nonelabels: torch.LongTensor | None = Noneuse_cache: bool | None = None**kwargs: Unpack[TransformersKwargs] ) → SequenceClassifierOutputWithPast
المعاملات
- 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, اختياري) — حالات مخفية محسوبة مسبقًا (المفاتيح والقيم في كتل الانتباه الذاتي وكتل الانتباه المتقاطع) يمكن استخدامها لتسريع فك الترميز التسلسلي. يتكون هذا عادةً من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,)، اختياري) — التسميات لحساب خسارة تصنيف/الانحدار التسلسلي. يجب أن تكون الفهارس ضمن[0, ..., config.num_labels - 1]. إذا كانconfig.num_labels == 1يتم حساب خسارة الانحدار (خسارة متوسط المربع)، وإذا كانconfig.num_labels > 1يتم حساب خسارة التصنيف (الإنتروبيا المتقاطعة). - use_cache (
bool، اختياري) — إذا تم تعيينه إلىTrue، تُعاد حالات المفاتيح والقيمpast_key_valuesويمكن استخدامها لتسريع فك الترميز (انظرpast_key_values).
يعيد
SequenceClassifierOutputWithPast
تُعيد طريقة GenericForSequenceClassification الخاصة بالتقديم (forward) تعريف الطريقة الخاصة __call__.
على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن
Moduleبدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.
Phi3ForTokenClassification
forward
< source >( input_ids: torch.LongTensor | None = Noneattention_mask: torch.Tensor | None = Noneposition_ids: torch.LongTensor | None = Nonepast_key_values: Cache | None = Noneinputs_embeds: torch.Tensor | None = Nonelabels: torch.LongTensor | None = Noneuse_cache: bool | None = None**kwargs: Unpack[TransformersKwargs] ) → TokenClassifierOutput
المعاملات
- 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, اختياري) — حالات مخفية محسوبة مسبقًا (المفاتيح والقيم في كتل الانتباه الذاتي وكتل الانتباه المتقاطع) يمكن استخدامها لتسريع فك الترميز التسلسلي. يتكون هذا عادةً من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.num_labels - 1]. - use_cache (
bool، اختياري) — إذا تم تعيينه إلىTrue، تُعاد حالات المفاتيح والقيمpast_key_valuesويمكن استخدامها لتسريع فك الترميز (انظرpast_key_values).
يعيد
TokenClassifierOutput
تُعيد طريقة GenericForTokenClassification الخاصة بالتقديم (forward) تعريف الطريقة الخاصة __call__.
على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن
Moduleبدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.