TRL documentation

チャットテンプレートユーティリティ

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

and get access to the augmented documentation experience

to get started

チャットテンプレートユーティリティ

TRLにバンドルされているチャットテンプレートの概要と、トレーニングパッチの背景については、Chat Templatesを参照してください。

clone_chat_template

trl.clone_chat_template

< >

( 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

< >

( processing_class: transformers.tokenization_utils_base.PreTrainedTokenizerBase | transformers.processing_utils.ProcessorMixin ) → bool

パラメータ

  • processing_class (PreTrainedTokenizerBase または ProcessorMixin) — 確認対象のトークナイザーまたはプロセッサーのインスタンス。

戻り値

bool

チャットテンプレートがプレフィックスを保持する場合はTrue、それ以外の場合はFalseです。

チャットテンプレートを適用した際にプレフィックスが保持されるかどうかを確認します。

プレフィックス保存型チャットテンプレートでは、後続のメッセージの内容に関わらず、以前のメッセージが常に同一にレンダリングされます。この特性は、ツールメッセージの追加有無によるトークナイズ結果を比較することで、ツール応答のフォーマットトークルを抽出する_get_tool_suffix_idsに必要とされます。

get_training_chat_template

trl.get_training_chat_template

< >

( processing_class: transformers.tokenization_utils_base.PreTrainedTokenizerBase | transformers.processing_utils.ProcessorMixin | None = Nonetokenizer: transformers.tokenization_utils_base.PreTrainedTokenizerBase | None = None ) → str or None

パラメータ

  • processing_class (PreTrainedTokenizerBase または ProcessorMixin) — 確認対象のトークナイザーまたはプロセッサーのインスタンス。

戻り値

str または None

トレーニング互換のチャットテンプレート、またはパッチングが不要な場合は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'
Update on GitHub