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

BART Tokenizer为何对同一单词产生不同分词结果?

问题分析:BART分词器中单词位置不同导致分词结果差异

这不是bug,是BART使用的Byte-level BPE分词器的正常行为,核心原因和词首空格标记以及分词器的预训练词汇表有关:

1. BART分词器的核心类型

BART采用的是Byte-level BPE(字节级字节对编码)分词器,这类分词器会用特殊符号Ġ(U+0120)标记位于词首的空格。也就是说,句子中间的单词前面会隐含这个标记,而句首单词没有。

2. 两种场景的分词逻辑差异

  • 当"Thames"在句首时,分词器处理的是无前缀的原始字符串Thames;
  • 当"Thames"在句子中间时,它前面有一个空格,所以分词器实际处理的是带前缀标记的ĠThames。

3. 预训练词汇表的影响

BART的预训练词汇表中,包含完整的ĠThames token,但没有Thames这个无前缀的token。因此:

  • 句首的Thames找不到匹配的完整token,只能被BPE算法拆分成本身存在的子token组合:Th + ames;
  • 句中的ĠThames能直接匹配到词汇表中的完整条目,所以作为单个token输出。

验证方法

你可以通过以下代码直接确认词汇表的情况:

from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('facebook/bart-large-cnn')

print(tokenizer.get_vocab().get("ĠThames"))  # 会返回对应的token ID,比如29807
print(tokenizer.get_vocab().get("Thames"))   # 返回None,说明词汇表中无此条目

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:54:14