BERT使用过程中添加special tokens

本文介绍如何在BERT模型中添加特殊标记(special tokens),包括在tokenizer中加入这些标记以避免分词,并调整模型的词嵌入矩阵大小以适配新增加的标记。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候想要在bert里面加入一些special token, 以huggingFace transformer为例,需要做两个操作:

  1. 在tokenizer里面加入special token, 防止tokenizer将special token分词。
  2. resize embedding, 需要为special token初始化新的word embedding。

可以使用下面代码:

special_tokens_dict = {'additional_special_tokens': ['[C1]','[C2]','[C3]','[C4]']}
num_added_toks = tokenizer.add_special_tokens(special_tokens_dict)
model.resize_token_embeddings(len(tokenizer))

tokenizer.add_special_tokens可以让tokenizer不给’[C1]’,’[C2]’,’[C3]’,’[C4]'进行分词 (这个tokenizer就可以用于后续的数据预处理使用)
resize_token_embeddings可以将bert的word embedding进行形状变换。new_num_tokens大于原先的max word的话,会在末尾pad新随机初始化的vector ; 小于原先的max word的话,会把末尾的word embedding vector删掉。不传参数的话,什么也不变,只是return原先的embedding回来。而且这个操作只是pad 新的token或cut已有的token,其他位置token的预训练词向量不会被重新初始化。
在这里插入图片描述
额外要提醒的是,加入specail token的话要注意fine-yune的训练量是不是足以训练这些新加入的specail token的embedding (尤其是做few-shot的)。如果训练的数据量不够,能够用已有的special token就别用新加入的([SEP],etc.)

参考:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值