Я бы назвал это ошибкой или, по крайней мере, не очень хорошо задокументировано. Аргумент never_split
учитывается только при использовании BasicTokenizer (который является частью BertTokenizer).
Вы вызываете функцию токенизации из вашей указанной c модели (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']