参数 "never_split" 不适用于 bert tokenizer
Argument "never_split" not working on bert tokenizer
我使用了 never_split
选项并试图保留一些标记。但是标记器仍然将它们分成词块。
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased', never_split=['lol'])
tokenizer.tokenize("lol That's funny")
['lo', '##l', 'that', "'", 's', 'funny']
我在这里有什么遗漏吗?
我认为这是一个错误或至少没有很好的记录。 never_split
参数仅在您使用 BasicTokenizer(它是 BertTokenizer 的一部分)时才被考虑。
您正在从您的特定模型 (bert-base-uncased) 调用标记化函数,这考虑了 仅 他的词汇(正如我所料)。为了防止拆分某些标记,它们必须是词汇表的一部分(您可以使用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']
我使用了 never_split
选项并试图保留一些标记。但是标记器仍然将它们分成词块。
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased', never_split=['lol'])
tokenizer.tokenize("lol That's funny")
['lo', '##l', 'that', "'", 's', 'funny']
我在这里有什么遗漏吗?
我认为这是一个错误或至少没有很好的记录。 never_split
参数仅在您使用 BasicTokenizer(它是 BertTokenizer 的一部分)时才被考虑。
您正在从您的特定模型 (bert-base-uncased) 调用标记化函数,这考虑了 仅 他的词汇(正如我所料)。为了防止拆分某些标记,它们必须是词汇表的一部分(您可以使用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']