TRL documentation
أدوات قوالب المحادثة
أدوات قوالب المحادثة
لمراجعة عامة للقوالب المحادثة المرفقة مع TRL والمنطق وراء رقع التدريب، راجع قوالب المحادثة.
clone_chat_template
trl.clone_chat_template
< source >( model: PreTrainedModeltokenizer: PreTrainedTokenizerBasesource_tokenizer_path: strresize_to_multiple_of: int | None = 64 ) → model (PreTrainedModel)
المعاملات
- model (PreTrainedModel) — النموذج الذي سيتم تحديثه.
- tokenizer (PreTrainedTokenizerBase) — المُرمِّز الذي سيتم تحديثه.
- source_tokenizer_path (
str) — المسار أو المعرّف لمُجزِّئ الرموز المُدرَّب مسبقًا الذي سيتم نسخه منه. - resize_to_multiple_of (
intأوNone، اختياري، القيمة الافتراضية64) — سيتم تغيير حجم طبقة التضمين (embedding) لتناسب حجم المفردات الجديد. إذا لم تكن هذه القيمةNone، فسيتم تقريب حجم المفردات الجديد إلى أقرب مضاعف لهذه القيمة.
يعيد
النموذج (PreTrainedModel)
تم تحديث النموذج مع إعادة تعيين حجم تضمينات الرموز (token embeddings) وإعداد رمز نهاية الجملة (EOS token).
tokenizer (PreTrainedTokenizerBase):
تم تحديث مُجزّئ الرموز (tokenizer) مع تطبيق قالب المحادثة والرموز الخاصة.
added_tokens (list[int]):
قائمة بالرموز التي أُضيفت إلى مُجزّئ الرموز من مُجزّئ الرموز المصدر.
ينشئ نسخة من قالب المحادثة من مُرمِّز المصدر إلى مُرمِّز الهدف ويحدّث النموذج وفقاً لذلك.
تقوم هذه الدالة بما يلي:
- ينسخ قالب المحادثة من مُرمِّز المصدر إلى مُرمِّز الهدف.
- يضيف أي رموز جديدة من مُجزّئ المصدر إلى مُجزّئ الهدف.
- يُعيّن رمز EOS ويزامنّه بين مُجزّئ النص والنموذج.
- يعيد تحديد أبعاد تضمينات الرموز (token embeddings) للنموذج لتتوافق مع حجم المفردات الجديد، مع إمكانية تقريبه لأعلى إلى مضاعف لقيمة محددة. في مثل هذه الحالات، تُضاف رموز وهمية إلى مُجزّئ النص (tokenizer) لضمان تطابق حجم المفردات مع أبعاد التضمين.
مثال:
>>> from transformers import AutoModelForCausalLM, AutoTokenizer
>>> from trl import clone_chat_template
>>> model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.2-1B")
>>> tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.2-1B")
>>> model, tokenizer, added_tokens = clone_chat_template(model, tokenizer, "Qwen/Qwen3-0.6B")is_chat_template_prefix_preserving
trl.chat_template_utils.is_chat_template_prefix_preserving
< source >( processing_class: transformers.tokenization_utils_base.PreTrainedTokenizerBase | transformers.processing_utils.ProcessorMixin ) → bool
تحقق مما إذا كانت قالب المحادثة يحافظ على البادئات عند تطبيقه.
يقوم قالب المحادثة الذي يحافظ على البادئة بعرض الرسائل السابقة بشكل متطابق بغض النظر عن الرسائل التي تليها. هذه الخاصية مطلوبة بواسطة _get_tool_suffix_ids، الذي يستخرج رموس تنسيق استجابة الأداة من خلال مقارنة عمليات الترميز مع وجود رسائل الأداة المضافة وبدونها.
get_training_chat_template
trl.get_training_chat_template
< source >( processing_class: transformers.tokenization_utils_base.PreTrainedTokenizerBase | transformers.processing_utils.ProcessorMixin | None = Nonetokenizer: transformers.tokenization_utils_base.PreTrainedTokenizerBase | None = Nonerequire_prefix_preservation: bool = True ) → str or None
المعاملات
- processing_class (
PreTrainedTokenizerBaseأوProcessorMixin) — مثال على مُجزِّئ أو مُعالِج للتحقق منه. - require_prefix_preservation (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب أن يكون القالب الذي لا يحتوي على قالب تدريب مخزّن محافظًا على البادئة أيضًا ليُعاد كما هو. فقد الخسارة الخاصة بالمساعد فقط يحتاج إلى العلامات، لذا يحدّدهاSFTTrainerعلى أنهاFalse.
يعيد
str أو None
قالب محادثة متوافق مع التدريب، أو None إذا لم تكن هناك حاجة إلى أي ترقيع.
احصل على قالب محادثة متوافق مع التدريب، إذا لزم الأمر.
يعيد قالب محادثة مُعدَّل يحافظ على البادئة ويتضمن علامات {%% generation %%} / {%% endgeneration %%} لإخفاء الخسارة الخاصة بالمساعد فقط. يحصل أي قالب يحتوي على قالب تدريب مخزَّن على هذا التعديل دائمًا، حتى لو كانت لديه علامات خاصة به. يعيد None إذا كان أي قالب آخر يلبي المتطلبات بالفعل. القوالب المدعومة مذكورة في قوالب التدريب.
مثال:
>>> from trl.chat_template_utils import get_training_chat_template
>>> from transformers import AutoTokenizer
>>> tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen3-0.6B")
>>> messages1 = [
... {"role": "user", "content": "What is 2 * 3?"},
... {
... "role": "assistant",
... "content": "",
... "tool_calls": [{"type": "function", "function": {"name": "multiply", "arguments": {"a": 2, "b": 3}}}],
... },
... ]
>>> messages2 = messages1 + [
... {"role": "tool", "name": "multiply", "content": "6"},
... ]
>>> tokenizer.apply_chat_template(messages1, tokenize=False)
'<|im_start|>user\nWhat is 2 * 3?<|im_end|>\n<|im_start|>assistant\n<think>\n\n</think>\n\n<tool_call>\n{"name": "multiply", "arguments": {"a": 2, "b": 3}}\n</tool_call><|im_end|>\n'
>>> tokenizer.apply_chat_template(messages2, tokenize=False, add_generation_prompt=True)
'<|im_start|>user\nWhat is 2 * 3?<|im_end|>\n<|im_start|>assistant\n<tool_call>\n{"name": "multiply", "arguments": {"a": 2, "b": 3}}\n</tool_call><|im_end|>\n<|im_start|>user\n<tool_response>\n6\n</tool_response><|im_end|>\n<|im_start|>assistant\n'
>>> # ^ think tags missing
>>> chat_template = get_training_chat_template(tokenizer)
>>> tokenizer.apply_chat_template(messages1, tokenize=False, chat_template=chat_template)
'<|im_start|>user\nWhat is 2 * 3?<|im_end|>\n<|im_start|>assistant\n<think>\n\n</think>\n\n<tool_call>\n{"name": "multiply", "arguments": {"a": 2, "b": 3}}\n</tool_call><|im_end|>\n'
>>> tokenizer.apply_chat_template(
... messages2, tokenize=False, add_generation_prompt=True, chat_template=chat_template
... )
'<|im_start|>user\nWhat is 2 * 3?<|im_end|>\n<|im_start|>assistant\n<think>\n\n</think>\n\n<tool_call>\n{"name": "multiply", "arguments": {"a": 2, "b": 3}}\n</tool_call><|im_end|>\n<|im_start|>user\n<tool_response>\n6\n</tool_response><|im_end|>\n<|im_start|>assistant\n'