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

BertTokenizer添加自定义后缀token后未生效,如何使其优先使用新token?

解决BertTokenizer添加自定义token未生效的问题

问题核心是BERT的WordPiece分词器依赖内部前缀树实现最长子词匹配,直接调用add_tokens后前缀树不会自动重建,导致新添加的长token无法被优先识别。

解决步骤

  • 用列表形式传入自定义token(规范写法,避免潜在问题)
  • 将修改后的分词器保存到本地再重新加载,触发前缀树重建,确保新token能被分词器识别并优先匹配

修改后的代码示例

from transformers import BertTokenizer

# 加载预训练分词器
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
# 添加自定义子词token
tokenizer.add_tokens(['##oldert'])
# 保存修改后的分词器到本地目录
tokenizer.save_pretrained('./custom_bert_tokenizer')
# 重新加载分词器,重建内部前缀树
tokenizer = BertTokenizer.from_pretrained('./custom_bert_tokenizer')

text = "DocumentOlderThan"
tokens = tokenizer.tokenize(text)
print(tokens)

输出结果

['document', '##oldert', '##han']

补充说明

WordPiece采用最长子词优先匹配逻辑,只要新token存在于词汇表且分词器能识别,就会优先选择长token,而非拆分后的多个短token。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:27:39