Transformers documentation
ByT5
نُشر هذا النموذج في أوراق HF في 28 مايو 2021، وأُضيف إلى مكتبة Hugging Face Transformers في 1 يونيو 2021.
ByT5
ByT5 هو إصدار من نموذج T5 لا يعتمد على مُجزِّئ (tokenizer)، وقد صُمم للعمل مباشرة على بايتات UTF-8 الخام. وهذا يعني أنه قادر على معالجة أي لغة، وهو أكثر مقاومةً للضوضاء مثل الأخطاء الإملائية، وأسهل في الاستخدام لأنه لا يتطلب خط معالجة مسبقة.
يمكنك العثور على جميع نقاط التفتيش الأصلية لـ ByT5 تحت منظمة Google.
راجع وثائق T5 لمزيد من الأمثلة حول كيفية تطبيق ByT5 على مهام لغوية مختلفة.
يُظهر المثال أدناه كيفية توليد النص باستخدام Pipeline وAutoModel ومن سطر الأوامر.
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained(
"google/byt5-small"
)
model = AutoModelForSeq2SeqLM.from_pretrained(
"google/byt5-small",
device_map="auto"
)
input_ids = tokenizer("summarize: Photosynthesis is the process by which plants, algae, and some bacteria convert light energy into chemical energy.", return_tensors="pt").to(model.device)
output = model.generate(**input_ids)
print(tokenizer.decode(output[0], skip_special_tokens=True))التكميم
تقلل عملية التكميم العبء على الذاكرة في النماذج الكبيرة من خلال تمثيل الأوزان بدقة أقل. راجع نظرة عامة على التكميم للاطلاع على المزيد من واجهات التكميم المتاحة.
يستخدم المثال أدناه torchao لاختزال الأوزان إلى int4 فقط.
# pip install torchao
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, TorchAoConfig
quantization_config = TorchAoConfig("int4_weight_only", group_size=128)
model = AutoModelForSeq2SeqLM.from_pretrained(
"google/byt5-xl",
device_map="auto",
quantization_config=quantization_config
)
tokenizer = AutoTokenizer.from_pretrained("google/byt5-xl")
input_ids = tokenizer("translate English to French: The weather is nice today.", return_tensors="pt").to(model.device)
output = model.generate(**input_ids)
print(tokenizer.decode(output[0], skip_special_tokens=True))ملاحظات
يُوصى باستخدام مُجزّئ الرموز (tokenizer) للاستدلال والتدريب على دفعات.
يُظهر المثال أدناه كيفية استخدام النموذج دون مُجزِّئ.
import torch from transformers import AutoModelForSeq2SeqLM model = AutoModelForSeq2SeqLM.from_pretrained("google/byt5-small", device_map="auto") num_special_tokens = 3 input_ids = torch.tensor([list("Life is like a box of chocolates.".encode("utf-8"))]) + num_special_tokens labels = torch.tensor([list("La vie est comme une boîte de chocolat.".encode("utf-8"))]) + num_special_tokens loss = model(input_ids, labels=labels).loss loss.item()يستخدم ByT5 أعلى قيم البايت (258، 257، إلخ) للتعتيم بدلاً من رموز الحارس مثل
{extra_id_0}.# Example: character-level denoising with mask tokens input_ids = tokenizer("The dog chases a ball in the park.").input_ids masked_input = torch.tensor([input_ids[:8] + [258] + input_ids[14:21] + [257] + input_ids[28:]]) output = model.generate(masked_input, max_length=100)
ByT5Tokenizer
فئة transformers.ByT5Tokenizer
< source >( eos_token = '</s>'unk_token = '<unk>'pad_token = '<pad>'extra_ids = 125additional_special_tokens = None**kwargs )
المعاملات
- eos_token (
str, اختياري, الافتراضي هو"</s>") — رمز نهاية التسلسل. عند بناء تسلسل باستخدام الرموز الخاصة، لا يُستخدم هذا الرمز لنهاية التسلسل، بل يُستخدم رمز الفاصل (sep_token) لهذا الغرض.عند بناء تسلسل باستخدام الرموز الخاصة، لا يُستخدم هذا الرمز لنهاية التسلسل. الرمز المستخدم هو
sep_token. - unk_token (
str، اختياري، القيمة الافتراضية"<unk>") — رمز المجهول. لا يمكن تحويل الرمز غير الموجود في المفردات إلى معرّف، لذا يُعيَّن هذا الرمز بدلاً منه. - pad_token (
str، اختياري، القيمة الافتراضية"<pad>") — الرمز المستخدم للتعبئة، على سبيل المثال عند تجميع تسلسلات ذات أطوال مختلفة. - extra_ids (
int، اختياري، القيمة الافتراضية 125) — يُضيف عددًا من المعرّفات الإضافية إلى نهاية قاموس الرموز لاستخدامها كرموز حدّية. يمكن الوصول إلى هذه الرموز على شكل “id{%d}>” حيث أن ”{%d}” هو رقم يتراوح بين 0 و extra_ids-1. تُفهرس الرموز الإضافية من نهاية قاموس الرموز حتى بدايته (“ ” هو الرمز الأخير في قاموس الرموز كما في معالجة ByT5 الأولية، انظر هنا). - additional_special_tokens (
list[str]، اختياري) — رموز خاصة إضافية يستخدمها مُجزّئ النص.
أنشئ مُرمِّز ByT5. يستخدم ByT5 ببساطة ترميز البايتات الخام utf-8.
يرث هذا المُجزِّئ من PreTrainedTokenizer الذي يحتوي على معظم الطرق الرئيسية. ينبغي للمستخدمين الرجوع إلى هذه الفئة الأصلية لمزيد من المعلومات حول تلك الطرق.
build_inputs_with_special_tokens
< source >( token_ids_0: listtoken_ids_1: list[int] | None = None ) → list[int]
المعاملات
- token_ids_0 (
list[int]) — قائمة بالمعرّفات التي ستُضاف إليها الرموز الخاصة. - token_ids_1 (
list[int]، اختياري) — قائمة اختيارية ثانية من المعرّفات لأزواج التسلسلات.
يعيد
list[int]
قائمة معرفات الإدخال مع الرموز الخاصة المناسبة.
أنشئ مدخلات النموذج من تسلسل أو زوج من التسلسلات لمهام تصنيف التسلسل عن طريق الربط وإضافة الرموز الخاصة. يتبع التسلسل التنسيق التالي:
- تسلسل واحد:
X </s> - زوج من التسلسلات:
A </s> B </s>
يحوّل تسلسل الرموز (نص) إلى نص واحد.
create_token_type_ids_from_sequences
< source >( token_ids_0: listtoken_ids_1: list[int] | None = None ) → list[int]
أنشئ قناعًا من التسلسلين المُمرَّرين لاستخدامه في مهمة تصنيف أزواج التسلسلات. لا يستفيد نموذج ByT5 من معرّفات أنواع الرموز، لذلك يُعاد قائمة من الأصفار.
get_special_tokens_mask
< source >( token_ids_0: listtoken_ids_1: list[int] | None = Nonealready_has_special_tokens: bool = False ) → list[int]
المعاملات
- token_ids_0 (
list[int]) — قائمة من المعرّفات. - token_ids_1 (
list[int]، اختياري) — قائمة اختيارية ثانية من المعرّفات لأزواج التسلسلات. - already_has_special_tokens (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كانت قائمة الرموز (tokens) منسّقة مسبقًا برموز خاصة للنموذج أم لا.
يعيد
list[int]
قائمة من الأعداد الصحيحة في المدى [0, 1]: 1 للرمز الخاص، و0 لرمز التسلسل.
استرجاع معرّفات التسلسل من قائمة الرموز التي لم تُضف إليها رموز خاصة. يُستدعى هذا الأسلوب عند إضافة الرموز الخاصة باستخدام أسلوب prepare_for_model في مُجزّئ النص.