как добавить токены в vocab.txt, который расшифровывается как [UNK] bert tokenizer

я декодировал токенизированные токены из tokenizer bert, и он выдавал [UNK] вместо символа €. но я попытался добавить токен ##€ в файл vocab.txt. но это не было отражено в прогнозе, результат был таким же, как и предыдущий, он снова давал [UNK]. пожалуйста, дайте мне знать, чтобы решить эту проблему, мне нужно было точно настроить модель, чтобы снова отразить изменения в прогнозе. до сих пор я снова избегал тонкой настройки, потому что это занимает более 10 часов. заранее спасибо


person Ramakant Shakya    schedule 02.05.2021    source источник
comment
Не могли бы вы поделиться кодом, который вы использовали для добавления токена в словарь. Не могли бы вы предоставить минимальный воспроизводимый пример? (stackoverflow.com/help/minimal-reproducible-example)   -  person Ashwin Geet D'Sa    schedule 04.05.2021


Ответы (1)


Используйте add_tokens функция токенизатора, чтобы избежать неизвестных токенов:

from transformers import BertTokenizer
t = BertTokenizer.from_pretrained('bert-base-uncased')
print(t.tokenize("This is an example with an emoji ????."))
t.add_tokens(['????'])
print(t.tokenize("This is an example with an emoji ????."))

Выход:

['this', 'is', 'an', 'example', 'with', 'an', 'em', '##oj', '##i', '[UNK]', '.']
['this', 'is', 'an', 'example', 'with', 'an', 'em', '##oj', '##i', '????', '.']

Имейте в виду, что вам также необходимо изменить размер модели, чтобы ввести ее в новый токен с помощью resize_token_embeddings:

model.resize_token_embeddings(len(t))
person cronoik    schedule 12.05.2021
comment
Спасибо @cronoik за помощь, я обязательно попробую это в будущем, но сейчас я добавил это слово в файл vocab.txt и снова настроил модель. это решило мою проблему. но ваша идея также очень хороша, чтобы сэкономить время. - person Ramakant Shakya; 01.08.2021