You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让BartForConditionalGeneration适配BertTokenizer新增的自定义令牌?

适配新增令牌的后续操作与训练必要性

你已经完成了关键一步——调整词嵌入层大小以容纳新增令牌,但此时新增令牌的嵌入向量是随机初始化的,模型完全无法理解这些令牌的语义。接下来的具体操作和训练需求如下:

1. 可选优化:给新增令牌一个合理的初始嵌入

如果你的新增令牌有明确语义(比如特定领域术语、自定义符号),别用默认的随机初始化,基于已有词汇的嵌入来初始化能帮模型更快收敛:

import torch

# 获取所有新增令牌的ID
new_token_ids = [tokenizer.convert_tokens_to_ids(token) for token in tokenizer.added_tokens_decoded]

# 示例:用语义相关的基础词汇嵌入平均值初始化(按需调整逻辑)
for token_id in new_token_ids:
    # 替换成和当前新增令牌语义相关的基础词汇
    related_base_tokens = ["相关词1", "相关词2"]
    # 取出对应基础词汇的嵌入并计算平均值
    related_embeds = [model.model.shared.weight[tokenizer.convert_tokens_to_ids(t)] for t in related_base_tokens]
    avg_embed = torch.mean(torch.stack(related_embeds), dim=0)
    # 替换新增令牌的初始嵌入
    model.model.shared.weight.data[token_id] = avg_embed

2. 必须进行微调训练

是的,必须对模型进行训练。理由很简单:

  • 随机初始化的嵌入没有任何有效语义信息,模型遇到这些新增令牌时只会当作噪声处理,完全无法正确生成或理解相关内容。
  • 只有在包含这些新增令牌的任务数据集上进行微调,模型才能学习到这些令牌的语义表示,以及它们在条件生成任务中的正确使用方式。

训练时要注意:

  • 必须用你更新后的tokenizer对训练数据做分词,确保新增令牌被正确编码。
  • 按照BART模型的常规条件生成微调流程执行即可(调整学习率、批次大小、训练轮数等超参数)。

内容的提问来源于stack exchange,提问作者Raptor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 16:30:55