Transformers WordLevel分词器生成异常词汇表问题求助
问题原因分析
你的代码存在两个核心错误,直接导致生成了不符合预期的词汇表:
- 列表语法错误:你定义的
data列表中,各个字符串之间没有添加逗号分隔,Python会默认将相邻的字面量字符串自动拼接,最终data列表中仅存在1个包含所有文本的超长字符串,而不是你预期的7个独立句子。 - 缺少预分词器配置:
WordLevel分词器本身不会自动对输入文本做单词拆分逻辑,你需要显式配置预分词器(一般用按空格、标点拆分的Whitespace预分词器),否则分词器会直接把整段输入当成单个token处理。
修正后的代码
# 修正:每个字符串之间添加逗号分隔 data = [ "Beautiful is better than ugly.", "Explicit is better than implicit.", "Simple is better than complex.", "Complex is better than complicated.", "Flat is better than nested.", "Sparse is better than dense.", "Readability counts.", ] from tokenizers import Tokenizer, models, pre_tokenizers, trainers # 初始化WordLevel分词器,指定未知字符标记 tokenizer = Tokenizer(models.WordLevel(unk_token="<unk>")) # 新增:配置预分词器,按空格/标点拆分单词 tokenizer.pre_tokenizer = pre_tokenizers.Whitespace() trainer = trainers.WordLevelTrainer( vocab_size=100000, # 新增:声明特殊字符 special_tokens=["<unk>"] ) tokenizer.train_from_iterator(data, trainer=trainer) print(tokenizer.get_vocab())
运行修正后的代码,输出的词汇表会按单个单词拆分,符合WordLevel分词器的预期效果。
内容的提问来源于stack exchange,提问作者Roman Kazmin
相关产品推荐
相关产品推荐

