Transformers documentation

الإعداد

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

الإعداد

تُنفّذ الفئة الأساسية PreTrainedConfig الطرق المشتركة لتحميل/حفظ التهيئة إما من ملف أو مجلد محلي، أو من تهيئة نموذج مُدرَّب مسبقًا تُوفّره المكتبة (يتم تنزيلها من مستودع AWS S3 الخاص بـ HuggingFace).

تُنفّذ كل فئة إعداد مشتقة سمات خاصة بالنموذج. السمة المشتركة الموجودة في جميع فئات الإعداد هي: hidden_size، وnum_attention_heads، وnum_hidden_layers. كما تُنفّذ نماذج النصّ السمة التالية: vocab_size.

PreTrainedConfig

فئة transformers.PreTrainedConfig

< >

( 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 = None )

المعاملات

  • name_or_path (str، اختياري، القيمة الافتراضية "") — تخزين السلسلة النصية التي تم تمريرها إلى PreTrainedModel.from_pretrained() كـpretrained_model_name_or_path إذا تم إنشاء التهيئة باستخدام طريقة مماثلة.
  • output_hidden_states (bool، اختياري، القيمة الافتراضية False) — ما إذا كان يجب على النموذج إرجاع جميع حالات الإخفاء (hidden-states) أم لا.
  • output_attentions (bool، اختياري، القيمة الافتراضية False) — ما إذا كان يجب على النموذج إرجاع جميع الانتباهات أم لا.
  • return_dict (bool، اختياري، القيمة الافتراضية True) — ما إذا كان يجب على النموذج إرجاع ModelOutput بدلاً من tuple عادي.
  • is_encoder_decoder (bool، اختياري، القيمة الافتراضية False) — ما إذا كان النموذج يُستخدم كمُشفِّر/مُفكِّك أم لا.
  • chunk_size_feed_forward (int، اختياري، القيمة الافتراضية 0) — حجم المقطع لجميع طبقات التغذية الأمامية في كتل الانتباه المتبقي. يعني حجم مقطع يساوي 0 أن طبقة التغذية الأمامية غير مقسمة إلى مقاطع. يعني حجم مقطع يساوي n أن طبقة التغذية الأمامية تعالج n < sequence_length تضمينات في كل مرة. لمزيد من المعلومات حول تقطيع التغذية الأمامية، راجع كيف يعمل تقطيع التغذية الأمامية؟.
  • per_layer_config (dict[int | str, dict[str, Any]], اختياري) — تعيين متناثر من فهارس الطبقات إلى تجاوزات سمات التهيئة. كل مفتاح هو فهرس طبقة، وكل قيمة تحتوي على السمات التي تختلف عن التهيئة العامة لتلك الطبقة.
  • tie_last_hidden_states (bool، اختياري) — ما إذا كان ينبغي أن يكون hidden_states[-1] هو last_hidden_state بعد تطبيق المعيار النهائي (post-final-norm) بدلاً من حالة المخفية (hidden state) قبل المعيار النهائي. إذا لم يتم تعيينه، يُستخدم الافتراضي المدمج في النموذج.

معلمات مهام الضبط الدقيق

  • architectures (list[str]، اختياري) — هندسات النموذج التي يمكن استخدامها مع أوزان النموذج المُسبقة التدريب.
  • id2label (dict[int, str]، اختياري) — خريطة من الفهرس (مثل فهرس التنبؤ، أو فهرس الهدف) إلى التسمية.
  • label2id (dict[str, int], اختياري) — خريطة من التسمية إلى الفهرس للنموذج.
  • num_labels (int، اختياري) — عدد التسميات المستخدمة في الطبقة الأخيرة المضافة إلى النموذج، وعادةً ما يكون ذلك لمهمة تصنيف.
  • problem_type (str, اختياري) — نوع المشكلة لنماذج XxxForSequenceClassification. يمكن أن يكون أحد القيم التالية: "regression"، "single_label_classification" أو "multi_label_classification".

معلمات خاصة بـ PyTorch

  • dtype (str، اختياري) — dtype للأوزان. يمكن استخدام هذا السمة لمحاكاة النموذج إلى dtype غير افتراضي (وهو عادةً float32) وبالتالي السماح بتخصيص تخزين مثالي. على سبيل المثال، إذا كان النموذج المحفوظ من نوع float16، فبشكل مثالي نريد تحميله مرة أخرى باستخدام الحد الأدنى من الذاكرة اللازمة لتحميل أوزان float16.

الفئة الأساسية لجميع فئات الإعدادات. تتعامل مع بعض المعلمات المشتركة بين إعدادات جميع النماذج، بالإضافة إلى طرق لتحميل/تنزيل/حفظ الإعدادات.

يمكن تحميل ملف الإعدادات وحفظه على القرص. إن تحميل ملف الإعدادات واستخدامه لتبني نموذج لا يقوم بتحميل أوزان النموذج. بل يؤثر فقط على إعدادات النموذج.

خصائص الفئة (تُستبدل من قِبل الفئات المشتقة):

  • model_type (str) — معرّف لنوع النموذج، يُسلسل في ملف JSON، ويُستخدم لإعادة إنشاء الكائن الصحيح في AutoConfig.
  • attribute_map (dict[str, str]) — قاموس يربط بين أسماء السمات الخاصة بالنموذج والتسمية الموحدة للسمات.
  • base_model_tp_plan (dict[str, Any]) — قاموس يربط أسماء الوحدات الفرعية الكاملة (FQN) لنموذج أساسي بخطة التوازي على مستوى الموترات المطبقة على الوحدة الفرعية عند استدعاء model.tensor_parallel.
  • base_model_fsdp_plan (dict[Any, str]) — قاموس يربط وحدات فرعية من النموذج الأساسي باستراتيجية تجزئة FSDP2 (مثل "free_full_weight" / "keep_full_weight"). يمكن أن تكون المفاتيح مسارات وحدات برية (مثل "layers.*") أو مجموعات من المسارات (تُجمَّع في استدعاء واحد لـ fully_shard).
  • base_model_pp_plan (dict[str, tuple[list[str]]]) — قاموس يربط وحدات النموذج الأساسية الفرعية بخطة موازاة خط الأنابيب التي تتيح للمستخدمين وضع الوحدة الفرعية على الجهاز المناسب.

الخصائص المشتركة (الموجودة في جميع الفئات الفرعية):

  • vocab_size (int) — عدد الرموز في قاموس الكلمات، وهو أيضاً البُعد الأول لمصفوفة التضمينات (قد يكون هذا السمة مفقوداً في النماذج التي لا تحتوي على نمط نصي مثل ViT).
  • hidden_size (int) — حجم الطبقة المخفية في النموذج.
  • num_attention_heads (int) — عدد رؤوس الانتباه المستخدمة في طبقات الانتباه متعددة الرؤوس في النموذج.
  • num_hidden_layers (int) — عدد الكتل في النموذج.

أصبح ضبط معلمات توليد التسلسل في إعدادات النموذج غير مستحسن. من أجل التوافق مع الإصدارات السابقة، سيظل تحميل بعض هذه المعلمات ممكنًا، لكن محاولة تجاوزها ستؤدي إلى طرح استثناء — يجب عليك ضبطها في [~transformers.GenerationConfig]. راجع توثيق [~transformers.GenerationConfig] لمزيد من المعلومات حول المعلمات الفردية.

push_to_hub

< >

( repo_id: strcommit_message: str | None = Nonecommit_description: str | None = Noneprivate: bool | None = Nonetoken: bool | str | None = Nonerevision: str | None = Nonecreate_pr: bool = Falsemax_shard_size: int | str | None = '50GB'tags: list[str] | None = None )

المعاملات

  • repo_id (str) — اسم المستودع الذي تريد دفع إعداداتك إليه. يجب أن يحتوي على اسم مؤسستك عند الدفع إلى مؤسسة معينة.
  • commit_message (str, اختياري) — الرسالة التي تُستخدم عند تنفيذ عملية الإرسال. القيمة الافتراضية هي "Upload config".
  • commit_description (str, اختياري) — وصف الالتزام الذي سيتم إنشاؤه
  • private (bool، اختياري) — ما إذا كان سيتم جعل المستودع خاصًا. إذا كان None (الافتراضي)، فسيكون المستودع عامًا ما لم يكن الافتراضي للمنظمة هو الخاص. يتم تجاهل هذه القيمة إذا كان المستودع موجودًا بالفعل.
  • token (bool أو str، اختياري) — الرمز الذي يُستخدم كتفويض حامل HTTP للملفات البعيدة. إذا كان True (الافتراضي)، فسيتم استخدام الرمز الذي تم إنشاؤه عند تشغيل hf auth login (المخزَّن في ~/.huggingface).
  • revision (str، اختياري) — الفرع الذي سيتم دفع الملفات المرفوعة إليه.
  • create_pr (bool، اختياري، القيمة الافتراضية False) — ما إذا كان سيتم إنشاء طلب سحب (PR) بالملفات المرفوعة أم الالتزام مباشرة.
  • max_shard_size (int أو str، اختياري، القيمة الافتراضية "50GB") — ينطبق على النماذج فقط. الحد الأقصى لحجم نقطة التفتيش قبل تقسيمها إلى أجزاء. ستكون نقاط التفتيش المقسمة كل منها بحجم أقل من هذا الحجم. إذا تم التعبير عنه كنص، فيجب أن يتكون من أرقام تليها وحدة (مثل "5MB").
  • tags (list[str]، اختياري) — قائمة بالوسوم التي سيتم دفعها إلى Hub.

ارفع ملف الإعدادات إلى 🤗 Model Hub.

أمثلة:

from transformers import AutoConfig

config = AutoConfig.from_pretrained("google-bert/bert-base-cased")

# Push the config to your namespace with the name "my-finetuned-bert".
config.push_to_hub("my-finetuned-bert")

# Push the config to an organization with the name "my-finetuned-bert".
config.push_to_hub("huggingface/my-finetuned-bert")

default_config_fields

< >

( )

يحصل على القيم الافتراضية لكل حقول مُعلَّمة في dataclass، ويُستخدم لحفظ diff-dict. بالنسبة للتكوينات التي أُنشئت في v4 مع __init__ مخصص، سيعيد قاموسًا فارغًا، وبالتالي يحفظ جميع المفاتيح في self.__dict__. أما بالنسبة للتكوينات الأحدث، فسيُعيد المفاتيح التي تم إعلان قيمها الافتراضية كحقول، بدلاً من ذلك في __post_init__، مما يستبعد فقط هذه الحقول المحددة من ملف json المُسلسَل.

dict_dtype_to_str

< >

( d: dict[str, Any] )

يتحقق مما إذا كان القاموس المُمرَّر وجميع القواميس المتداخلة بداخله تحتوي على مفتاح dtype، وإذا لم يكن القيمة None، فيقوم بتحويل torch.dtype إلى نص يحتوي على النوع فقط. على سبيل المثال، يتم تحويل torch.float32 إلى نص “float32”، والذي يمكن بعد ذلك تخزينه بتنسيق json.

from_dict

< >

( config_dict: dict[str, Any]**kwargs ) → PreTrainedConfig

المعاملات

  • config_dict (dict[str, Any]) — قاموس يُستخدم لإنشاء كائن الإعدادات. يمكن استرجاع مثل هذا القاموس من نقطة تحقق مسبق التدريب بالاستفادة من طريقة get_config_dict().
  • kwargs (dict[str, Any]) — معاملات إضافية تُستخدم لتهيئة كائن الإعدادات.

كائن الإعداد المُستخدَم من تلك المعاملات.

يُشغّل كائن PreTrainedConfig من قاموس Python للمعاملات.

from_json_file

< >

( json_file: str | os.PathLike ) → PreTrainedConfig

المعاملات

  • json_file (str أو os.PathLike) — المسار إلى ملف JSON الذي يحتوي على المعلمات.

كائن التهيئة المُثبَّت من ملف JSON ذلك.

يُحدِث كائنًا من نوع PreTrainedConfig من المسار إلى ملف JSON يحتوي على المعلمات.

from_pretrained

< >

( pretrained_model_name_or_path: str | os.PathLikecache_dir: str | os.PathLike | None = Noneforce_download: bool = Falselocal_files_only: bool = Falsetoken: str | bool | None = Nonerevision: str = 'main'**kwargs ) → PreTrainedConfig

المعاملات

  • pretrained_model_name_or_path (str أو os.PathLike) — يمكن أن يكون هذا:
    • سلسلة نصية، وهي معرّف النموذج لإعدادات نموذج مُدرَّب مسبقًا مستضاف داخل مستودع نموذج على huggingface.co.
    • مسار إلى مجلد يحتوي على ملف إعدادات تم حفظه باستخدام طريقة save_pretrained()، على سبيل المثال ./my_model_directory/.
    • مسار إلى ملف JSON لحفظ الإعدادات، على سبيل المثال ./my_model_directory/configuration.json.
  • cache_dir (str أو os.PathLike، اختياري) — المسار إلى مجلد يجب تخزين إعدادات النموذج المسبق التدريب المُحمّل فيه مؤقتًا إذا لم يُستخدم المجلد المؤقت القياسي.
  • force_download (bool، اختياري، القيمة الافتراضية False) — ما إذا كان يجب إجبار إعادة تنزيل ملفات الإعدادات وتجاوز النسخ المخزنة مؤقتاً في حال وجودها.
  • proxies (dict[str, str], اختياري) — قاموس لخوادم الوكيل (proxy) للاستخدام حسب البروتوكول أو نقطة النهاية، على سبيل المثال {'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}. تُستخدم هذه الوكلاء في كل طلب.
  • token (str أو bool، اختياري) — الرمز الذي يُستخدم كتفويض حامل HTTP للملفات البعيدة. إذا كان True، أو لم يُحدد، فسيتم استخدام الرمز الذي تم إنشاؤه عند تشغيل hf auth login (المخزَّن في ~/.huggingface).
  • revision (str, اختياري, الافتراضي هو "main") — إصدار النموذج المحدد الذي سيتم استخدامه. يمكن أن يكون اسم فرع، أو اسم وسم، أو معرف التزامن (commit id)، حيث نستخدم نظامًا قائمًا على git لتخزين النماذج والموارد الأخرى على huggingface.co، لذا revision يمكن أن يكون أي معرّف يسمح به git.

    لاختبار طلب سحب قمت بإنشائه على Hub، يمكنك تمرير revision="refs/pr/<pr_number>".

  • return_unused_kwargs (bool, اختياري, الافتراضي هو False) — إذا كان False, فإن هذه الدالة تُرجع كائن الإعداد النهائي فقط. إذا كان True، فإن هذه الدالة تُرجع Tuple(config, unused_kwargs) حيث unused_kwargs هو قاموس يتكون من أزواج المفاتيح والقيم التي مفاتيحها ليست من سمات الإعداد: أي الجزء من kwargs الذي لم يُستخدم لتحديث config ويُتجاهل في الحالات الأخرى.

    إذا كانت True، فإن هذه الدالة تُرجع Tuple(config, unused_kwargs) حيث unused_kwargs هو قاموس يتكوّن من أزواج المفاتيح والقيم التي لا تُعدّ مفاتيحها من سمات الإعداد: أي الجزء من kwargs الذي لم يُستخدم لتحديث config ويُتجاهل في حالته الأخرى.

  • subfolder (str، اختياري، الافتراضي "") — في حال كانت الملفات ذات الصلة موجودة داخل مجلد فرعي من مستودع النموذج على huggingface.co، يمكنك تحديد اسم المجلد هنا.
  • kwargs (dict[str, Any]، اختياري) — تُستخدم القيم الموجودة في kwargs لأي مفاتيح تكون من سمات الإعداد لتجاوز القيم المحمّلة. يتم التحكم في السلوك المتعلق بالأزواج المفتاح/قيمة التي مفاتيحها ليست من سمات الإعداد بواسطة معامل الكلمة المفتاحية return_unused_kwargs.

كائن الإعداد المُستخدَم من هذا النموذج المُسبق التدريب.

أنشئ كائنًا من PreTrainedConfig (أو فئة مشتقة) من إعدادات نموذج مُدرَّب مسبقًا.

أمثلة:

# We can't instantiate directly the base class *PreTrainedConfig* so let's show the examples on a
# derived class: BertConfig
config = BertConfig.from_pretrained(
    "google-bert/bert-base-uncased"
)  # Download configuration from huggingface.co and cache.
config = BertConfig.from_pretrained(
    "./test/saved_model/"
)  # E.g. config (or model) was saved using *save_pretrained('./test/saved_model/')*
config = BertConfig.from_pretrained("./test/saved_model/my_configuration.json")
config = BertConfig.from_pretrained("google-bert/bert-base-uncased", output_attentions=True, foo=False)
assert config.output_attentions == True
config, unused_kwargs = BertConfig.from_pretrained(
    "google-bert/bert-base-uncased", output_attentions=True, foo=False, return_unused_kwargs=True
)
assert config.output_attentions == True
assert unused_kwargs == {"foo": False}

get_config_dict

< >

( pretrained_model_name_or_path: str | os.PathLike**kwargs ) → tuple[Dict, Dict]

المعاملات

  • pretrained_model_name_or_path (str أو os.PathLike) — المعرّف لنقطة التفتيش المُدرَّبة مسبقًا التي نرغب في الحصول على قاموس المعلمات منها.

يعيد

tuple[Dict, Dict]

المعجم(ات) الذي سيتم استخدامه لإنشاء كائن الإعدادات.

من pretrained_model_name_or_path، يتم التحويل إلى قاموس من المعلمات، ليُستخدم في إنشاء PreTrainedConfig باستخدام from_dict.

get_mtp_config

< >

( )

يعيد إعداد النص الخاص بـ mtp المستخدم لإنشاء نموذج MTP. نظرًا لأن طبقات MTP تُنشأ عن طريق إنشاء نفس الفئات المستخدمة في النموذج الرئيسي، نحتاج إلى تجاوز الخصائص المرتبطة بالمؤشر في الإعداد، مثل layer_types أو mtp_layer_types، من أجل إنشاء طبقات mtp الصحيحة وتجنب مشاكل الفهرسة في الطبقات (لأن طبقات MTP تعيد بدء فهرسة الطبقات من 0).

get_text_config

< >

( decoder = Noneencoder = None )

المعاملات

  • decoder (Optional[bool]، اختياري) — إذا تم تعيينه إلى True، فسيتم البحث عن أسماء إعدادات المُفكِّك فقط.
  • encoder (Optional[bool]، اختياري) — إذا تم تعيينه إلى True، فسيتم البحث عن أسماء إعدادات المُشفِّر فقط.

تُعيد إعدادات النص المتعلقة بمدخل النص (المشفّر) أو مخرج النص (المفكك) للنموذج. يمكن استخدام حجّتي الإدخال decoder وencoder لتحديد الطرف من النموذج الذي نهمّه، وهو أمر مفيد في النماذج التي تملك كلا من مدخل ومخرج النص.

هناك ثلاثة نتائج محتملة لاستخدام هذه الطريقة:

  1. في معظم النماذج، تُرجع الدالة كائن الإعداد الأصلي نفسه.
  2. في النماذج المركّبة الأحدث (2024 وما بعدها)، تُرجع الدالة القسم النصّي من ملف الإعدادات، وهو مُضمَّن تحت مجموعة من الأسماء الصالحة.
  3. في النماذج المركّبة الأقدم (2023 وما قبلها)، يتخلّى عن معاملات المُفكِّك فقط عندما يكون encoder=True والعكس صحيح.

is_custom_code

< >

( )

تُرجع ما إذا كانت الإعدادات الحالية هي رمز مخصص، أي إما رمز تم تحميله من المستودع، أو مُعرَّف في أي وحدة/جلسة خاصة بالمستخدم.

is_remote_code

< >

( )

تُرجع ما إذا كانت الإعدادات الحالية هي كود مخصص، أي كود تم تحميله من المستودع، أو فئة تم تسجيلها للتو عبر register_for_auto_class.

register_for_auto_class

< >

( auto_class = 'AutoConfig' )

المعاملات

  • auto_class (str أو type، اختياري، القيمة الافتراضية "AutoConfig") — فئة auto التي سيتم تسجيل هذا الإعداد الجديد معها.

سجّل هذه الفئة مع فئة تلقائية محددة. يجب استخدام هذا فقط للتكوينات المخصصة، لأن التكوينات الموجودة في المكتبة مُربط مسبقًا مع AutoConfig.

save_pretrained

< >

( save_directory: str | os.PathLikepush_to_hub: bool = False**kwargs )

المعاملات

  • save_directory (str أو os.PathLike) — المجلد الذي سيتم حفظ ملف الإعدادات بصيغة JSON فيه (سيتم إنشاؤه إذا لم يكن موجودًا).
  • push_to_hub (bool، اختياري، الافتراضي False) — ما إذا كان سيتم دفع نموذجك إلى مركز نماذج Hugging Face بعد حفظه. يمكنك تحديد المستودع الذي تريد الدفع إليه باستخدام repo_id (سيكون الافتراضي هو اسم save_directory في نطاقك).
  • kwargs (dict[str, Any]، اختياري) — حجج إضافية بأسماء تُمرَّر إلى طريقة push_to_hub().

احفظ كائن الإعداد في المجلد save_directory، بحيث يمكن إعادة تحميله باستخدام طريقة الفئة from_pretrained().

to_dict

< >

( ) → dict[str, Any]

يعيد

dict[str, Any]

قاموس بجميع السمات التي تُشكّل هذا المثال من التهيئة.

يسلسل هذه النسخة إلى قاموس بايثون.

to_diff_dict

< >

( ) → dict[str, Any]

يعيد

dict[str, Any]

قاموس بجميع السمات التي تُشكّل هذا المثال من التهيئة.

يزيل جميع السمات من الإعدادات التي تتوافق مع سمات الإعدادات الافتراضية لتحسين قابلية القراءة، مع الاحتفاظ دائمًا بسمة config من الفئة. يُسلسل إلى قاموس Python.

to_json_file

< >

( json_file_path: str | os.PathLikeuse_diff: bool = True )

المعاملات

  • json_file_path (str أو os.PathLike) — المسار إلى ملف JSON الذي سيتم حفظ معاملات هذه النسخة من الإعدادات فيه.
  • use_diff (bool، اختياري، القيمة الافتراضية True) — إذا تم ضبطه على True، فسيتم تسلسل الفرق فقط بين كائن الإعدادات وPreTrainedConfig() الافتراضي إلى ملف JSON.

احفظ هذه النسخة في ملف JSON.

to_json_string

< >

( use_diff: bool = True ) → str

المعاملات

  • use_diff (bool، اختياري، القيمة الافتراضية True) — إذا تم ضبطه على True، فسيتم تسلسل الفرق فقط بين كائن الإعدادات وPreTrainedConfig() الافتراضي إلى نص JSON.

يعيد

str

سلسلة تحتوي على جميع السمات التي تُشكّل هذا المثال من التهيئة بتنسيق JSON.

يسلسل هذه النسخة إلى نص JSON.

تحديث

< >

( config_dict: dict[str, Any] )

المعاملات

  • config_dict (dict[str, Any]) — قاموس من السمات التي يجب تحديثها لهذه الفئة.

تحديث خصائص هذه الفئة بخصائص من config_dict.

update_from_string

< >

( update_str: str )

المعاملات

  • update_str (str) — نص يحتوي على السمات التي يجب تحديثها لهذه الفئة.

تحديث خصائص هذه الفئة بخصائص من update_str.

الصيغة المتوقعة هي الأعداد الصحيحة والأعداد العشرية والنصوص كما هي، ولقيم المنطق استخدم true أو false. على سبيل المثال: “n_embd=10,resid_pdrop=0.2,scale_attn_weights=false,summary_type=cls_index”

يجب أن تكون المفاتيح المراد تغييرها موجودة مسبقًا في كائن الإعدادات.

validate

< >

( )

شغّل مُتحقّقات الفئة على الكائن.

validate_architecture

< >

( )

جزء من التحقق الذي يعمل بـ @strict. يتحقق من بنية الإعداد.

validate_layer_type

< >

( )

تحقق من أن mlp_layer_types وlayer_types معرّفة بشكل صحيح.

validate_token_ids

< >

( )

جزء من التحقق الذي يعمل بواسطة @strict. يتحقق من محتوى الرموز الخاصة.

Update on GitHub