有时,我们必须做这样的事情来扩展预训练的分词器:
from transformers import AutoTokenizer
from datasets import load_dataset
ds_de = load_dataset("mc4", 'de')
ds_fr = load_dataset("mc4", 'fr')
de_tokenizer = tokenizer.train_new_from_iterator(
ds_de['text'],vocab_size=50_000
)
fr_tokenizer = tokenizer.train_new_from_iterator(
ds_fr['text'],vocab_size=50_000
)
new_tokens_de = set(de_tokenizer.vocab).difference(tokenizer.vocab)
new_tokens_fr = set(fr_tokenizer.vocab).difference(tokenizer.vocab)
new_tokens = set(new_tokens_de).union(new_tokens_fr)
tokenizer = AutoTokenizer.from_pretrained(
'moussaKam/frugalscore_tiny_bert-base_bert-score'
)
tokenizer.add_tokens(list(new_tokens))
tokenizer.save_pretrained('frugalscore_tiny_bert-de-fr')
然后在加载分词器时,
tokenizer = AutoTokenizer.from_pretrained(
'frugalscore_tiny_bert-de-fr', local_files_only=True
)
在 Jupyter 单元中从
%%time
加载需要很长时间:
CPU times: user 34min 20s
Wall time: 34min 22s
我猜这是由于添加的令牌的正则表达式编译所致,这也在https://github.com/huggingface/tokenizers/issues/914
中提出我认为没关系,因为它会加载一次,并且无需重新编译正则表达式即可完成工作。
这可能是 HuggingFace Transformer 库中尚未解决的错误:
出于某种未知的原因:而不是
tokenizer = AutoTokenizer.from_pretrained("./models/tokenizer/")
使用
tokenizer = DistilBertTokenizer.from_pretrained("./models/tokenizer/")
有效。