unsloth 笔记:add_new_tokens
模型有可能生成它们(前提是训练数据里学过这些 token 的用法)。为新 token 初始化 embedding(随机 or 其他策略)同步扩展输入 embedding 和输出 embedding (确保新 token 的 embedding 参与训练 (模型扩展 embedding 矩阵。会作为正常词表的一部分参与预测。复制旧 embedding 权重。返回实际新增 token 数量。用,不会自
add_new_tokens是 Unsloth 提供的工具函数,主要用于 扩展 tokenizer 和模型的词表。- 必须在 LoRA / QLoRA / PEFT 之前调用
model, tokenizer = FastLanguageModel.from_pretrained(...)
from unsloth import add_new_tokens
add_new_tokens(model, tokenizer, new_tokens=["<X>", "<Y>", "<Z>"])
model = FastLanguageModel.get_peft_model(...)
1 主要参数
add_new_tokens(
model,
tokenizer,
new_tokens=["<NEW_TOKEN_1>", "<NEW_TOKEN_2>"],
special_tokens=True, # 是否作为特殊 token
verbose=True # 是否打印日志
)
在 transformers / Unsloth 的 tokenizer 机制里:
-
special tokens(如
<bos>,<eos>,<pad>,<unk>)-
默认不在普通文本生成范围里。
-
在
generate()的时候,如果skip_special_tokens=True,解码时会被直接过滤掉。 -
通常只在 控制任务边界 或 解码时截断 用,不会自然出现在输出里。
-
-
普通 tokens(非 special)
-
会作为正常词表的一部分参与预测。
-
模型有可能生成它们(前提是训练数据里学过这些 token 的用法)。
-
2 内部流程
-
tokenizer.add_tokens(new_tokens, special_tokens=...)-
将 token 加入词表
-
返回实际新增 token 数量
-
-
模型扩展 embedding 矩阵
-
复制旧 embedding 权重
-
为新 token 初始化 embedding(随机 or 其他策略)
-
同步扩展输入 embedding 和输出 embedding (
lm_head)
-
-
确保新 token 的 embedding 参与训练 (
requires_grad=True)。-
注:unsloth中,默认旧的embedding是不train的
-
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)