Я обучил пользовательский токенизатор, используя пользовательский набор данных, используя этот код, который есть в документации. Есть ли способ добавить этот токенизатор в концентратор и использовать его в качестве других токенизаторов, вызвав функцию AutoTokenizer.from_pretrained()? Если я не могу этого сделать, как я могу использовать токенизатор для обучения пользовательской модели с нуля? Спасибо за вашу помощь!!!
Вот код ниже:
from tokenizers import Tokenizer
from tokenizers.models import BPE
tokenizer = Tokenizer(BPE(unk_token = "[UNK]"))
from tokenizers.trainers import BpeTrainer
trainer = BpeTrainer(special_tokens=["[UNK]", "[CLS]", "[SEP]", "[PAD]", "[MASK]"])
from tokenizers.pre_tokenizers import Whitespace
tokenizer.pre_tokenizer = Whitespace()
folder = 'dataset_unicode'
files = [f"/content/drive/MyDrive/{folder}/{split}.txt" for split in ["test", "train", "valid"]]
tokenizer.train(files, trainer)
from tokenizers.processors import TemplateProcessing
tokenizer.post_processor = TemplateProcessing(
single = "[CLS] $A [SEP]",
pair = "[CLS] $A [SEP] $B:1 [SEP]:1",
special_tokens=[
("[CLS]", tokenizer.token_to_id("[CLS]")),
("[SEP]", tokenizer.token_to_id("[SEP]")),
],
)
# I've tried saving it like this but it doesn't work as I expect it:
tokenizer.save("data/tokenizer-custom.json")
AutoTokenizer
ожидает несколько файлов в каталоге:
awesometokenizer/
tokenizer_config.json
special_tokens_map.json
tokenizer.json
Но функция tokenizer.Tokenizer.save()
по умолчанию сохраняет только файл словаря в awesometokenizer/tokenizer.json
, откройте файл json и сравните ключи ['model']['vocab']
с вашим json из data/tokenizer-custom.json
.
Самый простой способ позволить AutoTokenizer
загрузить .from_pretrained
— это следовать ответу, который @cronoik опубликовал в комментарии, используя PreTrainedTokenizerFast
, то есть добавив несколько строк в ваш существующий код:
from tokenizers import Tokenizer
from tokenizers.models import BPE
from tokenizers.trainers import BpeTrainer
from tokenizers.pre_tokenizers import Whitespace
from tokenizers.processors import TemplateProcessing
from transformers import PreTrainedTokenizerFast # <---- Add this line.
trainer = BpeTrainer(special_tokens=["[UNK]", "[CLS]", "[SEP]", "[PAD]", "[MASK]"])
tokenizer = Tokenizer(BPE(unk_token = "[UNK]"))
tokenizer.pre_tokenizer = Whitespace()
files = ["big.txt"] # e.g. training with https://norvig.com/big.txt
tokenizer.train(files, trainer)
tokenizer.post_processor = TemplateProcessing(
single = "[CLS] $A [SEP]",
pair = "[CLS] $A [SEP] $B:1 [SEP]:1",
special_tokens=[
("[CLS]", tokenizer.token_to_id("[CLS]")),
("[SEP]", tokenizer.token_to_id("[SEP]")),
],
)
# Add these lines:
# |
# |
# V
awesome_tokenizer = PreTrainedTokenizerFast(tokenizer_object=tokenizer)
awesome_tokenizer.save_pretrained("awesome_tokenizer")
Затем вы можете загрузить обученный токенизатор:
from transformers import AutoTokenizer
auto_loaded_tokenizer = AutoTokenizer.from_pretrained(
"awesome_tokenizer",
local_files_only=True
)
Примечание: tokenizers
хотя и может быть установлен pip, это библиотека на Rust с привязками Python.
Пожалуйста, подпишитесь на этот пост, чтобы загрузить его. После этого вы можете сохранить его с помощью
save_pretrained
и загрузить в хаб.