TRL documentation
チャットテンプレートユーティリティ
チャットテンプレートユーティリティ
TRLにバンドルされているチャットテンプレートの概要と、トレーニングパッチの背景については、Chat Templatesを参照してください。
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) — 更新するTokenizer。
- source_tokenizer_path (
str) — クローン元の事前学習済みトークナイザーのパスまたは識別子。 - resize_to_multiple_of (
intまたはNone、任意、デフォルトは64) — 埋め込み層は新しい語彙サイズにリサイズされます。この値がNoneでない場合、新しい語彙サイズはこの値の最も近い倍数に切り上げられます。
戻り値
model(PreTrainedModel)
リサイズされたトークン埋め込みと設定されたEOSトークンを含む、更新されたモデル。
tokenizer (PreTrainedTokenizerBase):
チャットテンプレートと特殊トークンを適用した、更新されたトークナイザー。
added_tokens (list[int]):
ソースのトークナイザーから現在のトークナイザーに追加されたトークンのリスト。
ソースのトークナイザーからチャットテンプレートをターゲットのトークナイザーにクローンし、モデルをそれに応じて更新します。
この関数は:
- ソースのトークナイザーからターゲットのトークナイザーにチャットテンプレートをコピーします。
- ソースのトークナイザーから新しいトークンをターゲットのトークナイザーに追加します。
- トークナイザーとモデル間でEOSトークンを設定し、同期します。
- モデルのトークン埋め込みを新しい語彙サイズに合わせてリサイズし、指定された値の倍数に切り上げることもできます。その場合、語彙サイズが埋め込みの次元数と一致するように、トークナイザーにダミーのトークンが追加されます。
例:
>>> 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 = None ) → str or None
必要に応じて、学習に互換性のあるチャットテンプレートを取得します。
プレフィックスを保持し、アシスタントのみの損失マスク用に{%% generation %%} / {%% endgeneration %%}マーカーを含む、パッチ済みのチャットテンプレートを返します。テンプレートがすでに両方の要件を満たしている場合はNoneを返します。
サポートされているテンプレートは、Training templatesにリストされています。
例:
>>> 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'