BERT - 是否需要添加新的令牌以在特定领域的环境中进行训练?
BERT - Is that needed to add new tokens to be trained in a domain specific environment?
我的问题不是如何添加新标记,也不是如何使用特定领域的语料库进行训练,我已经在做这些了。
问题是,我是应该在 MLM 训练之前添加特定领域的标记,还是让 Bert 弄清楚上下文?如果我选择不包含标记,我会得到像 NER 这样的糟糕的任务特定模型吗?
为了让您更多地了解我的情况,我正在使用葡萄牙语训练医学文本的 Bert 模型,因此,死者姓名、药物名称和其他内容会出现在我的语料库中,但我不会当然我必须在训练前添加这些标记。
我看到了这个:Using Pretrained BERT model to add additional words that are not recognized by the model
但正如其他消息来源所说,疑虑依然存在。
提前致谢。
是的,您必须将它们添加到模型词汇表中。
tokenizer = BertTokenizer.from_pretrained(model_name)
tokenizer.add_tokens(['new', 'rdemorais', 'blabla'])
model = Bert.from_pretrained(model_name, return_dict=False)
model.resize_token_embeddings(len(tokenizer))
最后一行很重要且需要,因为您更改了模型词汇表中的标记数量,您还需要相应地更新模型。
我的问题不是如何添加新标记,也不是如何使用特定领域的语料库进行训练,我已经在做这些了。
问题是,我是应该在 MLM 训练之前添加特定领域的标记,还是让 Bert 弄清楚上下文?如果我选择不包含标记,我会得到像 NER 这样的糟糕的任务特定模型吗?
为了让您更多地了解我的情况,我正在使用葡萄牙语训练医学文本的 Bert 模型,因此,死者姓名、药物名称和其他内容会出现在我的语料库中,但我不会当然我必须在训练前添加这些标记。
我看到了这个:Using Pretrained BERT model to add additional words that are not recognized by the model
但正如其他消息来源所说,疑虑依然存在。
提前致谢。
是的,您必须将它们添加到模型词汇表中。
tokenizer = BertTokenizer.from_pretrained(model_name)
tokenizer.add_tokens(['new', 'rdemorais', 'blabla'])
model = Bert.from_pretrained(model_name, return_dict=False)
model.resize_token_embeddings(len(tokenizer))
最后一行很重要且需要,因为您更改了模型词汇表中的标记数量,您还需要相应地更新模型。