Transformers documentation
محوّل الكامنات البايتية (BLT)
نُشر هذا النموذج في أوراق HF في 13 ديسمبر 2024، وأُضيف إلى مكتبة Hugging Face Transformers في 19 سبتمبر 2025.
محوّل الكامنات البايتية (BLT)
نظرة عامة
قُدِّم نموذج BLT في Byte Latent Transformer: Patches Scale Better Than Tokens من قِبل Artidoro Pagnoni وRam Pasunuru وPedro Rodriguez وJohn Nguyen وBenjamin Muller وMargaret Li1 وChunting Zhou وLili Yu وJason Weston وLuke Zettlemoyer وGargi Ghosh وMike Lewis وAri Holtzman† وSrinivasan Iyer. BLT هو نموذج لغوي كبير على مستوى البايتات يحقق أداءً على مستوى الترميز (tokenization) من خلال الترقيع الديناميكي القائم على الإنتروبيا.
المستخلص من الورقة البحثية هو كالتالي:
نقدّم هنا محوّل البايتات الكامنة (BLT)، وهو معمارية جديدة لنماذج اللغة على مستوى البايتات، تتطابق لأوّل مرة مع أداء نماذج اللغة المعتمدة على الترميز (tokenization) عند توسيع النطاق، مع تحسينات كبيرة في كفاءة الاستدلال (inference) والمتانة. يقوم BLT بتشفير البايتات إلى رقعات (patches) ذات أحجام ديناميكية، تعمل هذه الرقعات كوحدة الحساب الأساسية. يتم تقسيم الرقعات بناءً على إنتروبيا البايت التالي، مما يخصص المزيد من الحسابات وسعة النموذج حيث تتطلب تعقيدات البيانات المتزايدة ذلك. نعرض أول دراسة تحكّم في عدد العمليات العائمة (flop) لتوسيع النماذج على مستوى البايتات حتى 8 مليارات من المعاملات و4 تريليونات من بايتات التدريب. تُظهر نتائجنا جدوى توسيع النماذج المدربة على بايتات خام دون معجم ثابت. تتحسّن كفاءة التدريب والاستدلال معاً بسبب الاختيار الديناميكي للرقعات الطويلة عندما تكون البيانات قابلة للتنبؤ، إلى جانب تحسينات نوعية في الاستدلال المنطقي (reasoning) والتعميم على الذيل الطويل (long tail). بشكل عام، وبالنسبة لتكاليف استدلال ثابتة، يُظهر BLT توسيعاً (scaling) أفضل بكثير من النماذج المعتمدة على الترميز، من خلال زيادة حجم الرقعة وحجم النموذج في آنٍ واحد.
نصائح للاستخدام
بنية النموذج المزدوج: يتكون BLT من نموذجين منفصلين تم تدريبهما:
- مُرقّع (نموذج الإنتروبيا): نموذج تحويل أصغر يتنبأ بإنتروبيا مستوى البايت لتحديد حدود الرقع وقطع المدخلات.
- نموذج Transformer الرئيسي: النموذج الأساسي الذي يعالج البقع (patches) عبر مشفّر محلي (Local Encoder) وTransformer شامل (Global Transformer) ومفكك محلي (Local Decoder).
التبديل الديناميكي: يستخدم النموذج التبديل الديناميكي القائم على الإنتروبيا حيث:
- تحصل المناطق عالية الإنتروبيا (البيانات المعقدة) على رقع أقصر مع اهتمام حسابي أكبر
- تحصل المناطق منخفضة الإنتروبيا (البيانات القابلة للتنبؤ) على رقعات أطول من أجل الكفاءة
- هذا يتيح للنموذج تخصيص موارد الحوسبة حيث تكون الحاجة إليها في أشدّها
المُشفِّر المحلي: يعالج تسلسلات البايتات باستخدام الانتباه المتقاطع مع تمثيلات البُقع
المحوّل العام: يعالج التمثيلات على مستوى البقع مع انتباه كامل عبر البقع
المفكك المحلي: يولّد المخرجات مع انتباه متقاطع يعود إلى تسلسل البايتات الأصلي
مجزئ على مستوى البايت: على عكس المجزئات التقليدية التي تستخدم مفردات متعلمة، يقوم مجزئ BLT ببساطة بتحويل النص إلى بايتات UTF-8 ويربط كل بايت بمعرّف رمز. لا حاجة إلى مفردات.
يمكن تحميل النموذج عبر:
<hfoption id="AutoModel">from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("itazap/blt-1b-hf")
model = AutoModelForCausalLM.from_pretrained(
"itazap/blt-1b-hf",
device_map="auto",
)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
prompt = "my name is"
generated_ids = model.generate(
**inputs, max_new_tokens=NUM_TOKENS_TO_GENERATE, do_sample=False, use_cache=False
)
print(tokenizer.decode(generated_ids[0]))تمت مساهمة هذا النموذج من قِبل itazap. يمكن العثور على الكود الأصلي هنا.
BltConfig
فئة transformers.BltConfig
< 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 = 260max_position_embeddings: int = 4096patch_in_forward: bool | None = Truepatch_size: int | None = 4patching_mode: str | None = 'entropy'patching_threshold: float | None = 1.335442066192627patching_batch_size: int | None = 1max_patch_length: int | None = Nonelocal_attention_window_len: int | None = 512cross_attn_k: int | None = 2encoder_hash_byte_group_size: list[int] | None = Noneencoder_hash_byte_group_vocab: int | None = 500002encoder_hash_byte_group_nb_functions: int | None = 1patcher_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Noneencoder_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonedecoder_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Noneglobal_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonetie_word_embeddings: bool = Falseuse_cache: bool = Truepad_token_id: int | None = Nonebos_token_id: int | None = Noneeos_token_id: int | list[int] | None = Noneinitializer_range: float = 0.02rope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = None )
المعاملات
- vocab_size (
int، اختياري، القيمة الافتراضية260) — حجم مفردات النموذج. يحدد عدد الرموز المختلفة التي يمكن تمثيلها بواسطةinput_ids. - max_position_embeddings (
int، اختياري، القيمة الافتراضية4096) — أقصى طول تسلسل قد يُستخدم معه هذا النموذج. - patch_in_forward (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم تنفيذ التصحيح (patching) أثناء المرور الأمامي (forward pass). - patch_size (
int، اختياري، القيمة الافتراضية 4) — حجم البقع المستخدمة في آلية التقطيع. - patching_mode (
str، اختياري، القيمة الافتراضية"entropy") — الوضع المستخدم للتبديل (patching)، مثل التبديل القائم على الإنتروبيا. - patching_threshold (
float، اختياري، القيمة الافتراضية 1.34) — القيمة العتبة المستخدمة لتحديد متى يجب تطبيق التصحيحات. - patching_batch_size (
int، اختياري، القيمة الافتراضية 1) — حجم الدفعة المستخدمة أثناء عملية التصحيح. - max_patch_length (
int، اختياري) — الحد الأقصى لطول المقاطع التي يمكن توليدها. - local_attention_window_len (
int, اختياري، القيمة الافتراضية 512) — حجم نافذة الانتباه المحلية المستخدمة من قِبل المُشفِّر المحلي والمُفكِّك المحلي، بما يتوافق معlocal_attention_window_lenفي نقاط التفتيش المُصدَّرة. اضبطه علىNoneللانتباه عبر السياق السببي الكامل بدلاً من ذلك. - cross_attn_k (
int، اختياري، القيمة الافتراضية 2) — عدد رؤوس الانتباه المتقاطع المستخدمة في النموذج. - encoder_hash_byte_group_size (
list, اختياري) — قائمة بأحجام مجموعات البايتات المستخدمة في دالة التجزئة (hash) في المُشفِّر. - encoder_hash_byte_group_vocab (
int، اختياري، القيمة الافتراضية 500002) — حجم المفردات لمجموعات بايتات الترميز التجزئي (hash) في المُرمِّز. - encoder_hash_byte_group_nb_functions (
int، اختياري، القيمة الافتراضية 1) — عدد دوال التجزئة المستخدمة في تجميع بايتات المُشفِّر. - patcher_config (
BltPatcherConfig، اختياري) — إعدادات مكوّن المُرقِّع (patcher) في النموذج. - encoder_config (
Union[dict, ~configuration_utils.PreTrainedConfig]، اختياري) — كائن الإعداد أو قاموس العمود الفقري للترميز. - decoder_config (
Union[dict, ~configuration_utils.PreTrainedConfig], اختياري) — كائن الإعداد أو قاموس هيكل فك الترميز. - global_config (
BltGlobalTransformerConfig، اختياري) — إعدادات مكوّن التحوّل العام في النموذج. - tie_word_embeddings (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم ربط ترميزات الأوزان وفقاً لخريطةtied_weights_keysالخاصة بالنموذج. - use_cache (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب على النموذج إرجاع قيم المفاتيح/القيم الأخيرة للانتباه (لا تستخدمها جميع النماذج). لا ينطبق إلا إذا كانconfig.is_decoder=Trueأو إذا كان النموذج نموذجًا توليديًا يعتمد على المُفكِّك فقط. - pad_token_id (
int, اختياري) — معرّف الرمز المستخدم للتعبئة في المفردات. - bos_token_id (
int, اختياري) — معرّف الرمز المستخدم لبدء البث في المفردات. - eos_token_id (
Union[int, list[int]], اختياري) — معرّف الرمز المستخدم لنهاية التدفق في المفردات. - initializer_range (
float، اختياري، القيمة الافتراضية0.02) — الانحراف المعياري لـ truncated_normal_initializer المستخدم في تهيئة جميع مصفوفات الأوزان. - rope_parameters (
Union[~modeling_rope_utils.RopeParameters, dict], اختياري) — قائمة تحتوي على معاملات التهيئة الخاصة بتضمينات RoPE. يجب أن تحتوي القائمة على قيمة لـrope_theta، ومعاملات اختيارية تُستخدم للتوسيع في حال رغبتَ في استخدام RoPE معmax_position_embeddingsأطول.
هذه فئة الإعدادات المخزنة لإعدادات نموذج BltModel. تُستخدم لاستحداث نموذج Blt وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ itazap/blt-1b-hf
ترث كائنات التهيئة من PreTrainedConfig ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ PreTrainedConfig لمزيد من المعلومات.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Nonepatch_lengths: typing.Optional[torch.Tensor] = 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'> )
BltForCausalLM
فئة transformers.BltForCausalLM
< source >( config: BltConfig )
المعاملات
- config (BltConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. عند التهيئة باستخدام ملف إعدادات، لا يتم تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.
نموذج Blt Text مع رأس نمذجة اللغة في الأعلى.
يرث هذا النموذج من 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] = Nonecross_attention_states: typing.Optional[torch.LongTensor] = Nonecross_attention_mask: typing.Optional[torch.LongTensor] = Nonefull_text_row_masked_out_mask: tuple[torch.Tensor, torch.Tensor] | None = 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]. - cross_attention_states (
torch.Tensor, اختياري) — مخرجات نموذج الرؤية، تُستخدم للانتباه المتقاطع. يحتوي هذا الموتر على ميزات الصورة المعالجة التي سيقوم نموذج اللغة بالانتباه إليها. - cross_attention_mask (
torch.Tensorبشكل(batch_size, seq_length, max_num_images, max_num_tiles), اختياري) — قناع الانتباه المتقاطع (Cross-attention mask) للتحكم في التفاعل بين رموز النص وبلاطات الصور. يعرّف هذا الموتر رباعي الأبعاد أيّ بلاطات الصور يجب أن ينتبه إليها كل رمز نصي.لكل رمز نصي (في seq_length):
- 1 يشير إلى أن الرمز يجب أن ينتبه إلى بلاطة الصورة المقابلة
- يشير 0 إلى أن الرمز لا ينبغي أن ينتبه إلى بلاطة الصورة المقابلة
- full_text_row_masked_out_mask (
tuple[torch.Tensor, torch.Tensor], اختياري) — مجموعة (tuple) تحتوي على مصفوفتين (tensors) تُستخدمان لإخفاء الصفوف في آلية الانتباه المتقاطع (cross-attention):- للمصفوفة الأولى الشكل
(batch_size, 1, seq_length, 1)وتحتوي على قيم 0 أو 1. تدل القيمة 0 على أنه يجب إخفاء الصف بأكمله للرمز النصي المقابل في مصفوفة الانتباه المتقاطع (تجاهل جميع رموز الصورة). - يتمتع الموتر الثاني بالشكل نفسه ويُستخدم داخليًا لتطبيق الإخفاء (masking) أثناء المرور الأمامي (forward pass) لطبقات الانتباه المتقاطع (cross-attention). يشتق هذا القناع من cross_attention_mask ويُستخدم للتعامل مع الحالات التي يجب فيها ألا ينتبه رمز نصي إلى أي رمز صورة.
- للمصفوفة الأولى الشكل
- 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 أو مجموعة (tuple) من
torch.Tensor (في حال تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة
تعتمد على الإعداد (BltConfig) والمدخلات.
تتجاوز طريقة BltForCausalLM الخاصة بالتقديم (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, BltForCausalLM
>>> model = BltForCausalLM.from_pretrained("itazap/blt-1b-hf")
>>> tokenizer = AutoTokenizer.from_pretrained("itazap/blt-1b-hf")
>>> prompt = "If I had to write a haiku, it would be:"
>>> inputs = tokenizer(prompt, return_tensors="pt")
>>> # Generate
>>> generate_ids = model.generate(inputs.input_ids, max_length=40, do_sample=True, temperature=0.6)
>>> result = tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
>>> print(result)
If I had to write a haiku, it would be: "Snowflakes gently fall" - simple, yet peaceful.
I love the idea of snowflakes gently falling, each one