Huggingface BERT令牌生成器添加新令牌

时间:2020-11-03 19:29:48

标签: bert-language-model huggingface-transformers huggingface-tokenizers

我正在将Huggingface BERT用于NLP任务。我的文字中包含公司的名称,这些公司被细分为子词。

tokenizer = BertTokenizerFast.from_pretrained('bert-base-uncased')
tokenizer.encode_plus("Somespecialcompany")
output: {'input_ids': [101, 2070, 13102, 8586, 4818, 9006, 9739, 2100, 102], 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1]}

现在,我想将这些名称添加到令牌生成器ID中,以使它们不会拆分。

tokenizer.add_tokens("Somespecialcompany")
output: 1

这会将令牌生成器的长度从30522扩展到30523。

因此,所需的输出将是新的ID:

tokenizer.encode_plus("Somespecialcompany")
output: 30522

但是输出与之前相同:

output: {'input_ids': [101, 2070, 13102, 8586, 4818, 9006, 9739, 2100, 102], 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1]}

我的问题是;将新令牌添加到令牌生成器的正确方法是什么,以便我可以将它们与tokenizer.encode_plus()和tokenizer.batch_encode_plus()一起使用?

1 个答案:

答案 0 :(得分:1)

我在github上打开了一个错误报告。显然,我只需要将“ special_tokens”参数设置为“ True”。

tokenizer.add_tokens(["somecompanyname"], special_tokens=True)
output: 30522