Transformer 在现有的基础上训练新的分词器

问题描述 投票:0回答:1

在下面的代码中

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_newtokenizer 的索引完全不同

tokenizer.vocab['先'] #1044
tokenizer_new.vocab['先'] #5151

这使得在模型上继续训练(即训练中国医学特定的 BERT 模型)

model = AutoModelForMaskedLM.from_pretrained("bert-base-chinese")

不可能。因为同一个字符的索引 id 在 tokenizer_new

中完全不同

如何使同一字符的索引固定?

python nlp tokenize transformer-model huggingface-tokenizers
1个回答
0
投票

train_new_from_iterator()
不保留词汇。

https://huggingface.co/learn/nlp-course/chapter6/2

尽管我们要训练一个新的分词器,但最好这样做以避免完全从头开始。这样,我们就不必指定任何有关标记化算法或我们想要使用的特殊标记的信息;我们的新分词器将与 GPT-2 完全相同,唯一会改变的是词汇,这将由我们语料库上的训练决定。

© www.soinside.com 2019 - 2024. All rights reserved.