在下面的代码中
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")
tokenizer_new = tokenizer.train_new_from_iterator(training_corpus, 50000, new_special_tokens = ['健康','医学','试剂盒',....])
其中training_corpus是一个从硬盘chinese_medical.txt文件生成文本行的迭代器
对于可能不熟悉“bert-base-chinese”的读者,它是一个单字符分词器,默认为“wordpiece”模型
我的问题是
例如,tokenizer_new 与 tokenizer 的索引完全不同
tokenizer.vocab['先'] #1044
tokenizer_new.vocab['先'] #5151
这使得在模型上继续训练(即训练中国医学特定的 BERT 模型)
model = AutoModelForMaskedLM.from_pretrained("bert-base-chinese")
不可能。因为同一个字符的索引 id 在 tokenizer_new
中完全不同如何使同一字符的索引固定?
train_new_from_iterator()
不保留词汇。
https://huggingface.co/learn/nlp-course/chapter6/2:
尽管我们要训练一个新的分词器,但最好这样做以避免完全从头开始。这样,我们就不必指定任何有关标记化算法或我们想要使用的特殊标记的信息;我们的新分词器将与 GPT-2 完全相同,唯一会改变的是词汇,这将由我们语料库上的训练决定。