Я сохранил новый словарь и слияния, добавил их к исходному словарю и слияниям, а результаты сохранил в новом файл tokenizer.json. Однако, когда я пытаюсь загрузить «новый» токенизатор, я получаю следующую ошибку:
Класс GPTNeoXSdpaAttention устарел в пользу простого изменения config._attn_implementation атрибут класса GPTNeoXAttention! Он будет удален в версии 4.48
Traceback (последний вызов — последний):
Файл «C:\Users\echagnon\PycharmProjects\mass_spec\forge_chem_test.py», строка 4, в
tokenizer = GPTNeoXTokenizerFast.from_pretrained("combined_tokenizer/", local_files_only=True)
Файл «C:\Users\echagnon\anaconda3\envs\mass_spec\lib\site-packages\transformers\tokenization_utils_base.py», строка 2036, в from_pretrained
return cls._from_pretrained(
Файл "C:\Users\echagnon\anaconda3\envs\mass_spec\lib\site-packages\transformers\tokenization_utils_base.py", строка 2276, в _from_pretrained
tokenizer = cls(*init_inputs, **init_kwargs )
Файл «C:\Users\echagnon\anaconda3\envs\mass_spec\lib\site-packages\transformers\models\gpt_neox\tokenization_gpt_neox_fast.py», строка 106, в init
super() .init(
Файл «C:\Users\echagnon\anaconda3\envs\mass_spec\lib\site-packages\transformers\tokenization_utils_fast.py», строка 117, в init
fast_tokenizer = TokenizerFast .from_file(fast_tokenizer_file)
Исключение: данные не соответствуют ни одному варианту нетегированного перечисления MergeType в строке 105581, столбец 1
Вот как я создал новый файл tokenizer.json, который пытаюсь прочитать:
Код: Выделить всё
tokenizer = GPTNeoXTokenizerFast.from_pretrained("path", local_files_only=True)
files = pd.read_csv('data/data.csv')['field'].to_list()
desired_tokens_to_add = 1000
ASCII_VOCAB_SIZE = 258
new_tokenizer = tokenizer.train_new_from_iterator(files, vocab_size=ASCII_VOCAB_SIZE + desired_tokens_to_add, max_token_length=5)
new_tokenizer.save_pretrained('new_path')
original_vocab = tokenizer.get_vocab() # {'token': id}
new_vocab = selfies_tokenizer.get_vocab() # {'token': id}
combined_vocab = {}
idx = 0 # so new tokens have new id values
for token in original_vocab.keys():
if token not in combined_vocab.keys():
combined_vocab[token] = idx
idx += 1
for token in new_vocab.keys():
if token not in combined_vocab.keys():
combined_vocab[token] = idx
idx += 1
with open('path/tokenizer.json', encoding="utf8") as f:
original_json = json.load(f)
with open('new_path/tokenizer.json', encoding="utf8") as f:
new_json = json.load(f)
old_merges = original_json['model']['merges'] # [[]]
new_merges = new_json['model']['merges'] # [[]]
combined_merges = old_merges + new_merges
final_json = copy.deepcopy(original_json)
final_json['model']['merges'] = combined_merges
final_json['model']['vocab'] = combined_vocab
with open('final_path/tokenizer.json', 'w', encoding="utf8") as fp:
print('saving new .json file')
json.dump(final_json, fp, ensure_ascii=False)
Подробнее здесь: https://stackoverflow.com/questions/793 ... ocal-files
Мобильная версия