参数“never_split”不适用于bert标记器

2024-05-23 22:35:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用了never_split选项并试图保留一些令牌。但标记器仍然将它们划分为文字块

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased', never_split=['lol'])
tokenizer.tokenize("lol That's funny")
['lo', '##l', 'that', "'", 's', 'funny']

我错过什么了吗


Tags: from标记base选项tokenizerfunnybertsplit
1条回答
网友
1楼 · 发布于 2024-05-23 22:35:35

我认为这是一个bug,或者至少没有很好的文档记录。只有在使用BasicTokenizer(它是BertTokenizer的一部分)时,才会考虑never_split参数

您正在从特定模型(bert base uncased)调用tokenize函数,这只考虑他的词汇表(如我所料)。为了防止分割某些标记,它们必须是词汇表的一部分(您可以使用方法add_tokens扩展词汇表)

我想下面的例子说明了我想说的:

from transformers import BertTokenizer

text = "lol That's funny lool"

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased', never_split=['lol'])
#what you are doing
print(tokenizer.tokenize(text))

#how it is currently working
print(tokenizer.basic_tokenizer.tokenize(text))

#how you should do it
tokenizer.add_tokens('lol')
print(tokenizer.tokenize(text))

输出:

['lo', '##l', 'that', "'", 's', 'funny', 'lo', '##ol']
['lol', 'that', "'", 's', 'funny', 'lool']
['lol', 'that', "'", 's', 'funny', 'lo', '##ol']

相关问题 更多 >